Commit c5cf04df authored by Jernej Skrabec's avatar Jernej Skrabec Committed by Maxime Ripard

drm/sun4i: Don't skip TCONs if they don't have channel 0

TV TCONs (channel 1 only) are always connected to TV or HDMI encoder.
Because of that, all output endpoints on such TCON node will point to a
encoder which is part of component framework.

Correct current graph traversing algorithm in such way that it doesn't
skip output enpoints with id 0 on TV TCONs.
Signed-off-by: default avatarJernej Skrabec <jernej.skrabec@siol.net>
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@bootlin.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180625120304.7543-10-jernej.skrabec@siol.net
parent ef0cf644
...@@ -198,6 +198,22 @@ static bool sun4i_drv_node_is_tcon(struct device_node *node) ...@@ -198,6 +198,22 @@ static bool sun4i_drv_node_is_tcon(struct device_node *node)
return !!of_match_node(sun4i_tcon_of_table, node); return !!of_match_node(sun4i_tcon_of_table, node);
} }
static bool sun4i_drv_node_is_tcon_with_ch0(struct device_node *node)
{
const struct of_device_id *match;
match = of_match_node(sun4i_tcon_of_table, node);
if (match) {
struct sun4i_tcon_quirks *quirks;
quirks = (struct sun4i_tcon_quirks *)match->data;
return quirks->has_channel_0;
}
return false;
}
static bool sun4i_drv_node_is_tcon_top(struct device_node *node) static bool sun4i_drv_node_is_tcon_top(struct device_node *node)
{ {
return !!of_match_node(sun8i_tcon_top_of_table, node); return !!of_match_node(sun8i_tcon_top_of_table, node);
...@@ -256,14 +272,7 @@ static void sun4i_drv_traverse_endpoints(struct endpoint_list *list, ...@@ -256,14 +272,7 @@ static void sun4i_drv_traverse_endpoints(struct endpoint_list *list,
continue; continue;
} }
/*
* If the node is our TCON, the first port is used for
* panel or bridges, and will not be part of the
* component framework.
*/
if (sun4i_drv_node_is_tcon(node)) { if (sun4i_drv_node_is_tcon(node)) {
struct of_endpoint endpoint;
/* /*
* TCON TOP is always probed before TCON. However, TCON * TCON TOP is always probed before TCON. However, TCON
* points back to TCON TOP when it is source for HDMI. * points back to TCON TOP when it is source for HDMI.
...@@ -276,16 +285,25 @@ static void sun4i_drv_traverse_endpoints(struct endpoint_list *list, ...@@ -276,16 +285,25 @@ static void sun4i_drv_traverse_endpoints(struct endpoint_list *list,
continue; continue;
} }
if (of_graph_parse_endpoint(ep, &endpoint)) { /*
DRM_DEBUG_DRIVER("Couldn't parse endpoint\n"); * If the node is our TCON with channel 0, the first
of_node_put(remote); * port is used for panel or bridges, and will not be
continue; * part of the component framework.
} */
if (sun4i_drv_node_is_tcon_with_ch0(node)) {
if (!endpoint.id) { struct of_endpoint endpoint;
DRM_DEBUG_DRIVER("Endpoint is our panel... skipping\n");
of_node_put(remote); if (of_graph_parse_endpoint(ep, &endpoint)) {
continue; DRM_DEBUG_DRIVER("Couldn't parse endpoint\n");
of_node_put(remote);
continue;
}
if (!endpoint.id) {
DRM_DEBUG_DRIVER("Endpoint is our panel... skipping\n");
of_node_put(remote);
continue;
}
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment