ARM: OMAP2+: add omapdss_init_of()

The OMAP display architecture requires a bunch of platform devices which
are not created via .dts (for now). We also need to pass a few function
pointers and the DSS hardware version from the arch code to omapdss
driver.

This patch adds omapdss_init_of() function, called from board-generic at
init time, which handles those tasks.

Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
Reviewed-by: Archit Taneja <archit@ti.com>
Acked-by: Tony Lindgren <tony@atomide.com>
diff --git a/arch/arm/mach-omap2/dss-common.c b/arch/arm/mach-omap2/dss-common.c
index dadccc9..ab8cf26 100644
--- a/arch/arm/mach-omap2/dss-common.c
+++ b/arch/arm/mach-omap2/dss-common.c
@@ -33,6 +33,7 @@
 #include "soc.h"
 #include "dss-common.h"
 #include "mux.h"
+#include "display.h"
 
 #define HDMI_GPIO_CT_CP_HPD 60 /* HPD mode enable/disable */
 #define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
@@ -101,6 +102,12 @@
 
 void __init omap4_panda_display_init_of(void)
 {
+	struct device_node *node;
+
+	node = omapdss_find_dss_of_node();
+	if (node && of_device_is_available(node))
+		return;
+
 	omap_display_init(&omap4_panda_dss_data);
 
 	platform_device_register(&omap4_panda_tfp410_device);
@@ -194,6 +201,11 @@
 void __init omap_4430sdp_display_init_of(void)
 {
 	int r;
+	struct device_node *node;
+
+	node = omapdss_find_dss_of_node();
+	if (node && of_device_is_available(node))
+		return;
 
 	r = gpio_request_one(DISPLAY_SEL_GPIO, GPIOF_OUT_INIT_HIGH,
 			"display_sel");
@@ -252,6 +264,12 @@
 
 void __init omap3_igep2_display_init_of(void)
 {
+	struct device_node *node;
+
+	node = omapdss_find_dss_of_node();
+	if (node && of_device_is_available(node))
+		return;
+
 	omap_display_init(&igep2_dss_data);
 
 	platform_device_register(&omap3_igep2_tfp410_device);