arm: tegra: pluto: Modularize board panel file
Vineel Kumar Reddy Kovvuri [Wed, 7 Nov 2012 11:18:06 +0000 (16:18 +0530)]
Bug 1166630

Change-Id: I1bf712b1b055482401310f55bd37a254d1ada3f6
Signed-off-by: Vineel Kumar Reddy Kovvuri <vineelkumarr@nvidia.com>
Reviewed-on: http://git-master/r/161999
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Thomas Cherry <tcherry@nvidia.com>
GVS: Gerrit_Virtual_Submit

arch/arm/mach-tegra/Makefile
arch/arm/mach-tegra/board-panel.h [new file with mode: 0644]
arch/arm/mach-tegra/board-pluto-panel.c
arch/arm/mach-tegra/panel-j-720p-4-7.c [new file with mode: 0644]
arch/arm/mach-tegra/panel-l-720p-5.c [new file with mode: 0644]
arch/arm/mach-tegra/panel-s-1080p-5.c [new file with mode: 0644]

index d56199a..ae7166f 100644 (file)
@@ -276,6 +276,9 @@ obj-${CONFIG_MACH_TEGRA_PLUTO}          += board-pluto-panel.o
 obj-${CONFIG_MACH_TEGRA_PLUTO}          += board-pluto-kbc.o
 obj-${CONFIG_MACH_TEGRA_PLUTO}          += board-pluto-sensors.o
 obj-${CONFIG_MACH_TEGRA_PLUTO}          += board-pluto-powermon.o
+obj-${CONFIG_MACH_TEGRA_PLUTO}          += panel-l-720p-5.o
+obj-${CONFIG_MACH_TEGRA_PLUTO}          += panel-j-720p-4-7.o
+obj-${CONFIG_MACH_TEGRA_PLUTO}          += panel-s-1080p-5.o
 
 obj-${CONFIG_TEGRA_BB_XMM_POWER}        += baseband-xmm-power.o
 obj-${CONFIG_TEGRA_BB_XMM_POWER2}       += baseband-xmm-power2.o
diff --git a/arch/arm/mach-tegra/board-panel.h b/arch/arm/mach-tegra/board-panel.h
new file mode 100644 (file)
index 0000000..66412a2
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+ * arch/arm/mach-tegra/board-panel.h
+ *
+ * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#define    BOARD_E1582    0x062e
+#define    BOARD_E1605    0x0645
+#define    BOARD_E1639    0x0667
+
+struct tegra_panel {
+       void (*init_sd_settings)(struct tegra_dc_sd_settings *);
+       void (*init_dc_out)(struct tegra_dc_out *);
+       void (*init_fb_data)(struct tegra_fb_data *);
+       void (*init_cmu_data)(struct tegra_dc_platform_data *);
+       void (*set_disp_device)(struct platform_device *);
+       void (*init_resources)(struct resource *, int n_resources);
+       int (*register_bl_dev)(void);
+
+};
+
+extern atomic_t sd_brightness;
+extern struct tegra_panel dsi_l_720p_5;
+extern struct tegra_panel dsi_j_720p_4_7;
+extern struct tegra_panel dsi_s_1080p_5;
index 2db0e05..b966f9d 100644 (file)
@@ -27,8 +27,6 @@
 #include <linux/tegra_pwm_bl.h>
 #include <linux/regulator/consumer.h>
 #include <linux/pwm_backlight.h>
-#include <linux/mfd/max8831.h>
-#include <linux/max8831_backlight.h>
 
 #include <mach/irqs.h>
 #include <mach/iomap.h>
 #include "board.h"
 #include "devices.h"
 #include "gpio-names.h"
+#include "board-panel.h"
+#include "common.h"
 
 #include "tegra11_host1x_devices.h"
 
+#define PANEL_L_720P_5     1
+#define PANEL_J_720P_4_7   0
+#define PANEL_S_1080P_5    0
+
+
+
 struct platform_device * __init pluto_host1x_init(void)
 {
        struct platform_device *pdev = NULL;
@@ -53,54 +59,16 @@ struct platform_device * __init pluto_host1x_init(void)
        return pdev;
 }
 
-#ifdef CONFIG_TEGRA_DC
-
-/* PANEL_<diagonal length in inches>_<vendor name>_<resolution> */
-#define PANEL_5_LG_720_1280    1
-#define PANEL_4_7_JDI_720_1280 0
-#define PANEL_5_SHARP_1080p    0
-
-#if PANEL_5_LG_720_1280 || PANEL_5_SHARP_1080p
-#define DSI_PANEL_RESET                1
-#else
-#define DSI_PANEL_RESET                0
-#endif
-
-#define DSI_PANEL_RST_GPIO     TEGRA_GPIO_PH5
-#define DSI_PANEL_BL_EN_GPIO   TEGRA_GPIO_PH2
-#define DSI_PANEL_BL_PWM       TEGRA_GPIO_PH1
-
-
-#if PANEL_4_7_JDI_720_1280
-#define DC_CTRL_MODE   (TEGRA_DC_OUT_ONE_SHOT_MODE | \
-                        TEGRA_DC_OUT_ONE_SHOT_LP_MODE)
-#else
-#define DC_CTRL_MODE   TEGRA_DC_OUT_CONTINUOUS_MODE
-#endif
-
-static atomic_t __maybe_unused sd_brightness = ATOMIC_INIT(255);
-
-static bool dsi_reg_requested;
-static bool dsi_gpio_requested;
-static bool is_bl_powered;
+atomic_t __maybe_unused sd_brightness = ATOMIC_INIT(255);
+EXPORT_SYMBOL(sd_brightness);
 
-/*
- * for PANEL_5_LG_720_1280, PANEL_4_7_JDI_720_1280
- * and PANEL_5_SHARP_1080p
- */
-static struct regulator *vdd_lcd_s_1v8;
-static struct regulator *vdd_sys_bl_3v7;
-
-/* for PANEL_5_LG_720_1280 and PANEL_4_7_JDI_720_1280 */
-static struct regulator *avdd_lcd_3v0_2v8;
+#ifdef CONFIG_TEGRA_DC
 
 /* hdmi pins for hotplug */
 #define pluto_hdmi_hpd         TEGRA_GPIO_PN7
 
 /* hdmi related regulators */
-#ifdef CONFIG_TEGRA_DC
 static struct regulator *pluto_hdmi_vddio;
-#endif
 
 static struct resource pluto_disp1_resources[] = {
        {
@@ -121,21 +89,12 @@ static struct resource pluto_disp1_resources[] = {
                .end    = 0, /* Filled in by pluto_panel_init() */
                .flags  = IORESOURCE_MEM,
        },
-#if PANEL_5_LG_720_1280
-       {
-               .name   = "dsi_regs",
-               .start  = TEGRA_DSI_BASE,
-               .end    = TEGRA_DSI_BASE + TEGRA_DSI_SIZE - 1,
-               .flags  = IORESOURCE_MEM,
-       },
-#elif PANEL_4_7_JDI_720_1280 || PANEL_5_SHARP_1080p
        {
                .name   = "dsi_regs",
-               .start  = TEGRA_DSIB_BASE,
-               .end    = TEGRA_DSIB_BASE + TEGRA_DSIB_SIZE - 1,
+               .start  = 0, /* Filled in the panel file by init_resources() */
+               .end    = 0, /* Filled in the panel file by init_resources() */
                .flags  = IORESOURCE_MEM,
        },
-#endif
        {
                .name   = "mipi_cal",
                .start  = TEGRA_MIPI_CAL_BASE,
@@ -171,573 +130,11 @@ static struct resource pluto_disp2_resources[] = {
        },
 };
 
-#if PANEL_5_LG_720_1280
-static u8 panel_dsi_config[] = {0xe0, 0x43, 0x0, 0x80, 0x0, 0x0};
-static u8 panel_disp_ctrl1[] = {0xb5, 0x34, 0x20, 0x40, 0x0, 0x20};
-static u8 panel_disp_ctrl2[] = {0xb6, 0x04, 0x74, 0x0f, 0x16, 0x13};
-static u8 panel_internal_clk[] = {0xc0, 0x01, 0x08};
-static u8 panel_pwr_ctrl3[] =
-       {0xc3, 0x0, 0x09, 0x10, 0x02, 0x0, 0x66, 0x20, 0x13, 0x0};
-static u8 panel_pwr_ctrl4[] = {0xc4, 0x23, 0x24, 0x17, 0x17, 0x59};
-static u8 panel_positive_gamma_red[] =
-       {0xd0, 0x21, 0x13, 0x67, 0x37, 0x0c, 0x06, 0x62, 0x23, 0x03};
-static u8 panel_negetive_gamma_red[] =
-       {0xd1, 0x32, 0x13, 0x66, 0x37, 0x02, 0x06, 0x62, 0x23, 0x03};
-static u8 panel_positive_gamma_green[] =
-       {0xd2, 0x41, 0x14, 0x56, 0x37, 0x0c, 0x06, 0x62, 0x23, 0x03};
-static u8 panel_negetive_gamma_green[] =
-       {0xd3, 0x52, 0x14, 0x55, 0x37, 0x02, 0x06, 0x62, 0x23, 0x03};
-static u8 panel_positive_gamma_blue[] =
-       {0xd4, 0x41, 0x14, 0x56, 0x37, 0x0c, 0x06, 0x62, 0x23, 0x03};
-static u8 panel_negetive_gamma_blue[] =
-       {0xd5, 0x52, 0x14, 0x55, 0x37, 0x02, 0x06, 0x62, 0x23, 0x03};
-static u8 panel_ce2[] = {0x71, 0x0, 0x0, 0x01, 0x01};
-static u8 panel_ce3[] = {0x72, 0x01, 0x0e};
-static u8 panel_ce4[] = {0x73, 0x34, 0x52, 0x0};
-static u8 panel_ce5[] = {0x74, 0x05, 0x0, 0x06};
-static u8 panel_ce6[] = {0x75, 0x03, 0x0, 0x07};
-static u8 panel_ce7[] = {0x76, 0x07, 0x0, 0x06};
-static u8 panel_ce8[] = {0x77, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f};
-static u8 panel_ce9[] = {0x78, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40};
-static u8 panel_ce10[] =
-       {0x79, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40};
-static u8 panel_ce11[] = {0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
-static u8 panel_ce12[] = {0x7b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
-static u8 panel_ce13[] = {0x7c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
-#endif
-
-#if PANEL_5_SHARP_1080p
-static u8 panel_internal[] = {0x51, 0x0f, 0xff};
-#endif
-
-#if PANEL_4_7_JDI_720_1280
-static tegra_dc_bl_output pluto_bl_output_measured = {
-       0, 1, 2, 3, 4, 5, 6, 7,
-       8, 9, 10, 11, 12, 13, 14, 15,
-       16, 18, 19, 20, 21, 22, 23, 25,
-       26, 27, 28, 30, 31, 32, 33, 35,
-       36, 38, 39, 41, 42, 43, 45, 46,
-       48, 49, 51, 52, 54, 55, 57, 58,
-       60, 61, 63, 64, 66, 67, 68, 70,
-       71, 72, 74, 75, 77, 78, 79, 80,
-       81, 82, 83, 85, 86, 87, 88, 89,
-       90, 90, 91, 92, 93, 93, 94, 95,
-       96, 96, 96, 97, 97, 97, 97, 98,
-       98, 98, 98, 99, 100, 101, 101, 102,
-       103, 104, 104, 105, 106, 107, 108, 109,
-       110, 112, 113, 114, 115, 116, 117, 119,
-       120, 121, 122, 123, 125, 126, 127, 128,
-       129, 131, 132, 133, 134, 135, 136, 137,
-       138, 140, 141, 142, 142, 143, 144, 145,
-       146, 147, 148, 149, 149, 150, 151, 152,
-       153, 154, 154, 155, 156, 157, 158, 159,
-       160, 162, 163, 164, 165, 167, 168, 169,
-       170, 171, 172, 173, 173, 174, 175, 176,
-       176, 177, 178, 179, 179, 180, 181, 182,
-       182, 183, 184, 184, 185, 186, 186, 187,
-       188, 188, 189, 189, 190, 190, 191, 192,
-       193, 194, 195, 195, 196, 197, 198, 199,
-       200, 201, 202, 203, 203, 204, 205, 206,
-       207, 208, 209, 210, 211, 212, 213, 213,
-       214, 215, 216, 217, 218, 219, 220, 221,
-       222, 224, 225, 226, 227, 228, 229, 230,
-       231, 232, 233, 234, 235, 236, 237, 238,
-       239, 240, 241, 242, 243, 244, 246, 247,
-       248, 249, 250, 251, 252, 253, 254, 255
-};
-#elif PANEL_5_LG_720_1280
-static tegra_dc_bl_output pluto_bl_output_measured = {
-       0, 1, 3, 5, 7, 9, 11, 13,
-       15, 17, 19, 21, 22, 23, 25, 26,
-       28, 29, 30, 32, 33, 34, 36, 37,
-       39, 40, 42, 43, 45, 46, 48, 49,
-       50, 51, 52, 53, 54, 55, 56, 57,
-       58, 59, 60, 61, 62, 63, 64, 65,
-       66, 67, 68, 70, 71, 72, 73, 74,
-       75, 77, 78, 79, 80, 81, 82, 83,
-       84, 85, 86, 87, 88, 89, 90, 91,
-       92, 93, 94, 95, 96, 97, 98, 99,
-       100, 101, 101, 102, 102, 103, 103, 104,
-       105, 105, 106, 107, 108, 108, 109, 110,
-       111, 112, 113, 114, 115, 116, 117, 118,
-       119, 120, 121, 121, 122, 123, 124, 125,
-       126, 127, 128, 129, 130, 131, 132, 133,
-       134, 135, 135, 136, 137, 138, 139, 140,
-       141, 142, 143, 144, 145, 146, 147, 148,
-       149, 150, 151, 152, 153, 154, 155, 156,
-       156, 157, 158, 159, 160, 161, 162, 162,
-       163, 163, 164, 164, 165, 165, 166, 167,
-       167, 168, 169, 170, 171, 172, 173, 173,
-       174, 175, 176, 177, 178, 179, 180, 181,
-       182, 183, 184, 185, 186, 187, 188, 188,
-       189, 190, 191, 192, 193, 194, 194, 195,
-       196, 197, 198, 199, 200, 201, 202, 203,
-       204, 204, 205, 206, 206, 207, 207, 208,
-       209, 209, 210, 211, 212, 213, 214, 215,
-       216, 217, 218, 219, 220, 221, 222, 223,
-       223, 224, 225, 226, 227, 228, 229, 230,
-       231, 232, 233, 234, 235, 236, 237, 238,
-       239, 240, 241, 242, 243, 244, 245, 246,
-       247, 247, 248, 250, 251, 252, 253, 255
-};
-#elif PANEL_5_SHARP_1080p
-static tegra_dc_bl_output pluto_bl_output_measured = {
-       0, 2, 5, 7, 10, 13, 15, 18,
-       20, 23, 26, 27, 29, 30, 31, 33,
-       34, 36, 37, 39, 40, 41, 42, 44,
-       45, 46, 47, 48, 50, 51, 52, 53,
-       54, 55, 56, 57, 58, 59, 60, 61,
-       62, 63, 64, 65, 66, 67, 68, 69,
-       70, 71, 73, 74, 75, 76, 78, 79,
-       80, 82, 83, 84, 86, 86, 87, 88,
-       89, 89, 90, 91, 92, 92, 93, 94,
-       95, 96, 97, 98, 99, 100, 101, 102,
-       103, 104, 105, 106, 107, 107, 108, 109,
-       110, 111, 112, 112, 113, 114, 114, 115,
-       115, 116, 117, 117, 118, 119, 120, 121,
-       121, 122, 123, 124, 125, 126, 127, 128,
-       129, 130, 131, 132, 133, 134, 135, 136,
-       136, 138, 139, 140, 141, 142, 143, 144,
-       145, 146, 147, 148, 149, 150, 151, 152,
-       153, 154, 155, 155, 156, 157, 158, 159,
-       161, 162, 163, 164, 165, 166, 167, 167,
-       167, 167, 168, 168, 168, 168, 168, 169,
-       169, 170, 171, 172, 172, 173, 174, 175,
-       176, 177, 178, 179, 180, 181, 182, 183,
-       184, 184, 185, 186, 187, 188, 189, 190,
-       191, 192, 193, 194, 195, 195, 196, 197,
-       198, 199, 200, 201, 202, 203, 204, 205,
-       206, 206, 207, 207, 208, 208, 209, 209,
-       210, 211, 211, 212, 213, 213, 214, 215,
-       216, 216, 217, 218, 219, 220, 221, 222,
-       223, 224, 225, 226, 227, 228, 229, 230,
-       231, 232, 233, 235, 236, 237, 238, 239,
-       240, 241, 242, 243, 244, 245, 246, 247,
-       248, 249, 250, 251, 252, 253, 254, 255
-};
-#endif
-
-static p_tegra_dc_bl_output bl_output = pluto_bl_output_measured;
-
-static struct tegra_dsi_cmd dsi_init_cmd[] = {
-#if PANEL_5_LG_720_1280
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_dsi_config),
-
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_disp_ctrl1),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_disp_ctrl2),
-
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_internal_clk),
-
-       /*  panel power control 1 */
-       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xc1, 0x0),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_pwr_ctrl3),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_pwr_ctrl4),
-
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_positive_gamma_red),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_negetive_gamma_red),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_positive_gamma_green),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_negetive_gamma_green),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_positive_gamma_blue),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_negetive_gamma_blue),
-
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, DSI_DCS_SET_ADDR_MODE, 0x08),
-
-       /* panel OTP 2 */
-       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xf9, 0x0),
-
-       /* panel CE 1 */
-       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0x70, 0x0),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce2),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce3),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce4),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce5),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce6),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce7),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce8),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce9),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce10),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce11),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce12),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce13),
-
-       /* panel power control 2 */
-       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xc2, 0x02),
-       DSI_DLY_MS(20),
-
-       /* panel power control 2 */
-       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xc2, 0x06),
-       DSI_DLY_MS(20),
-
-       /* panel power control 2 */
-       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xc2, 0x4e),
-       DSI_DLY_MS(100),
-
-       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_EXIT_SLEEP_MODE, 0x0),
-       DSI_DLY_MS(20),
-
-       /* panel OTP 2 */
-       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xf9, 0x80),
-       DSI_DLY_MS(20),
-
-       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_SET_DISPLAY_ON, 0x0),
-#endif
-
-#if PANEL_4_7_JDI_720_1280
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFF, 0xEE),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x26, 0x08),
-       DSI_DLY_MS(10),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x26, 0x00),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFF, 0x00),
-       DSI_DLY_MS(15),
-       DSI_GPIO_SET(DSI_PANEL_RST_GPIO, 1),
-       DSI_DLY_MS(10),
-       DSI_GPIO_SET(DSI_PANEL_RST_GPIO, 0),
-       DSI_DLY_MS(20),
-       DSI_GPIO_SET(DSI_PANEL_RST_GPIO, 1),
-       DSI_DLY_MS(100),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xBA, 0x02),
-       DSI_DLY_MS(5),
-#if (DC_CTRL_MODE & TEGRA_DC_OUT_ONE_SHOT_MODE)
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xC2, 0x08),
-#else
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xC2, 0x03),
-#endif
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFF, 0x04),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x09, 0x00),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x0A, 0x00),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFB, 0x01),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFF, 0xEE),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x12, 0x53),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x13, 0x05),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x6A, 0x60),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFB, 0x01),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFF, 0x00),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x3A, 0x77),
-       DSI_DLY_MS(5),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_EXIT_SLEEP_MODE, 0x00),
-       DSI_DLY_MS(2000),
-#if (DC_CTRL_MODE & TEGRA_DC_OUT_ONE_SHOT_MODE)
-       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, DSI_DCS_SET_TEARING_EFFECT_ON, 0),
-#endif
-       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_SET_DISPLAY_ON, 0x00),
-       DSI_DLY_MS(150),
-#endif
-
-#if PANEL_5_SHARP_1080p
-       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xb0, 0x04),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_NO_OP, 0x0),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_NO_OP, 0x0),
-       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xd6, 0x01),
-       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_internal),
-       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0x53, 0x04),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_SET_DISPLAY_ON, 0x0),
-       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_EXIT_SLEEP_MODE, 0x0),
-#endif
-};
-
-static struct tegra_dsi_out pluto_dsi = {
-#if PANEL_4_7_JDI_720_1280
-       .n_data_lanes = 3,
-       .dsi_instance = DSI_INSTANCE_1,
-       .rated_refresh_rate = 60,
-       .refresh_rate = 60,
-       .suspend_aggr = DSI_HOST_SUSPEND_LV2,
-       .video_data_type = TEGRA_DSI_VIDEO_TYPE_COMMAND_MODE,
-       .video_clock_mode = TEGRA_DSI_VIDEO_CLOCK_TX_ONLY,
-#else
-       .n_data_lanes = 4,
-#if    PANEL_5_SHARP_1080p
-       .dsi_instance = DSI_INSTANCE_1,
-#else
-       .dsi_instance = DSI_INSTANCE_0,
-#endif
-       .refresh_rate = 60,
-       .video_data_type = TEGRA_DSI_VIDEO_TYPE_VIDEO_MODE,
-       .video_clock_mode = TEGRA_DSI_VIDEO_CLOCK_CONTINUOUS,
-       .video_burst_mode = TEGRA_DSI_VIDEO_NONE_BURST_MODE_WITH_SYNC_END,
-#endif
-       .controller_vs = DSI_VS_1,
-       .pixel_format = TEGRA_DSI_PIXEL_FORMAT_24BIT_P,
-       .virtual_channel = TEGRA_DSI_VIRTUAL_CHANNEL_0,
-
-       .panel_reset = DSI_PANEL_RESET,
-       .power_saving_suspend = true,
-       .dsi_init_cmd = dsi_init_cmd,
-       .n_init_cmd = ARRAY_SIZE(dsi_init_cmd),
-};
-
-static int pluto_dsi_regulator_get(struct device *dev)
-{
-       int err = 0;
-
-       if (dsi_reg_requested)
-               return 0;
-
-#if PANEL_5_LG_720_1280 || PANEL_4_7_JDI_720_1280
-       avdd_lcd_3v0_2v8 = regulator_get(dev, "avdd_lcd");
-       if (IS_ERR_OR_NULL(avdd_lcd_3v0_2v8)) {
-               pr_err("avdd_lcd regulator get failed\n");
-               err = PTR_ERR(avdd_lcd_3v0_2v8);
-               avdd_lcd_3v0_2v8 = NULL;
-               goto fail;
-       }
-#endif
-
-#if PANEL_5_LG_720_1280 || PANEL_4_7_JDI_720_1280 || PANEL_5_SHARP_1080p
-       vdd_lcd_s_1v8 = regulator_get(dev, "vdd_lcd_1v8_s");
-       if (IS_ERR_OR_NULL(vdd_lcd_s_1v8)) {
-               pr_err("vdd_lcd_1v8_s regulator get failed\n");
-               err = PTR_ERR(vdd_lcd_s_1v8);
-               vdd_lcd_s_1v8 = NULL;
-               goto fail;
-       }
-
-       vdd_sys_bl_3v7 = regulator_get(dev, "vdd_sys_bl");
-       if (IS_ERR_OR_NULL(vdd_sys_bl_3v7)) {
-               pr_err("vdd_sys_bl regulator get failed\n");
-               err = PTR_ERR(vdd_sys_bl_3v7);
-               vdd_sys_bl_3v7 = NULL;
-               goto fail;
-       }
-#endif
-
-       dsi_reg_requested = true;
-       return 0;
-fail:
-       return err;
-}
-
-static int pluto_dsi_gpio_get(void)
-{
-       int err = 0;
-
-       if (dsi_gpio_requested)
-               return 0;
-
-       err = gpio_request(DSI_PANEL_RST_GPIO, "panel rst");
-       if (err < 0) {
-               pr_err("panel reset gpio request failed\n");
-               goto fail;
-       }
-
-       err = gpio_request(DSI_PANEL_BL_EN_GPIO, "panel backlight");
-       if (err < 0) {
-               pr_err("panel backlight gpio request failed\n");
-               goto fail;
-       }
-
-#if PANEL_5_LG_720_1280
-       err = gpio_request(DSI_PANEL_BL_PWM, "panel pwm");
-       if (err < 0) {
-               pr_err("panel backlight pwm gpio request failed\n");
-               goto fail;
-       }
-#endif
-
-       dsi_gpio_requested = true;
-       return 0;
-fail:
-       return err;
-}
-
-static int pluto_dsi_panel_enable(struct device *dev)
-{
-       int err = 0;
-
-       err = pluto_dsi_regulator_get(dev);
-       if (err < 0) {
-               pr_err("dsi regulator get failed\n");
-               goto fail;
-       }
-
-       err = pluto_dsi_gpio_get();
-       if (err < 0) {
-               pr_err("dsi gpio request failed\n");
-               goto fail;
-       }
-
-       gpio_direction_output(DSI_PANEL_RST_GPIO, 0);
-
-       if (avdd_lcd_3v0_2v8) {
-               err = regulator_enable(avdd_lcd_3v0_2v8);
-               if (err < 0) {
-                       pr_err("avdd_lcd regulator enable failed\n");
-                       goto fail;
-               }
-#if PANEL_5_LG_720_1280
-               regulator_set_voltage(avdd_lcd_3v0_2v8, 2800000, 2800000);
-#endif
-#if PANEL_4_7_JDI_720_1280
-               regulator_set_voltage(avdd_lcd_3v0_2v8, 3000000, 3000000);
-#endif
-       }
-       usleep_range(3000, 5000);
-
-       if (vdd_lcd_s_1v8) {
-               err = regulator_enable(vdd_lcd_s_1v8);
-               if (err < 0) {
-                       pr_err("vdd_lcd_1v8_s regulator enable failed\n");
-                       goto fail;
-               }
-       }
-       usleep_range(3000, 5000);
-
-       if (vdd_sys_bl_3v7) {
-               err = regulator_enable(vdd_sys_bl_3v7);
-               if (err < 0) {
-                       pr_err("vdd_sys_bl regulator enable failed\n");
-                       goto fail;
-               }
-       }
-       usleep_range(3000, 5000);
-
-#if DSI_PANEL_RESET
-       gpio_set_value(DSI_PANEL_RST_GPIO, 1);
-#if !PANEL_5_SHARP_1080p
-       usleep_range(1000, 5000);
-       gpio_set_value(DSI_PANEL_RST_GPIO, 0);
-       usleep_range(1000, 5000);
-       gpio_set_value(DSI_PANEL_RST_GPIO, 1);
-#endif
-       msleep(20);
-#endif
-
-       gpio_direction_output(DSI_PANEL_BL_EN_GPIO, 1);
-       is_bl_powered = true;
-
-       return 0;
-fail:
-       return err;
-}
-
-static int pluto_dsi_panel_disable(void)
-{
-       gpio_set_value(DSI_PANEL_BL_EN_GPIO, 0);
-       is_bl_powered = false;
-#if PANEL_5_LG_720_1280 || PANEL_5_SHARP_1080p
-       gpio_set_value(DSI_PANEL_RST_GPIO, 0);
-#endif
-
-       if (vdd_sys_bl_3v7)
-               regulator_disable(vdd_sys_bl_3v7);
-
-       if (vdd_lcd_s_1v8)
-               regulator_disable(vdd_lcd_s_1v8);
-
-       if (avdd_lcd_3v0_2v8)
-               regulator_disable(avdd_lcd_3v0_2v8);
-
-       return 0;
-}
-
-static int pluto_dsi_panel_postsuspend(void)
-{
-       /* TODO */
-       return 0;
-}
-
-static struct tegra_dc_mode pluto_dsi_modes[] = {
-#if PANEL_5_LG_720_1280
-       {
-               .pclk = 10000000,
-               .h_ref_to_sync = 4,
-               .v_ref_to_sync = 1,
-               .h_sync_width = 4,
-               .v_sync_width = 4,
-               .h_back_porch = 112,
-               .v_back_porch = 7,
-               .h_active = 720,
-               .v_active = 1280,
-               .h_front_porch = 12,
-               .v_front_porch = 20,
-       },
-#endif
-#if PANEL_4_7_JDI_720_1280
-       {
-               .pclk = 62625000,
-               .h_ref_to_sync = 2,
-               .v_ref_to_sync = 1,
-               .h_sync_width = 2,
-               .v_sync_width = 2,
-               .h_back_porch = 84,
-               .v_back_porch = 2,
-               .h_active = 720,
-               .v_active = 1280,
-               .h_front_porch = 4,
-               .v_front_porch = 4,
-       },
-#endif
-#if PANEL_5_SHARP_1080p
-       /* 1080x1920@60Hz */
-       {
-               .pclk = 10000000,
-               .h_ref_to_sync = 4,
-               .v_ref_to_sync = 1,
-               .h_sync_width = 10,
-               .v_sync_width = 2,
-               .h_back_porch = 50,
-               .v_back_porch = 4,
-               .h_active = 1080,
-               .v_active = 1920,
-               .h_front_porch = 100,
-               .v_front_porch = 4,
-       },
-       /* 1080x1920@53Hz */
-       {
-               .pclk = 10000000,
-               .h_ref_to_sync = 4,
-               .v_ref_to_sync = 1,
-               .h_sync_width = 10,
-               .v_sync_width = 2,
-               .h_back_porch = 50,
-               .v_back_porch = 4,
-               .h_active = 1080,
-               .v_active = 1920,
-               .h_front_porch = 100,
-               .v_front_porch = 259,
-       },
-
-#endif
-};
-
 static struct tegra_dc_sd_settings sd_settings;
 
 static struct tegra_dc_out pluto_disp1_out = {
        .type           = TEGRA_DC_OUT_DSI,
-       .dsi            = &pluto_dsi,
        .sd_settings    = &sd_settings,
-
-       .flags          = DC_CTRL_MODE,
-#if PANEL_4_7_JDI_720_1280 || PANEL_5_SHARP_1080p
-       .parent_clk     = "pll_d_out0",
-#endif
-
-       .modes          = pluto_dsi_modes,
-       .n_modes        = ARRAY_SIZE(pluto_dsi_modes),
-
-       .enable         = pluto_dsi_panel_enable,
-       .disable        = pluto_dsi_panel_disable,
-       .postsuspend    = pluto_dsi_panel_postsuspend,
-
-#if PANEL_5_LG_720_1280 || PANEL_5_SHARP_1080p
-       .width          = 62,
-       .height         = 110,
-#endif
-#if PANEL_4_7_JDI_720_1280
-       .width = 58,
-       .height = 103,
-#endif
 };
 
 static int pluto_hdmi_enable(struct device *dev)
@@ -804,186 +201,7 @@ static struct tegra_fb_data pluto_disp1_fb_data = {
        .win            = 0,
        .bits_per_pixel = 32,
        .flags          = TEGRA_FB_FLIP_ON_PROBE,
-#if PANEL_5_LG_720_1280 || PANEL_4_7_JDI_720_1280
-       .xres           = 720,
-       .yres           = 1280,
-#endif
-#if PANEL_5_SHARP_1080p
-       .xres           = 1080,
-       .yres           = 1920,
-#endif
-};
-
-#ifdef CONFIG_TEGRA_DC_CMU
-#if PANEL_5_LG_720_1280
-static struct tegra_dc_cmu pluto_lg_cmu = {
-       /* lut1 maps sRGB to linear space. */
-       {
-               0,    1,    2,    4,    5,    6,    7,    9,
-               10,   11,   12,   14,   15,   16,   18,   20,
-               21,   23,   25,   27,   29,   31,   33,   35,
-               37,   40,   42,   45,   48,   50,   53,   56,
-               59,   62,   66,   69,   72,   76,   79,   83,
-               87,   91,   95,   99,   103,  107,  112,  116,
-               121,  126,  131,  136,  141,  146,  151,  156,
-               162,  168,  173,  179,  185,  191,  197,  204,
-               210,  216,  223,  230,  237,  244,  251,  258,
-               265,  273,  280,  288,  296,  304,  312,  320,
-               329,  337,  346,  354,  363,  372,  381,  390,
-               400,  409,  419,  428,  438,  448,  458,  469,
-               479,  490,  500,  511,  522,  533,  544,  555,
-               567,  578,  590,  602,  614,  626,  639,  651,
-               664,  676,  689,  702,  715,  728,  742,  755,
-               769,  783,  797,  811,  825,  840,  854,  869,
-               884,  899,  914,  929,  945,  960,  976,  992,
-               1008, 1024, 1041, 1057, 1074, 1091, 1108, 1125,
-               1142, 1159, 1177, 1195, 1213, 1231, 1249, 1267,
-               1286, 1304, 1323, 1342, 1361, 1381, 1400, 1420,
-               1440, 1459, 1480, 1500, 1520, 1541, 1562, 1582,
-               1603, 1625, 1646, 1668, 1689, 1711, 1733, 1755,
-               1778, 1800, 1823, 1846, 1869, 1892, 1916, 1939,
-               1963, 1987, 2011, 2035, 2059, 2084, 2109, 2133,
-               2159, 2184, 2209, 2235, 2260, 2286, 2312, 2339,
-               2365, 2392, 2419, 2446, 2473, 2500, 2527, 2555,
-               2583, 2611, 2639, 2668, 2696, 2725, 2754, 2783,
-               2812, 2841, 2871, 2901, 2931, 2961, 2991, 3022,
-               3052, 3083, 3114, 3146, 3177, 3209, 3240, 3272,
-               3304, 3337, 3369, 3402, 3435, 3468, 3501, 3535,
-               3568, 3602, 3636, 3670, 3705, 3739, 3774, 3809,
-               3844, 3879, 3915, 3950, 3986, 4022, 4059, 4095,
-       },
-       /* csc */
-       {
-               0x10D, 0x3F3, 0x000, /* 1.05036053  -0.05066457 0.00030404 */
-               0x000, 0x0FC, 0x003, /* -0.00012137 0.98659651  0.01352485 */
-               0x002, 0x001, 0x0FC, /* 0.00722989  0.00559134  0.98717878 */
-       },
-       /* lut2 maps linear space to sRGB */
-       {
-               0,    1,    2,    2,    3,    4,    5,    6,
-               6,    7,    8,    9,    10,   10,   11,   12,
-               13,   13,   14,   15,   15,   16,   16,   17,
-               18,   18,   19,   19,   20,   20,   21,   21,
-               22,   22,   23,   23,   23,   24,   24,   25,
-               25,   25,   26,   26,   27,   27,   27,   28,
-               28,   29,   29,   29,   30,   30,   30,   31,
-               31,   31,   32,   32,   32,   33,   33,   33,
-               34,   34,   34,   34,   35,   35,   35,   36,
-               36,   36,   37,   37,   37,   37,   38,   38,
-               38,   38,   39,   39,   39,   40,   40,   40,
-               40,   41,   41,   41,   41,   42,   42,   42,
-               42,   43,   43,   43,   43,   43,   44,   44,
-               44,   44,   45,   45,   45,   45,   46,   46,
-               46,   46,   46,   47,   47,   47,   47,   48,
-               48,   48,   48,   48,   49,   49,   49,   49,
-               49,   50,   50,   50,   50,   50,   51,   51,
-               51,   51,   51,   52,   52,   52,   52,   52,
-               53,   53,   53,   53,   53,   54,   54,   54,
-               54,   54,   55,   55,   55,   55,   55,   55,
-               56,   56,   56,   56,   56,   57,   57,   57,
-               57,   57,   57,   58,   58,   58,   58,   58,
-               58,   59,   59,   59,   59,   59,   59,   60,
-               60,   60,   60,   60,   60,   61,   61,   61,
-               61,   61,   61,   62,   62,   62,   62,   62,
-               62,   63,   63,   63,   63,   63,   63,   64,
-               64,   64,   64,   64,   64,   64,   65,   65,
-               65,   65,   65,   65,   66,   66,   66,   66,
-               66,   66,   66,   67,   67,   67,   67,   67,
-               67,   67,   68,   68,   68,   68,   68,   68,
-               68,   69,   69,   69,   69,   69,   69,   69,
-               70,   70,   70,   70,   70,   70,   70,   71,
-               71,   71,   71,   71,   71,   71,   72,   72,
-               72,   72,   72,   72,   72,   72,   73,   73,
-               73,   73,   73,   73,   73,   74,   74,   74,
-               74,   74,   74,   74,   74,   75,   75,   75,
-               75,   75,   75,   75,   75,   76,   76,   76,
-               76,   76,   76,   76,   77,   77,   77,   77,
-               77,   77,   77,   77,   78,   78,   78,   78,
-               78,   78,   78,   78,   78,   79,   79,   79,
-               79,   79,   79,   79,   79,   80,   80,   80,
-               80,   80,   80,   80,   80,   81,   81,   81,
-               81,   81,   81,   81,   81,   81,   82,   82,
-               82,   82,   82,   82,   82,   82,   83,   83,
-               83,   83,   83,   83,   83,   83,   83,   84,
-               84,   84,   84,   84,   84,   84,   84,   84,
-               85,   85,   85,   85,   85,   85,   85,   85,
-               85,   86,   86,   86,   86,   86,   86,   86,
-               86,   86,   87,   87,   87,   87,   87,   87,
-               87,   87,   87,   88,   88,   88,   88,   88,
-               88,   88,   88,   88,   88,   89,   89,   89,
-               89,   89,   89,   89,   89,   89,   90,   90,
-               90,   90,   90,   90,   90,   90,   90,   90,
-               91,   91,   91,   91,   91,   91,   91,   91,
-               91,   91,   92,   92,   92,   92,   92,   92,
-               92,   92,   92,   92,   93,   93,   93,   93,
-               93,   93,   93,   93,   93,   93,   94,   94,
-               94,   94,   94,   94,   94,   94,   94,   94,
-               95,   95,   95,   95,   95,   95,   95,   95,
-               95,   95,   96,   96,   96,   96,   96,   96,
-               96,   96,   96,   96,   96,   97,   97,   97,
-               97,   97,   97,   97,   97,   97,   97,   98,
-               98,   98,   98,   98,   98,   98,   98,   98,
-               98,   98,   99,   99,   99,   99,   99,   99,
-               99,   100,  101,  101,  102,  103,  103,  104,
-               105,  105,  106,  107,  107,  108,  109,  109,
-               110,  111,  111,  112,  113,  113,  114,  115,
-               115,  116,  116,  117,  118,  118,  119,  119,
-               120,  120,  121,  122,  122,  123,  123,  124,
-               124,  125,  126,  126,  127,  127,  128,  128,
-               129,  129,  130,  130,  131,  131,  132,  132,
-               133,  133,  134,  134,  135,  135,  136,  136,
-               137,  137,  138,  138,  139,  139,  140,  140,
-               141,  141,  142,  142,  143,  143,  144,  144,
-               145,  145,  145,  146,  146,  147,  147,  148,
-               148,  149,  149,  150,  150,  150,  151,  151,
-               152,  152,  153,  153,  153,  154,  154,  155,
-               155,  156,  156,  156,  157,  157,  158,  158,
-               158,  159,  159,  160,  160,  160,  161,  161,
-               162,  162,  162,  163,  163,  164,  164,  164,
-               165,  165,  166,  166,  166,  167,  167,  167,
-               168,  168,  169,  169,  169,  170,  170,  170,
-               171,  171,  172,  172,  172,  173,  173,  173,
-               174,  174,  174,  175,  175,  176,  176,  176,
-               177,  177,  177,  178,  178,  178,  179,  179,
-               179,  180,  180,  180,  181,  181,  182,  182,
-               182,  183,  183,  183,  184,  184,  184,  185,
-               185,  185,  186,  186,  186,  187,  187,  187,
-               188,  188,  188,  189,  189,  189,  189,  190,
-               190,  190,  191,  191,  191,  192,  192,  192,
-               193,  193,  193,  194,  194,  194,  195,  195,
-               195,  196,  196,  196,  196,  197,  197,  197,
-               198,  198,  198,  199,  199,  199,  200,  200,
-               200,  200,  201,  201,  201,  202,  202,  202,
-               202,  203,  203,  203,  204,  204,  204,  205,
-               205,  205,  205,  206,  206,  206,  207,  207,
-               207,  207,  208,  208,  208,  209,  209,  209,
-               209,  210,  210,  210,  211,  211,  211,  211,
-               212,  212,  212,  213,  213,  213,  213,  214,
-               214,  214,  214,  215,  215,  215,  216,  216,
-               216,  216,  217,  217,  217,  217,  218,  218,
-               218,  219,  219,  219,  219,  220,  220,  220,
-               220,  221,  221,  221,  221,  222,  222,  222,
-               223,  223,  223,  223,  224,  224,  224,  224,
-               225,  225,  225,  225,  226,  226,  226,  226,
-               227,  227,  227,  227,  228,  228,  228,  228,
-               229,  229,  229,  229,  230,  230,  230,  230,
-               231,  231,  231,  231,  232,  232,  232,  232,
-               233,  233,  233,  233,  234,  234,  234,  234,
-               235,  235,  235,  235,  236,  236,  236,  236,
-               237,  237,  237,  237,  238,  238,  238,  238,
-               239,  239,  239,  239,  240,  240,  240,  240,
-               240,  241,  241,  241,  241,  242,  242,  242,
-               242,  243,  243,  243,  243,  244,  244,  244,
-               244,  244,  245,  245,  245,  245,  246,  246,
-               246,  246,  247,  247,  247,  247,  247,  248,
-               248,  248,  248,  249,  249,  249,  249,  249,
-               250,  250,  250,  250,  251,  251,  251,  251,
-               251,  252,  252,  252,  252,  253,  253,  253,
-               253,  253,  254,  254,  254,  254,  255,  255,
-       },
 };
-#endif
-#endif
 
 static struct tegra_dc_platform_data pluto_disp1_pdata = {
        .flags          = TEGRA_DC_FLAG_ENABLED,
@@ -992,9 +210,6 @@ static struct tegra_dc_platform_data pluto_disp1_pdata = {
        .emc_clk_rate   = 204000000,
 #ifdef CONFIG_TEGRA_DC_CMU
        .cmu_enable     = 1,
-#if PANEL_5_LG_720_1280
-       .cmu = &pluto_lg_cmu,
-#endif
 #endif
 };
 
@@ -1070,110 +285,6 @@ static struct platform_device pluto_nvmap_device __initdata = {
        },
 };
 
-static int __maybe_unused pluto_disp1_bl_notify(struct device *unused,
-                                               int brightness)
-{
-       int cur_sd_brightness = atomic_read(&sd_brightness);
-
-       /* Apply any backlight response curve */
-       if (brightness > 255)
-               pr_info("Error: Brightness > 255!\n");
-       else
-               brightness = bl_output[brightness];
-
-       /* SD brightness is a percentage */
-       brightness = (brightness * cur_sd_brightness) / 255;
-
-       return brightness;
-}
-
-static int __maybe_unused pluto_disp1_check_fb(struct device *dev,
-                                            struct fb_info *info)
-{
-       return info->device == &pluto_disp1_device.dev;
-}
-
-static bool __maybe_unused pluto_disp1_check_bl_power(void)
-{
-       return is_bl_powered;
-}
-
-#if PANEL_4_7_JDI_720_1280
-static struct platform_pwm_backlight_data pluto_disp1_bl_data = {
-       .pwm_id         = 1,
-       .max_brightness = 255,
-       .dft_brightness = 77,
-       .pwm_period_ns  = 40000,
-       .notify         = pluto_disp1_bl_notify,
-       /* Only toggle backlight on fb blank notifications for disp1 */
-       .check_fb       = pluto_disp1_check_fb,
-};
-
-static struct platform_device pluto_disp1_bl_device = {
-       .name   = "pwm-backlight",
-       .id     = -1,
-       .dev    = {
-               .platform_data = &pluto_disp1_bl_data,
-       },
-};
-#elif PANEL_5_LG_720_1280 || PANEL_5_SHARP_1080p
-static struct led_info pluto_max8831_leds[] = {
-       [MAX8831_ID_LED3] = {
-               .name = "max8831:red:pluto",
-       },
-       [MAX8831_ID_LED4] = {
-               .name = "max8831:green:pluto",
-       },
-       [MAX8831_ID_LED5] = {
-               .name = "max8831:blue:pluto",
-       },
-};
-
-static struct platform_max8831_backlight_data pluto_max8831_bl_data = {
-       .id     = -1,
-       .name   = "pluto_display_bl",
-       .max_brightness = MAX8831_BL_LEDS_MAX_CURR,
-       .dft_brightness = 100,
-       .notify = pluto_disp1_bl_notify,
-       .is_powered = pluto_disp1_check_bl_power,
-};
-
-static struct max8831_subdev_info pluto_max8831_subdevs[] = {
-       {
-               .id = MAX8831_ID_LED3,
-               .name = "max8831_led_bl",
-               .platform_data = &pluto_max8831_leds[MAX8831_ID_LED3],
-               .pdata_size = sizeof(pluto_max8831_leds[MAX8831_ID_LED3]),
-       }, {
-               .id = MAX8831_ID_LED4,
-               .name = "max8831_led_bl",
-               .platform_data = &pluto_max8831_leds[MAX8831_ID_LED4],
-               .pdata_size = sizeof(pluto_max8831_leds[MAX8831_ID_LED4]),
-       }, {
-               .id = MAX8831_ID_LED5,
-               .name = "max8831_led_bl",
-               .platform_data = &pluto_max8831_leds[MAX8831_ID_LED5],
-               .pdata_size = sizeof(pluto_max8831_leds[MAX8831_ID_LED5]),
-       }, {
-               .id = MAX8831_BL_LEDS,
-               .name = "max8831_display_bl",
-               .platform_data = &pluto_max8831_bl_data,
-               .pdata_size = sizeof(pluto_max8831_bl_data),
-       },
-};
-
-static struct max8831_platform_data pluto_max8831 = {
-       .num_subdevs = ARRAY_SIZE(pluto_max8831_subdevs),
-       .subdevs = pluto_max8831_subdevs,
-};
-
-static struct i2c_board_info pluto_i2c_led_info = {
-       .type           = "max8831",
-       .addr           = 0x4d,
-       .platform_data  = &pluto_max8831,
-};
-#endif
-
 static struct tegra_dc_sd_settings pluto_sd_settings = {
        .enable = 1, /* enabled by default */
        .use_auto_pwm = false,
@@ -1221,11 +332,6 @@ static struct tegra_dc_sd_settings pluto_sd_settings = {
                        },
                },
        .sd_brightness = &sd_brightness,
-#if PANEL_4_7_JDI_720_1280
-       .bl_device_name = "pwm-backlight",
-#elif PANEL_5_LG_720_1280 || PANEL_5_SHARP_1080p
-       .bl_device_name = "max8831_display_bl",
-#endif
        .use_vpulse2 = true,
 };
 
@@ -1234,9 +340,39 @@ int __init pluto_panel_init(void)
        int err = 0;
        struct resource __maybe_unused *res;
        struct platform_device *phost1x;
-
+       struct tegra_panel *panel;
        sd_settings = pluto_sd_settings;
 
+#if PANEL_L_720P_5
+       panel = &dsi_l_720p_5;
+#elif PANEL_J_720P_4_7
+       panel = &dsi_j_720p_4_7;
+#elif PANEL_S_1080P_5
+       panel = &dsi_s_1080p_5;
+#endif
+
+       if (panel->init_sd_settings)
+               panel->init_sd_settings(&pluto_sd_settings);
+
+       if (panel->init_dc_out)
+               panel->init_dc_out(&pluto_disp1_out);
+
+       if (panel->init_fb_data)
+               panel->init_fb_data(&pluto_disp1_fb_data);
+
+       if (panel->init_cmu_data)
+               panel->init_cmu_data(&pluto_disp1_pdata);
+
+       if (panel->set_disp_device)
+               panel->set_disp_device(&pluto_disp1_device);
+
+       if (panel->init_resources)
+               panel->init_resources(pluto_disp1_resources,
+                       ARRAY_SIZE(pluto_disp1_resources));
+
+       if (panel->register_bl_dev)
+               panel->register_bl_dev();
+
 #ifdef CONFIG_TEGRA_NVMAP
        pluto_carveouts[1].base = tegra_carveout_start;
        pluto_carveouts[1].size = tegra_carveout_size;
@@ -1286,29 +422,6 @@ int __init pluto_panel_init(void)
                return err;
        }
 
-#if PANEL_4_7_JDI_720_1280
-       err = platform_device_register(&tegra_pwfm1_device);
-       if (err) {
-               pr_err("disp1 pwm device registration failed");
-               return err;
-       }
-
-       err = platform_device_register(&pluto_disp1_bl_device);
-       if (err) {
-               pr_err("disp1 bl device registration failed");
-               return err;
-       }
-
-       err = gpio_request(DSI_PANEL_BL_PWM, "panel pwm");
-       if (err < 0) {
-               pr_err("panel backlight pwm gpio request failed\n");
-               return err;
-       }
-       gpio_free(DSI_PANEL_BL_PWM);
-#elif PANEL_5_LG_720_1280 || PANEL_5_SHARP_1080p
-       i2c_register_board_info(1, &pluto_i2c_led_info, 1);
-#endif
-
 #ifdef CONFIG_TEGRA_NVAVP
        nvavp_device.dev.parent = &phost1x->dev;
        err = platform_device_register(&nvavp_device);
diff --git a/arch/arm/mach-tegra/panel-j-720p-4-7.c b/arch/arm/mach-tegra/panel-j-720p-4-7.c
new file mode 100644 (file)
index 0000000..78c7318
--- /dev/null
@@ -0,0 +1,436 @@
+/*
+ * arch/arm/mach-tegra/panel-j-720p-4-7.c
+ *
+  * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mach/dc.h>
+#include <mach/iomap.h>
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/tegra_pwm_bl.h>
+#include <linux/regulator/consumer.h>
+#include <linux/pwm_backlight.h>
+#include <linux/max8831_backlight.h>
+#include <linux/leds.h>
+#include <linux/ioport.h>
+
+#include "gpio-names.h"
+#include "board-panel.h"
+#include "devices.h"
+
+#define DSI_PANEL_RESET         0
+#define DSI_PANEL_RST_GPIO      TEGRA_GPIO_PH5
+#define DSI_PANEL_BL_EN_GPIO    TEGRA_GPIO_PH2
+#define DSI_PANEL_BL_PWM        TEGRA_GPIO_PH1
+
+#define DC_CTRL_MODE            (TEGRA_DC_OUT_ONE_SHOT_MODE | \
+                        TEGRA_DC_OUT_ONE_SHOT_LP_MODE)
+
+static struct regulator *vdd_lcd_s_1v8;
+static struct regulator *vdd_sys_bl_3v7;
+static struct regulator *avdd_lcd_3v0_2v8;
+
+
+static bool dsi_j_720p_4_7_reg_requested;
+static bool dsi_j_720p_4_7_gpio_requested;
+static bool is_bl_powered;
+static struct platform_device *disp_device;
+
+static tegra_dc_bl_output dsi_j_720p_4_7_bl_response_curve = {
+       0, 1, 2, 3, 4, 5, 6, 7,
+       8, 9, 10, 11, 12, 13, 14, 15,
+       16, 18, 19, 20, 21, 22, 23, 25,
+       26, 27, 28, 30, 31, 32, 33, 35,
+       36, 38, 39, 41, 42, 43, 45, 46,
+       48, 49, 51, 52, 54, 55, 57, 58,
+       60, 61, 63, 64, 66, 67, 68, 70,
+       71, 72, 74, 75, 77, 78, 79, 80,
+       81, 82, 83, 85, 86, 87, 88, 89,
+       90, 90, 91, 92, 93, 93, 94, 95,
+       96, 96, 96, 97, 97, 97, 97, 98,
+       98, 98, 98, 99, 100, 101, 101, 102,
+       103, 104, 104, 105, 106, 107, 108, 109,
+       110, 112, 113, 114, 115, 116, 117, 119,
+       120, 121, 122, 123, 125, 126, 127, 128,
+       129, 131, 132, 133, 134, 135, 136, 137,
+       138, 140, 141, 142, 142, 143, 144, 145,
+       146, 147, 148, 149, 149, 150, 151, 152,
+       153, 154, 154, 155, 156, 157, 158, 159,
+       160, 162, 163, 164, 165, 167, 168, 169,
+       170, 171, 172, 173, 173, 174, 175, 176,
+       176, 177, 178, 179, 179, 180, 181, 182,
+       182, 183, 184, 184, 185, 186, 186, 187,
+       188, 188, 189, 189, 190, 190, 191, 192,
+       193, 194, 195, 195, 196, 197, 198, 199,
+       200, 201, 202, 203, 203, 204, 205, 206,
+       207, 208, 209, 210, 211, 212, 213, 213,
+       214, 215, 216, 217, 218, 219, 220, 221,
+       222, 224, 225, 226, 227, 228, 229, 230,
+       231, 232, 233, 234, 235, 236, 237, 238,
+       239, 240, 241, 242, 243, 244, 246, 247,
+       248, 249, 250, 251, 252, 253, 254, 255
+};
+
+static int __maybe_unused dsi_j_720p_4_7_bl_notify(struct device *unused,
+                                                       int brightness)
+{
+       int cur_sd_brightness = atomic_read(&sd_brightness);
+
+       /* Apply any backlight response curve */
+       if (brightness > 255)
+               pr_info("Error: Brightness > 255!\n");
+       else
+               brightness = dsi_j_720p_4_7_bl_response_curve[brightness];
+
+       /* SD brightness is a percentage */
+       brightness = (brightness * cur_sd_brightness) / 255;
+
+       return brightness;
+}
+
+static int __maybe_unused dsi_j_720p_4_7_check_fb(struct device *dev,
+                                            struct fb_info *info)
+{
+       return info->device == &disp_device->dev;
+}
+
+/*
+       JDI uses Platform blacklight device
+*/
+
+static struct platform_pwm_backlight_data dsi_j_720p_4_7_bl_data = {
+       .pwm_id         = 1,
+       .max_brightness = 255,
+       .dft_brightness = 77,
+       .pwm_period_ns  = 40000,
+       .notify         = dsi_j_720p_4_7_bl_notify,
+       .check_fb       = dsi_j_720p_4_7_check_fb,
+};
+
+static struct platform_device dsi_j_720p_4_7_bl_device = {
+       .name   = "pwm-backlight",
+       .id     = -1,
+       .dev    = {
+               .platform_data = &dsi_j_720p_4_7_bl_data,
+       },
+};
+static int dsi_j_720p_4_7_register_bl_dev(void)
+{
+       int err = 0;
+       err = platform_device_register(&tegra_pwfm1_device);
+       if (err) {
+               pr_err("disp1 pwm device registration failed");
+               return err;
+       }
+
+       err = platform_device_register(&dsi_j_720p_4_7_bl_device);
+       if (err) {
+               pr_err("disp1 bl device registration failed");
+               return err;
+       }
+
+       err = gpio_request(DSI_PANEL_BL_PWM, "panel pwm");
+       if (err < 0) {
+               pr_err("panel backlight pwm gpio request failed\n");
+               return err;
+       }
+       gpio_free(DSI_PANEL_BL_PWM);
+       return err;
+}
+struct tegra_dc_mode dsi_j_720p_4_7_modes[] = {
+       {
+               .pclk = 62625000,
+               .h_ref_to_sync = 2,
+               .v_ref_to_sync = 1,
+               .h_sync_width = 2,
+               .v_sync_width = 2,
+               .h_back_porch = 84,
+               .v_back_porch = 2,
+               .h_active = 720,
+               .v_active = 1280,
+               .h_front_porch = 4,
+               .v_front_porch = 4,
+       },
+};
+static int dsi_j_720p_4_7_reg_get(void)
+{
+       int err = 0;
+
+       if (dsi_j_720p_4_7_reg_requested)
+               return 0;
+
+       avdd_lcd_3v0_2v8 = regulator_get(NULL, "avdd_lcd");
+       if (IS_ERR_OR_NULL(avdd_lcd_3v0_2v8)) {
+               pr_err("avdd_lcd regulator get failed\n");
+               err = PTR_ERR(avdd_lcd_3v0_2v8);
+               avdd_lcd_3v0_2v8 = NULL;
+               goto fail;
+       }
+
+       vdd_lcd_s_1v8 = regulator_get(NULL, "vdd_lcd_1v8_s");
+       if (IS_ERR_OR_NULL(vdd_lcd_s_1v8)) {
+               pr_err("vdd_lcd_1v8_s regulator get failed\n");
+               err = PTR_ERR(vdd_lcd_s_1v8);
+               vdd_lcd_s_1v8 = NULL;
+               goto fail;
+       }
+
+       vdd_sys_bl_3v7 = regulator_get(NULL, "vdd_sys_bl");
+       if (IS_ERR_OR_NULL(vdd_sys_bl_3v7)) {
+               pr_err("vdd_sys_bl regulator get failed\n");
+               err = PTR_ERR(vdd_sys_bl_3v7);
+               vdd_sys_bl_3v7 = NULL;
+               goto fail;
+       }
+
+       dsi_j_720p_4_7_reg_requested = true;
+       return 0;
+fail:
+       return err;
+}
+
+static int dsi_j_720p_4_7_gpio_get(void)
+{
+       int err = 0;
+
+       if (dsi_j_720p_4_7_gpio_requested)
+               return 0;
+
+       err = gpio_request(DSI_PANEL_RST_GPIO, "panel rst");
+       if (err < 0) {
+               pr_err("panel reset gpio request failed\n");
+               goto fail;
+       }
+
+       err = gpio_request(DSI_PANEL_BL_EN_GPIO, "panel backlight");
+       if (err < 0) {
+               pr_err("panel backlight gpio request failed\n");
+               goto fail;
+       }
+
+
+
+       dsi_j_720p_4_7_gpio_requested = true;
+       return 0;
+fail:
+       return err;
+}
+
+static int dsi_j_720p_4_7_enable(struct device *dev)
+{
+       int err = 0;
+
+       err = dsi_j_720p_4_7_reg_get();
+       if (err < 0) {
+               pr_err("dsi regulator get failed\n");
+               goto fail;
+       }
+
+       err = dsi_j_720p_4_7_gpio_get();
+       if (err < 0) {
+               pr_err("dsi gpio request failed\n");
+               goto fail;
+       }
+       gpio_direction_output(DSI_PANEL_RST_GPIO, 0);
+
+       if (avdd_lcd_3v0_2v8) {
+               err = regulator_enable(avdd_lcd_3v0_2v8);
+               if (err < 0) {
+                       pr_err("avdd_lcd regulator enable failed\n");
+                       goto fail;
+               }
+               regulator_set_voltage(avdd_lcd_3v0_2v8, 3000000, 3000000);
+       }
+
+       usleep_range(3000, 5000);
+
+       if (vdd_lcd_s_1v8) {
+               err = regulator_enable(vdd_lcd_s_1v8);
+               if (err < 0) {
+                       pr_err("vdd_lcd_1v8_s regulator enable failed\n");
+                       goto fail;
+               }
+       }
+       usleep_range(3000, 5000);
+
+       if (vdd_sys_bl_3v7) {
+               err = regulator_enable(vdd_sys_bl_3v7);
+               if (err < 0) {
+                       pr_err("vdd_sys_bl regulator enable failed\n");
+                       goto fail;
+               }
+       }
+       usleep_range(3000, 5000);
+
+#if DSI_PANEL_RESET
+       gpio_set_value(DSI_PANEL_RST_GPIO, 1);
+       usleep_range(1000, 5000);
+       gpio_set_value(DSI_PANEL_RST_GPIO, 0);
+       usleep_range(1000, 5000);
+       gpio_set_value(DSI_PANEL_RST_GPIO, 1);
+       msleep(20);
+#endif
+
+       gpio_direction_output(DSI_PANEL_BL_EN_GPIO, 1);
+       is_bl_powered = true;
+       return 0;
+fail:
+       return err;
+}
+
+
+static struct tegra_dsi_cmd dsi_j_720p_4_7_init_cmd[] = {
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFF, 0xEE),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x26, 0x08),
+       DSI_DLY_MS(10),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x26, 0x00),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFF, 0x00),
+       DSI_DLY_MS(15),
+       DSI_GPIO_SET(DSI_PANEL_RST_GPIO, 1),
+       DSI_DLY_MS(10),
+       DSI_GPIO_SET(DSI_PANEL_RST_GPIO, 0),
+       DSI_DLY_MS(20),
+       DSI_GPIO_SET(DSI_PANEL_RST_GPIO, 1),
+       DSI_DLY_MS(100),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xBA, 0x02),
+       DSI_DLY_MS(5),
+#if (DC_CTRL_MODE & TEGRA_DC_OUT_ONE_SHOT_MODE)
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xC2, 0x08),
+#else
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xC2, 0x03),
+#endif
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFF, 0x04),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x09, 0x00),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x0A, 0x00),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFB, 0x01),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFF, 0xEE),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x12, 0x53),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x13, 0x05),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x6A, 0x60),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFB, 0x01),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0xFF, 0x00),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, 0x3A, 0x77),
+       DSI_DLY_MS(5),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_EXIT_SLEEP_MODE, 0x00),
+       DSI_DLY_MS(2000),
+#if (DC_CTRL_MODE & TEGRA_DC_OUT_ONE_SHOT_MODE)
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, DSI_DCS_SET_TEARING_EFFECT_ON, 0),
+#endif
+       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_SET_DISPLAY_ON, 0x00),
+       DSI_DLY_MS(150),
+};
+
+static struct tegra_dsi_out dsi_j_720p_4_7_pdata = {
+       .n_data_lanes = 3,
+
+       .dsi_instance = DSI_INSTANCE_1,
+
+       .rated_refresh_rate = 60,
+       .refresh_rate = 60,
+       .suspend_aggr = DSI_HOST_SUSPEND_LV2,
+       .video_data_type = TEGRA_DSI_VIDEO_TYPE_COMMAND_MODE,
+       .video_clock_mode = TEGRA_DSI_VIDEO_CLOCK_TX_ONLY,
+       .controller_vs = DSI_VS_1,
+       .pixel_format = TEGRA_DSI_PIXEL_FORMAT_24BIT_P,
+       .virtual_channel = TEGRA_DSI_VIRTUAL_CHANNEL_0,
+
+       .panel_reset = DSI_PANEL_RESET,
+       .power_saving_suspend = true,
+       .dsi_init_cmd = dsi_j_720p_4_7_init_cmd,
+       .n_init_cmd = ARRAY_SIZE(dsi_j_720p_4_7_init_cmd),
+};
+
+static int dsi_j_720p_4_7_disable(void)
+{
+       gpio_set_value(DSI_PANEL_BL_EN_GPIO, 0);
+       is_bl_powered = false;
+       if (vdd_sys_bl_3v7)
+               regulator_disable(vdd_sys_bl_3v7);
+
+       if (vdd_lcd_s_1v8)
+               regulator_disable(vdd_lcd_s_1v8);
+
+       if (avdd_lcd_3v0_2v8)
+               regulator_disable(avdd_lcd_3v0_2v8);
+
+       return 0;
+}
+
+static void dsi_j_720p_4_7_set_disp_device(
+       struct platform_device *pluto_display_device)
+{
+       disp_device = pluto_display_device;
+}
+
+static void dsi_j_720p_4_7_resources_init(struct resource *
+resources, int n_resources)
+{
+       int i;
+       for (i = 0; i < n_resources; i++) {
+               struct resource *r = &resources[i];
+               if (resource_type(r) == IORESOURCE_MEM &&
+                       !strcmp(r->name, "dsi_regs")) {
+                       r->start = TEGRA_DSIB_BASE;
+                       r->end = TEGRA_DSIB_BASE + TEGRA_DSIB_SIZE - 1;
+               }
+       }
+}
+
+static void dsi_j_720p_4_7_dc_out_init(struct tegra_dc_out *dc)
+{
+       dc->dsi = &dsi_j_720p_4_7_pdata;
+       dc->parent_clk = "pll_d_out0";
+       dc->modes = dsi_j_720p_4_7_modes;
+       dc->n_modes = ARRAY_SIZE(dsi_j_720p_4_7_modes);
+       dc->enable = dsi_j_720p_4_7_enable;
+       dc->disable = dsi_j_720p_4_7_disable;
+       dc->width = 58;
+       dc->height = 103;
+       dc->flags = DC_CTRL_MODE;
+}
+static void dsi_j_720p_4_7_fb_data_init(struct tegra_fb_data *fb)
+{
+       fb->xres = dsi_j_720p_4_7_modes[0].h_active;
+       fb->yres = dsi_j_720p_4_7_modes[0].v_active;
+}
+
+static void dsi_j_720p_4_7_sd_settings_init
+(struct tegra_dc_sd_settings *settings)
+{
+       settings->bl_device_name = "pwm-backlight";
+}
+
+
+struct tegra_panel __initdata dsi_j_720p_4_7 = {
+       .init_sd_settings = dsi_j_720p_4_7_sd_settings_init,
+       .init_dc_out = dsi_j_720p_4_7_dc_out_init,
+       .init_fb_data = dsi_j_720p_4_7_fb_data_init,
+       .set_disp_device = dsi_j_720p_4_7_set_disp_device,
+       .init_resources = dsi_j_720p_4_7_resources_init,
+       .register_bl_dev = dsi_j_720p_4_7_register_bl_dev,
+};
+EXPORT_SYMBOL(dsi_j_720p_4_7);
diff --git a/arch/arm/mach-tegra/panel-l-720p-5.c b/arch/arm/mach-tegra/panel-l-720p-5.c
new file mode 100644 (file)
index 0000000..8323eec
--- /dev/null
@@ -0,0 +1,670 @@
+/*
+ * arch/arm/mach-tegra/panel-l-720p-5.c
+ *
+  * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mach/dc.h>
+#include <mach/iomap.h>
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/regulator/consumer.h>
+#include <linux/pwm_backlight.h>
+#include <linux/mfd/max8831.h>
+#include <linux/max8831_backlight.h>
+#include <linux/leds.h>
+#include <linux/ioport.h>
+
+#include "gpio-names.h"
+#include "board-panel.h"
+
+#define DSI_PANEL_RESET         1
+#define DSI_PANEL_RST_GPIO      TEGRA_GPIO_PH5
+#define DSI_PANEL_BL_EN_GPIO    TEGRA_GPIO_PH2
+#define DSI_PANEL_BL_PWM        TEGRA_GPIO_PH1
+
+#define DC_CTRL_MODE            TEGRA_DC_OUT_CONTINUOUS_MODE
+
+static struct regulator *vdd_lcd_s_1v8;
+static struct regulator *vdd_sys_bl_3v7;
+static struct regulator *avdd_lcd_3v0_2v8;
+
+
+static bool dsi_l_720p_5_reg_requested;
+static bool dsi_l_720p_5_gpio_requested;
+static bool is_bl_powered;
+
+
+#ifdef CONFIG_TEGRA_DC_CMU
+static struct tegra_dc_cmu dsi_l_720p_5_cmu = {
+       /* lut1 maps sRGB to linear space. */
+       {
+               0,    1,    2,    4,    5,    6,    7,    9,
+               10,   11,   12,   14,   15,   16,   18,   20,
+               21,   23,   25,   27,   29,   31,   33,   35,
+               37,   40,   42,   45,   48,   50,   53,   56,
+               59,   62,   66,   69,   72,   76,   79,   83,
+               87,   91,   95,   99,   103,  107,  112,  116,
+               121,  126,  131,  136,  141,  146,  151,  156,
+               162,  168,  173,  179,  185,  191,  197,  204,
+               210,  216,  223,  230,  237,  244,  251,  258,
+               265,  273,  280,  288,  296,  304,  312,  320,
+               329,  337,  346,  354,  363,  372,  381,  390,
+               400,  409,  419,  428,  438,  448,  458,  469,
+               479,  490,  500,  511,  522,  533,  544,  555,
+               567,  578,  590,  602,  614,  626,  639,  651,
+               664,  676,  689,  702,  715,  728,  742,  755,
+               769,  783,  797,  811,  825,  840,  854,  869,
+               884,  899,  914,  929,  945,  960,  976,  992,
+               1008, 1024, 1041, 1057, 1074, 1091, 1108, 1125,
+               1142, 1159, 1177, 1195, 1213, 1231, 1249, 1267,
+               1286, 1304, 1323, 1342, 1361, 1381, 1400, 1420,
+               1440, 1459, 1480, 1500, 1520, 1541, 1562, 1582,
+               1603, 1625, 1646, 1668, 1689, 1711, 1733, 1755,
+               1778, 1800, 1823, 1846, 1869, 1892, 1916, 1939,
+               1963, 1987, 2011, 2035, 2059, 2084, 2109, 2133,
+               2159, 2184, 2209, 2235, 2260, 2286, 2312, 2339,
+               2365, 2392, 2419, 2446, 2473, 2500, 2527, 2555,
+               2583, 2611, 2639, 2668, 2696, 2725, 2754, 2783,
+               2812, 2841, 2871, 2901, 2931, 2961, 2991, 3022,
+               3052, 3083, 3114, 3146, 3177, 3209, 3240, 3272,
+               3304, 3337, 3369, 3402, 3435, 3468, 3501, 3535,
+               3568, 3602, 3636, 3670, 3705, 3739, 3774, 3809,
+               3844, 3879, 3915, 3950, 3986, 4022, 4059, 4095,
+       },
+       /* csc */
+       {
+               0x10D, 0x3F3, 0x000, /* 1.05036053  -0.05066457 0.00030404 */
+               0x000, 0x0FC, 0x003, /* -0.00012137 0.98659651  0.01352485 */
+               0x002, 0x001, 0x0FC, /* 0.00722989  0.00559134  0.98717878 */
+       },
+       /* lut2 maps linear space to sRGB */
+       {
+               0,    1,    2,    2,    3,    4,    5,    6,
+               6,    7,    8,    9,    10,   10,   11,   12,
+               13,   13,   14,   15,   15,   16,   16,   17,
+               18,   18,   19,   19,   20,   20,   21,   21,
+               22,   22,   23,   23,   23,   24,   24,   25,
+               25,   25,   26,   26,   27,   27,   27,   28,
+               28,   29,   29,   29,   30,   30,   30,   31,
+               31,   31,   32,   32,   32,   33,   33,   33,
+               34,   34,   34,   34,   35,   35,   35,   36,
+               36,   36,   37,   37,   37,   37,   38,   38,
+               38,   38,   39,   39,   39,   40,   40,   40,
+               40,   41,   41,   41,   41,   42,   42,   42,
+               42,   43,   43,   43,   43,   43,   44,   44,
+               44,   44,   45,   45,   45,   45,   46,   46,
+               46,   46,   46,   47,   47,   47,   47,   48,
+               48,   48,   48,   48,   49,   49,   49,   49,
+               49,   50,   50,   50,   50,   50,   51,   51,
+               51,   51,   51,   52,   52,   52,   52,   52,
+               53,   53,   53,   53,   53,   54,   54,   54,
+               54,   54,   55,   55,   55,   55,   55,   55,
+               56,   56,   56,   56,   56,   57,   57,   57,
+               57,   57,   57,   58,   58,   58,   58,   58,
+               58,   59,   59,   59,   59,   59,   59,   60,
+               60,   60,   60,   60,   60,   61,   61,   61,
+               61,   61,   61,   62,   62,   62,   62,   62,
+               62,   63,   63,   63,   63,   63,   63,   64,
+               64,   64,   64,   64,   64,   64,   65,   65,
+               65,   65,   65,   65,   66,   66,   66,   66,
+               66,   66,   66,   67,   67,   67,   67,   67,
+               67,   67,   68,   68,   68,   68,   68,   68,
+               68,   69,   69,   69,   69,   69,   69,   69,
+               70,   70,   70,   70,   70,   70,   70,   71,
+               71,   71,   71,   71,   71,   71,   72,   72,
+               72,   72,   72,   72,   72,   72,   73,   73,
+               73,   73,   73,   73,   73,   74,   74,   74,
+               74,   74,   74,   74,   74,   75,   75,   75,
+               75,   75,   75,   75,   75,   76,   76,   76,
+               76,   76,   76,   76,   77,   77,   77,   77,
+               77,   77,   77,   77,   78,   78,   78,   78,
+               78,   78,   78,   78,   78,   79,   79,   79,
+               79,   79,   79,   79,   79,   80,   80,   80,
+               80,   80,   80,   80,   80,   81,   81,   81,
+               81,   81,   81,   81,   81,   81,   82,   82,
+               82,   82,   82,   82,   82,   82,   83,   83,
+               83,   83,   83,   83,   83,   83,   83,   84,
+               84,   84,   84,   84,   84,   84,   84,   84,
+               85,   85,   85,   85,   85,   85,   85,   85,
+               85,   86,   86,   86,   86,   86,   86,   86,
+               86,   86,   87,   87,   87,   87,   87,   87,
+               87,   87,   87,   88,   88,   88,   88,   88,
+               88,   88,   88,   88,   88,   89,   89,   89,
+               89,   89,   89,   89,   89,   89,   90,   90,
+               90,   90,   90,   90,   90,   90,   90,   90,
+               91,   91,   91,   91,   91,   91,   91,   91,
+               91,   91,   92,   92,   92,   92,   92,   92,
+               92,   92,   92,   92,   93,   93,   93,   93,
+               93,   93,   93,   93,   93,   93,   94,   94,
+               94,   94,   94,   94,   94,   94,   94,   94,
+               95,   95,   95,   95,   95,   95,   95,   95,
+               95,   95,   96,   96,   96,   96,   96,   96,
+               96,   96,   96,   96,   96,   97,   97,   97,
+               97,   97,   97,   97,   97,   97,   97,   98,
+               98,   98,   98,   98,   98,   98,   98,   98,
+               98,   98,   99,   99,   99,   99,   99,   99,
+               99,   100,  101,  101,  102,  103,  103,  104,
+               105,  105,  106,  107,  107,  108,  109,  109,
+               110,  111,  111,  112,  113,  113,  114,  115,
+               115,  116,  116,  117,  118,  118,  119,  119,
+               120,  120,  121,  122,  122,  123,  123,  124,
+               124,  125,  126,  126,  127,  127,  128,  128,
+               129,  129,  130,  130,  131,  131,  132,  132,
+               133,  133,  134,  134,  135,  135,  136,  136,
+               137,  137,  138,  138,  139,  139,  140,  140,
+               141,  141,  142,  142,  143,  143,  144,  144,
+               145,  145,  145,  146,  146,  147,  147,  148,
+               148,  149,  149,  150,  150,  150,  151,  151,
+               152,  152,  153,  153,  153,  154,  154,  155,
+               155,  156,  156,  156,  157,  157,  158,  158,
+               158,  159,  159,  160,  160,  160,  161,  161,
+               162,  162,  162,  163,  163,  164,  164,  164,
+               165,  165,  166,  166,  166,  167,  167,  167,
+               168,  168,  169,  169,  169,  170,  170,  170,
+               171,  171,  172,  172,  172,  173,  173,  173,
+               174,  174,  174,  175,  175,  176,  176,  176,
+               177,  177,  177,  178,  178,  178,  179,  179,
+               179,  180,  180,  180,  181,  181,  182,  182,
+               182,  183,  183,  183,  184,  184,  184,  185,
+               185,  185,  186,  186,  186,  187,  187,  187,
+               188,  188,  188,  189,  189,  189,  189,  190,
+               190,  190,  191,  191,  191,  192,  192,  192,
+               193,  193,  193,  194,  194,  194,  195,  195,
+               195,  196,  196,  196,  196,  197,  197,  197,
+               198,  198,  198,  199,  199,  199,  200,  200,
+               200,  200,  201,  201,  201,  202,  202,  202,
+               202,  203,  203,  203,  204,  204,  204,  205,
+               205,  205,  205,  206,  206,  206,  207,  207,
+               207,  207,  208,  208,  208,  209,  209,  209,
+               209,  210,  210,  210,  211,  211,  211,  211,
+               212,  212,  212,  213,  213,  213,  213,  214,
+               214,  214,  214,  215,  215,  215,  216,  216,
+               216,  216,  217,  217,  217,  217,  218,  218,
+               218,  219,  219,  219,  219,  220,  220,  220,
+               220,  221,  221,  221,  221,  222,  222,  222,
+               223,  223,  223,  223,  224,  224,  224,  224,
+               225,  225,  225,  225,  226,  226,  226,  226,
+               227,  227,  227,  227,  228,  228,  228,  228,
+               229,  229,  229,  229,  230,  230,  230,  230,
+               231,  231,  231,  231,  232,  232,  232,  232,
+               233,  233,  233,  233,  234,  234,  234,  234,
+               235,  235,  235,  235,  236,  236,  236,  236,
+               237,  237,  237,  237,  238,  238,  238,  238,
+               239,  239,  239,  239,  240,  240,  240,  240,
+               240,  241,  241,  241,  241,  242,  242,  242,
+               242,  243,  243,  243,  243,  244,  244,  244,
+               244,  244,  245,  245,  245,  245,  246,  246,
+               246,  246,  247,  247,  247,  247,  247,  248,
+               248,  248,  248,  249,  249,  249,  249,  249,
+               250,  250,  250,  250,  251,  251,  251,  251,
+               251,  252,  252,  252,  252,  253,  253,  253,
+               253,  253,  254,  254,  254,  254,  255,  255,
+       },
+};
+#endif
+
+static tegra_dc_bl_output dsi_l_720p_5_bl_response_curve = {
+       0, 1, 3, 5, 7, 9, 11, 13,
+       15, 17, 19, 21, 22, 23, 25, 26,
+       28, 29, 30, 32, 33, 34, 36, 37,
+       39, 40, 42, 43, 45, 46, 48, 49,
+       50, 51, 52, 53, 54, 55, 56, 57,
+       58, 59, 60, 61, 62, 63, 64, 65,
+       66, 67, 68, 70, 71, 72, 73, 74,
+       75, 77, 78, 79, 80, 81, 82, 83,
+       84, 85, 86, 87, 88, 89, 90, 91,
+       92, 93, 94, 95, 96, 97, 98, 99,
+       100, 101, 101, 102, 102, 103, 103, 104,
+       105, 105, 106, 107, 108, 108, 109, 110,
+       111, 112, 113, 114, 115, 116, 117, 118,
+       119, 120, 121, 121, 122, 123, 124, 125,
+       126, 127, 128, 129, 130, 131, 132, 133,
+       134, 135, 135, 136, 137, 138, 139, 140,
+       141, 142, 143, 144, 145, 146, 147, 148,
+       149, 150, 151, 152, 153, 154, 155, 156,
+       156, 157, 158, 159, 160, 161, 162, 162,
+       163, 163, 164, 164, 165, 165, 166, 167,
+       167, 168, 169, 170, 171, 172, 173, 173,
+       174, 175, 176, 177, 178, 179, 180, 181,
+       182, 183, 184, 185, 186, 187, 188, 188,
+       189, 190, 191, 192, 193, 194, 194, 195,
+       196, 197, 198, 199, 200, 201, 202, 203,
+       204, 204, 205, 206, 206, 207, 207, 208,
+       209, 209, 210, 211, 212, 213, 214, 215,
+       216, 217, 218, 219, 220, 221, 222, 223,
+       223, 224, 225, 226, 227, 228, 229, 230,
+       231, 232, 233, 234, 235, 236, 237, 238,
+       239, 240, 241, 242, 243, 244, 245, 246,
+       247, 247, 248, 250, 251, 252, 253, 255
+};
+
+static int __maybe_unused dsi_l_720p_5_bl_notify(struct device *unused,
+                                                       int brightness)
+{
+       int cur_sd_brightness = atomic_read(&sd_brightness);
+
+       /* Apply any backlight response curve */
+       if (brightness > 255)
+               pr_info("Error: Brightness > 255!\n");
+       else
+               brightness = dsi_l_720p_5_bl_response_curve[brightness];
+
+       /* SD brightness is a percentage */
+       brightness = (brightness * cur_sd_brightness) / 255;
+
+       return brightness;
+}
+static bool __maybe_unused dsi_l_720p_5_check_bl_power(void)
+{
+       return is_bl_powered;
+}
+
+/*
+       LG uses I2C max8831 blacklight device
+*/
+static struct led_info dsi_l_720p_5_max8831_leds[] = {
+       [MAX8831_ID_LED3] = {
+               .name = "max8831:red:pluto",
+       },
+       [MAX8831_ID_LED4] = {
+               .name = "max8831:green:pluto",
+       },
+       [MAX8831_ID_LED5] = {
+               .name = "max8831:blue:pluto",
+       },
+};
+
+static struct platform_max8831_backlight_data dsi_l_720p_5_max8831_bl_data = {
+       .id     = -1,
+       .name   = "pluto_display_bl",
+       .max_brightness = MAX8831_BL_LEDS_MAX_CURR,
+       .dft_brightness = 100,
+       .notify = dsi_l_720p_5_bl_notify,
+       .is_powered = dsi_l_720p_5_check_bl_power,
+};
+
+static struct max8831_subdev_info dsi_l_720p_5_max8831_subdevs[] = {
+       {
+               .id = MAX8831_ID_LED3,
+               .name = "max8831_led_bl",
+               .platform_data = &dsi_l_720p_5_max8831_leds[MAX8831_ID_LED3],
+               .pdata_size = sizeof(
+                               dsi_l_720p_5_max8831_leds[MAX8831_ID_LED3]),
+       }, {
+               .id = MAX8831_ID_LED4,
+               .name = "max8831_led_bl",
+               .platform_data = &dsi_l_720p_5_max8831_leds[MAX8831_ID_LED4],
+               .pdata_size = sizeof(
+                               dsi_l_720p_5_max8831_leds[MAX8831_ID_LED4]),
+       }, {
+               .id = MAX8831_ID_LED5,
+               .name = "max8831_led_bl",
+               .platform_data = &dsi_l_720p_5_max8831_leds[MAX8831_ID_LED5],
+               .pdata_size = sizeof(
+                               dsi_l_720p_5_max8831_leds[MAX8831_ID_LED5]),
+       }, {
+               .id = MAX8831_BL_LEDS,
+               .name = "max8831_display_bl",
+               .platform_data = &dsi_l_720p_5_max8831_bl_data,
+               .pdata_size = sizeof(dsi_l_720p_5_max8831_bl_data),
+       },
+};
+
+static struct max8831_platform_data dsi_l_720p_5_max8831 = {
+       .num_subdevs = ARRAY_SIZE(dsi_l_720p_5_max8831_subdevs),
+       .subdevs = dsi_l_720p_5_max8831_subdevs,
+};
+
+static struct i2c_board_info dsi_l_720p_5_i2c_led_info = {
+       .type           = "max8831",
+       .addr           = 0x4d,
+       .platform_data  = &dsi_l_720p_5_max8831,
+};
+static int __init dsi_l_720p_5_register_bl_dev(void)
+{
+       int err = 0;
+       err = i2c_register_board_info(1, &dsi_l_720p_5_i2c_led_info, 1);
+       return err;
+}
+
+struct tegra_dc_mode dsi_l_720p_5_modes[] = {
+       {
+               .pclk = 10000000,
+               .h_ref_to_sync = 4,
+               .v_ref_to_sync = 1,
+               .h_sync_width = 4,
+               .v_sync_width = 4,
+               .h_back_porch = 112,
+               .v_back_porch = 7,
+               .h_active = 720,
+               .v_active = 1280,
+               .h_front_porch = 12,
+               .v_front_porch = 20,
+       },
+};
+static int dsi_l_720p_5_reg_get(void)
+{
+       int err = 0;
+
+       if (dsi_l_720p_5_reg_requested)
+               return 0;
+
+       avdd_lcd_3v0_2v8 = regulator_get(NULL, "avdd_lcd");
+       if (IS_ERR_OR_NULL(avdd_lcd_3v0_2v8)) {
+               pr_err("avdd_lcd regulator get failed\n");
+               err = PTR_ERR(avdd_lcd_3v0_2v8);
+               avdd_lcd_3v0_2v8 = NULL;
+               goto fail;
+       }
+
+       vdd_lcd_s_1v8 = regulator_get(NULL, "vdd_lcd_1v8_s");
+       if (IS_ERR_OR_NULL(vdd_lcd_s_1v8)) {
+               pr_err("vdd_lcd_1v8_s regulator get failed\n");
+               err = PTR_ERR(vdd_lcd_s_1v8);
+               vdd_lcd_s_1v8 = NULL;
+               goto fail;
+       }
+
+       vdd_sys_bl_3v7 = regulator_get(NULL, "vdd_sys_bl");
+       if (IS_ERR_OR_NULL(vdd_sys_bl_3v7)) {
+               pr_err("vdd_sys_bl regulator get failed\n");
+               err = PTR_ERR(vdd_sys_bl_3v7);
+               vdd_sys_bl_3v7 = NULL;
+               goto fail;
+       }
+
+       dsi_l_720p_5_reg_requested = true;
+       return 0;
+fail:
+       return err;
+}
+
+static int dsi_l_720p_5_gpio_get(void)
+{
+       int err = 0;
+
+       if (dsi_l_720p_5_gpio_requested)
+               return 0;
+
+       err = gpio_request(DSI_PANEL_RST_GPIO, "panel rst");
+       if (err < 0) {
+               pr_err("panel reset gpio request failed\n");
+               goto fail;
+       }
+
+       err = gpio_request(DSI_PANEL_BL_EN_GPIO, "panel backlight");
+       if (err < 0) {
+               pr_err("panel backlight gpio request failed\n");
+               goto fail;
+       }
+
+       err = gpio_request(DSI_PANEL_BL_PWM, "panel pwm");
+       if (err < 0) {
+               pr_err("panel backlight pwm gpio request failed\n");
+               goto fail;
+       }
+
+       dsi_l_720p_5_gpio_requested = true;
+       return 0;
+fail:
+       return err;
+}
+
+static int dsi_l_720p_5_enable(struct device *dev)
+{
+       int err = 0;
+
+       err = dsi_l_720p_5_reg_get();
+       if (err < 0) {
+               pr_err("dsi regulator get failed\n");
+               goto fail;
+       }
+
+       err = dsi_l_720p_5_gpio_get();
+       if (err < 0) {
+               pr_err("dsi gpio request failed\n");
+               goto fail;
+       }
+       gpio_direction_output(DSI_PANEL_RST_GPIO, 0);
+
+       if (avdd_lcd_3v0_2v8) {
+               err = regulator_enable(avdd_lcd_3v0_2v8);
+               if (err < 0) {
+                       pr_err("avdd_lcd regulator enable failed\n");
+                       goto fail;
+               }
+               regulator_set_voltage(avdd_lcd_3v0_2v8, 2800000, 2800000);
+       }
+
+       usleep_range(3000, 5000);
+
+       if (vdd_lcd_s_1v8) {
+               err = regulator_enable(vdd_lcd_s_1v8);
+               if (err < 0) {
+                       pr_err("vdd_lcd_1v8_s regulator enable failed\n");
+                       goto fail;
+               }
+       }
+       usleep_range(3000, 5000);
+
+       if (vdd_sys_bl_3v7) {
+               err = regulator_enable(vdd_sys_bl_3v7);
+               if (err < 0) {
+                       pr_err("vdd_sys_bl regulator enable failed\n");
+                       goto fail;
+               }
+       }
+       usleep_range(3000, 5000);
+
+#if DSI_PANEL_RESET
+       gpio_set_value(DSI_PANEL_RST_GPIO, 1);
+       usleep_range(1000, 5000);
+       gpio_set_value(DSI_PANEL_RST_GPIO, 0);
+       usleep_range(1000, 5000);
+       gpio_set_value(DSI_PANEL_RST_GPIO, 1);
+       msleep(20);
+#endif
+
+       gpio_direction_output(DSI_PANEL_BL_EN_GPIO, 1);
+       is_bl_powered = true;
+       return 0;
+fail:
+       return err;
+}
+
+static u8 panel_dsi_config[] = {0xe0, 0x43, 0x0, 0x80, 0x0, 0x0};
+static u8 panel_disp_ctrl1[] = {0xb5, 0x34, 0x20, 0x40, 0x0, 0x20};
+static u8 panel_disp_ctrl2[] = {0xb6, 0x04, 0x74, 0x0f, 0x16, 0x13};
+static u8 panel_internal_clk[] = {0xc0, 0x01, 0x08};
+static u8 panel_pwr_ctrl3[] = {
+       0xc3, 0x0, 0x09, 0x10, 0x02, 0x0, 0x66, 0x20, 0x13, 0x0};
+static u8 panel_pwr_ctrl4[] = {0xc4, 0x23, 0x24, 0x17, 0x17, 0x59};
+static u8 panel_positive_gamma_red[] = {
+       0xd0, 0x21, 0x13, 0x67, 0x37, 0x0c, 0x06, 0x62, 0x23, 0x03};
+static u8 panel_negetive_gamma_red[] = {
+       0xd1, 0x32, 0x13, 0x66, 0x37, 0x02, 0x06, 0x62, 0x23, 0x03};
+static u8 panel_positive_gamma_green[] = {
+       0xd2, 0x41, 0x14, 0x56, 0x37, 0x0c, 0x06, 0x62, 0x23, 0x03};
+static u8 panel_negetive_gamma_green[] = {
+       0xd3, 0x52, 0x14, 0x55, 0x37, 0x02, 0x06, 0x62, 0x23, 0x03};
+static u8 panel_positive_gamma_blue[] =        {
+       0xd4, 0x41, 0x14, 0x56, 0x37, 0x0c, 0x06, 0x62, 0x23, 0x03};
+static u8 panel_negetive_gamma_blue[] =        {
+       0xd5, 0x52, 0x14, 0x55, 0x37, 0x02, 0x06, 0x62, 0x23, 0x03};
+static u8 panel_ce2[] = {0x71, 0x0, 0x0, 0x01, 0x01};
+static u8 panel_ce3[] = {0x72, 0x01, 0x0e};
+static u8 panel_ce4[] = {0x73, 0x34, 0x52, 0x0};
+static u8 panel_ce5[] = {0x74, 0x05, 0x0, 0x06};
+static u8 panel_ce6[] = {0x75, 0x03, 0x0, 0x07};
+static u8 panel_ce7[] = {0x76, 0x07, 0x0, 0x06};
+static u8 panel_ce8[] = {0x77, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f, 0x3f};
+static u8 panel_ce9[] = {0x78, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40};
+static u8 panel_ce10[] = {
+       0x79, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40, 0x40};
+static u8 panel_ce11[] = {0x7a, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+static u8 panel_ce12[] = {0x7b, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+static u8 panel_ce13[] = {0x7c, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
+
+static struct tegra_dsi_cmd dsi_l_720p_5_init_cmd[] = {
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_dsi_config),
+
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_disp_ctrl1),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_disp_ctrl2),
+
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_internal_clk),
+
+       /*  panel power control 1 */
+       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xc1, 0x0),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_pwr_ctrl3),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_pwr_ctrl4),
+
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_positive_gamma_red),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_negetive_gamma_red),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_positive_gamma_green),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_negetive_gamma_green),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_positive_gamma_blue),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_negetive_gamma_blue),
+
+       DSI_CMD_SHORT(DSI_DCS_WRITE_1_PARAM, DSI_DCS_SET_ADDR_MODE, 0x08),
+
+       /* panel OTP 2 */
+       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xf9, 0x0),
+
+       /* panel CE 1 */
+       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0x70, 0x0),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce2),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce3),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce4),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce5),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce6),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce7),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce8),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce9),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce10),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce11),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce12),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_ce13),
+
+       /* panel power control 2 */
+       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xc2, 0x02),
+       DSI_DLY_MS(20),
+
+       /* panel power control 2 */
+       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xc2, 0x06),
+       DSI_DLY_MS(20),
+
+       /* panel power control 2 */
+       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xc2, 0x4e),
+       DSI_DLY_MS(100),
+
+       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_EXIT_SLEEP_MODE, 0x0),
+       DSI_DLY_MS(20),
+
+       /* panel OTP 2 */
+       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xf9, 0x80),
+       DSI_DLY_MS(20),
+
+       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_SET_DISPLAY_ON, 0x0),
+};
+
+static struct tegra_dsi_out dsi_l_720p_5_pdata = {
+       .n_data_lanes = 4,
+
+       .dsi_instance = DSI_INSTANCE_0,
+
+       .refresh_rate = 60,
+       .video_data_type = TEGRA_DSI_VIDEO_TYPE_VIDEO_MODE,
+       .video_clock_mode = TEGRA_DSI_VIDEO_CLOCK_CONTINUOUS,
+       .video_burst_mode = TEGRA_DSI_VIDEO_NONE_BURST_MODE_WITH_SYNC_END,
+
+       .controller_vs = DSI_VS_1,
+       .pixel_format = TEGRA_DSI_PIXEL_FORMAT_24BIT_P,
+       .virtual_channel = TEGRA_DSI_VIRTUAL_CHANNEL_0,
+
+       .panel_reset = DSI_PANEL_RESET,
+       .power_saving_suspend = true,
+       .dsi_init_cmd = dsi_l_720p_5_init_cmd,
+       .n_init_cmd = ARRAY_SIZE(dsi_l_720p_5_init_cmd),
+};
+
+static int dsi_l_720p_5_disable(void)
+{
+       gpio_set_value(DSI_PANEL_BL_EN_GPIO, 0);
+       is_bl_powered = false;
+       gpio_set_value(DSI_PANEL_RST_GPIO, 0);
+
+       if (vdd_sys_bl_3v7)
+               regulator_disable(vdd_sys_bl_3v7);
+
+       if (vdd_lcd_s_1v8)
+               regulator_disable(vdd_lcd_s_1v8);
+
+       if (avdd_lcd_3v0_2v8)
+               regulator_disable(avdd_lcd_3v0_2v8);
+
+       return 0;
+}
+
+static void dsi_l_720p_5_resources_init(struct resource *
+resources, int n_resources)
+{
+       int i;
+       for (i = 0; i < n_resources; i++) {
+               struct resource *r = &resources[i];
+               if (resource_type(r) == IORESOURCE_MEM &&
+                       !strcmp(r->name, "dsi_regs")) {
+                       r->start = TEGRA_DSI_BASE;
+                       r->end = TEGRA_DSI_BASE + TEGRA_DSI_SIZE - 1;
+               }
+       }
+}
+
+static void dsi_l_720p_5_dc_out_init(struct tegra_dc_out *dc)
+{
+       dc->dsi = &dsi_l_720p_5_pdata;
+       dc->parent_clk = "pll_d_out0";
+       dc->modes = dsi_l_720p_5_modes;
+       dc->n_modes = ARRAY_SIZE(dsi_l_720p_5_modes);
+       dc->enable = dsi_l_720p_5_enable;
+       dc->disable = dsi_l_720p_5_disable;
+       dc->width = 62;
+       dc->height = 110;
+       dc->flags = DC_CTRL_MODE;
+}
+static void dsi_l_720p_5_fb_data_init(struct tegra_fb_data *fb)
+{
+       fb->xres = dsi_l_720p_5_modes[0].h_active;
+       fb->yres = dsi_l_720p_5_modes[0].v_active;
+}
+
+static void dsi_l_720p_5_sd_settings_init(struct tegra_dc_sd_settings *settings)
+{
+       settings->bl_device_name = "max8831_display_bl";
+}
+
+static void dsi_l_720p_5_cmu_init(struct tegra_dc_platform_data *pdata)
+{
+       pdata->cmu = &dsi_l_720p_5_cmu;
+}
+struct tegra_panel __initdata dsi_l_720p_5 = {
+       .init_sd_settings = dsi_l_720p_5_sd_settings_init,
+       .init_dc_out = dsi_l_720p_5_dc_out_init,
+       .init_fb_data = dsi_l_720p_5_fb_data_init,
+       .init_resources = dsi_l_720p_5_resources_init,
+       .register_bl_dev = dsi_l_720p_5_register_bl_dev,
+       .init_cmu_data = dsi_l_720p_5_cmu_init,
+};
+EXPORT_SYMBOL(dsi_l_720p_5);
diff --git a/arch/arm/mach-tegra/panel-s-1080p-5.c b/arch/arm/mach-tegra/panel-s-1080p-5.c
new file mode 100644 (file)
index 0000000..f03f6ad
--- /dev/null
@@ -0,0 +1,398 @@
+/*
+ * arch/arm/mach-tegra/panel-s-1080p-5.c
+ *
+ * Copyright (c) 2012, NVIDIA CORPORATION.  All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include <mach/dc.h>
+#include <mach/iomap.h>
+#include <linux/delay.h>
+#include <linux/gpio.h>
+#include <linux/tegra_pwm_bl.h>
+#include <linux/regulator/consumer.h>
+#include <linux/pwm_backlight.h>
+#include <linux/mfd/max8831.h>
+#include <linux/max8831_backlight.h>
+#include <linux/leds.h>
+#include <linux/ioport.h>
+
+#include "gpio-names.h"
+#include "board-panel.h"
+
+#define DSI_PANEL_RESET         1
+#define DSI_PANEL_RST_GPIO      TEGRA_GPIO_PH5
+#define DSI_PANEL_BL_EN_GPIO    TEGRA_GPIO_PH2
+#define DSI_PANEL_BL_PWM        TEGRA_GPIO_PH1
+
+#define DC_CTRL_MODE            TEGRA_DC_OUT_CONTINUOUS_MODE
+
+static struct regulator *vdd_lcd_s_1v8;
+static struct regulator *vdd_sys_bl_3v7;
+
+static bool dsi_s_1080p_5_reg_requested;
+static bool dsi_s_1080p_5_gpio_requested;
+static bool is_bl_powered;
+
+static tegra_dc_bl_output dsi_s_1080p_5_bl_response_curve = {
+       0, 2, 5, 7, 10, 13, 15, 18,
+       20, 23, 26, 27, 29, 30, 31, 33,
+       34, 36, 37, 39, 40, 41, 42, 44,
+       45, 46, 47, 48, 50, 51, 52, 53,
+       54, 55, 56, 57, 58, 59, 60, 61,
+       62, 63, 64, 65, 66, 67, 68, 69,
+       70, 71, 73, 74, 75, 76, 78, 79,
+       80, 82, 83, 84, 86, 86, 87, 88,
+       89, 89, 90, 91, 92, 92, 93, 94,
+       95, 96, 97, 98, 99, 100, 101, 102,
+       103, 104, 105, 106, 107, 107, 108, 109,
+       110, 111, 112, 112, 113, 114, 114, 115,
+       115, 116, 117, 117, 118, 119, 120, 121,
+       121, 122, 123, 124, 125, 126, 127, 128,
+       129, 130, 131, 132, 133, 134, 135, 136,
+       136, 138, 139, 140, 141, 142, 143, 144,
+       145, 146, 147, 148, 149, 150, 151, 152,
+       153, 154, 155, 155, 156, 157, 158, 159,
+       161, 162, 163, 164, 165, 166, 167, 167,
+       167, 167, 168, 168, 168, 168, 168, 169,
+       169, 170, 171, 172, 172, 173, 174, 175,
+       176, 177, 178, 179, 180, 181, 182, 183,
+       184, 184, 185, 186, 187, 188, 189, 190,
+       191, 192, 193, 194, 195, 195, 196, 197,
+       198, 199, 200, 201, 202, 203, 204, 205,
+       206, 206, 207, 207, 208, 208, 209, 209,
+       210, 211, 211, 212, 213, 213, 214, 215,
+       216, 216, 217, 218, 219, 220, 221, 222,
+       223, 224, 225, 226, 227, 228, 229, 230,
+       231, 232, 233, 235, 236, 237, 238, 239,
+       240, 241, 242, 243, 244, 245, 246, 247,
+       248, 249, 250, 251, 252, 253, 254, 255
+};
+
+static int __maybe_unused dsi_s_1080p_5_bl_notify(struct device *unused,
+                                                       int brightness)
+{
+       int cur_sd_brightness = atomic_read(&sd_brightness);
+
+       /* Apply any backlight response curve */
+       if (brightness > 255)
+               pr_info("Error: Brightness > 255!\n");
+       else
+               brightness = dsi_s_1080p_5_bl_response_curve[brightness];
+
+       /* SD brightness is a percentage */
+       brightness = (brightness * cur_sd_brightness) / 255;
+
+       return brightness;
+}
+static bool __maybe_unused dsi_s_1080p_5_check_bl_power(void)
+{
+       return is_bl_powered;
+}
+
+/*
+       Sharp uses I2C max8831 blacklight device
+*/
+static struct led_info dsi_s_1080p_5_max8831_leds[] = {
+       [MAX8831_ID_LED3] = {
+               .name = "max8831:red:pluto",
+       },
+       [MAX8831_ID_LED4] = {
+               .name = "max8831:green:pluto",
+       },
+       [MAX8831_ID_LED5] = {
+               .name = "max8831:blue:pluto",
+       },
+};
+
+static struct platform_max8831_backlight_data dsi_s_1080p_5_max8831_bl_data = {
+       .id     = -1,
+       .name   = "pluto_display_bl",
+       .max_brightness = MAX8831_BL_LEDS_MAX_CURR,
+       .dft_brightness = 100,
+       .notify = dsi_s_1080p_5_bl_notify,
+       .is_powered = dsi_s_1080p_5_check_bl_power,
+};
+
+static struct max8831_subdev_info dsi_s_1080p_5_max8831_subdevs[] = {
+       {
+               .id = MAX8831_ID_LED3,
+               .name = "max8831_led_bl",
+               .platform_data = &dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED3],
+               .pdata_size = sizeof(
+                               dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED3]),
+       }, {
+               .id = MAX8831_ID_LED4,
+               .name = "max8831_led_bl",
+               .platform_data = &dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED4],
+               .pdata_size = sizeof(
+                               dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED4]),
+       }, {
+               .id = MAX8831_ID_LED5,
+               .name = "max8831_led_bl",
+               .platform_data = &dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED5],
+               .pdata_size = sizeof(
+                               dsi_s_1080p_5_max8831_leds[MAX8831_ID_LED5]),
+       }, {
+               .id = MAX8831_BL_LEDS,
+               .name = "max8831_display_bl",
+               .platform_data = &dsi_s_1080p_5_max8831_bl_data,
+               .pdata_size = sizeof(dsi_s_1080p_5_max8831_bl_data),
+       },
+};
+
+static struct max8831_platform_data dsi_s_1080p_5_max8831 = {
+       .num_subdevs = ARRAY_SIZE(dsi_s_1080p_5_max8831_subdevs),
+       .subdevs = dsi_s_1080p_5_max8831_subdevs,
+};
+
+static struct i2c_board_info dsi_s_1080p_5_i2c_led_info = {
+       .type           = "max8831",
+       .addr           = 0x4d,
+       .platform_data  = &dsi_s_1080p_5_max8831,
+};
+static int __init dsi_s_1080p_5_register_bl_dev(void)
+{
+       int err = 0;
+       err = i2c_register_board_info(1, &dsi_s_1080p_5_i2c_led_info, 1);
+       return err;
+}
+struct tegra_dc_mode dsi_s_1080p_5_modes[] = {
+       /* 1080x1920@60Hz */
+       {
+               .pclk = 10000000,
+               .h_ref_to_sync = 4,
+               .v_ref_to_sync = 1,
+               .h_sync_width = 10,
+               .v_sync_width = 2,
+               .h_back_porch = 50,
+               .v_back_porch = 4,
+               .h_active = 1080,
+               .v_active = 1920,
+               .h_front_porch = 100,
+               .v_front_porch = 4,
+       },
+       /* 1080x1920@53Hz */
+       {
+               .pclk = 10000000,
+               .h_ref_to_sync = 4,
+               .v_ref_to_sync = 1,
+               .h_sync_width = 10,
+               .v_sync_width = 2,
+               .h_back_porch = 50,
+               .v_back_porch = 4,
+               .h_active = 1080,
+               .v_active = 1920,
+               .h_front_porch = 100,
+               .v_front_porch = 259,
+       },
+};
+static int dsi_s_1080p_5_reg_get(void)
+{
+       int err = 0;
+
+       if (dsi_s_1080p_5_reg_requested)
+               return 0;
+
+       vdd_lcd_s_1v8 = regulator_get(NULL, "vdd_lcd_1v8_s");
+       if (IS_ERR_OR_NULL(vdd_lcd_s_1v8)) {
+               pr_err("vdd_lcd_1v8_s regulator get failed\n");
+               err = PTR_ERR(vdd_lcd_s_1v8);
+               vdd_lcd_s_1v8 = NULL;
+               goto fail;
+       }
+
+       vdd_sys_bl_3v7 = regulator_get(NULL, "vdd_sys_bl");
+       if (IS_ERR_OR_NULL(vdd_sys_bl_3v7)) {
+               pr_err("vdd_sys_bl regulator get failed\n");
+               err = PTR_ERR(vdd_sys_bl_3v7);
+               vdd_sys_bl_3v7 = NULL;
+               goto fail;
+       }
+
+       dsi_s_1080p_5_reg_requested = true;
+       return 0;
+fail:
+       return err;
+}
+
+static int dsi_s_1080p_5_gpio_get(void)
+{
+       int err = 0;
+
+       if (dsi_s_1080p_5_gpio_requested)
+               return 0;
+
+       err = gpio_request(DSI_PANEL_RST_GPIO, "panel rst");
+       if (err < 0) {
+               pr_err("panel reset gpio request failed\n");
+               goto fail;
+       }
+
+       err = gpio_request(DSI_PANEL_BL_EN_GPIO, "panel backlight");
+       if (err < 0) {
+               pr_err("panel backlight gpio request failed\n");
+               goto fail;
+       }
+
+
+
+       dsi_s_1080p_5_gpio_requested = true;
+       return 0;
+fail:
+       return err;
+}
+
+static int dsi_s_1080p_5_enable(struct device *dev)
+{
+       int err = 0;
+
+       err = dsi_s_1080p_5_reg_get();
+       if (err < 0) {
+               pr_err("dsi regulator get failed\n");
+               goto fail;
+       }
+
+       err = dsi_s_1080p_5_gpio_get();
+       if (err < 0) {
+               pr_err("dsi gpio request failed\n");
+               goto fail;
+       }
+       gpio_direction_output(DSI_PANEL_RST_GPIO, 0);
+
+
+       if (vdd_lcd_s_1v8) {
+               err = regulator_enable(vdd_lcd_s_1v8);
+               if (err < 0) {
+                       pr_err("vdd_lcd_1v8_s regulator enable failed\n");
+                       goto fail;
+               }
+       }
+       usleep_range(3000, 5000);
+
+       if (vdd_sys_bl_3v7) {
+               err = regulator_enable(vdd_sys_bl_3v7);
+               if (err < 0) {
+                       pr_err("vdd_sys_bl regulator enable failed\n");
+                       goto fail;
+               }
+       }
+       usleep_range(3000, 5000);
+
+#if DSI_PANEL_RESET
+       gpio_set_value(DSI_PANEL_RST_GPIO, 1);
+       msleep(20);
+#endif
+
+       gpio_direction_output(DSI_PANEL_BL_EN_GPIO, 1);
+       is_bl_powered = true;
+       return 0;
+fail:
+       return err;
+}
+
+static u8 panel_internal[] = {0x51, 0x0f, 0xff};
+
+static struct tegra_dsi_cmd dsi_s_1080p_5_init_cmd[] = {
+
+       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xb0, 0x04),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_NO_OP, 0x0),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_NO_OP, 0x0),
+       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0xd6, 0x01),
+       DSI_CMD_LONG(DSI_GENERIC_LONG_WRITE, panel_internal),
+       DSI_CMD_SHORT(DSI_GENERIC_SHORT_WRITE_2_PARAMS, 0x53, 0x04),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_SET_DISPLAY_ON, 0x0),
+       DSI_CMD_SHORT(DSI_DCS_WRITE_0_PARAM, DSI_DCS_EXIT_SLEEP_MODE, 0x0),
+};
+
+static struct tegra_dsi_out dsi_s_1080p_5_pdata = {
+       .n_data_lanes = 4,
+
+       .dsi_instance = DSI_INSTANCE_1,
+
+       .refresh_rate = 60,
+       .video_data_type = TEGRA_DSI_VIDEO_TYPE_VIDEO_MODE,
+       .video_clock_mode = TEGRA_DSI_VIDEO_CLOCK_CONTINUOUS,
+       .video_burst_mode = TEGRA_DSI_VIDEO_NONE_BURST_MODE_WITH_SYNC_END,
+       .controller_vs = DSI_VS_1,
+       .pixel_format = TEGRA_DSI_PIXEL_FORMAT_24BIT_P,
+       .virtual_channel = TEGRA_DSI_VIRTUAL_CHANNEL_0,
+
+       .panel_reset = DSI_PANEL_RESET,
+       .power_saving_suspend = true,
+       .dsi_init_cmd = dsi_s_1080p_5_init_cmd,
+       .n_init_cmd = ARRAY_SIZE(dsi_s_1080p_5_init_cmd),
+};
+
+static int dsi_s_1080p_5_disable(void)
+{
+       gpio_set_value(DSI_PANEL_BL_EN_GPIO, 0);
+       is_bl_powered = false;
+       gpio_set_value(DSI_PANEL_RST_GPIO, 0);
+
+       if (vdd_sys_bl_3v7)
+               regulator_disable(vdd_sys_bl_3v7);
+
+       if (vdd_lcd_s_1v8)
+               regulator_disable(vdd_lcd_s_1v8);
+
+       return 0;
+}
+
+static void dsi_s_1080p_5_resources_init(struct resource *
+resources, int n_resources)
+{
+       int i;
+       for (i = 0; i < n_resources; i++) {
+               struct resource *r = &resources[i];
+               if (resource_type(r) == IORESOURCE_MEM &&
+                       !strcmp(r->name, "dsi_regs")) {
+                       r->start = TEGRA_DSIB_BASE;
+                       r->end = TEGRA_DSIB_BASE + TEGRA_DSIB_SIZE - 1;
+               }
+       }
+}
+
+static void dsi_s_1080p_5_dc_out_init(struct tegra_dc_out *dc)
+{
+       dc->dsi = &dsi_s_1080p_5_pdata;
+       dc->parent_clk = "pll_d_out0";
+       dc->modes = dsi_s_1080p_5_modes;
+       dc->n_modes = ARRAY_SIZE(dsi_s_1080p_5_modes);
+       dc->enable = dsi_s_1080p_5_enable;
+       dc->disable = dsi_s_1080p_5_disable;
+       dc->width = 62;
+       dc->height = 110;
+       dc->flags = DC_CTRL_MODE;
+}
+static void dsi_s_1080p_5_fb_data_init(struct tegra_fb_data *fb)
+{
+       fb->xres = dsi_s_1080p_5_modes[0].h_active;
+       fb->yres = dsi_s_1080p_5_modes[0].v_active;
+}
+
+static void dsi_s_1080p_5_sd_settings_init
+(struct tegra_dc_sd_settings *settings)
+{
+       settings->bl_device_name = "max8831_display_bl";
+}
+
+struct tegra_panel __initdata dsi_s_1080p_5 = {
+       .init_sd_settings = dsi_s_1080p_5_sd_settings_init,
+       .init_dc_out = dsi_s_1080p_5_dc_out_init,
+       .init_fb_data = dsi_s_1080p_5_fb_data_init,
+       .init_resources = dsi_s_1080p_5_resources_init,
+       .register_bl_dev = dsi_s_1080p_5_register_bl_dev,
+};
+EXPORT_SYMBOL(dsi_s_1080p_5);