DSS: tonka: panda: Configure DSI peripheral for Tonka screen

Add clock, lane, and mux configuration for connecting the Tonka screen
to the Pandaboard. The screen is configured for operation on DSI1.
diff --git a/arch/arm/mach-omap2/board-omap4panda.c b/arch/arm/mach-omap2/board-omap4panda.c
index 981d865..5f951a2 100644
--- a/arch/arm/mach-omap2/board-omap4panda.c
+++ b/arch/arm/mach-omap2/board-omap4panda.c
@@ -655,6 +655,93 @@
 	.channel = OMAP_DSS_CHANNEL_DIGIT,
 };
 
+static struct nokia_dsi_panel_data dsi1_panel = {
+        .name = "tonka",
+        .reset_gpio = 102,
+        .use_ext_te = false,
+        .ext_te_gpio = -1,
+        .esd_interval = 0,
+};
+
+static struct omap_dss_device omap4_panda_dsi_device = {
+    .name = "lcd",
+    .driver_name = "tonka",
+    .type = OMAP_DISPLAY_TYPE_DSI,
+    .data =  &dsi1_panel,
+
+    .phy.dsi = {
+        .type = OMAP_DSS_DSI_TYPE_CMD_MODE,
+         .clk_lane = 1,
+         .clk_pol = 0,
+         .data1_lane = 2,
+         .data1_pol = 0,
+         .data2_lane = 3,
+         .data2_pol = 0,
+         .data3_lane = 4,
+         .data3_pol = 0,
+         .data4_lane = 5,
+         .data4_pol = 0,
+    },
+
+    .clocks = {
+        .dispc = {
+            .channel = {
+                .lck_div = 1,
+                .pck_div = 3,
+                .lcd_clk_src = OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DISPC,
+            },
+            .dispc_fclk_src = OMAP_DSS_CLK_SRC_FCK,
+        },
+
+        .dsi = {
+            .regn = 16,
+            .regm = 180,
+            .regm_dispc = 5, //m4reg
+            .regm_dsi = 5,   //m5rev
+            .lp_clk_div = 10,
+            .dsi_fclk_src = OMAP_DSS_CLK_SRC_DSI_PLL_HSDIV_DSI
+        },
+    },
+
+.panel = {
+        .timings       = {
+            .x_res       = 720,
+            .y_res       = 1280,
+            .pixel_clock = 62963,
+            .hsw         = 32,
+            .hfp         = 32,
+            .hbp         = 32,
+            .vsw         = 2,
+            .vfp         = 2,
+            .vbp         = 2,
+        },
+        .width_in_um = 57960,
+        .height_in_um = 103040,
+    },
+
+    .channel = OMAP_DSS_CHANNEL_LCD,
+};
+
+static void omap4_panda_dsi_mux_init(void)
+{
+    int rc;
+    unsigned int reg;
+
+    reg = omap4_ctrl_pad_readl(OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_DSIPHY);
+    reg &= ~OMAP4_DSI1_LANEENABLE_MASK;
+    reg |= (0x1f) << OMAP4_DSI1_LANEENABLE_SHIFT;
+    reg &= ~OMAP4_DSI1_PIPD_MASK;
+    reg |= (0x1f) << OMAP4_DSI1_PIPD_SHIFT;
+    omap4_ctrl_pad_writel(reg, OMAP4_CTRL_MODULE_PAD_CORE_CONTROL_DSIPHY);
+
+    rc = gpio_request_one(dsi1_panel.reset_gpio,
+                          GPIOF_DIR_OUT,
+                          "lcd1_reset_gpio");
+    if (rc) {
+        pr_err("%s: Could not request lcd1 reset gpio\n", __func__);
+    }
+}
+
 #ifdef CONFIG_MACH_OMAP4_PANDA_DVI_PRIMARY
 static struct omap_dss_device *omap4_panda_dss_devices[] = {
 	&omap4_panda_dvi_device,
@@ -688,6 +775,7 @@
 		pr_err("error initializing panda DVI\n");
 
 	omap4_panda_hdmi_mux_init();
+        omap4_panda_dsi_mux_init();
 	omap_display_init(&omap4_panda_dss_data);
 }