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;
}