xref: /rk3399_rockchip-uboot/drivers/video/drm/rockchip_bridge.c (revision 0e6acdbc527a4aeb5fd5966bf874dbe404baf433)
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 
rockchip_bridge_init(struct rockchip_bridge * bridge,struct rockchip_connector * conn,struct display_state * state)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 
rockchip_bridge_pre_enable(struct rockchip_bridge * bridge)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 
rockchip_bridge_post_disable(struct rockchip_bridge * bridge)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 
rockchip_bridge_enable(struct rockchip_bridge * bridge)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 
rockchip_bridge_disable(struct rockchip_bridge * bridge)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 
rockchip_bridge_mode_set(struct rockchip_bridge * bridge,const struct drm_display_mode * mode)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 
rockchip_bridge_detect(struct rockchip_bridge * bridge)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