Merge branch 'docs-move' of git://git.kernel.org/pub/scm/linux/kernel/git/rdunlap...
[pandora-kernel.git] / arch / arm / mach-omap2 / display.c
index 256d23f..543fcb8 100644 (file)
@@ -22,7 +22,7 @@
 #include <linux/clk.h>
 #include <linux/err.h>
 
-#include <plat/display.h>
+#include <video/omapdss.h>
 #include <plat/omap_hwmod.h>
 #include <plat/omap_device.h>
 
@@ -56,37 +56,58 @@ static bool opt_clock_available(const char *clk_role)
        return false;
 }
 
+struct omap_dss_hwmod_data {
+       const char *oh_name;
+       const char *dev_name;
+       const int id;
+};
+
+static const struct omap_dss_hwmod_data omap2_dss_hwmod_data[] __initdata = {
+       { "dss_core", "omapdss_dss", -1 },
+       { "dss_dispc", "omapdss_dispc", -1 },
+       { "dss_rfbi", "omapdss_rfbi", -1 },
+       { "dss_venc", "omapdss_venc", -1 },
+};
+
+static const struct omap_dss_hwmod_data omap3_dss_hwmod_data[] __initdata = {
+       { "dss_core", "omapdss_dss", -1 },
+       { "dss_dispc", "omapdss_dispc", -1 },
+       { "dss_rfbi", "omapdss_rfbi", -1 },
+       { "dss_venc", "omapdss_venc", -1 },
+       { "dss_dsi1", "omapdss_dsi1", -1 },
+};
+
+static const struct omap_dss_hwmod_data omap4_dss_hwmod_data[] __initdata = {
+       { "dss_core", "omapdss_dss", -1 },
+       { "dss_dispc", "omapdss_dispc", -1 },
+       { "dss_rfbi", "omapdss_rfbi", -1 },
+       { "dss_venc", "omapdss_venc", -1 },
+       { "dss_dsi1", "omapdss_dsi1", -1 },
+       { "dss_dsi2", "omapdss_dsi2", -1 },
+       { "dss_hdmi", "omapdss_hdmi", -1 },
+};
+
 int __init omap_display_init(struct omap_dss_board_info *board_data)
 {
        int r = 0;
        struct omap_hwmod *oh;
        struct omap_device *od;
-       int i;
+       int i, oh_count;
        struct omap_display_platform_data pdata;
-
-       /*
-        * omap: valid DSS hwmod names
-        * omap2,3,4: dss_core, dss_dispc, dss_rfbi, dss_venc
-        * omap3,4: dss_dsi1
-        * omap4: dss_dsi2, dss_hdmi
-        */
-       char *oh_name[] = { "dss_core", "dss_dispc", "dss_rfbi", "dss_venc",
-               "dss_dsi1", "dss_dsi2", "dss_hdmi" };
-       char *dev_name[] = { "omapdss_dss", "omapdss_dispc", "omapdss_rfbi",
-               "omapdss_venc", "omapdss_dsi1", "omapdss_dsi2",
-               "omapdss_hdmi" };
-       int oh_count;
+       const struct omap_dss_hwmod_data *curr_dss_hwmod;
 
        memset(&pdata, 0, sizeof(pdata));
 
-       if (cpu_is_omap24xx())
-               oh_count = ARRAY_SIZE(oh_name) - 3;
-               /* last 3 hwmod dev in oh_name are not available for omap2 */
-       else if (cpu_is_omap44xx())
-               oh_count = ARRAY_SIZE(oh_name);
-       else
-               oh_count = ARRAY_SIZE(oh_name) - 2;
-               /* last 2 hwmod dev in oh_name are not available for omap3 */
+       if (cpu_is_omap24xx()) {
+               curr_dss_hwmod = omap2_dss_hwmod_data;
+               oh_count = ARRAY_SIZE(omap2_dss_hwmod_data);
+       } else if (cpu_is_omap34xx()) {
+               curr_dss_hwmod = omap3_dss_hwmod_data;
+               oh_count = ARRAY_SIZE(omap3_dss_hwmod_data);
+       } else {
+               curr_dss_hwmod = omap4_dss_hwmod_data;
+               oh_count = ARRAY_SIZE(omap4_dss_hwmod_data);
+       }
 
        /* opt_clks are always associated with dss hwmod */
        oh_core = omap_hwmod_lookup("dss_core");
@@ -100,19 +121,21 @@ int __init omap_display_init(struct omap_dss_board_info *board_data)
        pdata.opt_clock_available = opt_clock_available;
 
        for (i = 0; i < oh_count; i++) {
-               oh = omap_hwmod_lookup(oh_name[i]);
+               oh = omap_hwmod_lookup(curr_dss_hwmod[i].oh_name);
                if (!oh) {
-                       pr_err("Could not look up %s\n", oh_name[i]);
+                       pr_err("Could not look up %s\n",
+                               curr_dss_hwmod[i].oh_name);
                        return -ENODEV;
                }
 
-               od = omap_device_build(dev_name[i], -1, oh, &pdata,
+               od = omap_device_build(curr_dss_hwmod[i].dev_name,
+                               curr_dss_hwmod[i].id, oh, &pdata,
                                sizeof(struct omap_display_platform_data),
                                omap_dss_latency,
                                ARRAY_SIZE(omap_dss_latency), 0);
 
                if (WARN((IS_ERR(od)), "Could not build omap_device for %s\n",
-                               oh_name[i]))
+                               curr_dss_hwmod[i].oh_name))
                        return -ENODEV;
        }
        omap_display_device.dev.platform_data = board_data;