Merge "target: msm8994: configure lab/ibb from panel for 8994"
diff --git a/dev/gcdb/display/include/panel_sharp_wqxga_dualdsi_video.h b/dev/gcdb/display/include/panel_sharp_wqxga_dualdsi_video.h
index 2fccf8c..68a277d 100644
--- a/dev/gcdb/display/include/panel_sharp_wqxga_dualdsi_video.h
+++ b/dev/gcdb/display/include/panel_sharp_wqxga_dualdsi_video.h
@@ -147,6 +147,10 @@
 	1, 1, 4095, 100, 1, "PMIC_8941"		/* BL_WLED */
 };
 
+static struct labibb_desc sharp_wqxga_dualdsi_video_labibb = {
+	0, 1, 5500000, 5500000, 5500000, 5500000, 3, 3, 1
+};
+
 #define SHARP_WQXGA_DUALDSI_VIDEO_SIGNATURE 0x210000
 
 #endif /*_PANEL_SHARP_WQXGA_DUALDSI_VIDEO_H_*/
diff --git a/target/msm8994/init.c b/target/msm8994/init.c
index 925fcde..c4e467c 100644
--- a/target/msm8994/init.c
+++ b/target/msm8994/init.c
@@ -58,8 +58,6 @@
 #include <qusb2_phy.h>
 #include <rpm-smd.h>
 #include <sdhci_msm.h>
-#include <pm8x41_wled.h>
-#include <qpnp_wled.h>
 
 #include "target/display.h"
 
@@ -336,10 +334,6 @@
 	mmc_read_partition_table(0);
 
 	rpm_smd_init();
-
-	/* QPNP WLED init for display backlight */
-	pm8x41_wled_config_slave_id(PMIC_WLED_SLAVE_ID);
-	qpnp_wled_init();
 }
 
 unsigned board_machtype(void)
diff --git a/target/msm8994/oem_panel.c b/target/msm8994/oem_panel.c
index 7264474..ac227a4 100644
--- a/target/msm8994/oem_panel.c
+++ b/target/msm8994/oem_panel.c
@@ -135,6 +135,9 @@
 		panelstruct->panelresetseq
 					 = &sharp_wqxga_dualdsi_video_reset_seq;
 		panelstruct->backlightinfo = &sharp_wqxga_dualdsi_video_backlight;
+
+		pinfo->labibb = &sharp_wqxga_dualdsi_video_labibb;
+
 		pinfo->mipi.panel_on_cmds
 			= sharp_wqxga_dualdsi_video_on_command;
 		pinfo->mipi.num_of_panel_on_cmds
diff --git a/target/msm8994/target_display.c b/target/msm8994/target_display.c
index 7e6cdea..08c8b12 100644
--- a/target/msm8994/target_display.c
+++ b/target/msm8994/target_display.c
@@ -347,11 +347,68 @@
 	return NO_ERROR;
 }
 
+static void wled_init(struct msm_panel_info *pinfo)
+{
+	struct qpnp_wled_config_data config = {0};
+	struct labibb_desc *labibb;
+	int display_type = 0;
+
+	labibb = pinfo->labibb;
+
+	if (labibb)
+		display_type = labibb->amoled_panel;
+
+	config.display_type = display_type;
+	config.lab_init_volt = 4600000;	/* fixed, see pmi register */
+	config.ibb_init_volt = 1400000;	/* fixed, see pmi register */
+
+	if (labibb && labibb->force_config) {
+		config.lab_min_volt = labibb->lab_min_volt;
+		config.lab_max_volt = labibb->lab_max_volt;
+		config.ibb_min_volt = labibb->ibb_min_volt;
+		config.ibb_max_volt = labibb->ibb_max_volt;
+		config.pwr_up_delay = labibb->pwr_up_delay;
+		config.pwr_down_delay = labibb->pwr_down_delay;
+		config.ibb_discharge_en = labibb->ibb_discharge_en;
+	} else {
+		/* default */
+		config.pwr_up_delay = 3;
+		config.pwr_down_delay =  3;
+		config.ibb_discharge_en = 1;
+		if (display_type) {	/* amoled */
+			config.lab_min_volt = 4600000;
+			config.lab_max_volt = 4600000;
+			config.ibb_min_volt = 4000000;
+			config.ibb_max_volt = 4000000;
+		} else { /* lcd */
+			config.lab_min_volt = 5500000;
+			config.lab_max_volt = 5500000;
+			config.ibb_min_volt = 5500000;
+			config.ibb_max_volt = 5500000;
+		}
+	}
+
+	dprintf(SPEW, "%s: %d %d %d %d %d %d %d %d %d %d\n", __func__,
+		config.display_type,
+		config.lab_min_volt, config.lab_max_volt,
+		config.ibb_min_volt, config.ibb_max_volt,
+		config.lab_init_volt, config.ibb_init_volt,
+		config.pwr_up_delay, config.pwr_down_delay,
+		config.ibb_discharge_en);
+
+
+	/* QPNP WLED init for display backlight */
+	pm8x41_wled_config_slave_id(PMIC_WLED_SLAVE_ID);
+
+	qpnp_wled_init(&config);
+}
+
 int target_ldo_ctrl(uint8_t enable, struct msm_panel_info *pinfo)
 {
 	if (enable) {
 		regulator_enable();	/* L2, L12, L14, and L28 */
 		mdelay(10);
+		wled_init(pinfo);
 		qpnp_ibb_enable(true);	/* +5V and -5V */
 		mdelay(50);