diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c')
| -rw-r--r-- | drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c | 34 | 
1 files changed, 20 insertions, 14 deletions
diff --git a/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c b/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c index 31502857f013..72a7da7bfff1 100644 --- a/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c +++ b/drivers/gpu/drm/omapdrm/dss/omapdss-boot-init.c @@ -174,34 +174,38 @@ 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 = "hdmi-connector" },  	{ .compatible = "panel-dsi-cm" }, -	{ .compatible = "svideo-connector" }, -	{ .compatible = "ti,opa362" }, -	{ .compatible = "ti,tpd12s015" },  	{},  }; +static void __init omapdss_find_children(struct device_node *np) +{ +	struct device_node *child; + +	for_each_available_child_of_node(np, child) { +		if (!of_find_property(child, "compatible", NULL)) +			continue; + +		omapdss_walk_device(child, true); + +		if (of_device_is_compatible(child, "ti,sysc")) +			omapdss_find_children(child); +	} +} +  static int __init omapdss_boot_init(void)  { -	struct device_node *dss, *child; +	struct device_node *dss;  	INIT_LIST_HEAD(&dss_conv_list);  	dss = of_find_matching_node(NULL, omapdss_of_match);  	if (dss == NULL || !of_device_is_available(dss)) -		return 0; +		goto put_node;  	omapdss_walk_device(dss, true); - -	for_each_available_child_of_node(dss, child) { -		if (!of_find_property(child, "compatible", NULL)) -			continue; - -		omapdss_walk_device(child, true); -	} +	omapdss_find_children(dss);  	while (!list_empty(&dss_conv_list)) {  		struct dss_conv_node *n; @@ -217,6 +221,8 @@ static int __init omapdss_boot_init(void)  		kfree(n);  	} +put_node: +	of_node_put(dss);  	return 0;  }  |