|
@@ -198,6 +198,22 @@ static bool sun4i_drv_node_is_tcon(struct device_node *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)
|
|
|
{
|
|
|
return !!of_match_node(sun8i_tcon_top_of_table, node);
|
|
@@ -256,14 +272,7 @@ static void sun4i_drv_traverse_endpoints(struct endpoint_list *list,
|
|
|
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)) {
|
|
|
- struct of_endpoint endpoint;
|
|
|
-
|
|
|
/*
|
|
|
* TCON TOP is always probed before TCON. However, TCON
|
|
|
* 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,
|
|
|
continue;
|
|
|
}
|
|
|
|
|
|
- if (of_graph_parse_endpoint(ep, &endpoint)) {
|
|
|
- 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;
|
|
|
+ /*
|
|
|
+ * If the node is our TCON with channel 0, the first
|
|
|
+ * port is used for panel or bridges, and will not be
|
|
|
+ * part of the component framework.
|
|
|
+ */
|
|
|
+ if (sun4i_drv_node_is_tcon_with_ch0(node)) {
|
|
|
+ struct of_endpoint endpoint;
|
|
|
+
|
|
|
+ if (of_graph_parse_endpoint(ep, &endpoint)) {
|
|
|
+ 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;
|
|
|
+ }
|
|
|
}
|
|
|
}
|
|
|
|