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 8 void rockchip_bridge_init(struct rockchip_bridge *bridge, 9 struct rockchip_connector *conn, 10 struct display_state *state) 11 { 12 if (!bridge) 13 return; 14 15 bridge->conn = conn; 16 bridge->state = state; 17 18 if (bridge->next_bridge) 19 rockchip_bridge_init(bridge->next_bridge, conn, state); 20 } 21 22 void rockchip_bridge_pre_enable(struct rockchip_bridge *bridge) 23 { 24 if (!bridge) 25 return; 26 27 if (bridge->funcs && bridge->funcs->pre_enable) 28 bridge->funcs->pre_enable(bridge); 29 30 if (bridge->next_bridge) 31 rockchip_bridge_pre_enable(bridge->next_bridge); 32 } 33 34 void rockchip_bridge_post_disable(struct rockchip_bridge *bridge) 35 { 36 if (!bridge) 37 return; 38 39 if (bridge->next_bridge) 40 rockchip_bridge_post_disable(bridge->next_bridge); 41 42 if (bridge->funcs && bridge->funcs->post_disable) 43 bridge->funcs->post_disable(bridge); 44 } 45 46 void rockchip_bridge_enable(struct rockchip_bridge *bridge) 47 { 48 if (!bridge) 49 return; 50 51 if (bridge->funcs && bridge->funcs->enable) 52 bridge->funcs->enable(bridge); 53 54 if (bridge->next_bridge) 55 rockchip_bridge_enable(bridge->next_bridge); 56 } 57 58 void rockchip_bridge_disable(struct rockchip_bridge *bridge) 59 { 60 if (!bridge) 61 return; 62 63 if (bridge->next_bridge) 64 rockchip_bridge_disable(bridge->next_bridge); 65 66 if (bridge->funcs && bridge->funcs->disable) 67 bridge->funcs->disable(bridge); 68 } 69 70 void rockchip_bridge_mode_set(struct rockchip_bridge *bridge, 71 const struct drm_display_mode *mode) 72 { 73 if (!bridge || !mode) 74 return; 75 76 if (bridge->funcs && bridge->funcs->mode_set) 77 bridge->funcs->mode_set(bridge, mode); 78 79 if (bridge->next_bridge) 80 rockchip_bridge_mode_set(bridge->next_bridge, mode); 81 } 82 83 bool rockchip_bridge_detect(struct rockchip_bridge *bridge) 84 { 85 if (bridge->funcs && bridge->funcs->detect) 86 if (!bridge->funcs->detect(bridge)) 87 return false; 88 89 if (bridge->next_bridge) 90 return rockchip_bridge_detect(bridge->next_bridge); 91 92 return true; 93 } 94