[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