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