diff options
| author | Linux Build Service Account <lnxbuild@localhost> | 2016-08-19 05:29:21 -0700 |
|---|---|---|
| committer | Gerrit - the friendly Code Review server <code-review@localhost> | 2016-08-19 05:29:20 -0700 |
| commit | af31dfedfea4ca353f577ebeff54a261d09fc65e (patch) | |
| tree | 4a44619d2c9529ad9a0a4a52ed5044db139e93e4 /drivers | |
| parent | 521c0c89d95ed6c74dc005ebee0fb334c8d63398 (diff) | |
| parent | e759633f979a6cbf63b40e26e81427c3a89478cf (diff) | |
Merge "soc: qcom: spm: Poll for the PMIC_STATE after updating the VCTL register"
Diffstat (limited to 'drivers')
| -rw-r--r-- | drivers/soc/qcom/msm-spm.c | 8 |
1 files changed, 5 insertions, 3 deletions
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); |
