summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoryiho_cheng <yiho_cheng@htc.com>2014-10-22 15:00:44 +0800
committerRom Lemarchand <romlem@android.com>2014-10-22 16:16:25 +0000
commit3f3e8f29adbe60190e371ddca6ffced749d3767d (patch)
tree367007323f95e2d7c0073cf6e2933e1f42823e32
parent3d5099eca792e5b65fbe7458a563c71769dfc561 (diff)
downloadtegra-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.c8
-rw-r--r--drivers/regulator/palmas-regulator.c6
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;
}