arm: tegra: dalmore: fix display blank during boot
Emma Yan [Wed, 11 Sep 2013 08:52:35 +0000 (16:52 +0800)]
Please enable TEGRA_DC_OUT_INITIALIZED_MODE for
smooth transition from bootloader to kernel.

Bug 1342524
Bug 1277900

Change-Id: Ib37a5e4221b642f40ee6aa070945fc35774d9608
Signed-off-by: Emma Yan <eyan@nvidia.com>
Signed-off-by: Benjamin Lu <benjaminl@nvidia.com>
Reviewed-on: http://git-master/r/273002
Reviewed-by: Automatic_Commit_Validation_User
Reviewed-by: Animesh Kishore <ankishore@nvidia.com>
Reviewed-by: Laxman Dewangan <ldewangan@nvidia.com>

arch/arm/mach-tegra/board-dalmore-pinmux-t11x.h
arch/arm/mach-tegra/board-dalmore-pinmux.c
arch/arm/mach-tegra/board-dalmore-power.c
arch/arm/mach-tegra/panel-p-wuxga-10-1.c

index a45ca1e..e9e088f 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * arch/arm/mach-tegra/board-dalmore-pinmux-t11x.h
  *
- * Copyright (c) 2012-2013, NVIDIA Corporation.
+ * Copyright (c) 2012-2013, NVIDIA CORPORATION.  All rights reserved.
  *
  * This program is free software; you can redistribute it and/or modify
  * it under the terms of the GNU General Public License version 2 as
@@ -241,14 +241,15 @@ static struct gpio_init_pin_info init_gpio_mode_dalmore_common[] = {
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PCC2, true, 0),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PG0, false, 0),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PG1, false, 0),
-       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH2, false, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH1, false, 1),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH2, false, 1),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH3, false, 0),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH4, true, 0),
-       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH5, false, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH5, false, 1),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH6, false, 0),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH7, true, 0),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PG2, true, 0),
-       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PG3, true, 0),
+       GPIO_INIT_PIN_MODE(TEGRA_GPIO_PG3, true, 1),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PG4, false, 0),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PH0, false, 0),
        GPIO_INIT_PIN_MODE(TEGRA_GPIO_PK0, true, 0),
index 6351fd0..bf16e40 100644 (file)
@@ -67,7 +67,7 @@ static __initdata struct tegra_pingroup_config dalmore_pinmux_set_nontristate[]
 
        DEFAULT_PINMUX(GMI_AD0,         GMI,    NORMAL,       NORMAL,    OUTPUT),
        DEFAULT_PINMUX(GMI_AD1,         GMI,    NORMAL,       NORMAL,    OUTPUT),
-       DEFAULT_PINMUX(GMI_AD10,        GMI,    PULL_DOWN,    NORMAL,    OUTPUT),
+       DEFAULT_PINMUX(GMI_AD10,        GMI,  PULL_UP,      NORMAL,    OUTPUT),
        DEFAULT_PINMUX(GMI_AD11,        GMI,    NORMAL,       NORMAL,    OUTPUT),
        DEFAULT_PINMUX(GMI_AD12,        GMI,    PULL_UP,      NORMAL,    INPUT),
        DEFAULT_PINMUX(GMI_AD2,         GMI,    NORMAL,       NORMAL,    INPUT),
index e4caee0..137a7a7 100644 (file)
@@ -162,7 +162,7 @@ TPS65090_PDATA_INIT(DCDC2, dcdc2, NULL, 1, 1, 0, true, -1, -1);
 TPS65090_PDATA_INIT(DCDC3, dcdc3, NULL, 1, 1, 0, true, -1, -1);
 TPS65090_PDATA_INIT(LDO1, ldo1, NULL, 1, 1, 0, false, -1, -1);
 TPS65090_PDATA_INIT(LDO2, ldo2, NULL, 1, 1, 0, false, -1, -1);
-TPS65090_PDATA_INIT(FET1, fet1, NULL, 0, 0, 0, false, -1, 800);
+TPS65090_PDATA_INIT(FET1, fet1, NULL, 0, 1, 0, false, -1, 800);
 TPS65090_PDATA_INIT(FET3, fet3, tps65090_rails(DCDC2), 0, 0, 0, false, -1, 0);
 TPS65090_PDATA_INIT(FET4, fet4, tps65090_rails(DCDC2), 0, 0, 0, false, -1, 0);
 TPS65090_PDATA_INIT(FET5, fet5, tps65090_rails(DCDC2), 0, 0, 0, false, -1, 0);
@@ -980,7 +980,7 @@ FIXED_REG(8,        dvdd_ts,        dvdd_ts,
        TEGRA_GPIO_PH5, false,  false,  1,      1800);
 
 FIXED_REG(9,   lcd_bl_en,      lcd_bl_en,
-       NULL,   0,      0,
+       NULL,   0,      1,
        TEGRA_GPIO_PH2, false,  true,   0,      5000);
 
 FIXED_REG(10,  avdd_hdmi_pll,  avdd_hdmi_pll,
index a69321b..0c02303 100644 (file)
@@ -197,13 +197,6 @@ static int dalmore_dsi_gpio_get(void)
                goto fail;
        }
 
-       /* free pwm GPIO */
-       err = gpio_request(DSI_PANEL_BL_PWM, "panel pwm");
-       if (err < 0) {
-               pr_err("panel pwm gpio request failed\n");
-               goto fail;
-       }
-       gpio_free(DSI_PANEL_BL_PWM);
        gpio_requested = true;
        return 0;
 fail:
@@ -268,6 +261,9 @@ static int dsi_p_wuxga_10_1_enable(struct device *dev)
 {
        int err = 0;
 
+       struct tegra_dc_out *pdata = ((struct tegra_dc_platform_data *)
+               (dev->platform_data))->default_out;
+
        if (machine_is_dalmore())
                err = dalmore_dsi_regulator_get(dev);
        else if (machine_is_macallan())
@@ -324,7 +320,7 @@ static int dsi_p_wuxga_10_1_enable(struct device *dev)
                        goto fail;
                }
        }
-
+if (!(pdata->flags & TEGRA_DC_OUT_INITIALIZED_MODE)) {
        msleep(100);
 #if DSI_PANEL_RESET
        gpio_direction_output(gpio_lcd_rst, 1);
@@ -334,6 +330,7 @@ static int dsi_p_wuxga_10_1_enable(struct device *dev)
        gpio_set_value(gpio_lcd_rst, 1);
        msleep(20);
 #endif
+}
 
        return 0;
 fail:
@@ -571,22 +568,27 @@ static int dsi_p_wuxga_10_1_check_fb(struct device *dev, struct fb_info *info)
        return info->device == &disp_device->dev;
 }
 
+#if !(DC_CTRL_MODE & TEGRA_DC_OUT_INITIALIZED_MODE)
 static int dsi_p_wuxga_10_1_display_init(struct device *dev)
 {
        return atomic_read(&display_ready);
 }
+#endif
 
 static struct platform_pwm_backlight_data dsi_p_wuxga_10_1_bl_data = {
        .pwm_id         = 1,
        .max_brightness = 255,
        .dft_brightness = 224,
        .pwm_period_ns  = 1000000,
+       .pwm_gpio = DSI_PANEL_BL_PWM,
        .notify         = dsi_p_wuxga_10_1_bl_notify,
        .edp_states = { 3950, 2950, 1850, 940, 750, 0},
        .edp_brightness = {255, 213, 136, 73, 60, 0},
        /* Only toggle backlight on fb blank notifications for disp1 */
        .check_fb       = dsi_p_wuxga_10_1_check_fb,
+#if !(DC_CTRL_MODE & TEGRA_DC_OUT_INITIALIZED_MODE)
        .init = dsi_p_wuxga_10_1_display_init,
+#endif
 };
 
 static struct platform_device __maybe_unused