Commit c8520b4c5d25eb7b8b54f1ae9ba7da71375f2b2c
Committed by
Mark Brown
1 parent
a49f0d1ea3
Exists in
smarc-l5.0.0_1.0.0-ga
and in
5 other branches
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; |