aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/omapdrm/dss/base.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss/base.c')
-rw-r--r--drivers/gpu/drm/omapdrm/dss/base.c20
1 files changed, 13 insertions, 7 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 {
303 struct list_head list; 303 struct list_head list;
304 struct device_node *node; 304 struct device_node *node;
305 bool dss_core_component; 305 bool dss_core_component;
306 const char *compat;
306}; 307};
307 308
308static bool omapdss_list_contains(const struct device_node *node) 309static bool omapdss_list_contains(const struct device_node *node)
@@ -320,13 +321,20 @@ static bool omapdss_list_contains(const struct device_node *node)
320static void omapdss_walk_device(struct device *dev, struct device_node *node, 321static void omapdss_walk_device(struct device *dev, struct device_node *node,
321 bool dss_core) 322 bool dss_core)
322{ 323{
324 struct omapdss_comp_node *comp;
323 struct device_node *n; 325 struct device_node *n;
324 struct omapdss_comp_node *comp = devm_kzalloc(dev, sizeof(*comp), 326 const char *compat;
325 GFP_KERNEL); 327 int ret;
328
329 ret = of_property_read_string(node, "compatible", &compat);
330 if (ret < 0)
331 return;
326 332
333 comp = devm_kzalloc(dev, sizeof(*comp), GFP_KERNEL);
327 if (comp) { 334 if (comp) {
328 comp->node = node; 335 comp->node = node;
329 comp->dss_core_component = dss_core; 336 comp->dss_core_component = dss_core;
337 comp->compat = compat;
330 list_add(&comp->list, &omapdss_comp_list); 338 list_add(&comp->list, &omapdss_comp_list);
331 } 339 }
332 340
@@ -366,12 +374,8 @@ void omapdss_gather_components(struct device *dev)
366 374
367 omapdss_walk_device(dev, dev->of_node, true); 375 omapdss_walk_device(dev, dev->of_node, true);
368 376
369 for_each_available_child_of_node(dev->of_node, child) { 377 for_each_available_child_of_node(dev->of_node, child)
370 if (!of_find_property(child, "compatible", NULL))
371 continue;
372
373 omapdss_walk_device(dev, child, true); 378 omapdss_walk_device(dev, child, true);
374 }
375} 379}
376EXPORT_SYMBOL(omapdss_gather_components); 380EXPORT_SYMBOL(omapdss_gather_components);
377 381
@@ -379,6 +383,8 @@ static bool omapdss_component_is_loaded(struct omapdss_comp_node *comp)
379{ 383{
380 if (comp->dss_core_component) 384 if (comp->dss_core_component)
381 return true; 385 return true;
386 if (!strstarts(comp->compat, "omapdss,"))
387 return true;
382 if (omapdss_device_is_registered(comp->node)) 388 if (omapdss_device_is_registered(comp->node))
383 return true; 389 return true;
384 390