diff options
| -rw-r--r-- | drivers/regulator/pwm-regulator.c | 20 |
1 files changed, 14 insertions, 6 deletions
diff --git a/drivers/regulator/pwm-regulator.c b/drivers/regulator/pwm-regulator.c index 4689d62f4841..ffdb895ace0a 100644 --- a/drivers/regulator/pwm-regulator.c +++ b/drivers/regulator/pwm-regulator.c | |||
| @@ -59,16 +59,16 @@ static int pwm_regulator_set_voltage_sel(struct regulator_dev *rdev, | |||
| 59 | unsigned selector) | 59 | unsigned selector) |
| 60 | { | 60 | { |
| 61 | struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev); | 61 | struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev); |
| 62 | unsigned int pwm_reg_period; | 62 | struct pwm_args pargs; |
| 63 | int dutycycle; | 63 | int dutycycle; |
| 64 | int ret; | 64 | int ret; |
| 65 | 65 | ||
| 66 | pwm_reg_period = pwm_get_period(drvdata->pwm); | 66 | pwm_get_args(drvdata->pwm, &pargs); |
| 67 | 67 | ||
| 68 | dutycycle = (pwm_reg_period * | 68 | dutycycle = (pargs.period * |
| 69 | drvdata->duty_cycle_table[selector].dutycycle) / 100; | 69 | drvdata->duty_cycle_table[selector].dutycycle) / 100; |
| 70 | 70 | ||
| 71 | ret = pwm_config(drvdata->pwm, dutycycle, pwm_reg_period); | 71 | ret = pwm_config(drvdata->pwm, dutycycle, pargs.period); |
| 72 | if (ret) { | 72 | if (ret) { |
| 73 | dev_err(&rdev->dev, "Failed to configure PWM\n"); | 73 | dev_err(&rdev->dev, "Failed to configure PWM\n"); |
| 74 | return ret; | 74 | return ret; |
| @@ -138,13 +138,15 @@ static int pwm_regulator_set_voltage(struct regulator_dev *rdev, | |||
| 138 | { | 138 | { |
| 139 | struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev); | 139 | struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev); |
| 140 | unsigned int ramp_delay = rdev->constraints->ramp_delay; | 140 | unsigned int ramp_delay = rdev->constraints->ramp_delay; |
| 141 | unsigned int period = pwm_get_period(drvdata->pwm); | 141 | struct pwm_args pargs; |
| 142 | int duty_cycle; | 142 | int duty_cycle; |
| 143 | int ret; | 143 | int ret; |
| 144 | 144 | ||
| 145 | pwm_get_args(drvdata->pwm, &pargs); | ||
| 145 | duty_cycle = pwm_voltage_to_duty_cycle_percentage(rdev, min_uV); | 146 | duty_cycle = pwm_voltage_to_duty_cycle_percentage(rdev, min_uV); |
| 146 | 147 | ||
| 147 | ret = pwm_config(drvdata->pwm, (period / 100) * duty_cycle, period); | 148 | ret = pwm_config(drvdata->pwm, (pargs.period / 100) * duty_cycle, |
| 149 | pargs.period); | ||
| 148 | if (ret) { | 150 | if (ret) { |
| 149 | dev_err(&rdev->dev, "Failed to configure PWM\n"); | 151 | dev_err(&rdev->dev, "Failed to configure PWM\n"); |
| 150 | return ret; | 152 | return ret; |
| @@ -281,6 +283,12 @@ static int pwm_regulator_probe(struct platform_device *pdev) | |||
| 281 | return PTR_ERR(drvdata->pwm); | 283 | return PTR_ERR(drvdata->pwm); |
| 282 | } | 284 | } |
| 283 | 285 | ||
| 286 | /* | ||
| 287 | * FIXME: pwm_apply_args() should be removed when switching to the | ||
| 288 | * atomic PWM API. | ||
| 289 | */ | ||
| 290 | pwm_apply_args(drvdata->pwm); | ||
| 291 | |||
| 284 | regulator = devm_regulator_register(&pdev->dev, | 292 | regulator = devm_regulator_register(&pdev->dev, |
| 285 | &drvdata->desc, &config); | 293 | &drvdata->desc, &config); |
| 286 | if (IS_ERR(regulator)) { | 294 | if (IS_ERR(regulator)) { |
