Commit c8520b4c5d25eb7b8b54f1ae9ba7da71375f2b2c

Authored by Axel Lin
Committed by Mark Brown
1 parent a49f0d1ea3

regulator: core: Allow specify apply_[reg|bit] for regmap based voltage_sel operations

Some DVM regulators needs to update apply_bit after setting vsel_reg to
initiate voltage change on the output.  This patch adds apply_reg and
apply_bit to struct regulator_desc and update
regulator_set_voltage_sel_regmap() to set apply_bit of apply_reg when
apply_bit is set.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

Showing 2 changed files with 17 additions and 1 deletions Side-by-side Diff

drivers/regulator/core.c
... ... @@ -2074,10 +2074,20 @@
2074 2074 */
2075 2075 int regulator_set_voltage_sel_regmap(struct regulator_dev *rdev, unsigned sel)
2076 2076 {
  2077 + int ret;
  2078 +
2077 2079 sel <<= ffs(rdev->desc->vsel_mask) - 1;
2078 2080  
2079   - return regmap_update_bits(rdev->regmap, rdev->desc->vsel_reg,
  2081 + ret = regmap_update_bits(rdev->regmap, rdev->desc->vsel_reg,
2080 2082 rdev->desc->vsel_mask, sel);
  2083 + if (ret)
  2084 + return ret;
  2085 +
  2086 + if (rdev->desc->apply_bit)
  2087 + ret = regmap_update_bits(rdev->regmap, rdev->desc->apply_reg,
  2088 + rdev->desc->apply_bit,
  2089 + rdev->desc->apply_bit);
  2090 + return ret;
2081 2091 }
2082 2092 EXPORT_SYMBOL_GPL(regulator_set_voltage_sel_regmap);
2083 2093  
include/linux/regulator/driver.h
... ... @@ -193,6 +193,10 @@
193 193 *
194 194 * @vsel_reg: Register for selector when using regulator_regmap_X_voltage_
195 195 * @vsel_mask: Mask for register bitfield used for selector
  196 + * @apply_reg: Register for initiate voltage change on the output when
  197 + * using regulator_set_voltage_sel_regmap
  198 + * @apply_bit: Register bitfield used for initiate voltage change on the
  199 + * output when using regulator_set_voltage_sel_regmap
196 200 * @enable_reg: Register for control when using regmap enable/disable ops
197 201 * @enable_mask: Mask for control when using regmap enable/disable ops
198 202 *
... ... @@ -218,6 +222,8 @@
218 222  
219 223 unsigned int vsel_reg;
220 224 unsigned int vsel_mask;
  225 + unsigned int apply_reg;
  226 + unsigned int apply_bit;
221 227 unsigned int enable_reg;
222 228 unsigned int enable_mask;
223 229 unsigned int bypass_reg;