diff options
Diffstat (limited to 'drivers/gpu/drm/omapdrm/dss/base.c')
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/base.c | 20 |
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 | ||
308 | static bool omapdss_list_contains(const struct device_node *node) | 309 | static bool omapdss_list_contains(const struct device_node *node) |
@@ -320,13 +321,20 @@ static bool omapdss_list_contains(const struct device_node *node) | |||
320 | static void omapdss_walk_device(struct device *dev, struct device_node *node, | 321 | static 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 | } |
376 | EXPORT_SYMBOL(omapdss_gather_components); | 380 | EXPORT_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 | ||