mirror of
https://github.com/Fishwaldo/build.git
synced 2025-07-23 21:39:02 +00:00
* Bump to 4.18, removing the obvious, fixing build problems, put some on waiting. * Pin 4.18 to DEV, rollback 4.14 to NEXT, adjust configs, remove one deprecated patch from NEXT and add board-h3-address-some-stability-issues.patch * Adjust few boards in development to new reality, removing it from NEXT for now * Adjust few board configs * Board config adjustement * Adjust few boards configs * Port NeoCore2 and Neo21.1 to 4.14.y * Adjust board config * Adjust board config
56 lines
1.8 KiB
Diff
56 lines
1.8 KiB
Diff
diff --git a/drivers/gpu/drm/sun4i/sun4i_drv.c b/drivers/gpu/drm/sun4i/sun4i_drv.c
|
|
index 20193d6f33ba..e6c62c079146 100644
|
|
--- a/drivers/gpu/drm/sun4i/sun4i_drv.c
|
|
+++ b/drivers/gpu/drm/sun4i/sun4i_drv.c
|
|
@@ -26,6 +26,7 @@
|
|
#include "sun4i_frontend.h"
|
|
#include "sun4i_framebuffer.h"
|
|
#include "sun4i_tcon.h"
|
|
+#include "sun8i_tcon_top.h"
|
|
|
|
DEFINE_DRM_GEM_CMA_FOPS(sun4i_drv_fops);
|
|
|
|
@@ -197,6 +198,11 @@ 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_top(struct device_node *node)
|
|
+{
|
|
+ return !!of_match_node(sun8i_tcon_top_of_table, node);
|
|
+}
|
|
+
|
|
static int compare_of(struct device *dev, void *data)
|
|
{
|
|
DRM_DEBUG_DRIVER("Comparing of node %pOF with %pOF\n",
|
|
@@ -258,6 +264,18 @@ static void sun4i_drv_traverse_endpoints(struct endpoint_list *list,
|
|
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.
|
|
+ * We have to skip it here to prevent infinite looping
|
|
+ * between TCON TOP and TCON.
|
|
+ */
|
|
+ if (sun4i_drv_node_is_tcon_top(remote)) {
|
|
+ DRM_DEBUG_DRIVER("TCON output endpoint is TCON TOP... skipping\n");
|
|
+ of_node_put(remote);
|
|
+ continue;
|
|
+ }
|
|
+
|
|
if (of_graph_parse_endpoint(ep, &endpoint)) {
|
|
DRM_DEBUG_DRIVER("Couldn't parse endpoint\n");
|
|
of_node_put(remote);
|
|
@@ -318,6 +336,12 @@ static int sun4i_drv_add_endpoints(struct device *dev,
|
|
/* each node has at least one output */
|
|
sun4i_drv_traverse_endpoints(list, node, 1);
|
|
|
|
+ /* TCON TOP has second and third output */
|
|
+ if (sun4i_drv_node_is_tcon_top(node)) {
|
|
+ sun4i_drv_traverse_endpoints(list, node, 3);
|
|
+ sun4i_drv_traverse_endpoints(list, node, 5);
|
|
+ }
|
|
+
|
|
return count;
|
|
}
|
|
|