[PATCH 28/29] drm/omap: Simplify OF lookup of DSS devices
Sebastian Reichel
sre at kernel.org
Sun Dec 9 22:27:31 UTC 2018
Hi,
On Wed, Dec 05, 2018 at 05:00:21PM +0200, Laurent Pinchart wrote:
> 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 at ideasonboard.com>
> ---
Reviewed-by: Sebastian Reichel <sebastian.reichel at collabora.com>
-- Sebastian
> drivers/gpu/drm/omapdrm/dss/base.c | 5 +--
> drivers/gpu/drm/omapdrm/dss/dss-of.c | 60 ++++-----------------------
> drivers/gpu/drm/omapdrm/dss/omapdss.h | 3 +-
> 3 files changed, 10 insertions(+), 58 deletions(-)
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/base.c b/drivers/gpu/drm/omapdrm/dss/base.c
> index 36f2d41c9935..4d7f999c8e29 100644
> --- a/drivers/gpu/drm/omapdrm/dss/base.c
> +++ b/drivers/gpu/drm/omapdrm/dss/base.c
> @@ -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);
> }
>
> diff --git a/drivers/gpu/drm/omapdrm/dss/dss-of.c b/drivers/gpu/drm/omapdrm/dss/dss-of.c
> index 0422597ac6b0..b2094055c5fc 100644
> --- a/drivers/gpu/drm/omapdrm/dss/dss-of.c
> +++ b/drivers/gpu/drm/omapdrm/dss/dss-of.c
> @@ -12,71 +12,25 @@
> * 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);
> diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss.h b/drivers/gpu/drm/omapdrm/dss/omapdss.h
> index d990009ddbbd..d51cb181e2cc 100644
> --- a/drivers/gpu/drm/omapdrm/dss/omapdss.h
> +++ b/drivers/gpu/drm/omapdrm/dss/omapdss.h
> @@ -481,8 +481,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);
> struct omap_dss_device *omapdss_device_get_next(struct omap_dss_device *from,
> enum omap_dss_device_type type);
> int omapdss_device_connect(struct dss_device *dss,
> --
> Regards,
>
> Laurent Pinchart
>
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 833 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20181209/e744d364/attachment.sig>
More information about the dri-devel
mailing list