Re: [PATCH v2 47/49] drm/omap: Whitelist DT nodes to fixup with omapdss, prefix

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Fri, Jan 11, 2019 at 05:51:18AM +0200, Laurent Pinchart wrote:
> The omapdss driver patches DT at runtime to prepend an "omapdss," prefix
> to the compatible string of all encoders, panels and connectors. This
> mechanism ensures they get bound to the omapdss-specific drivers instead
> of generic drivers.
> 
> Now that we have drm_bridge support in omapdrm, we need to selectively
> disable this mechanism. Add a whitelist of compatible strings to patch,
> and fill it with all the devices we support. They will be removed one by
> one once corresponding drm_bridge drivers become available and get
> successfully tested with omapdrm.
> 
> The omapdss components load check code is updated accordingly to ignore
> devices managed by external bridge drivers.
> 
> Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx>
> Reviewed-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx>
> ---

Tested-by: Sebastian Reichel <sebastian.reichel@xxxxxxxxxxxxx>

-- Sebastian

>  drivers/gpu/drm/omapdrm/dss/base.c            | 20 +++++++++++-------
>  .../gpu/drm/omapdrm/dss/omapdss-boot-init.c   | 21 ++++++++++++++++++-
>  2 files changed, 33 insertions(+), 8 deletions(-)
> 
> diff --git a/drivers/gpu/drm/omapdrm/dss/base.c b/drivers/gpu/drm/omapdrm/dss/base.c
> index 3c088cd2ceab..f8dad99013e8 100644
> --- a/drivers/gpu/drm/omapdrm/dss/base.c
> +++ b/drivers/gpu/drm/omapdrm/dss/base.c
> @@ -303,6 +303,7 @@ struct omapdss_comp_node {
>  	struct list_head list;
>  	struct device_node *node;
>  	bool dss_core_component;
> +	const char *compat;
>  };
>  
>  static bool omapdss_list_contains(const struct device_node *node)
> @@ -320,13 +321,20 @@ static bool omapdss_list_contains(const struct device_node *node)
>  static void omapdss_walk_device(struct device *dev, struct device_node *node,
>  				bool dss_core)
>  {
> +	struct omapdss_comp_node *comp;
>  	struct device_node *n;
> -	struct omapdss_comp_node *comp = devm_kzalloc(dev, sizeof(*comp),
> -						      GFP_KERNEL);
> +	const char *compat;
> +	int ret;
> +
> +	ret = of_property_read_string(node, "compatible", &compat);
> +	if (ret < 0)
> +		return;
>  
> +	comp = devm_kzalloc(dev, sizeof(*comp), GFP_KERNEL);
>  	if (comp) {
>  		comp->node = node;
>  		comp->dss_core_component = dss_core;
> +		comp->compat = compat;
>  		list_add(&comp->list, &omapdss_comp_list);
>  	}
>  
> @@ -366,12 +374,8 @@ void omapdss_gather_components(struct device *dev)
>  
>  	omapdss_walk_device(dev, dev->of_node, true);
>  
> -	for_each_available_child_of_node(dev->of_node, child) {
> -		if (!of_find_property(child, "compatible", NULL))
> -			continue;
> -
> +	for_each_available_child_of_node(dev->of_node, child)
>  		omapdss_walk_device(dev, child, true);
> -	}
>  }
>  EXPORT_SYMBOL(omapdss_gather_components);
>  
> @@ -379,6 +383,8 @@ static bool omapdss_component_is_loaded(struct omapdss_comp_node *comp)
>  {
>  	if (comp->dss_core_component)
>  		return true;
> +	if (!strstarts(comp->compat, "omapdss,"))
> +		return true;
>  	if (omapdss_device_is_registered(comp->node))
>  		return true;
>  
> diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c b/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c
> index 3bfb95d230e0..309b7b453e98 100644
> --- a/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c
> +++ b/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c
> @@ -184,6 +184,25 @@ static const struct of_device_id omapdss_of_match[] __initconst = {
>  	{},
>  };
>  
> +static const struct of_device_id omapdss_of_fixups_whitelist[] __initconst = {
> +	{ .compatible = "composite-video-connector" },
> +	{ .compatible = "dvi-connector" },
> +	{ .compatible = "hdmi-connector" },
> +	{ .compatible = "lgphilips,lb035q02" },
> +	{ .compatible = "nec,nl8048hl11" },
> +	{ .compatible = "panel-dpi" },
> +	{ .compatible = "panel-dsi-cm" },
> +	{ .compatible = "sharp,ls037v7dw01" },
> +	{ .compatible = "sony,acx565akm" },
> +	{ .compatible = "svideo-connector" },
> +	{ .compatible = "ti,opa362" },
> +	{ .compatible = "ti,tfp410" },
> +	{ .compatible = "ti,tpd12s015" },
> +	{ .compatible = "toppoly,td028ttec1" },
> +	{ .compatible = "tpo,td028ttec1" },
> +	{ .compatible = "tpo,td043mtea1" },
> +};
> +
>  static int __init omapdss_boot_init(void)
>  {
>  	struct device_node *dss, *child;
> @@ -210,7 +229,7 @@ static int __init omapdss_boot_init(void)
>  		n = list_first_entry(&dss_conv_list, struct dss_conv_node,
>  			list);
>  
> -		if (!n->root)
> +		if (of_match_node(omapdss_of_fixups_whitelist, n->node))
>  			omapdss_omapify_node(n->node);
>  
>  		list_del(&n->list);
> -- 
> Regards,
> 
> Laurent Pinchart
> 
> _______________________________________________
> dri-devel mailing list
> dri-devel@xxxxxxxxxxxxxxxxxxxxx
> https://lists.freedesktop.org/mailman/listinfo/dri-devel

Attachment: signature.asc
Description: PGP signature

_______________________________________________
dri-devel mailing list
dri-devel@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/dri-devel

[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux