[PATCH 0/2] power: regulator: rk8xx: Add 500us delay after LDO regulator is enabled

With the series "regulator: implement basic reference counter" [1], keeping regulator enablement in balance become more important.
A quick power cycle of a LDO regulator during dw-mmc signal voltage change, see patch 1, has shown that SD-card does not always get recognized after the vqmmc-supply is re-enabled.
Patch 2 fix this issue by applying a similar 400us enable_time delay the linux driver use.
Patch 1 is marked as DO NOT MERGE because it may have unintended affects like this and should be considered together with the "regulator: implement basic reference counter" series.
[1] https://patchwork.ozlabs.org/project/uboot/list/?series=351536
Jonas Karlman (2): DO NOT MERGE: mmc: dw_mmc: Keep vqmmc-supply enable count in balance power: regulator: rk8xx: Add 500us delay after LDO regulator is enabled
drivers/mmc/dw_mmc.c | 4 ++++ drivers/power/regulator/rk8xx.c | 4 ++++ 2 files changed, 8 insertions(+)

With the series "regulator: implement basic reference counter" [1], keeping regulator enablement in balance become more important.
Disable vqmmc-supply before signal voltage is changed to keep regulator enable counter in balance.
[1] https://patchwork.ozlabs.org/project/uboot/list/?series=351536
Signed-off-by: Jonas Karlman jonas@kwiboo.se --- drivers/mmc/dw_mmc.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c index 5085a3b491da..400066fa99a2 100644 --- a/drivers/mmc/dw_mmc.c +++ b/drivers/mmc/dw_mmc.c @@ -509,6 +509,10 @@ static int dwmci_set_ios(struct mmc *mmc) if (mmc->vqmmc_supply) { int ret;
+ ret = regulator_set_enable_if_allowed(mmc->vqmmc_supply, false); + if (ret) + return ret; + if (mmc->signal_voltage == MMC_SIGNAL_VOLTAGE_180) regulator_set_value(mmc->vqmmc_supply, 1800000); else

On 2023/7/2 20:41, Jonas Karlman wrote:
With the series "regulator: implement basic reference counter" [1], keeping regulator enablement in balance become more important.
Disable vqmmc-supply before signal voltage is changed to keep regulator enable counter in balance.
[1] https://patchwork.ozlabs.org/project/uboot/list/?series=351536
Signed-off-by: Jonas Karlman jonas@kwiboo.se
Reviewed-by: Kever Yang kever.yang@rock-chips.com
Thanks, - Kever
drivers/mmc/dw_mmc.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c index 5085a3b491da..400066fa99a2 100644 --- a/drivers/mmc/dw_mmc.c +++ b/drivers/mmc/dw_mmc.c @@ -509,6 +509,10 @@ static int dwmci_set_ios(struct mmc *mmc) if (mmc->vqmmc_supply) { int ret;
ret = regulator_set_enable_if_allowed(mmc->vqmmc_supply, false);
if (ret)
return ret;
- if (mmc->signal_voltage == MMC_SIGNAL_VOLTAGE_180) regulator_set_value(mmc->vqmmc_supply, 1800000); else

Hi Kever,
This patch was not intended to be merged as-is, at least not with "DO NOT MERGE" in the subject.
An updated revision of this patch is part of the "Keep fixed/gpio regulator enable count in balance" series [2] and should be merged as part of that series.
[2] https://patchwork.ozlabs.org/project/uboot/list/?series=364753
Regards, Jonas On 2023-07-31 08:52, Kever Yang wrote:
On 2023/7/2 20:41, Jonas Karlman wrote:
With the series "regulator: implement basic reference counter" [1], keeping regulator enablement in balance become more important.
Disable vqmmc-supply before signal voltage is changed to keep regulator enable counter in balance.
[1] https://patchwork.ozlabs.org/project/uboot/list/?series=351536
Signed-off-by: Jonas Karlman jonas@kwiboo.se
Reviewed-by: Kever Yang kever.yang@rock-chips.com
Thanks,
- Kever
drivers/mmc/dw_mmc.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/mmc/dw_mmc.c b/drivers/mmc/dw_mmc.c index 5085a3b491da..400066fa99a2 100644 --- a/drivers/mmc/dw_mmc.c +++ b/drivers/mmc/dw_mmc.c @@ -509,6 +509,10 @@ static int dwmci_set_ios(struct mmc *mmc) if (mmc->vqmmc_supply) { int ret;
ret = regulator_set_enable_if_allowed(mmc->vqmmc_supply, false);
if (ret)
return ret;
- if (mmc->signal_voltage == MMC_SIGNAL_VOLTAGE_180) regulator_set_value(mmc->vqmmc_supply, 1800000); else

A quick power cycle of a LDO regulator during dw-mmc signal voltage change has shown that SD-card does not always get recognized.
Linux driver use an enable_time of 400us for LDO regulators. Apply a 500us delay when a LDO regulator is enabled to fix possible issues.
Fixes: 94afc1cb466a ("power: regulator: rk8xx: update the driver for rk808 and rk818") Signed-off-by: Jonas Karlman jonas@kwiboo.se --- drivers/power/regulator/rk8xx.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/power/regulator/rk8xx.c b/drivers/power/regulator/rk8xx.c index 0ee07ad299d7..e95640a39b0a 100644 --- a/drivers/power/regulator/rk8xx.c +++ b/drivers/power/regulator/rk8xx.c @@ -12,6 +12,7 @@ #include <dm.h> #include <errno.h> #include <log.h> +#include <linux/delay.h> #include <power/rk8xx_pmic.h> #include <power/pmic.h> #include <power/regulator.h> @@ -616,6 +617,9 @@ static int _ldo_set_enable(struct udevice *pmic, int ldo, bool enable) break; }
+ if (enable) + udelay(500); + return ret; }

Hi Jonas,
On 2023/7/2 20:41, Jonas Karlman wrote:
A quick power cycle of a LDO regulator during dw-mmc signal voltage change has shown that SD-card does not always get recognized.
Linux driver use an enable_time of 400us for LDO regulators. Apply a 500us delay when a LDO regulator is enabled to fix possible issues.
Does 400us not enough for the board you test?
Hi Elaine,
Could help to check this change?
Thanks,
- Kever
Fixes: 94afc1cb466a ("power: regulator: rk8xx: update the driver for rk808 and rk818") Signed-off-by: Jonas Karlman jonas@kwiboo.se
drivers/power/regulator/rk8xx.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/power/regulator/rk8xx.c b/drivers/power/regulator/rk8xx.c index 0ee07ad299d7..e95640a39b0a 100644 --- a/drivers/power/regulator/rk8xx.c +++ b/drivers/power/regulator/rk8xx.c @@ -12,6 +12,7 @@ #include <dm.h> #include <errno.h> #include <log.h> +#include <linux/delay.h> #include <power/rk8xx_pmic.h> #include <power/pmic.h> #include <power/regulator.h> @@ -616,6 +617,9 @@ static int _ldo_set_enable(struct udevice *pmic, int ldo, bool enable) break; }
- if (enable)
udelay(500);
- return ret; }

On 2023/7/2 20:41, Jonas Karlman wrote:
A quick power cycle of a LDO regulator during dw-mmc signal voltage change has shown that SD-card does not always get recognized.
Linux driver use an enable_time of 400us for LDO regulators. Apply a 500us delay when a LDO regulator is enabled to fix possible issues.
Fixes: 94afc1cb466a ("power: regulator: rk8xx: update the driver for rk808 and rk818") Signed-off-by: Jonas Karlman jonas@kwiboo.se
Reviewed-by: Kever Yang kever.yang@rock-chips.com
Thanks, - Kever
drivers/power/regulator/rk8xx.c | 4 ++++ 1 file changed, 4 insertions(+)
diff --git a/drivers/power/regulator/rk8xx.c b/drivers/power/regulator/rk8xx.c index 0ee07ad299d7..e95640a39b0a 100644 --- a/drivers/power/regulator/rk8xx.c +++ b/drivers/power/regulator/rk8xx.c @@ -12,6 +12,7 @@ #include <dm.h> #include <errno.h> #include <log.h> +#include <linux/delay.h> #include <power/rk8xx_pmic.h> #include <power/pmic.h> #include <power/regulator.h> @@ -616,6 +617,9 @@ static int _ldo_set_enable(struct udevice *pmic, int ldo, bool enable) break; }
- if (enable)
udelay(500);
- return ret; }
participants (2)
-
Jonas Karlman
-
Kever Yang