msm: devices-8960: Add a rpmrs level to support SVS voltage
This commit includes a few updates to support voting for SVS voltage.
1) Update the active voltage to include the SVS voltage as the system
is functional in the SVS voltage.
2) When interrupts not monitored by MPM are enabled, disallow modes
whose the upper bound vdd_dig is lesser than Retention high voltage.
3) Handle vdd_dig and vdd_mem edge cases to allow modes when the voted
voltage is equal to upper threshold.
Change-Id: Idebdf4d8be8d9a2aa741b7219ae31ab0e2a9b165
Signed-off-by: Maheshkumar Sivasubramanian <msivasub@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c
index 790580e..75ea97d 100644
--- a/arch/arm/mach-msm/board-msm8960.c
+++ b/arch/arm/mach-msm/board-msm8960.c
@@ -4357,6 +4357,12 @@
false,
6300, 4500, 65350000, 4800,
},
+ {
+ MSM_PM_SLEEP_MODE_POWER_COLLAPSE,
+ MSM_RPMRS_LIMITS(ON, HSFS_OPEN, ACTIVE, RET_HIGH),
+ false,
+ 7000, 3500, 66600000, 5150,
+ },
{
MSM_PM_SLEEP_MODE_POWER_COLLAPSE,
diff --git a/arch/arm/mach-msm/include/mach/rpm-8960.h b/arch/arm/mach-msm/include/mach/rpm-8960.h
index d5ebba0..11862ea 100644
--- a/arch/arm/mach-msm/include/mach/rpm-8960.h
+++ b/arch/arm/mach-msm/include/mach/rpm-8960.h
@@ -305,14 +305,14 @@
MSM_RPMRS_VDD_MEM_RET_LOW = 750000,
MSM_RPMRS_VDD_MEM_RET_HIGH = 750000,
MSM_RPMRS_VDD_MEM_ACTIVE = 1050000,
- MSM_RPMRS_VDD_MEM_MAX = 1250000,
+ MSM_RPMRS_VDD_MEM_MAX = 1150000,
};
enum {
MSM_RPMRS_VDD_DIG_RET_LOW = 500000,
MSM_RPMRS_VDD_DIG_RET_HIGH = 750000,
- MSM_RPMRS_VDD_DIG_ACTIVE = 1050000,
- MSM_RPMRS_VDD_DIG_MAX = 1250000,
+ MSM_RPMRS_VDD_DIG_ACTIVE = 950000,
+ MSM_RPMRS_VDD_DIG_MAX = 1150000,
};
/* RPM status ID enum */
diff --git a/arch/arm/mach-msm/rpm_resources.c b/arch/arm/mach-msm/rpm_resources.c
index 0cc2272..3e6a7e5 100644
--- a/arch/arm/mach-msm/rpm_resources.c
+++ b/arch/arm/mach-msm/rpm_resources.c
@@ -306,7 +306,7 @@
vdd_mem = MSM_RPMRS_VDD_MEM_ACTIVE;
}
- return MSM_RPMRS_VDD(vdd_mem) >=
+ return MSM_RPMRS_VDD(vdd_mem) >
MSM_RPMRS_VDD(limits->vdd_mem_upper_bound);
}
@@ -357,7 +357,7 @@
vdd_dig = MSM_RPMRS_VDD_DIG_ACTIVE;
}
- return MSM_RPMRS_VDD(vdd_dig) >=
+ return MSM_RPMRS_VDD(vdd_dig) >
MSM_RPMRS_VDD(limits->vdd_dig_upper_bound);
}
@@ -396,7 +396,7 @@
bool irqs_detect, bool gpio_detect)
{
- if (limits->vdd_dig <= MSM_RPMRS_VDD_DIG_RET_HIGH)
+ if (limits->vdd_dig_upper_bound <= MSM_RPMRS_VDD_DIG_RET_HIGH)
return irqs_detect;
if (limits->pxo == MSM_RPMRS_PXO_OFF)