diff mbox series

[U-Boot] power: regulator: stpmu1: add power off delay

Message ID 1530093587-19698-1-git-send-email-patrice.chotard@st.com
State Accepted
Commit 844f9bf1eea75ff1ac1b1552ec4cac32ba829abb
Delegated to: Tom Rini
Headers show
Series [U-Boot] power: regulator: stpmu1: add power off delay | expand

Commit Message

Patrice CHOTARD June 27, 2018, 9:59 a.m. UTC
From: Christophe Kerello <christophe.kerello@st.com>

This patch adds a delay when regulators are disabled.
This delay is set to 5 ms to cover all use cases.
The worst use case actually seen is during a SD card power cycle.

Signed-off-by: Christophe Kerello <christophe.kerello@st.com>
Signed-off-by: Patrice Chotard <patrice.chotard@st.com>
---

 drivers/power/regulator/stpmu1.c | 20 ++++++++++++--------
 include/power/stpmu1.h           |  1 +
 2 files changed, 13 insertions(+), 8 deletions(-)

Comments

Tom Rini July 20, 2018, 12:35 p.m. UTC | #1
On Wed, Jun 27, 2018 at 11:59:47AM +0200, Patrice Chotard wrote:

> From: Christophe Kerello <christophe.kerello@st.com>
> 
> This patch adds a delay when regulators are disabled.
> This delay is set to 5 ms to cover all use cases.
> The worst use case actually seen is during a SD card power cycle.
> 
> Signed-off-by: Christophe Kerello <christophe.kerello@st.com>
> Signed-off-by: Patrice Chotard <patrice.chotard@st.com>

Applied to u-boot/master, thanks!
diff mbox series

Patch

diff --git a/drivers/power/regulator/stpmu1.c b/drivers/power/regulator/stpmu1.c
index 2dedb80acc42..6eb2420b6bcb 100644
--- a/drivers/power/regulator/stpmu1.c
+++ b/drivers/power/regulator/stpmu1.c
@@ -183,6 +183,8 @@  static int stpmu1_buck_get_enable(struct udevice *dev)
 static int stpmu1_buck_set_enable(struct udevice *dev, bool enable)
 {
 	struct dm_regulator_uclass_platdata *uc_pdata;
+	int delay = enable ? STPMU1_DEFAULT_START_UP_DELAY_MS :
+			     STPMU1_DEFAULT_STOP_DELAY_MS;
 	int ret, uv;
 
 	/* if regulator is already in the wanted state, nothing to do */
@@ -199,8 +201,7 @@  static int stpmu1_buck_set_enable(struct udevice *dev, bool enable)
 	ret = pmic_clrsetbits(dev->parent,
 			      STPMU1_BUCKX_CTRL_REG(dev->driver_data - 1),
 			      STPMU1_BUCK_EN, enable ? STPMU1_BUCK_EN : 0);
-	if (enable)
-		mdelay(STPMU1_DEFAULT_START_UP_DELAY_MS);
+	mdelay(delay);
 
 	return ret;
 }
@@ -361,6 +362,8 @@  static int stpmu1_ldo_get_enable(struct udevice *dev)
 static int stpmu1_ldo_set_enable(struct udevice *dev, bool enable)
 {
 	struct dm_regulator_uclass_platdata *uc_pdata;
+	int delay = enable ? STPMU1_DEFAULT_START_UP_DELAY_MS :
+			     STPMU1_DEFAULT_STOP_DELAY_MS;
 	int ret, uv;
 
 	/* if regulator is already in the wanted state, nothing to do */
@@ -377,8 +380,7 @@  static int stpmu1_ldo_set_enable(struct udevice *dev, bool enable)
 	ret = pmic_clrsetbits(dev->parent,
 			      STPMU1_LDOX_CTRL_REG(dev->driver_data - 1),
 			      STPMU1_LDO_EN, enable ? STPMU1_LDO_EN : 0);
-	if (enable)
-		mdelay(STPMU1_DEFAULT_START_UP_DELAY_MS);
+	mdelay(delay);
 
 	return ret;
 }
@@ -489,6 +491,8 @@  static int stpmu1_vref_ddr_get_enable(struct udevice *dev)
 
 static int stpmu1_vref_ddr_set_enable(struct udevice *dev, bool enable)
 {
+	int delay = enable ? STPMU1_DEFAULT_START_UP_DELAY_MS :
+			     STPMU1_DEFAULT_STOP_DELAY_MS;
 	int ret;
 
 	/* if regulator is already in the wanted state, nothing to do */
@@ -497,8 +501,7 @@  static int stpmu1_vref_ddr_set_enable(struct udevice *dev, bool enable)
 
 	ret = pmic_clrsetbits(dev->parent, STPMU1_VREF_CTRL_REG,
 			      STPMU1_VREF_EN, enable ? STPMU1_VREF_EN : 0);
-	if (enable)
-		mdelay(STPMU1_DEFAULT_START_UP_DELAY_MS);
+	mdelay(delay);
 
 	return ret;
 }
@@ -610,6 +613,8 @@  static int stpmu1_pwr_sw_get_enable(struct udevice *dev)
 static int stpmu1_pwr_sw_set_enable(struct udevice *dev, bool enable)
 {
 	uint mask = 1 << dev->driver_data;
+	int delay = enable ? STPMU1_DEFAULT_START_UP_DELAY_MS :
+			     STPMU1_DEFAULT_STOP_DELAY_MS;
 	int ret;
 
 	ret = pmic_reg_read(dev->parent, STPMU1_USB_CTRL_REG);
@@ -633,8 +638,7 @@  static int stpmu1_pwr_sw_set_enable(struct udevice *dev, bool enable)
 
 	ret = pmic_clrsetbits(dev->parent, STPMU1_USB_CTRL_REG,
 			      mask, enable ? mask : 0);
-	if (enable)
-		mdelay(STPMU1_DEFAULT_START_UP_DELAY_MS);
+	mdelay(delay);
 
 	return ret;
 }
diff --git a/include/power/stpmu1.h b/include/power/stpmu1.h
index 61c58f3b7009..5906fbf832bf 100644
--- a/include/power/stpmu1.h
+++ b/include/power/stpmu1.h
@@ -44,6 +44,7 @@ 
 #define STPMU1_NVM_USER_STATUS_ERROR	BIT(1)
 
 #define STPMU1_DEFAULT_START_UP_DELAY_MS	1
+#define STPMU1_DEFAULT_STOP_DELAY_MS		5
 #define STPMU1_USB_BOOST_START_UP_DELAY_MS	10
 
 enum {