Merge "target: mdm9607: Fix possible NULL pointer dereference."
diff --git a/platform/mdm9640/platform.c b/platform/mdm9640/platform.c
index 29181be..db301ee 100644
--- a/platform/mdm9640/platform.c
+++ b/platform/mdm9640/platform.c
@@ -69,7 +69,6 @@
 	{MEMBASE,               MEMBASE,                    MEMSIZE / MB,              LK_MEMORY},
 	{MSM_IOMAP_BASE,        MSM_IOMAP_BASE,             MSM_IOMAP_SIZE,            IOMAP_MEMORY},
 	{SCRATCH_REGION1,       SCRATCH_REGION1, SCRATCH_REGION1_SIZE / MB, SCRATCH_MEMORY},
-	{SCRATCH_REGION2,       SCRATCH_REGION2, SCRATCH_REGION2_SIZE / MB, SCRATCH_MEMORY},
 	{KERNEL_REGION,         KERNEL_REGION, KERNEL_REGION_SIZE / MB, SCRATCH_MEMORY},
 };
 
diff --git a/target/mdm9640/init.c b/target/mdm9640/init.c
index 9e02cf2..b335731 100644
--- a/target/mdm9640/init.c
+++ b/target/mdm9640/init.c
@@ -150,7 +150,8 @@
 	pmic_info_populate();
 
 	spmi_init(PMIC_ARB_CHANNEL_NUM, PMIC_ARB_OWNER_ID);
-	rpm_smd_init();
+	if(!platform_is_sdxhedgehog())
+		rpm_smd_init();
 
 	if (platform_boot_dev_isemmc()) {
 		target_sdc_init();
@@ -419,7 +420,8 @@
 	if (crypto_initialized())
 		crypto_eng_cleanup();
 
-	rpm_smd_uninit();
+	if(!platform_is_sdxhedgehog())
+		rpm_smd_uninit();
 }
 
 void target_usb_phy_reset(void)
diff --git a/target/mdm9640/meminfo.c b/target/mdm9640/meminfo.c
index 7516b42..d71630c 100644
--- a/target/mdm9640/meminfo.c
+++ b/target/mdm9640/meminfo.c
@@ -77,10 +77,10 @@
 
 void *target_get_scratch_address(void)
 {
-	return ((void *) VA((addr_t)SCRATCH_REGION2));
+	return ((void *) VA((addr_t)SCRATCH_REGION1));
 }
 
 unsigned target_get_max_flash_size(void)
 {
-	return (SCRATCH_REGION2_SIZE);
+	return (SCRATCH_REGION1_SIZE);
 }
diff --git a/target/msm8996/init.c b/target/msm8996/init.c
index f9e63ee..539d98d 100644
--- a/target/msm8996/init.c
+++ b/target/msm8996/init.c
@@ -44,6 +44,7 @@
 #include <regulator.h>
 #include <dev/keys.h>
 #include <pm8x41.h>
+#include <pm8x41_hw.h>
 #include <crypto5_wrapper.h>
 #include <clock.h>
 #include <partition_parser.h>
@@ -87,6 +88,13 @@
 #define PMIC_ARB_CHANNEL_NUM    0
 #define PMIC_ARB_OWNER_ID       0
 
+#define SMBCHG_USB_RT_STS 0x21310
+#define SMBCHG_DC_RT_STS 0x21410
+#define USBIN_UV_RT_STS BIT(0)
+#define USBIN_OV_RT_STS BIT(1)
+#define DCIN_UV_RT_STS  BIT(0)
+#define DCIN_OV_RT_STS  BIT(1)
+
 enum
 {
 	FUSION_I2S_MTP = 1,
@@ -255,8 +263,18 @@
 uint32_t target_is_pwrkey_pon_reason()
 {
 	uint8_t pon_reason = pm8950_get_pon_reason();
+
 	if (pm8x41_get_is_cold_boot() && ((pon_reason == KPDPWR_N) || (pon_reason == (KPDPWR_N|PON1))))
 		return 1;
+	else if (pon_reason == PON1)
+	{
+		/* DC charger is present or USB charger is present */
+		if (((USBIN_UV_RT_STS | USBIN_OV_RT_STS) & pm8x41_reg_read(SMBCHG_USB_RT_STS)) == 0 ||
+			((DCIN_UV_RT_STS | DCIN_OV_RT_STS) & pm8x41_reg_read(SMBCHG_DC_RT_STS)) == 0)
+			return 0;
+		else
+			return 1;
+	}
 	else
 		return 0;
 }