drm/omap: Whitelist DT nodes to fixup with omapdss, prefix
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@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>
This commit is contained in:
parent
30b7176195
commit
4e17763c32
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
Loading…
Reference in New Issue