diff options
author | yiho_cheng <yiho_cheng@htc.com> | 2014-10-22 15:00:44 +0800 |
---|---|---|
committer | Rom Lemarchand <romlem@android.com> | 2014-10-22 16:16:25 +0000 |
commit | 3f3e8f29adbe60190e371ddca6ffced749d3767d (patch) | |
tree | 367007323f95e2d7c0073cf6e2933e1f42823e32 | |
parent | 3d5099eca792e5b65fbe7458a563c71769dfc561 (diff) | |
download | tegra-3f3e8f29adbe60190e371ddca6ffced749d3767d.tar.gz |
power: reset: palmas: clear VANA short status before PMIC switch-off
Errata - VANA SHORT prevents PMIC from power up.
clear VANA short status before suspend/switch-off which prevent PMIC
from getting stuck.
Bug: 17972080
Change-Id: I1ca2bad4062756468c1872203f1768b54f1a0bc3
(cherry picked from commit d942fd15ac8419055a3bea0e48543007f3bf978e)
-rw-r--r-- | drivers/power/reset/palmas-poweroff.c | 8 | ||||
-rw-r--r-- | drivers/regulator/palmas-regulator.c | 6 |
2 files changed, 13 insertions, 1 deletions
diff --git a/drivers/power/reset/palmas-poweroff.c b/drivers/power/reset/palmas-poweroff.c index 46ca020c8145..e84d654dda6d 100644 --- a/drivers/power/reset/palmas-poweroff.c +++ b/drivers/power/reset/palmas-poweroff.c @@ -97,7 +97,7 @@ static void palmas_power_off(void *drv_data) unsigned int val; int i; int ret; - unsigned int vbus_line_state; + unsigned int vbus_line_state, ldo_short_status2; palmas_allow_atomic_xfer(palmas); @@ -182,6 +182,12 @@ static void palmas_power_off(void *drv_data) } poweroff_direct: + /* Errata + * clear VANA short status before switch-off + */ + palmas_read(palmas, PALMAS_LDO_BASE, PALMAS_LDO_SHORT_STATUS2, + &ldo_short_status2); + /* Power off the device */ palmas_update_bits(palmas, PALMAS_PMU_CONTROL_BASE, PALMAS_DEV_CTRL, 1, 0); diff --git a/drivers/regulator/palmas-regulator.c b/drivers/regulator/palmas-regulator.c index a3653f832d86..bb5ce55abe8e 100644 --- a/drivers/regulator/palmas-regulator.c +++ b/drivers/regulator/palmas-regulator.c @@ -1862,6 +1862,7 @@ static int palmas_suspend(struct device *dev) struct palmas *palmas = dev_get_drvdata(dev->parent); struct palmas_pmic *pmic = dev_get_drvdata(dev); int id; + unsigned int ldo_short_status2; for (id = 0; id < PALMAS_NUM_REGS; id++) { unsigned int cf = pmic->config_flags[id]; @@ -1888,6 +1889,11 @@ static int palmas_suspend(struct device *dev) palmas_smps_write(palmas, PALMAS_SMPS10_CTRL, 0); } + /* Errata + * clear VANA short status before suspend + */ + palmas_ldo_read(palmas, PALMAS_LDO_SHORT_STATUS2, &ldo_short_status2); + return 0; } |