diff options
author | Mark Brown <broonie@kernel.org> | 2016-05-03 17:09:56 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2016-05-03 17:09:56 +0300 |
commit | bc0868c62bb13834b20a864f684cced1f84a2412 (patch) | |
tree | 2c382dcd24ac95f4dbf53d238d3161d6171d8a4b /drivers/regulator/pwm-regulator.c | |
parent | fd786fb0276a22155058018f76eb4c665d37f170 (diff) | |
parent | 8c12ad8e916ee0477f7a0a0f00b0a87b9a21ebf7 (diff) | |
download | linux-bc0868c62bb13834b20a864f684cced1f84a2412.tar.xz |
Merge branch 'for-4.7/pwm-regulator' of git://git.kernel.org/pub/scm/linux/kernel/git/thierry.reding/linux-pwm into regulator-pwm
Diffstat (limited to 'drivers/regulator/pwm-regulator.c')
-rw-r--r-- | drivers/regulator/pwm-regulator.c | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/drivers/regulator/pwm-regulator.c b/drivers/regulator/pwm-regulator.c index 8e928f23279b..fafa3488e960 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, unsigned selector) { struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev); - unsigned int pwm_reg_period; + struct pwm_args pargs; int dutycycle; int ret; - pwm_reg_period = pwm_get_period(drvdata->pwm); + pwm_get_args(drvdata->pwm, &pargs); - dutycycle = (pwm_reg_period * + dutycycle = (pargs.period * drvdata->duty_cycle_table[selector].dutycycle) / 100; - ret = pwm_config(drvdata->pwm, dutycycle, pwm_reg_period); + ret = pwm_config(drvdata->pwm, dutycycle, pargs.period); if (ret) { dev_err(&rdev->dev, "Failed to configure PWM: %d\n", ret); return ret; @@ -126,7 +126,7 @@ static int pwm_regulator_set_voltage(struct regulator_dev *rdev, { struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev); unsigned int ramp_delay = rdev->constraints->ramp_delay; - unsigned int period = pwm_get_period(drvdata->pwm); + struct pwm_args pargs; unsigned int req_diff = min_uV - rdev->constraints->min_uV; unsigned int diff; unsigned int duty_pulse; @@ -134,6 +134,7 @@ static int pwm_regulator_set_voltage(struct regulator_dev *rdev, u32 rem; int ret; + pwm_get_args(drvdata->pwm, &pargs); diff = rdev->constraints->max_uV - rdev->constraints->min_uV; /* First try to find out if we get the iduty cycle time which is @@ -143,16 +144,16 @@ static int pwm_regulator_set_voltage(struct regulator_dev *rdev, * to get output voltage nearer to requested value as there is no * calculation loss. */ - req_period = req_diff * period; + req_period = req_diff * pargs.period; div_u64_rem(req_period, diff, &rem); if (!rem) { do_div(req_period, diff); duty_pulse = (unsigned int)req_period; } else { - duty_pulse = (period / 100) * ((req_diff * 100) / diff); + duty_pulse = (pargs.period / 100) * ((req_diff * 100) / diff); } - ret = pwm_config(drvdata->pwm, duty_pulse, period); + ret = pwm_config(drvdata->pwm, duty_pulse, pargs.period); if (ret) { dev_err(&rdev->dev, "Failed to configure PWM: %d\n", ret); return ret; @@ -289,6 +290,12 @@ static int pwm_regulator_probe(struct platform_device *pdev) return ret; } + /* + * FIXME: pwm_apply_args() should be removed when switching to the + * atomic PWM API. + */ + pwm_apply_args(drvdata->pwm); + regulator = devm_regulator_register(&pdev->dev, &drvdata->desc, &config); if (IS_ERR(regulator)) { |