aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/regulator/da9052-regulator.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/regulator/da9052-regulator.c')
-rw-r--r--drivers/regulator/da9052-regulator.c29
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
243static 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
243static struct regulator_ops da9052_dcdc_ops = { 268static 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