1 // SPDX-License-Identifier: GPL-2.0+ 2 /* 3 * (C) Copyright 2008-2018 Fuzhou Rockchip Electronics Co., Ltd 4 */ 5 6 #include "rockchip_bridge.h" 7 #include "rockchip_display.h" 8 9 void rockchip_bridge_init(struct rockchip_bridge *bridge, 10 struct rockchip_connector *conn, 11 struct display_state *state) 12 { 13 if (!bridge) 14 return; 15 16 bridge->conn = conn; 17 bridge->state = state; 18 19 if (bridge->bus_format) 20 state->conn_state.bus_format = bridge->bus_format; 21 22 if (bridge->next_bridge) 23 rockchip_bridge_init(bridge->next_bridge, conn, state); 24 } 25 26 void rockchip_bridge_pre_enable(struct rockchip_bridge *bridge) 27 { 28 if (!bridge) 29 return; 30 31 if (bridge->funcs && bridge->funcs->pre_enable) 32 bridge->funcs->pre_enable(bridge); 33 34 if (bridge->next_bridge) 35 rockchip_bridge_pre_enable(bridge->next_bridge); 36 } 37 38 void rockchip_bridge_post_disable(struct rockchip_bridge *bridge) 39 { 40 if (!bridge) 41 return; 42 43 if (bridge->next_bridge) 44 rockchip_bridge_post_disable(bridge->next_bridge); 45 46 if (bridge->funcs && bridge->funcs->post_disable) 47 bridge->funcs->post_disable(bridge); 48 } 49 50 void rockchip_bridge_enable(struct rockchip_bridge *bridge) 51 { 52 if (!bridge) 53 return; 54 55 if (bridge->funcs && bridge->funcs->enable) 56 bridge->funcs->enable(bridge); 57 58 if (bridge->next_bridge) 59 rockchip_bridge_enable(bridge->next_bridge); 60 } 61 62 void rockchip_bridge_disable(struct rockchip_bridge *bridge) 63 { 64 if (!bridge) 65 return; 66 67 if (bridge->next_bridge) 68 rockchip_bridge_disable(bridge->next_bridge); 69 70 if (bridge->funcs && bridge->funcs->disable) 71 bridge->funcs->disable(bridge); 72 } 73 74 void rockchip_bridge_mode_set(struct rockchip_bridge *bridge, 75 const struct drm_display_mode *mode) 76 { 77 if (!bridge || !mode) 78 return; 79 80 if (bridge->funcs && bridge->funcs->mode_set) 81 bridge->funcs->mode_set(bridge, mode); 82 83 if (bridge->next_bridge) 84 rockchip_bridge_mode_set(bridge->next_bridge, mode); 85 } 86 87 bool rockchip_bridge_detect(struct rockchip_bridge *bridge) 88 { 89 if (bridge->funcs && bridge->funcs->detect) 90 if (!bridge->funcs->detect(bridge)) 91 return false; 92 93 if (bridge->next_bridge) 94 return rockchip_bridge_detect(bridge->next_bridge); 95 96 return true; 97 } 98