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

regulator: max77650: use vsel_step

Use the new vsel_step field in the regulator description to instruct
the regulator API on the required voltage ramping. Switch to using the
generic regmap helpers for voltage setting and remove the old set_voltage
callback that handcoded the selector stepping.

Signed-off-by: Bartosz Golaszewski <bgolaszewski@baylibre.com>
Link: https://lore.kernel.org/r/20190703161035.31808-3-brgl@bgdev.pl
Signed-off-by: Mark Brown <broonie@kernel.org>

authored by

Bartosz Golaszewski and committed by
Mark Brown
3c7577d4 2da8d947

+9 -64
+9 -64
drivers/regulator/max77650-regulator.c
··· 108 108 MAX77650_REGULATOR_DISABLED); 109 109 } 110 110 111 - static int max77650_regulator_set_voltage_sel(struct regulator_dev *rdev, 112 - unsigned int sel) 113 - { 114 - struct max77650_regulator_desc *rdesc = rdev_get_drvdata(rdev); 115 - int rv = 0, curr, diff; 116 - bool ascending; 117 - 118 - /* 119 - * If the regulator is disabled, we can program the desired 120 - * voltage right away. 121 - */ 122 - if (!max77650_regulator_is_enabled(rdev)) { 123 - if (rdesc == &max77651_SBB1_desc) 124 - return regulator_set_voltage_sel_pickable_regmap(rdev, 125 - sel); 126 - else 127 - return regulator_set_voltage_sel_regmap(rdev, sel); 128 - } 129 - 130 - /* 131 - * Otherwise we need to manually ramp the output voltage up/down 132 - * one step at a time. 133 - */ 134 - 135 - if (rdesc == &max77651_SBB1_desc) 136 - curr = regulator_get_voltage_sel_pickable_regmap(rdev); 137 - else 138 - curr = regulator_get_voltage_sel_regmap(rdev); 139 - 140 - if (curr < 0) 141 - return curr; 142 - 143 - diff = curr - sel; 144 - if (diff == 0) 145 - return 0; /* Already there. */ 146 - else if (diff > 0) 147 - ascending = false; 148 - else 149 - ascending = true; 150 - 151 - /* 152 - * Make sure we'll get to the right voltage and break the loop even if 153 - * the selector equals 0. 154 - */ 155 - for (ascending ? curr++ : curr--;; ascending ? curr++ : curr--) { 156 - if (rdesc == &max77651_SBB1_desc) 157 - rv = regulator_set_voltage_sel_pickable_regmap(rdev, 158 - curr); 159 - else 160 - rv = regulator_set_voltage_sel_regmap(rdev, curr); 161 - 162 - if (rv) 163 - return rv; 164 - 165 - if (curr == sel) 166 - break; 167 - } 168 - 169 - return 0; 170 - } 171 - 172 111 static const struct regulator_ops max77650_regulator_LDO_ops = { 173 112 .is_enabled = max77650_regulator_is_enabled, 174 113 .enable = max77650_regulator_enable, ··· 115 176 .list_voltage = regulator_list_voltage_linear, 116 177 .map_voltage = regulator_map_voltage_linear, 117 178 .get_voltage_sel = regulator_get_voltage_sel_regmap, 118 - .set_voltage_sel = max77650_regulator_set_voltage_sel, 179 + .set_voltage_sel = regulator_set_voltage_sel_regmap, 119 180 .set_active_discharge = regulator_set_active_discharge_regmap, 120 181 }; 121 182 ··· 126 187 .list_voltage = regulator_list_voltage_linear, 127 188 .map_voltage = regulator_map_voltage_linear, 128 189 .get_voltage_sel = regulator_get_voltage_sel_regmap, 129 - .set_voltage_sel = max77650_regulator_set_voltage_sel, 190 + .set_voltage_sel = regulator_set_voltage_sel_regmap, 130 191 .get_current_limit = regulator_get_current_limit_regmap, 131 192 .set_current_limit = regulator_set_current_limit_regmap, 132 193 .set_active_discharge = regulator_set_active_discharge_regmap, ··· 139 200 .disable = max77650_regulator_disable, 140 201 .list_voltage = regulator_list_voltage_pickable_linear_range, 141 202 .get_voltage_sel = regulator_get_voltage_sel_pickable_regmap, 142 - .set_voltage_sel = max77650_regulator_set_voltage_sel, 203 + .set_voltage_sel = regulator_set_voltage_sel_pickable_regmap, 143 204 .get_current_limit = regulator_get_current_limit_regmap, 144 205 .set_current_limit = regulator_set_current_limit_regmap, 145 206 .set_active_discharge = regulator_set_active_discharge_regmap, ··· 156 217 .min_uV = 1350000, 157 218 .uV_step = 12500, 158 219 .n_voltages = 128, 220 + .vsel_step = 1, 159 221 .vsel_mask = MAX77650_REGULATOR_V_LDO_MASK, 160 222 .vsel_reg = MAX77650_REG_CNFG_LDO_A, 161 223 .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED, ··· 182 242 .min_uV = 800000, 183 243 .uV_step = 25000, 184 244 .n_voltages = 64, 245 + .vsel_step = 1, 185 246 .vsel_mask = MAX77650_REGULATOR_V_SBB_MASK, 186 247 .vsel_reg = MAX77650_REG_CNFG_SBB0_A, 187 248 .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED, ··· 212 271 .min_uV = 800000, 213 272 .uV_step = 12500, 214 273 .n_voltages = 64, 274 + .vsel_step = 1, 215 275 .vsel_mask = MAX77650_REGULATOR_V_SBB_MASK, 216 276 .vsel_reg = MAX77650_REG_CNFG_SBB1_A, 217 277 .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED, ··· 243 301 .linear_ranges = max77651_sbb1_volt_ranges, 244 302 .n_linear_ranges = ARRAY_SIZE(max77651_sbb1_volt_ranges), 245 303 .n_voltages = 58, 304 + .vsel_step = 1, 246 305 .vsel_range_mask = MAX77651_REGULATOR_V_SBB1_RANGE_MASK, 247 306 .vsel_range_reg = MAX77650_REG_CNFG_SBB1_A, 248 307 .vsel_mask = MAX77651_REGULATOR_V_SBB1_MASK, ··· 275 332 .min_uV = 800000, 276 333 .uV_step = 50000, 277 334 .n_voltages = 64, 335 + .vsel_step = 1, 278 336 .vsel_mask = MAX77650_REGULATOR_V_SBB_MASK, 279 337 .vsel_reg = MAX77650_REG_CNFG_SBB2_A, 280 338 .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED, ··· 305 361 .min_uV = 2400000, 306 362 .uV_step = 50000, 307 363 .n_voltages = 64, 364 + .vsel_step = 1, 308 365 .vsel_mask = MAX77650_REGULATOR_V_SBB_MASK, 309 366 .vsel_reg = MAX77650_REG_CNFG_SBB2_A, 310 367 .active_discharge_off = MAX77650_REGULATOR_AD_DISABLED,