arm: tegra: ardbeg: add AUO 14" eDP panel support
Kerwin Wan [Wed, 19 Jun 2013 16:18:45 +0000 (00:18 +0800)]
Bug 1306592

Change-Id: I2ad2c3a875712ecb359569c1ec79c914eb352ebc
Signed-off-by: Kerwin Wan <kerwinw@nvidia.com>
Reviewed-on: http://git-master/r/243711
Reviewed-by: Chao Xu <cxu@nvidia.com>

arch/arm/mach-tegra/Makefile
arch/arm/mach-tegra/board-ardbeg-panel.c
arch/arm/mach-tegra/board-laguna-power.c
arch/arm/mach-tegra/board-panel.h
arch/arm/mach-tegra/panel-a-edp-1080p-14-0.c [new file with mode: 0644]
arch/arm/mach-tegra/tegra-board-id.h

index bb88d39..33fcb7f 100644 (file)
@@ -277,6 +277,7 @@ obj-${CONFIG_MACH_ARDBEG}               += board-ardbeg-powermon.o
 obj-${CONFIG_MACH_ARDBEG}               += panel-a-1080p-11-6.o
 obj-${CONFIG_MACH_ARDBEG}               += panel-p-wuxga-10-1.o
 obj-${CONFIG_MACH_ARDBEG}               += panel-s-wqxga-10-1.o
+obj-${CONFIG_MACH_ARDBEG}               += panel-a-edp-1080p-14-0.o
 
 obj-${CONFIG_MACH_LAGUNA}               += board-ardbeg.o
 obj-${CONFIG_MACH_LAGUNA}               += board-ardbeg-kbc.o
@@ -289,6 +290,7 @@ obj-${CONFIG_MACH_LAGUNA}               += panel-a-1080p-11-6.o
 obj-${CONFIG_MACH_LAGUNA}               += panel-p-wuxga-10-1.o
 obj-${CONFIG_MACH_LAGUNA}               += panel-s-wqxga-10-1.o
 obj-${CONFIG_MACH_LAGUNA}               += panel-a-1080p-14-0.o
+obj-${CONFIG_MACH_LAGUNA}               += panel-a-edp-1080p-14-0.o
 
 obj-${CONFIG_TEGRA_BB_XMM_POWER}        += baseband-xmm-power.o
 obj-${CONFIG_TEGRA_BB_XMM_POWER2}       += baseband-xmm-power2.o
index 5fbc343..474bded 100644 (file)
@@ -124,6 +124,45 @@ static struct resource ardbeg_disp1_resources[] = {
        },
 };
 
+static struct resource ardbeg_disp1_edp_resources[] = {
+       {
+               .name   = "irq",
+               .start  = INT_DISPLAY_GENERAL,
+               .end    = INT_DISPLAY_GENERAL,
+               .flags  = IORESOURCE_IRQ,
+       },
+       {
+               .name   = "regs",
+               .start  = TEGRA_DISPLAY_BASE,
+               .end    = TEGRA_DISPLAY_BASE + TEGRA_DISPLAY_SIZE - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .name   = "fbmem",
+               .start  = 0, /* Filled in by ardbeg_panel_init() */
+               .end    = 0, /* Filled in by ardbeg_panel_init() */
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .name   = "mipi_cal",
+               .start  = TEGRA_MIPI_CAL_BASE,
+               .end    = TEGRA_MIPI_CAL_BASE + TEGRA_MIPI_CAL_SIZE - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .name   = "sor",
+               .start  = TEGRA_SOR_BASE,
+               .end    = TEGRA_SOR_BASE + TEGRA_SOR_SIZE - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+       {
+               .name   = "dpaux",
+               .start  = TEGRA_DPAUX_BASE,
+               .end    = TEGRA_DPAUX_BASE + TEGRA_DPAUX_SIZE - 1,
+               .flags  = IORESOURCE_MEM,
+       },
+};
+
 static struct resource ardbeg_disp2_resources[] = {
        {
                .name   = "irq",
@@ -453,6 +492,16 @@ static void ardbeg_panel_select(void)
                dsi_instance = DSI_INSTANCE_0;
                break;
        case BOARD_E1627:
+               panel = &dsi_p_wuxga_10_1;
+               dsi_instance = DSI_INSTANCE_0;
+               break;
+       case BOARD_E1824:
+               panel = &edp_a_1080p_14_0;
+               ardbeg_disp1_out.type = TEGRA_DC_OUT_DP;
+               ardbeg_disp1_device.resource = ardbeg_disp1_edp_resources;
+               ardbeg_disp1_device.num_resources =
+                       ARRAY_SIZE(ardbeg_disp1_edp_resources);
+               break;
        /* fall through */
        default:
                panel = &dsi_p_wuxga_10_1;
@@ -466,12 +515,15 @@ static void ardbeg_panel_select(void)
 
                if (panel->init_dc_out) {
                        panel->init_dc_out(&ardbeg_disp1_out);
-                       ardbeg_disp1_out.dsi->dsi_instance = dsi_instance;
-                       ardbeg_disp1_out.dsi->dsi_panel_rst_gpio =
-                               DSI_PANEL_RST_GPIO;
-                       ardbeg_disp1_out.dsi->dsi_panel_bl_pwm_gpio =
-                               DSI_PANEL_BL_PWM_GPIO;
-                       ardbeg_disp1_out.dsi->te_gpio = TEGRA_GPIO_PR6;
+                       if (ardbeg_disp1_out.type == TEGRA_DC_OUT_DSI) {
+                               ardbeg_disp1_out.dsi->dsi_instance =
+                                       dsi_instance;
+                               ardbeg_disp1_out.dsi->dsi_panel_rst_gpio =
+                                       DSI_PANEL_RST_GPIO;
+                               ardbeg_disp1_out.dsi->dsi_panel_bl_pwm_gpio =
+                                       DSI_PANEL_BL_PWM_GPIO;
+                               ardbeg_disp1_out.dsi->te_gpio = TEGRA_GPIO_PR6;
+                       }
                }
 
                if (panel->init_fb_data)
@@ -483,8 +535,11 @@ static void ardbeg_panel_select(void)
                if (panel->set_disp_device)
                        panel->set_disp_device(&ardbeg_disp1_device);
 
-               tegra_dsi_resources_init(dsi_instance, ardbeg_disp1_resources,
-                       ARRAY_SIZE(ardbeg_disp1_resources));
+               if (ardbeg_disp1_out.type == TEGRA_DC_OUT_DSI) {
+                       tegra_dsi_resources_init(dsi_instance,
+                               ardbeg_disp1_resources,
+                               ARRAY_SIZE(ardbeg_disp1_resources));
+               }
 
                if (panel->register_bl_dev)
                        panel->register_bl_dev();
index c6d2ebc..9e3ccc7 100644 (file)
@@ -467,6 +467,12 @@ static struct regulator_consumer_supply fixed_reg_vdd_hdmi_supply[] = {
        REGULATOR_SUPPLY("avdd_hdmi", "tegradc.1"),
        REGULATOR_SUPPLY("avdd_hdmi_pll", "tegradc.1"),
 };
+
+/* VDD_LCD_BL DAP3_DOUT */
+static struct regulator_consumer_supply fixed_reg_vdd_lcd_bl_supply[] = {
+       REGULATOR_SUPPLY("vdd_lcd_bl", NULL),
+};
+
 /* LCD_BL_EN GMI_AD10 */
 static struct regulator_consumer_supply fixed_reg_lcd_bl_en_supply[] = {
        REGULATOR_SUPPLY("vdd_lcd_bl_en", NULL),
@@ -622,34 +628,37 @@ FIXED_REG(6,      usb1_vbus,      usb1_vbus,      NULL,   0,      0,
 FIXED_REG(7,   usb3_vbus,      usb3_vbus,      NULL,   0,      0,
                TEGRA_GPIO_PN5, true,   true,   0,      5000);
 
-FIXED_REG(8,   lcd_bl_en,      lcd_bl_en,      NULL,   0,      0,
+FIXED_REG(8,   vdd_lcd_bl,     vdd_lcd_bl,     NULL,   0,      0,
+               TEGRA_GPIO_PP2, false,  true,   0,      3300);
+
+FIXED_REG(9,   lcd_bl_en,      lcd_bl_en,      NULL,   0,      0,
                TEGRA_GPIO_PH2, false,  true,   0,      5000);
 
-FIXED_REG(9,   3v3,            3v3,            NULL,   0,      0,
+FIXED_REG(10,  3v3,            3v3,            NULL,   0,      0,
                -1,     false,  true,   0,      3300);
 
-FIXED_REG(10,  5v0,            5v0,            NULL,   0,      0,
+FIXED_REG(11,  5v0,            5v0,            NULL,   0,      0,
                -1,     false,  true,   0,      5000);
 
-FIXED_REG(11,  dcdc_1v8,       dcdc_1v8,       NULL,   0,      0,
+FIXED_REG(12,  dcdc_1v8,       dcdc_1v8,       NULL,   0,      0,
                -1,     false,  true,   0,      1800);
 
-FIXED_REG(12,    dcdc_1v2, dcdc_1v2,   NULL,   0,      0,
+FIXED_REG(13,    dcdc_1v2, dcdc_1v2,   NULL,   0,      0,
                PMU_TCA6416_GPIO_BASE,     false,  true,   0,      1200);
 
-FIXED_REG(13,  as3722_gpio2,   as3722_gpio2,           NULL,   0,      0,
+FIXED_REG(14,  as3722_gpio2,   as3722_gpio2,           NULL,   0,      0,
                AS3722_GPIO_BASE + AS3722_GPIO2,        false,  false,  0,      3300);
 
-FIXED_REG(14,  lcd,            lcd,            NULL,   0,      0,
+FIXED_REG(15,  lcd,            lcd,            NULL,   0,      0,
                AS3722_GPIO_BASE + AS3722_GPIO4,        false,  true,   0,      3300);
 
-FIXED_REG(15,  sdmmc_en,               sdmmc_en,       NULL,   0,      0,
+FIXED_REG(16,  sdmmc_en,               sdmmc_en,       NULL,   0,      0,
                TEGRA_GPIO_PR0,         false,  true,   0,      3300);
 
-FIXED_REG(16,  vdd_cdc_1v2_aud,        vdd_cdc_1v2_aud,        NULL,   0,      0,
+FIXED_REG(17,  vdd_cdc_1v2_aud,        vdd_cdc_1v2_aud,        NULL,   0,      0,
                PMU_TCA6416_GPIO(2),    false,  true,   0,      1200);
 
-FIXED_REG(17,  vdd_amp_shut_aud,       vdd_amp_shut_aud,       NULL,   0,      0,
+FIXED_REG(18,  vdd_amp_shut_aud,       vdd_amp_shut_aud,       NULL,   0,      0,
                PMU_TCA6416_GPIO(3),    false,  true,   0,      1200);
 /*
  * Creating the fixed regulator device tables
@@ -666,6 +675,7 @@ FIXED_REG(17,       vdd_amp_shut_aud,       vdd_amp_shut_aud,       NULL,   0,      0,
        ADD_FIXED_REG(vdd_hdmi),                \
        ADD_FIXED_REG(usb1_vbus),               \
        ADD_FIXED_REG(usb3_vbus),               \
+       ADD_FIXED_REG(vdd_lcd_bl),              \
        ADD_FIXED_REG(lcd_bl_en),               \
        ADD_FIXED_REG(3v3),                     \
        ADD_FIXED_REG(5v0),                     \
index 66666a0..933c868 100644 (file)
@@ -56,6 +56,7 @@ extern struct tegra_panel dsi_p_wuxga_10_1;
 extern struct tegra_panel dsi_a_1080p_11_6;
 extern struct tegra_panel dsi_s_wqxga_10_1;
 extern struct tegra_panel dsi_a_1080p_14_0;
+extern struct tegra_panel edp_a_1080p_14_0;
 
 void tegra_dsi_resources_init(u8 dsi_instance,
                        struct resource *resources, int n_resources);
diff --git a/arch/arm/mach-tegra/panel-a-edp-1080p-14-0.c b/arch/arm/mach-tegra/panel-a-edp-1080p-14-0.c
new file mode 100644 (file)
index 0000000..cbd80bf
--- /dev/null
@@ -0,0 +1,370 @@
+/*
+ * arch/arm/mach-tegra/panel-a-1080p-11-6.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 <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 "board.h"
+#include "board-panel.h"
+#include "devices.h"
+#include "gpio-names.h"
+#include "tegra12_host1x_devices.h"
+
+#define DC_CTRL_MODE   TEGRA_DC_OUT_CONTINUOUS_MODE
+
+#define EDP_PANEL_BL_PWM       TEGRA_GPIO_PH1
+
+static bool reg_requested;
+static bool gpio_requested;
+static struct platform_device *disp_device;
+
+static struct regulator *vdd_lcd_bl;
+static struct regulator *vdd_lcd_bl_en;
+static struct regulator *avdd_lcd;
+static struct regulator *vdd_ds_1v8;
+
+static tegra_dc_bl_output edp_a_1080p_14_0_bl_output_measured = {
+       0, 0, 1, 2, 3, 4, 5, 6,
+       7, 8, 9, 9, 10, 11, 12, 13,
+       13, 14, 15, 16, 17, 17, 18, 19,
+       20, 21, 22, 22, 23, 24, 25, 26,
+       27, 27, 28, 29, 30, 31, 32, 32,
+       33, 34, 35, 36, 37, 37, 38, 39,
+       40, 41, 42, 42, 43, 44, 45, 46,
+       47, 48, 48, 49, 50, 51, 52, 53,
+       54, 55, 56, 57, 57, 58, 59, 60,
+       61, 62, 63, 64, 65, 66, 67, 68,
+       69, 70, 71, 71, 72, 73, 74, 75,
+       76, 77, 77, 78, 79, 80, 81, 82,
+       83, 84, 85, 87, 88, 89, 90, 91,
+       92, 93, 94, 95, 96, 97, 98, 99,
+       100, 101, 102, 103, 104, 105, 106, 107,
+       108, 109, 110, 111, 112, 113, 115, 116,
+       117, 118, 119, 120, 121, 122, 123, 124,
+       125, 126, 127, 128, 129, 130, 131, 132,
+       133, 134, 135, 136, 137, 138, 139, 141,
+       142, 143, 144, 146, 147, 148, 149, 151,
+       152, 153, 154, 155, 156, 157, 158, 158,
+       159, 160, 161, 162, 163, 165, 166, 167,
+       168, 169, 170, 171, 172, 173, 174, 176,
+       177, 178, 179, 180, 182, 183, 184, 185,
+       186, 187, 188, 189, 190, 191, 192, 194,
+       195, 196, 197, 198, 199, 200, 201, 202,
+       203, 204, 205, 206, 207, 208, 209, 210,
+       211, 212, 213, 214, 215, 216, 217, 219,
+       220, 221, 222, 224, 225, 226, 227, 229,
+       230, 231, 232, 233, 234, 235, 236, 238,
+       239, 240, 241, 242, 243, 244, 245, 246,
+       247, 248, 249, 250, 251, 252, 253, 255
+};
+
+static int laguna_edp_regulator_get(struct device *dev)
+{
+       int err = 0;
+
+       if (reg_requested)
+               return 0;
+
+       vdd_ds_1v8 = regulator_get(dev, "vdd_ds_1v8");
+       if (IS_ERR_OR_NULL(vdd_ds_1v8)) {
+               pr_err("vdd_ds_1v8 regulator get failed\n");
+               err = PTR_ERR(vdd_ds_1v8);
+               vdd_ds_1v8 = NULL;
+               goto fail;
+       }
+
+       vdd_lcd_bl = regulator_get(dev, "vdd_lcd_bl");
+       if (IS_ERR_OR_NULL(vdd_lcd_bl)) {
+               pr_err("vdd_lcd_bl regulator get failed\n");
+               err = PTR_ERR(vdd_lcd_bl);
+               vdd_lcd_bl = NULL;
+               goto fail;
+       }
+
+       vdd_lcd_bl_en = regulator_get(dev, "vdd_lcd_bl_en");
+       if (IS_ERR_OR_NULL(vdd_lcd_bl_en)) {
+               pr_err("vdd_lcd_bl_en regulator get failed\n");
+               err = PTR_ERR(vdd_lcd_bl_en);
+               vdd_lcd_bl_en = NULL;
+               goto fail;
+       }
+
+       avdd_lcd = regulator_get(dev, "avdd_lcd");
+       if (IS_ERR_OR_NULL(avdd_lcd)) {
+               pr_err("avdd_lcd regulator get failed\n");
+               err = PTR_ERR(avdd_lcd);
+               avdd_lcd = NULL;
+               goto fail;
+       }
+
+       reg_requested = true;
+       return 0;
+fail:
+       return err;
+}
+
+static int laguna_edp_gpio_get(void)
+{
+       int err = 0;
+
+       if (gpio_requested)
+               return 0;
+
+       err = gpio_request(EDP_PANEL_BL_PWM, "panel pwm");
+       if (err < 0) {
+               pr_err("panel pwm gpio request failed\n");
+               goto fail;
+       }
+       gpio_free(EDP_PANEL_BL_PWM);
+
+       gpio_requested = true;
+       return 0;
+fail:
+       return err;
+}
+
+static int edp_a_1080p_14_0_enable(struct device *dev)
+{
+       int err = 0;
+
+       err = laguna_edp_regulator_get(dev);
+       if (err < 0) {
+               pr_err("edp regulator get failed\n");
+               goto fail;
+       }
+
+       err = laguna_edp_gpio_get();
+       if (err < 0) {
+               pr_err("edp gpio request failed\n");
+               goto fail;
+       }
+
+       if (vdd_lcd_bl) {
+               err = regulator_enable(vdd_lcd_bl);
+               if (err < 0) {
+                       pr_err("vdd_lcd_bl regulator enable failed\n");
+                       goto fail;
+               }
+       }
+
+       msleep(20);
+
+       if (vdd_ds_1v8) {
+               err = regulator_enable(vdd_ds_1v8);
+               if (err < 0) {
+                       pr_err("vdd_ds_1v8 regulator enable failed\n");
+                       goto fail;
+               }
+       }
+
+       if (avdd_lcd) {
+               err = regulator_enable(avdd_lcd);
+               if (err < 0) {
+                       pr_err("avdd_lcd regulator enable failed\n");
+                       goto fail;
+               }
+       }
+
+       msleep(10);
+
+       if (vdd_lcd_bl_en) {
+               err = regulator_enable(vdd_lcd_bl_en);
+               if (err < 0) {
+                       pr_err("vdd_lcd_bl_en regulator enable failed\n");
+                       goto fail;
+               }
+       }
+
+       return 0;
+fail:
+       return err;
+}
+
+static int edp_a_1080p_14_0_disable(void)
+{
+       if (vdd_lcd_bl_en)
+               regulator_disable(vdd_lcd_bl_en);
+
+       msleep(10);
+
+       if (avdd_lcd)
+               regulator_disable(avdd_lcd);
+
+       if (vdd_ds_1v8)
+               regulator_disable(vdd_ds_1v8);
+
+       msleep(10);
+
+       if (vdd_lcd_bl)
+               regulator_disable(vdd_lcd_bl);
+
+       msleep(500);
+
+       return 0;
+}
+
+static int edp_a_1080p_14_0_postsuspend(void)
+{
+       return 0;
+}
+
+static struct tegra_dc_out_pin edp_out_pins[] = {
+       {
+               .name   = TEGRA_DC_OUT_PIN_H_SYNC,
+               .pol    = TEGRA_DC_OUT_PIN_POL_LOW,
+       },
+       {
+               .name   = TEGRA_DC_OUT_PIN_V_SYNC,
+               .pol    = TEGRA_DC_OUT_PIN_POL_LOW,
+       },
+       {
+               .name   = TEGRA_DC_OUT_PIN_PIXEL_CLOCK,
+               .pol    = TEGRA_DC_OUT_PIN_POL_LOW,
+       },
+       {
+               .name   = TEGRA_DC_OUT_PIN_DATA_ENABLE,
+               .pol    = TEGRA_DC_OUT_PIN_POL_HIGH,
+       },
+};
+
+static struct tegra_dc_mode edp_a_1080p_14_0_modes[] = {
+       {
+               .pclk = 137986200,
+               .h_ref_to_sync = 1,
+               .v_ref_to_sync = 1,
+               .h_sync_width = 16,
+               .v_sync_width = 14,
+               .h_back_porch = 152,
+               .v_back_porch = 19,
+               .h_active = 1920,
+               .v_active = 1080,
+               .h_front_porch = 16,
+               .v_front_porch = 3,
+       },
+};
+
+static int edp_a_1080p_14_0_bl_notify(struct device *unused, int brightness)
+{
+       int cur_sd_brightness = atomic_read(&sd_brightness);
+
+       /* SD brightness is a percentage */
+       brightness = (brightness * cur_sd_brightness) / 255;
+
+       /* Apply any backlight response curve */
+       if (brightness > 255)
+               pr_info("Error: Brightness > 255!\n");
+       else
+               brightness = edp_a_1080p_14_0_bl_output_measured[brightness];
+
+       return brightness;
+}
+
+static int edp_a_1080p_14_0_check_fb(struct device *dev, struct fb_info *info)
+{
+       return info->device == &disp_device->dev;
+}
+
+static struct platform_pwm_backlight_data edp_a_1080p_14_0_bl_data = {
+       .pwm_id         = 1,
+       .max_brightness = 255,
+       .dft_brightness = 224,
+       .pwm_period_ns  = 1000000,
+       .notify         = edp_a_1080p_14_0_bl_notify,
+       /* Only toggle backlight on fb blank notifications for disp1 */
+       .check_fb       = edp_a_1080p_14_0_check_fb,
+};
+
+static struct platform_device __maybe_unused
+               edp_a_1080p_14_0_bl_device = {
+       .name   = "pwm-backlight",
+       .id     = -1,
+       .dev    = {
+               .platform_data = &edp_a_1080p_14_0_bl_data,
+       },
+};
+
+static struct platform_device __maybe_unused
+                       *edp_a_1080p_14_0_bl_devices[] __initdata = {
+       &tegra_pwfm_device,
+       &edp_a_1080p_14_0_bl_device,
+};
+
+static int  __init edp_a_1080p_14_0_register_bl_dev(void)
+{
+       int err = 0;
+       err = platform_add_devices(edp_a_1080p_14_0_bl_devices,
+                               ARRAY_SIZE(edp_a_1080p_14_0_bl_devices));
+       if (err) {
+               pr_err("disp1 bl device registration failed");
+               return err;
+       }
+       return err;
+}
+
+static void edp_a_1080p_14_0_set_disp_device(
+       struct platform_device *laguna_display_device)
+{
+       disp_device = laguna_display_device;
+}
+
+static void edp_a_1080p_14_0_dc_out_init(struct tegra_dc_out *dc)
+{
+       dc->align = TEGRA_DC_ALIGN_MSB,
+       dc->order = TEGRA_DC_ORDER_RED_BLUE,
+       dc->flags = DC_CTRL_MODE;
+       dc->modes = edp_a_1080p_14_0_modes;
+       dc->n_modes = ARRAY_SIZE(edp_a_1080p_14_0_modes);
+       dc->out_pins = edp_out_pins,
+       dc->n_out_pins = ARRAY_SIZE(edp_out_pins),
+       dc->depth = 18,
+       dc->parent_clk = "pll_d_out0";
+       dc->enable = edp_a_1080p_14_0_enable;
+       dc->disable = edp_a_1080p_14_0_disable;
+       dc->postsuspend = edp_a_1080p_14_0_postsuspend,
+       dc->width = 320;
+       dc->height = 205;
+       dc->hotplug_gpio = TEGRA_GPIO_PFF0;
+}
+
+static void edp_a_1080p_14_0_fb_data_init(struct tegra_fb_data *fb)
+{
+       fb->xres = edp_a_1080p_14_0_modes[0].h_active;
+       fb->yres = edp_a_1080p_14_0_modes[0].v_active;
+}
+
+static void
+edp_a_1080p_14_0_sd_settings_init(struct tegra_dc_sd_settings *settings)
+{
+       settings->bl_device_name = "pwm-backlight";
+}
+
+struct tegra_panel __initdata edp_a_1080p_14_0 = {
+       .init_sd_settings = edp_a_1080p_14_0_sd_settings_init,
+       .init_dc_out = edp_a_1080p_14_0_dc_out_init,
+       .init_fb_data = edp_a_1080p_14_0_fb_data_init,
+       .register_bl_dev = edp_a_1080p_14_0_register_bl_dev,
+       .set_disp_device = edp_a_1080p_14_0_set_disp_device,
+};
+EXPORT_SYMBOL(edp_a_1080p_14_0);
+
index bd2fc23..87ff399 100644 (file)
@@ -57,6 +57,7 @@
 #define    BOARD_E1631    0x065f
 #define    BOARD_PM354    0x0162
 #define    BOARD_E1813    0x0715
+#define    BOARD_E1824    0x0720
 
 #define    BOARD_E1563    0x061b
 #define BOARD_P2560   0x0A00