regulator: mc13783: Make mc13783_powermisc_rmw() lock protected
PATCH 1/2 regulator: mc13783: Make mc13783_powermisc_rmw() lock protected
Then we can remove lock/unlock around the caller.
Signed-off-by Axel Lin <[email protected]>
--- drivers/regulator/mc13783-regulator.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-)
drivers/regulator/mc13783-regulator.c +8 -14
@@ -238,9 +238,10 @@ static int mc13783_powermisc_rmw(struct mc13xxx_regulator_priv *priv, u32 mask,BUG_ON (val & ~mask); +mc13xxx_lock (priv->mc13xxx); ret =mc13xxx_reg_read (mc13783,MC13783_REG_POWERMISC , &valread);if (ret) -return ret; + goto out;/* Update the stored state for Power Gates. */ priv->powermisc_pwgt_state =
@@ -253,7 +254,10 @@ static int mc13783_powermisc_rmw(struct mc13xxx_regulator_priv *priv, u32 mask, valread = (valread & ~MC13783_REG_POWERMISC_PWGTSPI_M ) | priv->powermisc_pwgt_state; -return mc13xxx_reg_write (mc13783,MC13783_REG_POWERMISC , valread); + ret =mc13xxx_reg_write (mc13783,MC13783_REG_POWERMISC , valread); +out: +mc13xxx_unlock (priv->mc13xxx); +return ret; }static int mc13783_gpo_regulator_enable (struct regulator_dev *rdev)
@@ -261,7 +265,6 @@ static int mc13783_gpo_regulator_enable(struct regulator_dev *rdev)struct mc13xxx_regulator_priv *priv =rdev_get_drvdata (rdev);struct mc13xxx_regulator *mc13xxx_regulators = priv->mc13xxx_regulators;int id =rdev_get_id (rdev); -int ret;u32 en_val = mc13xxx_regulators[id].enable_bit;dev_dbg (rdev_get_dev (rdev),"%s id: %d\n" , __func__, id);
@@ -271,12 +274,8 @@ static int mc13783_gpo_regulator_enable(struct regulator_dev *rdev) id == MC13783_REG_PWGT2SPI) en_val =0 ; -mc13xxx_lock (priv->mc13xxx); - ret =mc13783_powermisc_rmw (priv, mc13xxx_regulators[id].enable_bit, +return mc13783_powermisc_rmw (priv, mc13xxx_regulators[id].enable_bit, en_val); -mc13xxx_unlock (priv->mc13xxx); - -return ret; }static int mc13783_gpo_regulator_disable (struct regulator_dev *rdev)
@@ -284,7 +283,6 @@ static int mc13783_gpo_regulator_disable(struct regulator_dev *rdev)struct mc13xxx_regulator_priv *priv =rdev_get_drvdata (rdev);struct mc13xxx_regulator *mc13xxx_regulators = priv->mc13xxx_regulators;int id =rdev_get_id (rdev); -int ret;u32 dis_val =0 ;dev_dbg (rdev_get_dev (rdev),"%s id: %d\n" , __func__, id);
@@ -294,12 +292,8 @@ static int mc13783_gpo_regulator_disable(struct regulator_dev *rdev) id == MC13783_REG_PWGT2SPI) dis_val = mc13xxx_regulators[id].enable_bit; -mc13xxx_lock (priv->mc13xxx); - ret =mc13783_powermisc_rmw (priv, mc13xxx_regulators[id].enable_bit, +return mc13783_powermisc_rmw (priv, mc13xxx_regulators[id].enable_bit, dis_val); -mc13xxx_unlock (priv->mc13xxx); - -return ret; }static int mc13783_gpo_regulator_is_enabled (struct regulator_dev *rdev)
Signature · 1 line
1.7.9.5
PATCH 2/2 regulator: mc13892: Make mc13892_powermisc_rmw() lock protected
Then we can remove lock/unlock around the caller.
Signed-off-by Axel Lin <[email protected]>
--- drivers/regulator/mc13892-regulator.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-)
drivers/regulator/mc13892-regulator.c +8 -14
@@ -305,9 +305,10 @@ static int mc13892_powermisc_rmw(struct mc13xxx_regulator_priv *priv, u32 mask,BUG_ON (val & ~mask); +mc13xxx_lock (priv->mc13xxx); ret =mc13xxx_reg_read (mc13892,MC13892_POWERMISC , &valread);if (ret) -return ret; + goto out;/* Update the stored state for Power Gates. */ priv->powermisc_pwgt_state =
@@ -320,14 +321,16 @@ static int mc13892_powermisc_rmw(struct mc13xxx_regulator_priv *priv, u32 mask, valread = (valread & ~MC13892_POWERMISC_PWGTSPI_M ) | priv->powermisc_pwgt_state; -return mc13xxx_reg_write (mc13892,MC13892_POWERMISC , valread); + ret =mc13xxx_reg_write (mc13892,MC13892_POWERMISC , valread); +out: +mc13xxx_unlock (priv->mc13xxx); +return ret; }static int mc13892_gpo_regulator_enable (struct regulator_dev *rdev) {struct mc13xxx_regulator_priv *priv =rdev_get_drvdata (rdev);int id =rdev_get_id (rdev); -int ret;u32 en_val = mc13892_regulators[id].enable_bit;u32 mask = mc13892_regulators[id].enable_bit;
@@ -340,18 +343,13 @@ static int mc13892_gpo_regulator_enable(struct regulator_dev *rdev)if (id ==MC13892_GPO4 ) mask |=MC13892_POWERMISC_GPO4ADINEN ; -mc13xxx_lock (priv->mc13xxx); - ret =mc13892_powermisc_rmw (priv, mask, en_val); -mc13xxx_unlock (priv->mc13xxx); - -return ret; +return mc13892_powermisc_rmw (priv, mask, en_val); }static int mc13892_gpo_regulator_disable (struct regulator_dev *rdev) {struct mc13xxx_regulator_priv *priv =rdev_get_drvdata (rdev);int id =rdev_get_id (rdev); -int ret;u32 dis_val =0 ;dev_dbg (rdev_get_dev (rdev),"%s id: %d\n" , __func__, id);
@@ -360,12 +358,8 @@ static int mc13892_gpo_regulator_disable(struct regulator_dev *rdev)if (id ==MC13892_PWGT1SPI || id ==MC13892_PWGT2SPI ) dis_val = mc13892_regulators[id].enable_bit; -mc13xxx_lock (priv->mc13xxx); - ret =mc13892_powermisc_rmw (priv, mc13892_regulators[id].enable_bit, +return mc13892_powermisc_rmw (priv, mc13892_regulators[id].enable_bit, dis_val); -mc13xxx_unlock (priv->mc13xxx); - -return ret; }static int mc13892_gpo_regulator_is_enabled (struct regulator_dev *rdev)
Signature · 1 line
1.7.9.5
Mark Brown
AppliedQuoted 1 line · Axel Lin
Then we can remove lock/unlock around the caller.
Applied both, thanks.
Quoted 50 lines
Signed-off-by Axel Lin <[email protected]>--- drivers/regulator/mc13783-regulator.c | 22 ++++++++-------------- 1 file changed, 8 insertions(+), 14 deletions(-)drivers/regulator/mc13783-regulator.c +7
-5@@ -238,9 +238,10 @@ static int mc13783_powermisc_rmw(struct mc13xxx_regulator_priv *priv, u32 mask,BUG_ON (val & ~mask); +mc13xxx_lock (priv->mc13xxx); ret =mc13xxx_reg_read (mc13783,MC13783_REG_POWERMISC , &valread);if (ret) -return ret; + goto out;/* Update the stored state for Power Gates. */ priv->powermisc_pwgt_state =@@ -253,7 +254,10 @@ static int mc13783_powermisc_rmw(struct mc13xxx_regulator_priv *priv, u32 mask, valread = (valread & ~MC13783_REG_POWERMISC_PWGTSPI_M ) | priv->powermisc_pwgt_state; -return mc13xxx_reg_write (mc13783,MC13783_REG_POWERMISC , valread); + ret =mc13xxx_reg_write (mc13783,MC13783_REG_POWERMISC , valread); +out: +mc13xxx_unlock (priv->mc13xxx); +return ret; }static int mc13783_gpo_regulator_enable (struct regulator_dev *rdev)@@ -261,7 +265,6 @@ static int mc13783_gpo_regulator_enable(struct regulator_dev *rdev)struct mc13xxx_regulator_priv *priv =rdev_get_drvdata (rdev);struct mc13xxx_regulator *mc13xxx_regulators = priv->mc13xxx_regulators;int id =rdev_get_id (rdev); -int ret;u32 en_val = mc13xxx_regulators[id].enable_bit;dev_dbg (rdev_get_dev (rdev),"%s id: %d\n" , __func__, id);@@ -271,12 +274,8 @@ static int mc13783_gpo_regulator_enable(struct regulator_dev *rdev) id == MC13783_REG_PWGT2SPI) en_val =0 ; -mc13xxx_lock (priv->mc13xxx); - ret =mc13783_powermisc_rmw (priv, mc13xxx_regulators[id].enable_bit, +return mc13783_powermisc_rmw (priv, mc13xxx_regulators[id].enable_bit, en_val);