[PATCH v2 47/49] drm/omap: Whitelist DT nodes to fixup with omapdss, prefix
Sebastian Reichel
sre at kernel.org
Sat Feb 9 03:26:46 UTC 2019
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 at ideasonboard.com>
> Reviewed-by: Sebastian Reichel <sebastian.reichel at collabora.com>
> ---
Tested-by: Sebastian Reichel <sebastian.reichel at collabora.com>
-- 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 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/20190209/c9c90ace/attachment.sig>
More information about the dri-devel
mailing list