Commit cee17a71 authored by Eugeniy Paltsev's avatar Eugeniy Paltsev Committed by Alexey Brodkin

drm/arcpgu: rework encoder search

Instead of using non-standard "encoder-slave" property to find
encoder let's find it by associated endpoint.

While I'm on it add corresponding log message if we don't find
any encoder and we assume that we use virtual LCD on the
simulation platform.
Signed-off-by: default avatarEugeniy Paltsev <Eugeniy.Paltsev@synopsys.com>
Signed-off-by: default avatarAlexey Brodkin <abrodkin@synopsys.com>
parent 7aaddd96
...@@ -14,6 +14,7 @@ ...@@ -14,6 +14,7 @@
#include <drm/drm_fb_helper.h> #include <drm/drm_fb_helper.h>
#include <drm/drm_gem_cma_helper.h> #include <drm/drm_gem_cma_helper.h>
#include <drm/drm_gem_framebuffer_helper.h> #include <drm/drm_gem_framebuffer_helper.h>
#include <drm/drm_of.h>
#include <drm/drm_probe_helper.h> #include <drm/drm_probe_helper.h>
#include <linux/dma-mapping.h> #include <linux/dma-mapping.h>
#include <linux/module.h> #include <linux/module.h>
...@@ -45,7 +46,7 @@ static int arcpgu_load(struct drm_device *drm) ...@@ -45,7 +46,7 @@ static int arcpgu_load(struct drm_device *drm)
{ {
struct platform_device *pdev = to_platform_device(drm->dev); struct platform_device *pdev = to_platform_device(drm->dev);
struct arcpgu_drm_private *arcpgu; struct arcpgu_drm_private *arcpgu;
struct device_node *encoder_node; struct device_node *encoder_node = NULL, *endpoint_node = NULL;
struct resource *res; struct resource *res;
int ret; int ret;
...@@ -80,14 +81,23 @@ static int arcpgu_load(struct drm_device *drm) ...@@ -80,14 +81,23 @@ static int arcpgu_load(struct drm_device *drm)
if (arc_pgu_setup_crtc(drm) < 0) if (arc_pgu_setup_crtc(drm) < 0)
return -ENODEV; return -ENODEV;
/* find the encoder node and initialize it */ /*
encoder_node = of_parse_phandle(drm->dev->of_node, "encoder-slave", 0); * There is only one output port inside each device. It is linked with
* encoder endpoint.
*/
endpoint_node = of_graph_get_next_endpoint(pdev->dev.of_node, NULL);
if (endpoint_node) {
encoder_node = of_graph_get_remote_port_parent(endpoint_node);
of_node_put(endpoint_node);
}
if (encoder_node) { if (encoder_node) {
ret = arcpgu_drm_hdmi_init(drm, encoder_node); ret = arcpgu_drm_hdmi_init(drm, encoder_node);
of_node_put(encoder_node); of_node_put(encoder_node);
if (ret < 0) if (ret < 0)
return ret; return ret;
} else { } else {
dev_info(drm->dev, "no encoder found. Assumed virtual LCD on simulation platform\n");
ret = arcpgu_drm_sim_init(drm, NULL); ret = arcpgu_drm_sim_init(drm, NULL);
if (ret < 0) if (ret < 0)
return ret; return ret;
......
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