summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2016-08-19 05:29:21 -0700
committerGerrit - the friendly Code Review server <code-review@localhost>2016-08-19 05:29:20 -0700
commitaf31dfedfea4ca353f577ebeff54a261d09fc65e (patch)
tree4a44619d2c9529ad9a0a4a52ed5044db139e93e4
parent521c0c89d95ed6c74dc005ebee0fb334c8d63398 (diff)
parente759633f979a6cbf63b40e26e81427c3a89478cf (diff)
Merge "soc: qcom: spm: Poll for the PMIC_STATE after updating the VCTL register"
-rw-r--r--arch/arm/boot/dts/qcom/msm8996-pm.dtsi2
-rw-r--r--arch/arm/boot/dts/qcom/msmcobalt-pm.dtsi4
-rw-r--r--drivers/soc/qcom/msm-spm.c8
3 files changed, 8 insertions, 6 deletions
diff --git a/arch/arm/boot/dts/qcom/msm8996-pm.dtsi b/arch/arm/boot/dts/qcom/msm8996-pm.dtsi
index 9f326a040fb3..c09b18b51656 100644
--- a/arch/arm/boot/dts/qcom/msm8996-pm.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996-pm.dtsi
@@ -22,7 +22,7 @@
qcom,name = "system-cbf"; /* CBF SAW */
qcom,saw2-ver-reg = <0xFD0>;
qcom,cpu-vctl-list = <&CPU0 &CPU1 &CPU2 &CPU3>;
- qcom,vctl-timeout-us = <50>;
+ qcom,vctl-timeout-us = <500>;
qcom,vctl-port = <0x0>;
qcom,phase-port = <0x1>;
qcom,saw2-avs-ctl = <0x1100>;
diff --git a/arch/arm/boot/dts/qcom/msmcobalt-pm.dtsi b/arch/arm/boot/dts/qcom/msmcobalt-pm.dtsi
index 6103f4c2b304..698f44fd0958 100644
--- a/arch/arm/boot/dts/qcom/msmcobalt-pm.dtsi
+++ b/arch/arm/boot/dts/qcom/msmcobalt-pm.dtsi
@@ -20,7 +20,7 @@
qcom,name = "gold-l2"; /* Gold L2 SAW */
qcom,saw2-ver-reg = <0xfd0>;
qcom,cpu-vctl-list = <&CPU4 &CPU5 &CPU6 &CPU7>;
- qcom,vctl-timeout-us = <50>;
+ qcom,vctl-timeout-us = <500>;
qcom,vctl-port = <0x0>;
qcom,phase-port = <0x1>;
qcom,saw2-avs-ctl = <0x1010031>;
@@ -36,7 +36,7 @@
qcom,name = "silver-l2"; /* Silver L2 SAW */
qcom,saw2-ver-reg = <0xfd0>;
qcom,cpu-vctl-list = <&CPU0 &CPU1 &CPU2 &CPU3>;
- qcom,vctl-timeout-us = <50>;
+ qcom,vctl-timeout-us = <500>;
qcom,vctl-port = <0x0>;
qcom,phase-port = <0x1>;
qcom,saw2-avs-ctl = <0x1010031>;
diff --git a/drivers/soc/qcom/msm-spm.c b/drivers/soc/qcom/msm-spm.c
index 2eec37457fda..508aa77c7e42 100644
--- a/drivers/soc/qcom/msm-spm.c
+++ b/drivers/soc/qcom/msm-spm.c
@@ -231,7 +231,7 @@ uint32_t msm_spm_drv_get_sts_curr_pmic_data(
struct msm_spm_driver_data *dev)
{
msm_spm_drv_load_shadow(dev, MSM_SPM_REG_SAW_PMIC_STS);
- return dev->reg_shadow[MSM_SPM_REG_SAW_PMIC_STS] & 0xFF;
+ return dev->reg_shadow[MSM_SPM_REG_SAW_PMIC_STS] & 0x300FF;
}
static inline void msm_spm_drv_get_saw2_ver(struct msm_spm_driver_data *dev,
@@ -532,10 +532,12 @@ int msm_spm_drv_set_vdd(struct msm_spm_driver_data *dev, unsigned int vlevel)
timeout_us = dev->vctl_timeout_us;
/* Confirm the voltage we set was what hardware sent */
do {
+ udelay(1);
new_level = msm_spm_drv_get_sts_curr_pmic_data(dev);
- if (new_level == vlevel)
+ /* FSM is idle */
+ if (((new_level & 0x30000) == 0) &&
+ ((new_level & 0xFF) == vlevel))
break;
- udelay(1);
} while (--timeout_us);
if (!timeout_us) {
pr_info("Wrong level %#x\n", new_level);