target: msm8974: edp back light through lpg channel 8
Currently edp back light is controlled by pulling high at
pm-gpio-36 directly. This cause back light inverted at
Android kernel. Fixed back light inverted problem by
control back light through lpg channel #8.
CRs-Fixed: 538278
Change-Id: Ia63bdc1e94ac4600252f215b039cf2227c9c08f9
diff --git a/target/msm8974/target_display.c b/target/msm8974/target_display.c
index 22568e8..e877f27 100644
--- a/target/msm8974/target_display.c
+++ b/target/msm8974/target_display.c
@@ -261,12 +261,31 @@
return 0;
}
+static void msm8974_lpg_backlight_enable(void)
+{
+ /* lpg channel 8 */
+ pm8x41_lpg_write(8, 0x41, 0x33); /* LPG_PWM_SIZE_CLK, */
+ pm8x41_lpg_write(8, 0x42, 0x01); /* LPG_PWM_FREQ_PREDIV */
+ pm8x41_lpg_write(8, 0x43, 0x20); /* LPG_PWM_TYPE_CONFIG */
+ pm8x41_lpg_write(8, 0x44, 0xb2); /* LPG_VALUE_LSB */
+ pm8x41_lpg_write(8, 0x45, 0x01); /* LPG_VALUE_MSB */
+ pm8x41_lpg_write(8, 0x46, 0xe4); /* LPG_ENABLE_CONTROL */
+}
+
+static void msm8974_lpg_backlight_disable(void)
+{
+ pm8x41_lpg_write(8, 0x46, 0x00); /* LPG_ENABLE_CONTROL */
+}
+
static int msm8974_edp_panel_power(int enable)
{
struct pm8x41_gpio gpio36_param = {
.direction = PM_GPIO_DIR_OUT,
+ .function = PM_GPIO_FUNC_2,
+ .vin_sel = 2, /* VIN_2 */
+ .pull = PM_GPIO_PULL_UP_1_5 | PM_GPIO_PULLDOWN_10,
.output_buffer = PM_GPIO_OUT_CMOS,
- .out_strength = PM_GPIO_OUT_DRIVE_MED,
+ .out_strength = PM_GPIO_OUT_DRIVE_HIGH,
};
struct pm8x41_ldo ldo12 = LDO(PM8x41_LDO12, PLDO_TYPE);
@@ -275,7 +294,7 @@
/* Enable backlight */
dprintf(SPEW, "Enable Backlight\n");
pm8x41_gpio_config(36, &gpio36_param);
- pm8x41_gpio_set(36, PM_GPIO_FUNC_HIGH);
+ msm8974_lpg_backlight_enable();
dprintf(SPEW, "Enable Backlight Done\n");
/* Turn on LDO12 for edp vdda */
@@ -293,7 +312,7 @@
} else {
/* Keep LDO12 on, otherwise kernel will not boot */
gpio_set(58, 0);
- pm8x41_gpio_set(36, PM_GPIO_FUNC_LOW);
+ msm8974_lpg_backlight_disable();
}
return 0;