xref: /rk3399_rockchip-uboot/drivers/video/drm/max96745.c (revision 11f9ae3a9f57d1ecc3b8cc16cfbf5e4e599e5330)
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 struct max96745_bridge_priv {
18 	struct gpio_desc lock_gpio;
19 };
20 
21 static bool max96745_bridge_detect(struct rockchip_bridge *bridge)
22 {
23 	struct max96745_bridge_priv *priv = dev_get_priv(bridge->dev);
24 
25 	if (!dm_gpio_get_value(&priv->lock_gpio))
26 		return false;
27 
28 	return true;
29 }
30 
31 static const struct rockchip_bridge_funcs max96745_bridge_funcs = {
32 	.detect = max96745_bridge_detect,
33 };
34 
35 static int max96745_bridge_probe(struct udevice *dev)
36 {
37 	struct max96745_bridge_priv *priv = dev_get_priv(dev);
38 	struct rockchip_bridge *bridge;
39 	int ret;
40 
41 	ret = gpio_request_by_name(dev, "lock-gpios", 0, &priv->lock_gpio,
42 				   GPIOD_IS_IN);
43 	if (ret) {
44 		dev_err(dev, "failed to get lock GPIO: %d\n", ret);
45 		return ret;
46 	}
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 	.priv_auto_alloc_size = sizeof(struct max96745_bridge_priv),
70 };
71