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