Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

regulator: ltc3589: Convert to use regulator_set_ramp_delay_regmap

Use regulator_set_ramp_delay_regmap instead of open-coded

LTC3589_LINEAR_REG() no longer call LTC3589_REG() now.
Only LTC3589_LINEAR_REG() needs to set go_bit, thus remove go_bit
parameter from LTC3589_REG() macro.

Signed-off-by: Axel Lin <axel.lin@ingics.com>
Link: https://lore.kernel.org/r/20210604115803.1260976-1-axel.lin@ingics.com
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Axel Lin and committed by
Mark Brown
ba6622c4 73d4ae57

+38 -35
+38 -35
drivers/regulator/ltc3589.c
··· 54 54 #define LTC3589_VCCR_SW3_GO BIT(4) 55 55 #define LTC3589_VCCR_LDO2_GO BIT(6) 56 56 57 + #define LTC3589_VRRCR_SW1_RAMP_MASK GENMASK(1, 0) 58 + #define LTC3589_VRRCR_SW2_RAMP_MASK GENMASK(3, 2) 59 + #define LTC3589_VRRCR_SW3_RAMP_MASK GENMASK(5, 4) 60 + #define LTC3589_VRRCR_LDO2_RAMP_MASK GENMASK(7, 6) 61 + 57 62 enum ltc3589_variant { 58 63 LTC3589, 59 64 LTC3589_1, ··· 93 88 1200000, 1800000, 2500000, 3200000, 94 89 }; 95 90 96 - static int ltc3589_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) 97 - { 98 - struct ltc3589 *ltc3589 = rdev_get_drvdata(rdev); 99 - int sel, shift; 100 - 101 - if (unlikely(ramp_delay <= 0)) 102 - return -EINVAL; 103 - 104 - /* VRRCR slew rate offsets are the same as VCCR go bit offsets */ 105 - shift = ffs(rdev->desc->apply_bit) - 1; 106 - 107 - /* The slew rate can be set to 0.88, 1.75, 3.5, or 7 mV/uS */ 108 - for (sel = 0; sel < 4; sel++) { 109 - if ((880 << sel) >= ramp_delay) { 110 - return regmap_update_bits(ltc3589->regmap, 111 - LTC3589_VRRCR, 112 - 0x3 << shift, sel << shift); 113 - } 114 - } 115 - return -EINVAL; 116 - } 91 + static const unsigned int ltc3589_ramp_table[] = { 92 + 880, 1750, 3500, 7000 93 + }; 117 94 118 95 static int ltc3589_set_suspend_voltage(struct regulator_dev *rdev, int uV) 119 96 { ··· 136 149 .list_voltage = regulator_list_voltage_linear, 137 150 .set_voltage_sel = regulator_set_voltage_sel_regmap, 138 151 .get_voltage_sel = regulator_get_voltage_sel_regmap, 139 - .set_ramp_delay = ltc3589_set_ramp_delay, 152 + .set_ramp_delay = regulator_set_ramp_delay_regmap, 140 153 .set_voltage_time_sel = regulator_set_voltage_time_sel, 141 154 .set_suspend_voltage = ltc3589_set_suspend_voltage, 142 155 .set_suspend_mode = ltc3589_set_suspend_mode, ··· 205 218 return 0; 206 219 } 207 220 208 - #define LTC3589_REG(_name, _of_name, _ops, en_bit, dtv1_reg, dtv_mask, go_bit)\ 221 + #define LTC3589_REG(_name, _of_name, _ops, en_bit, dtv1_reg, dtv_mask) \ 209 222 [LTC3589_ ## _name] = { \ 210 223 .name = #_name, \ 211 224 .of_match = of_match_ptr(#_of_name), \ 212 225 .regulators_node = of_match_ptr("regulators"), \ 213 226 .of_parse_cb = ltc3589_of_parse_cb, \ 214 227 .n_voltages = (dtv_mask) + 1, \ 215 - .min_uV = (go_bit) ? 362500 : 0, \ 216 - .uV_step = (go_bit) ? 12500 : 0, \ 217 - .ramp_delay = (go_bit) ? 1750 : 0, \ 218 228 .fixed_uV = (dtv_mask) ? 0 : 800000, \ 219 229 .ops = &ltc3589_ ## _ops ## _regulator_ops, \ 220 230 .type = REGULATOR_VOLTAGE, \ ··· 219 235 .owner = THIS_MODULE, \ 220 236 .vsel_reg = (dtv1_reg), \ 221 237 .vsel_mask = (dtv_mask), \ 222 - .apply_reg = (go_bit) ? LTC3589_VCCR : 0, \ 223 - .apply_bit = (go_bit), \ 224 238 .enable_reg = (en_bit) ? LTC3589_OVEN : 0, \ 225 239 .enable_mask = (en_bit), \ 226 240 } 227 241 228 242 #define LTC3589_LINEAR_REG(_name, _of_name, _dtv1) \ 229 - LTC3589_REG(_name, _of_name, linear, LTC3589_OVEN_ ## _name, \ 230 - LTC3589_ ## _dtv1, 0x1f, \ 231 - LTC3589_VCCR_ ## _name ## _GO) 243 + [LTC3589_ ## _name] = { \ 244 + .name = #_name, \ 245 + .of_match = of_match_ptr(#_of_name), \ 246 + .regulators_node = of_match_ptr("regulators"), \ 247 + .of_parse_cb = ltc3589_of_parse_cb, \ 248 + .n_voltages = 32, \ 249 + .min_uV = 362500, \ 250 + .uV_step = 12500, \ 251 + .ramp_delay = 1750, \ 252 + .ops = &ltc3589_linear_regulator_ops, \ 253 + .type = REGULATOR_VOLTAGE, \ 254 + .id = LTC3589_ ## _name, \ 255 + .owner = THIS_MODULE, \ 256 + .vsel_reg = LTC3589_ ## _dtv1, \ 257 + .vsel_mask = 0x1f, \ 258 + .apply_reg = LTC3589_VCCR, \ 259 + .apply_bit = LTC3589_VCCR_ ## _name ## _GO, \ 260 + .enable_reg = LTC3589_OVEN, \ 261 + .enable_mask = (LTC3589_OVEN_ ## _name), \ 262 + .ramp_reg = LTC3589_VRRCR, \ 263 + .ramp_mask = LTC3589_VRRCR_ ## _name ## _RAMP_MASK, \ 264 + .ramp_delay_table = ltc3589_ramp_table, \ 265 + .n_ramp_values = ARRAY_SIZE(ltc3589_ramp_table), \ 266 + } 267 + 232 268 233 269 #define LTC3589_FIXED_REG(_name, _of_name) \ 234 - LTC3589_REG(_name, _of_name, fixed, LTC3589_OVEN_ ## _name, 0, 0, 0) 270 + LTC3589_REG(_name, _of_name, fixed, LTC3589_OVEN_ ## _name, 0, 0) 235 271 236 272 static const struct regulator_desc ltc3589_regulators[] = { 237 273 LTC3589_LINEAR_REG(SW1, sw1, B1DTV1), 238 274 LTC3589_LINEAR_REG(SW2, sw2, B2DTV1), 239 275 LTC3589_LINEAR_REG(SW3, sw3, B3DTV1), 240 276 LTC3589_FIXED_REG(BB_OUT, bb-out), 241 - LTC3589_REG(LDO1, ldo1, fixed_standby, 0, 0, 0, 0), 277 + LTC3589_REG(LDO1, ldo1, fixed_standby, 0, 0, 0), 242 278 LTC3589_LINEAR_REG(LDO2, ldo2, L2DTV1), 243 279 LTC3589_FIXED_REG(LDO3, ldo3), 244 - LTC3589_REG(LDO4, ldo4, table, LTC3589_OVEN_LDO4, LTC3589_L2DTV2, 245 - 0x60, 0), 280 + LTC3589_REG(LDO4, ldo4, table, LTC3589_OVEN_LDO4, LTC3589_L2DTV2, 0x60), 246 281 }; 247 282 248 283 static bool ltc3589_writeable_reg(struct device *dev, unsigned int reg)