xref: /rk3399_rockchip-uboot/drivers/video/drm/max96745.c (revision a3dda7f4bf6bbece2100b16d2b632d6357ff044e)
1 // SPDX-License-Identifier: GPL-2.0+
2 /*
3  * (C) Copyright 2022 Rockchip Electronics Co., Ltd
4  */
5 
6 #include <common.h>
7 #include <dm.h>
8 #include <errno.h>
9 #include <i2c.h>
10 #include <max96745.h>
11 #include <video_bridge.h>
12 
13 #include "rockchip_bridge.h"
14 #include "rockchip_display.h"
15 #include "rockchip_panel.h"
16 
17 static void max96745_bridge_enable(struct rockchip_bridge *bridge)
18 {
19 	struct udevice *dev = bridge->dev;
20 
21 	dm_i2c_reg_clrset(dev->parent, 0x0100, VID_TX_EN,
22 			  FIELD_PREP(VID_TX_EN, 1));
23 }
24 
25 static void max96745_bridge_disable(struct rockchip_bridge *bridge)
26 {
27 	struct udevice *dev = bridge->dev;
28 
29 	dm_i2c_reg_clrset(dev->parent, 0x0100, VID_TX_EN,
30 			  FIELD_PREP(VID_TX_EN, 0));
31 }
32 
33 static const struct rockchip_bridge_funcs max96745_bridge_funcs = {
34 	.enable = max96745_bridge_enable,
35 	.disable = max96745_bridge_disable,
36 };
37 
38 static int max96745_bridge_probe(struct udevice *dev)
39 {
40 	struct rockchip_bridge *bridge;
41 
42 	dm_i2c_reg_write(dev->parent, 0x7019, 0x00);
43 	dm_i2c_reg_write(dev->parent, 0x70a0, 0x04);
44 	dm_i2c_reg_write(dev->parent, 0x7074, 0x14);
45 	dm_i2c_reg_write(dev->parent, 0x7070, 0x04);
46 	dm_i2c_reg_write(dev->parent, 0x7000, 0x01);
47 
48 	bridge = calloc(1, sizeof(*bridge));
49 	if (!bridge)
50 		return -ENOMEM;
51 
52 	dev->driver_data = (ulong)bridge;
53 	bridge->dev = dev;
54 	bridge->funcs = &max96745_bridge_funcs;
55 
56 	return 0;
57 }
58 
59 static const struct udevice_id max96745_bridge_of_match[] = {
60 	{ .compatible = "maxim,max96745-bridge", },
61 	{ }
62 };
63 
64 U_BOOT_DRIVER(max96745_bridge) = {
65 	.name = "max96745_bridge",
66 	.id = UCLASS_VIDEO_BRIDGE,
67 	.of_match = max96745_bridge_of_match,
68 	.probe = max96745_bridge_probe,
69 };
70