Skip to content

Commit b3f4ff4

Browse files
committed
drm/rockchip: drv: Add bridges chain support
Fixes: c4e97a6 ("drm/rockchip: get connector in bridge mode") Change-Id: Ie3c5d86fe00f68b0c56548efaa630071a3cc2a15 Signed-off-by: Wyon Bi <bivvy.bi@rock-chips.com>
1 parent e908fa1 commit b3f4ff4

1 file changed

Lines changed: 9 additions & 28 deletions

File tree

drivers/gpu/drm/rockchip/rockchip_drm_drv.c

Lines changed: 9 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -129,10 +129,10 @@ static
129129
struct drm_connector *find_connector_by_bridge(struct drm_device *drm_dev,
130130
struct device_node *node)
131131
{
132-
struct device_node *np_encoder, *np_connector = NULL;
132+
struct device_node *np_encoder;
133+
struct drm_bridge *bridge;
133134
struct drm_encoder *encoder;
134135
struct drm_connector *connector = NULL;
135-
struct device_node *port, *endpoint;
136136
bool encoder_bridge = false;
137137
bool found_connector = false;
138138

@@ -149,33 +149,17 @@ struct drm_connector *find_connector_by_bridge(struct drm_device *drm_dev,
149149
dev_err(drm_dev->dev, "can't found encoder bridge!\n");
150150
goto err_put_encoder;
151151
}
152-
port = of_graph_get_port_by_id(np_encoder, 1);
153-
if (!port) {
154-
dev_err(drm_dev->dev, "can't found port point!\n");
155-
goto err_put_encoder;
156-
}
157-
for_each_available_child_of_node(port, endpoint) {
158-
np_connector = of_graph_get_remote_port_parent(endpoint);
159-
if (!np_connector) {
160-
dev_err(drm_dev->dev,
161-
"can't found connector node, please init!\n");
162-
goto err_put_port;
163-
}
164-
if (!of_device_is_available(np_connector)) {
165-
of_node_put(np_connector);
166-
np_connector = NULL;
167-
continue;
168-
} else {
152+
153+
bridge = encoder->bridge;
154+
while (bridge) {
155+
if (!bridge->next)
169156
break;
170-
}
171-
}
172-
if (!np_connector) {
173-
dev_err(drm_dev->dev, "can't found available connector node!\n");
174-
goto err_put_port;
157+
158+
bridge = bridge->next;
175159
}
176160

177161
drm_for_each_connector(connector, drm_dev) {
178-
if (connector->port == np_connector) {
162+
if (connector->port == bridge->of_node) {
179163
found_connector = true;
180164
break;
181165
}
@@ -184,9 +168,6 @@ struct drm_connector *find_connector_by_bridge(struct drm_device *drm_dev,
184168
if (!found_connector)
185169
connector = NULL;
186170

187-
of_node_put(np_connector);
188-
err_put_port:
189-
of_node_put(port);
190171
err_put_encoder:
191172
of_node_put(np_encoder);
192173

0 commit comments

Comments
 (0)