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 | ||
