hc
2023-02-17 557c24d082b6ecb9bfe5407b77ae43fa7650a5dc
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
// SPDX-License-Identifier: GPL-2.0+
/*
 * (C) Copyright 2008-2018 Fuzhou Rockchip Electronics Co., Ltd
 */
 
#include "rockchip_bridge.h"
 
void rockchip_bridge_init(struct rockchip_bridge *bridge,
             struct rockchip_connector *conn,
             struct display_state *state)
{
   if (!bridge)
       return;
 
   bridge->conn = conn;
   bridge->state = state;
 
   if (bridge->next_bridge)
       rockchip_bridge_init(bridge->next_bridge, conn, state);
}
 
void rockchip_bridge_pre_enable(struct rockchip_bridge *bridge)
{
   if (!bridge)
       return;
 
   if (bridge->funcs && bridge->funcs->pre_enable)
       bridge->funcs->pre_enable(bridge);
 
   if (bridge->next_bridge)
       rockchip_bridge_pre_enable(bridge->next_bridge);
}
 
void rockchip_bridge_post_disable(struct rockchip_bridge *bridge)
{
   if (!bridge)
       return;
 
   if (bridge->next_bridge)
       rockchip_bridge_post_disable(bridge->next_bridge);
 
   if (bridge->funcs && bridge->funcs->post_disable)
       bridge->funcs->post_disable(bridge);
}
 
void rockchip_bridge_enable(struct rockchip_bridge *bridge)
{
   if (!bridge)
       return;
 
   if (bridge->funcs && bridge->funcs->enable)
       bridge->funcs->enable(bridge);
 
   if (bridge->next_bridge)
       rockchip_bridge_enable(bridge->next_bridge);
}
 
void rockchip_bridge_disable(struct rockchip_bridge *bridge)
{
   if (!bridge)
       return;
 
   if (bridge->next_bridge)
       rockchip_bridge_disable(bridge->next_bridge);
 
   if (bridge->funcs && bridge->funcs->disable)
       bridge->funcs->disable(bridge);
}
 
void rockchip_bridge_mode_set(struct rockchip_bridge *bridge,
                 const struct drm_display_mode *mode)
{
   if (!bridge || !mode)
       return;
 
   if (bridge->funcs && bridge->funcs->mode_set)
       bridge->funcs->mode_set(bridge, mode);
 
   if (bridge->next_bridge)
       rockchip_bridge_mode_set(bridge->next_bridge, mode);
}
 
bool rockchip_bridge_detect(struct rockchip_bridge *bridge)
{
   if (bridge->funcs && bridge->funcs->detect)
       if (!bridge->funcs->detect(bridge))
           return false;
 
   if (bridge->next_bridge)
       return rockchip_bridge_detect(bridge->next_bridge);
 
   return true;
}