target: msm8952: Add PM660 support to msm8952 target

Add PM660 as an alternate PMIC for msm8952 target.

Change-Id: Iaae7b3e3c28fd2c66558affef3615a44d2ea279b
Signed-off-by: Umang Agrawal <uagrawal@codeaurora.org>
diff --git a/target/msm8952/init.c b/target/msm8952/init.c
index f779278..68d0c9f 100644
--- a/target/msm8952/init.c
+++ b/target/msm8952/init.c
@@ -246,27 +246,32 @@
 uint32_t target_is_pwrkey_pon_reason()
 {
 	uint32_t pmic = target_get_pmic();
-	uint8_t pon_reason = 0;
-	bool usb_present_sts = 0;
+	uint8_t pon_reason;
+	uint8_t is_cold_boot;
+	bool usb_present_sts;
 
-	if (pmic == PMIC_IS_PMI632)
-	{
+	if (pmic == PMIC_IS_PMI632) {
 		pon_reason = pmi632_get_pon_reason();
+		is_cold_boot = pm8x41_get_is_cold_boot();
 		usb_present_sts = !(USBIN_UV_RT_STS_PMI632 &
 				pm8x41_reg_read(SMBCHG_USB_RT_STS));
-	}
-	else if (pmic == PMIC_IS_PM8916) {
+	} else if (pmic == PMIC_IS_PM8916) {
 		pon_reason = pm8x41_get_pon_reason();
+		is_cold_boot = pm8x41_get_is_cold_boot();
 		usb_present_sts = (pon_reason & USB_CHG);
-	}
-	else
-	{
+	} else if (pmic == PMIC_IS_PM660) {
+		pon_reason = pm660_get_pon_reason();
+		is_cold_boot = pm660_get_is_cold_boot();
+		usb_present_sts = USBIN_PLUGIN_RT_STS &
+				pm8x41_reg_read(SCHG_USB_INT_RT_STS);
+	} else {
 		pon_reason = pm8950_get_pon_reason();
+		is_cold_boot = pm8x41_get_is_cold_boot();
 		usb_present_sts = !(USBIN_UV_RT_STS &
 			pm8x41_reg_read(SMBCHG_USB_RT_STS));
 	}
 
-	if (pm8x41_get_is_cold_boot() && ((pon_reason == KPDPWR_N) || (pon_reason == (KPDPWR_N|PON1))))
+	if (is_cold_boot && ((pon_reason == KPDPWR_N) || (pon_reason == (KPDPWR_N|PON1))))
 		return 1;
 	else if ((pon_reason == PON1) && (!usb_present_sts))
 		return 1;
@@ -453,18 +458,31 @@
 unsigned target_pause_for_battery_charge(void)
 {
 	uint32_t pmic = target_get_pmic();
-	uint8_t pon_reason = pm8x41_get_pon_reason();
-	uint8_t is_cold_boot = pm8x41_get_is_cold_boot();
+	uint8_t pon_reason;
+	uint8_t is_cold_boot;
 	bool usb_present_sts = 1;	/* don't care by default */
 
+	if (pmic == PMIC_IS_PM660) {
+		pon_reason = pm660_get_pon_reason();
+		is_cold_boot = pm660_get_is_cold_boot();
+	}
+	else {
+		pon_reason = pm8x41_get_pon_reason();
+		is_cold_boot = pm8x41_get_is_cold_boot();
+	}
+
 	if (target_is_pmi_enabled())
 	{
-		if (pmic == PMIC_IS_PMI632)
+		if (pmic == PMIC_IS_PMI632) {
 			usb_present_sts = !(USBIN_UV_RT_STS_PMI632 &
 				pm8x41_reg_read(SMBCHG_USB_RT_STS));
-		else
+		} else if (pmic == PMIC_IS_PM660) {
+			usb_present_sts = USBIN_PLUGIN_RT_STS &
+				pm8x41_reg_read(SCHG_USB_INT_RT_STS);
+		} else {
 			usb_present_sts = (!(USBIN_UV_RT_STS &
 				pm8x41_reg_read(SMBCHG_USB_RT_STS)));
+		}
 	}
 	else {
 		if (pmic == PMIC_IS_PM8916) {
@@ -739,6 +757,8 @@
 		pmi_type = board_pmic_target(1) & PMIC_TYPE_MASK;
 		if (pmi_type == PMIC_IS_PMI632)
 			return PMIC_IS_PMI632;
+		else if (pmi_type == PMIC_IS_PM660)
+			return PMIC_IS_PM660;
 		else
 			return PMIC_IS_PMI8950;
 	} else {
@@ -757,6 +777,8 @@
 	pmi_type = target_get_pmic();
 	if (pmi_type == PMIC_IS_PMI632) {
 		pmi632_reset_configure(reset_type);
+	} else if (pmi_type == PMIC_IS_PM660) {
+		pm8x41_reset_configure(reset_type);
 	} else {
 		if(target_is_pmi_enabled()) {
 			pm8994_reset_configure(reset_type);
diff --git a/target/msm8952/target_display.c b/target/msm8952/target_display.c
index 6c3b058..38cf975 100644
--- a/target/msm8952/target_display.c
+++ b/target/msm8952/target_display.c
@@ -275,7 +275,7 @@
 	uint8_t slave_id = PMIC_WLED_SLAVE_ID;	/* pmi */
 	uint32_t pmic_type = target_get_pmic();
 
-	if(pmic_type == PMIC_IS_PM8916)
+	if(pmic_type == PMIC_IS_PM8916 || pmic_type == PMIC_IS_PM660)
 		return NO_ERROR;
 
 	pm8x41_wled_config_slave_id(slave_id);
@@ -312,7 +312,7 @@
 	if ((pmic_type == PMIC_IS_PMI632) &&
 		(bl->bl_interface_type == BL_PWM)) {
 		ret = pwm_backlight_ctrl(enable);
-	} else if (pmic_type == PMIC_IS_PM8916) {
+	} else if (pmic_type == PMIC_IS_PM8916 || pmic_type == PMIC_IS_PM660) {
 		ret = pwm_backlight_ctrl(enable);
 	} else {
 		ret = msm8952_wled_backlight_ctrl(enable);
@@ -536,7 +536,7 @@
 	int rc = NO_ERROR;
 	uint32_t pmic_type = target_get_pmic();
 
-	if(pmic_type == PMIC_IS_PM8916)
+	if(pmic_type == PMIC_IS_PM8916 || pmic_type == PMIC_IS_PM660)
 		return NO_ERROR;
 	labibb = pinfo->labibb;
 
@@ -669,7 +669,7 @@
 			}
 			if (pmic_type == PMIC_IS_PMI632)
 				rc = qpnp_lcdb_enable(true);
-			else if(pmic_type != PMIC_IS_PM8916)
+			else if(pmic_type != PMIC_IS_PM8916 && pmic_type != PMIC_IS_PM660)
 				rc = qpnp_ibb_enable(true); /*5V boost*/
 			if (rc) {
 				dprintf(CRITICAL, "%s: qpnp_ibb/lcdb failed\n", __func__);