diff options
-rw-r--r-- | drivers/gpu/drm/omapdrm/dss/base.c | 20 | ||||
-rw-r--r-- | drivers/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 { | |||
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 | ||
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 = { | |||
184 | {}, | 184 | {}, |
185 | }; | 185 | }; |
186 | 186 | ||
187 | static const struct of_device_id omapdss_of_fixups_whitelist[] __initconst = { | ||
188 | { .compatible = "composite-video-connector" }, | ||
189 | { .compatible = "dvi-connector" }, | ||
190 | { .compatible = "hdmi-connector" }, | ||
191 | { .compatible = "lgphilips,lb035q02" }, | ||
192 | { .compatible = "nec,nl8048hl11" }, | ||
193 | { .compatible = "panel-dpi" }, | ||
194 | { .compatible = "panel-dsi-cm" }, | ||
195 | { .compatible = "sharp,ls037v7dw01" }, | ||
196 | { .compatible = "sony,acx565akm" }, | ||
197 | { .compatible = "svideo-connector" }, | ||
198 | { .compatible = "ti,opa362" }, | ||
199 | { .compatible = "ti,tfp410" }, | ||
200 | { .compatible = "ti,tpd12s015" }, | ||
201 | { .compatible = "toppoly,td028ttec1" }, | ||
202 | { .compatible = "tpo,td028ttec1" }, | ||
203 | { .compatible = "tpo,td043mtea1" }, | ||
204 | }; | ||
205 | |||
187 | static int __init omapdss_boot_init(void) | 206 | static int __init omapdss_boot_init(void) |
188 | { | 207 | { |
189 | struct device_node *dss, *child; | 208 | struct device_node *dss, *child; |
@@ -210,7 +229,7 @@ static int __init omapdss_boot_init(void) | |||
210 | n = list_first_entry(&dss_conv_list, struct dss_conv_node, | 229 | n = list_first_entry(&dss_conv_list, struct dss_conv_node, |
211 | list); | 230 | list); |
212 | 231 | ||
213 | if (!n->root) | 232 | if (of_match_node(omapdss_of_fixups_whitelist, n->node)) |
214 | omapdss_omapify_node(n->node); | 233 | omapdss_omapify_node(n->node); |
215 | 234 | ||
216 | list_del(&n->list); | 235 | list_del(&n->list); |