summaryrefslogtreecommitdiffstats
path: root/drivers/regulator/rtq6752-regulator.c
diff options
context:
space:
mode:
authorChiYuan Huang <cy_huang@richtek.com>2021-09-14 16:20:49 +0200
committerMark Brown <broonie@kernel.org>2021-09-15 14:12:39 +0200
commit6f3a9b100379320d27f4a64fa90f58101c95c5a8 (patch)
tree9e66f4d159fcafc2bb0a8620d044e95ce128bd7a /drivers/regulator/rtq6752-regulator.c
parentregulator: Convert SY8106A binding to a schema (diff)
downloadlinux-6f3a9b100379320d27f4a64fa90f58101c95c5a8.tar.xz
linux-6f3a9b100379320d27f4a64fa90f58101c95c5a8.zip
regulator: rtq6752: Enclose 'enable' gpio control by enable flag
Fix 'enable' gpio control logic from the below cases if it's specified. 1. All off and both are sequentially controlled to be on. The 'enable' gpio control block to be called twice including the delay time. 2. Both are on and one is preparing to be off. The 'enable' gpio control low before register cache is configured to be true. Signed-off-by: ChiYuan Huang <cy_huang@richtek.com> Link: https://lore.kernel.org/r/1631629249-9998-1-git-send-email-u0084500@gmail.com Signed-off-by: Mark Brown <broonie@kernel.org>
Diffstat (limited to 'drivers/regulator/rtq6752-regulator.c')
-rw-r--r--drivers/regulator/rtq6752-regulator.c18
1 files changed, 9 insertions, 9 deletions
diff --git a/drivers/regulator/rtq6752-regulator.c b/drivers/regulator/rtq6752-regulator.c
index 609d3fcf4923..dfe45fb67353 100644
--- a/drivers/regulator/rtq6752-regulator.c
+++ b/drivers/regulator/rtq6752-regulator.c
@@ -54,14 +54,14 @@ static int rtq6752_set_vdd_enable(struct regulator_dev *rdev)
int rid = rdev_get_id(rdev), ret;
mutex_lock(&priv->lock);
- if (priv->enable_gpio) {
- gpiod_set_value(priv->enable_gpio, 1);
+ if (!priv->enable_flag) {
+ if (priv->enable_gpio) {
+ gpiod_set_value(priv->enable_gpio, 1);
- usleep_range(RTQ6752_I2CRDY_TIMEUS,
- RTQ6752_I2CRDY_TIMEUS + 100);
- }
+ usleep_range(RTQ6752_I2CRDY_TIMEUS,
+ RTQ6752_I2CRDY_TIMEUS + 100);
+ }
- if (!priv->enable_flag) {
regcache_cache_only(priv->regmap, false);
ret = regcache_sync(priv->regmap);
if (ret) {
@@ -91,11 +91,11 @@ static int rtq6752_set_vdd_disable(struct regulator_dev *rdev)
if (!priv->enable_flag) {
regcache_cache_only(priv->regmap, true);
regcache_mark_dirty(priv->regmap);
- }
- if (priv->enable_gpio)
- gpiod_set_value(priv->enable_gpio, 0);
+ if (priv->enable_gpio)
+ gpiod_set_value(priv->enable_gpio, 0);
+ }
mutex_unlock(&priv->lock);
return 0;