drm/omap: Simplify OF lookup of DSS devices
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Fri, 21 Sep 2018 20:32:58 +0000 (23:32 +0300)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Mon, 18 Mar 2019 09:42:13 +0000 (11:42 +0200)
Now that the direction of OF graph walk has been reversed, there's no
need to lookup devices by port as we have no sink device connected
through multiple sink ports. Simplify OF lookup of the DSS devices to
look them up by node only.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Reviewed-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Tested-by: Sebastian Reichel <sebastian.reichel@collabora.com>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/dss/base.c
drivers/gpu/drm/omapdrm/dss/dss-of.c
drivers/gpu/drm/omapdrm/dss/omapdss.h

index 62ccbeb99a84dbb67eafec08929345598c348afa..d14abde3c5f07058c561b0293026dabebe03d884 100644 (file)
@@ -112,13 +112,12 @@ void omapdss_device_put(struct omap_dss_device *dssdev)
 }
 EXPORT_SYMBOL(omapdss_device_put);
 
-struct omap_dss_device *omapdss_find_device_by_port(struct device_node *src,
-                                                   unsigned int port)
+struct omap_dss_device *omapdss_find_device_by_node(struct device_node *node)
 {
        struct omap_dss_device *dssdev;
 
        list_for_each_entry(dssdev, &omapdss_devices_list, list) {
-               if (dssdev->dev->of_node == src && dssdev->of_ports & BIT(port))
+               if (dssdev->dev->of_node == node)
                        return omapdss_device_get(dssdev);
        }
 
index 0422597ac6b0c26b985b679dc174ac910097dae6..b2094055c5fc3a626348fbddf8f626bd1a8df82d 100644 (file)
  * more details.
  */
 
-#include <linux/device.h>
 #include <linux/err.h>
-#include <linux/module.h>
 #include <linux/of.h>
 #include <linux/of_graph.h>
-#include <linux/seq_file.h>
 
 #include "omapdss.h"
 
-static struct device_node *
-dss_of_port_get_parent_device(struct device_node *port)
-{
-       struct device_node *np;
-       int i;
-
-       if (!port)
-               return NULL;
-
-       np = of_get_parent(port);
-
-       for (i = 0; i < 2 && np; ++i) {
-               struct property *prop;
-
-               prop = of_find_property(np, "compatible", NULL);
-
-               if (prop)
-                       return np;
-
-               np = of_get_next_parent(np);
-       }
-
-       return NULL;
-}
-
 struct omap_dss_device *
 omapdss_of_find_connected_device(struct device_node *node, unsigned int port)
 {
-       struct device_node *src_node;
-       struct device_node *src_port;
-       struct device_node *ep;
-       struct omap_dss_device *src;
-       u32 port_number = 0;
+       struct device_node *remote_node;
+       struct omap_dss_device *dssdev;
 
-       /* Get the endpoint... */
-       ep = of_graph_get_endpoint_by_regs(node, port, 0);
-       if (!ep)
+       remote_node = of_graph_get_remote_node(node, port, 0);
+       if (!remote_node)
                return NULL;
 
-       /* ... and its remote port... */
-       src_port = of_graph_get_remote_port(ep);
-       of_node_put(ep);
-       if (!src_port)
-               return NULL;
-
-       /* ... and the remote port's number and parent... */
-       of_property_read_u32(src_port, "reg", &port_number);
-       src_node = dss_of_port_get_parent_device(src_port);
-       of_node_put(src_port);
-       if (!src_node)
-               return ERR_PTR(-EINVAL);
-
-       /* ... and finally the connected device. */
-       src = omapdss_find_device_by_port(src_node, port_number);
-       of_node_put(src_node);
+       dssdev = omapdss_find_device_by_node(remote_node);
+       of_node_put(remote_node);
 
-       return src ? src : ERR_PTR(-EPROBE_DEFER);
+       return dssdev ? dssdev : ERR_PTR(-EPROBE_DEFER);
 }
 EXPORT_SYMBOL_GPL(omapdss_of_find_connected_device);
index a63b1d4b7a8ac1dd2ed63760568c0396133bb198..d13a6b5774e84805592b1a655ad9344fae4464f3 100644 (file)
@@ -474,8 +474,7 @@ void omapdss_device_register(struct omap_dss_device *dssdev);
 void omapdss_device_unregister(struct omap_dss_device *dssdev);
 struct omap_dss_device *omapdss_device_get(struct omap_dss_device *dssdev);
 void omapdss_device_put(struct omap_dss_device *dssdev);
-struct omap_dss_device *omapdss_find_device_by_port(struct device_node *src,
-                                                   unsigned int port);
+struct omap_dss_device *omapdss_find_device_by_node(struct device_node *node);
 int omapdss_device_connect(struct dss_device *dss,
                           struct omap_dss_device *src,
                           struct omap_dss_device *dst);