target: msm8996: Add support for weak battery charging

Initialize charger driver to make sure the battery is good enough to
continue boot up.

Change-Id: Iff425b804352b01f019377988d2c0f9982ec6caf
diff --git a/project/msm8996.mk b/project/msm8996.mk
index 396e108..73aa1bc 100644
--- a/project/msm8996.mk
+++ b/project/msm8996.mk
@@ -43,6 +43,7 @@
 DEFINES += USB_RESET_FROM_CLK=1
 DEFINES += USE_BOOTDEV_CMDLINE=1
 DEFINES += USE_RPMB_FOR_DEVINFO=1
+DEFINES += ENABLE_WBC=1
 
 #Disable thumb mode
 ENABLE_THUMB := false
diff --git a/target/msm8996/init.c b/target/msm8996/init.c
index f407eea..488ed47 100644
--- a/target/msm8996/init.c
+++ b/target/msm8996/init.c
@@ -58,6 +58,9 @@
 #include <qusb2_phy.h>
 #include <rpmb.h>
 #include <rpm-glink.h>
+#if ENABLE_WBC
+#include <pm_app_smbchg.h>
+#endif
 
 #define CE_INSTANCE             1
 #define CE_EE                   1
@@ -147,6 +150,10 @@
 		}
 	}
 
+#if ENABLE_WBC
+	pm_appsbl_set_dcin_suspend(1);
+#endif
+
 	/* Tear down glink channels */
 	rpm_glink_uninit();
 
@@ -237,6 +244,18 @@
 
 	spmi_init(PMIC_ARB_CHANNEL_NUM, PMIC_ARB_OWNER_ID);
 
+	/* Initialize Glink */
+	rpm_glink_init();
+
+#if ENABLE_WBC
+	/* Look for battery voltage and make sure we have enough to bootup
+	 * Otherwise initiate battery charging
+	 * Charging should happen as early as possible, any other driver
+	 * initialization before this should consider the power impact
+	 */
+	pm_appsbl_chg_check_weak_battery_status(1);
+#endif
+
 	target_keystatus();
 
 	if (target_use_signed_kernel())
@@ -266,9 +285,6 @@
 		dprintf(CRITICAL, "RPMB init failed\n");
 		ASSERT(0);
 	}
-	/* Initialize Glink */
-	rpm_glink_init();
-
 }
 
 unsigned board_machtype(void)
diff --git a/target/msm8996/rules.mk b/target/msm8996/rules.mk
index 8966c0a..a0c3a8d 100644
--- a/target/msm8996/rules.mk
+++ b/target/msm8996/rules.mk
@@ -28,6 +28,7 @@
 	dev/qpnp_wled \
 	dev/qpnp_led \
 	dev/gcdb/display \
+	dev/pmic/pmi8994 \
 	lib/ptable \
 	lib/libfdt