xref: /rk3399_rockchip-uboot/drivers/video/drm/rockchip_bridge.c (revision a3dda7f4bf6bbece2100b16d2b632d6357ff044e)
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 display_state *state)
10 {
11 	if (!bridge)
12 		return;
13 
14 	bridge->state = state;
15 
16 	if (bridge->next_bridge)
17 		rockchip_bridge_init(bridge->next_bridge, state);
18 }
19 
20 void rockchip_bridge_pre_enable(struct rockchip_bridge *bridge)
21 {
22 	if (!bridge)
23 		return;
24 
25 	if (bridge->funcs && bridge->funcs->pre_enable)
26 		bridge->funcs->pre_enable(bridge);
27 
28 	if (bridge->next_bridge)
29 		rockchip_bridge_pre_enable(bridge->next_bridge);
30 }
31 
32 void rockchip_bridge_post_disable(struct rockchip_bridge *bridge)
33 {
34 	if (!bridge)
35 		return;
36 
37 	if (bridge->next_bridge)
38 		rockchip_bridge_post_disable(bridge->next_bridge);
39 
40 	if (bridge->funcs && bridge->funcs->post_disable)
41 		bridge->funcs->post_disable(bridge);
42 }
43 
44 void rockchip_bridge_enable(struct rockchip_bridge *bridge)
45 {
46 	if (!bridge)
47 		return;
48 
49 	if (bridge->funcs && bridge->funcs->enable)
50 		bridge->funcs->enable(bridge);
51 
52 	if (bridge->next_bridge)
53 		rockchip_bridge_enable(bridge->next_bridge);
54 }
55 
56 void rockchip_bridge_disable(struct rockchip_bridge *bridge)
57 {
58 	if (!bridge)
59 		return;
60 
61 	if (bridge->next_bridge)
62 		rockchip_bridge_disable(bridge->next_bridge);
63 
64 	if (bridge->funcs && bridge->funcs->disable)
65 		bridge->funcs->disable(bridge);
66 }
67 
68 void rockchip_bridge_mode_set(struct rockchip_bridge *bridge,
69 			      const struct drm_display_mode *mode)
70 {
71 	if (!bridge || !mode)
72 		return;
73 
74 	if (bridge->funcs && bridge->funcs->mode_set)
75 		bridge->funcs->mode_set(bridge, mode);
76 
77 	if (bridge->next_bridge)
78 		rockchip_bridge_mode_set(bridge->next_bridge, mode);
79 }
80