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