diff options
Diffstat (limited to 'drivers/regulator/da9052-regulator.c')
-rw-r--r-- | drivers/regulator/da9052-regulator.c | 29 |
1 files changed, 28 insertions, 1 deletions
diff --git a/drivers/regulator/da9052-regulator.c b/drivers/regulator/da9052-regulator.c index 3adeaeffc485..fdb6ea8ae7e6 100644 --- a/drivers/regulator/da9052-regulator.c +++ b/drivers/regulator/da9052-regulator.c | |||
@@ -240,6 +240,31 @@ static int da9052_regulator_set_voltage_sel(struct regulator_dev *rdev, | |||
240 | return ret; | 240 | return ret; |
241 | } | 241 | } |
242 | 242 | ||
243 | static int da9052_regulator_set_voltage_time_sel(struct regulator_dev *rdev, | ||
244 | unsigned int old_sel, | ||
245 | unsigned int new_sel) | ||
246 | { | ||
247 | struct da9052_regulator *regulator = rdev_get_drvdata(rdev); | ||
248 | struct da9052_regulator_info *info = regulator->info; | ||
249 | int id = rdev_get_id(rdev); | ||
250 | int ret = 0; | ||
251 | |||
252 | /* The DVC controlled LDOs and DCDCs ramp with 6.25mV/µs after enabling | ||
253 | * the activate bit. | ||
254 | */ | ||
255 | switch (id) { | ||
256 | case DA9052_ID_BUCK1: | ||
257 | case DA9052_ID_BUCK2: | ||
258 | case DA9052_ID_BUCK3: | ||
259 | case DA9052_ID_LDO2: | ||
260 | case DA9052_ID_LDO3: | ||
261 | ret = (new_sel - old_sel) * info->step_uV / 6250; | ||
262 | break; | ||
263 | } | ||
264 | |||
265 | return ret; | ||
266 | } | ||
267 | |||
243 | static struct regulator_ops da9052_dcdc_ops = { | 268 | static struct regulator_ops da9052_dcdc_ops = { |
244 | .get_current_limit = da9052_dcdc_get_current_limit, | 269 | .get_current_limit = da9052_dcdc_get_current_limit, |
245 | .set_current_limit = da9052_dcdc_set_current_limit, | 270 | .set_current_limit = da9052_dcdc_set_current_limit, |
@@ -248,6 +273,7 @@ static struct regulator_ops da9052_dcdc_ops = { | |||
248 | .map_voltage = da9052_map_voltage, | 273 | .map_voltage = da9052_map_voltage, |
249 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | 274 | .get_voltage_sel = regulator_get_voltage_sel_regmap, |
250 | .set_voltage_sel = da9052_regulator_set_voltage_sel, | 275 | .set_voltage_sel = da9052_regulator_set_voltage_sel, |
276 | .set_voltage_time_sel = da9052_regulator_set_voltage_time_sel, | ||
251 | .is_enabled = regulator_is_enabled_regmap, | 277 | .is_enabled = regulator_is_enabled_regmap, |
252 | .enable = regulator_enable_regmap, | 278 | .enable = regulator_enable_regmap, |
253 | .disable = regulator_disable_regmap, | 279 | .disable = regulator_disable_regmap, |
@@ -258,6 +284,7 @@ static struct regulator_ops da9052_ldo_ops = { | |||
258 | .map_voltage = da9052_map_voltage, | 284 | .map_voltage = da9052_map_voltage, |
259 | .get_voltage_sel = regulator_get_voltage_sel_regmap, | 285 | .get_voltage_sel = regulator_get_voltage_sel_regmap, |
260 | .set_voltage_sel = da9052_regulator_set_voltage_sel, | 286 | .set_voltage_sel = da9052_regulator_set_voltage_sel, |
287 | .set_voltage_time_sel = da9052_regulator_set_voltage_time_sel, | ||
261 | .is_enabled = regulator_is_enabled_regmap, | 288 | .is_enabled = regulator_is_enabled_regmap, |
262 | .enable = regulator_enable_regmap, | 289 | .enable = regulator_enable_regmap, |
263 | .disable = regulator_disable_regmap, | 290 | .disable = regulator_disable_regmap, |
@@ -401,7 +428,7 @@ static int da9052_regulator_probe(struct platform_device *pdev) | |||
401 | if (!nproot) | 428 | if (!nproot) |
402 | return -ENODEV; | 429 | return -ENODEV; |
403 | 430 | ||
404 | nproot = of_find_node_by_name(nproot, "regulators"); | 431 | nproot = of_get_child_by_name(nproot, "regulators"); |
405 | if (!nproot) | 432 | if (!nproot) |
406 | return -ENODEV; | 433 | return -ENODEV; |
407 | 434 | ||