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