diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2015-06-24 03:30:20 +0300 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2015-06-24 03:30:20 +0300 |
commit | 7fe0bf908d4f8f7d134cab280cac64fe65997ac1 (patch) | |
tree | e14095fcaadd69df93b7a0a792001675582a1a1b /drivers/regulator/pwm-regulator.c | |
parent | 5a602e157a9d91d5ce98d07c404097edba8ec9f3 (diff) | |
parent | 733ada000f2c9618ccbac7b9ba146113f0a6675b (diff) | |
download | linux-7fe0bf908d4f8f7d134cab280cac64fe65997ac1.tar.xz |
Merge tag 'regulator-v4.2' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator
Pull regulator updates from Mark Brown:
"Another fairly quiet release, some new drivers with generic handling
for minor features but nothing that makes a substantial difference
outside of the subsystem or for most boards:
- support for a bunch of new parameters which are present on enough
regulators to be worth having generic handling for in the
framework.
- fixes for some issues with printing constraints during boot which
should probably have gone in for v4.1 but didn't.
- new drivers for Dialog DA9062, Maxim MAX77621 and Qualcomm SPMI
regulators"
* tag 'regulator-v4.2' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator: (45 commits)
regulator: qcom_spmi: Fix calculating number of voltages
regulator: qcom_spmi: Add missing braces for aligned code
regulator: fix simple_return.cocci warnings
regulator: Add QCOM SPMI regulator driver
regulator: Add docbook for soft start
regulator: Add input current limit support
regulator: Add soft start support
regulator: Add pull down support
regulator: Add system_load constraint
regulator: max8973: Fix up ramp_delay for MAX8973_RAMP_25mV_PER_US case
regulator: core: replace sprintf with scnprintf
regulator: core: fix constraints output buffer
regulator: core: Don't corrupt display when printing uV offsets
regulator: max8973: add support for MAX77621
regulator: max8973: configure ramp delay through callback
regulator: pwm-regulator: Diffientiate between dev (device) and rdev (regulator_dev)
regulator: pwm-regulator: Remove superfluous is_enabled check
regulator: pwm-regulator: Remove unnecessary descriptor attribute from ddata
regulator: core: Don't spew backtraces on duplicate sysfs
regulator: da9063: Fix up irq leak
...
Diffstat (limited to 'drivers/regulator/pwm-regulator.c')
-rw-r--r-- | drivers/regulator/pwm-regulator.c | 41 |
1 files changed, 17 insertions, 24 deletions
diff --git a/drivers/regulator/pwm-regulator.c b/drivers/regulator/pwm-regulator.c index 253833ae35f3..ffa96124a5e7 100644 --- a/drivers/regulator/pwm-regulator.c +++ b/drivers/regulator/pwm-regulator.c @@ -21,10 +21,8 @@ #include <linux/pwm.h> struct pwm_regulator_data { - struct regulator_desc desc; struct pwm_voltages *duty_cycle_table; struct pwm_device *pwm; - bool enabled; int state; }; @@ -33,17 +31,17 @@ struct pwm_voltages { unsigned int dutycycle; }; -static int pwm_regulator_get_voltage_sel(struct regulator_dev *dev) +static int pwm_regulator_get_voltage_sel(struct regulator_dev *rdev) { - struct pwm_regulator_data *drvdata = rdev_get_drvdata(dev); + struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev); return drvdata->state; } -static int pwm_regulator_set_voltage_sel(struct regulator_dev *dev, +static int pwm_regulator_set_voltage_sel(struct regulator_dev *rdev, unsigned selector) { - struct pwm_regulator_data *drvdata = rdev_get_drvdata(dev); + struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev); unsigned int pwm_reg_period; int dutycycle; int ret; @@ -55,30 +53,27 @@ static int pwm_regulator_set_voltage_sel(struct regulator_dev *dev, ret = pwm_config(drvdata->pwm, dutycycle, pwm_reg_period); if (ret) { - dev_err(&dev->dev, "Failed to configure PWM\n"); + dev_err(&rdev->dev, "Failed to configure PWM\n"); return ret; } drvdata->state = selector; - if (!drvdata->enabled) { - ret = pwm_enable(drvdata->pwm); - if (ret) { - dev_err(&dev->dev, "Failed to enable PWM\n"); - return ret; - } - drvdata->enabled = true; + ret = pwm_enable(drvdata->pwm); + if (ret) { + dev_err(&rdev->dev, "Failed to enable PWM\n"); + return ret; } return 0; } -static int pwm_regulator_list_voltage(struct regulator_dev *dev, +static int pwm_regulator_list_voltage(struct regulator_dev *rdev, unsigned selector) { - struct pwm_regulator_data *drvdata = rdev_get_drvdata(dev); + struct pwm_regulator_data *drvdata = rdev_get_drvdata(rdev); - if (selector >= drvdata->desc.n_voltages) + if (selector >= rdev->desc->n_voltages) return -EINVAL; return drvdata->duty_cycle_table[selector].uV; @@ -91,7 +86,7 @@ static struct regulator_ops pwm_regulator_voltage_ops = { .map_voltage = regulator_map_voltage_iterate, }; -static const struct regulator_desc pwm_regulator_desc = { +static struct regulator_desc pwm_regulator_desc = { .name = "pwm-regulator", .ops = &pwm_regulator_voltage_ops, .type = REGULATOR_VOLTAGE, @@ -117,8 +112,6 @@ static int pwm_regulator_probe(struct platform_device *pdev) if (!drvdata) return -ENOMEM; - memcpy(&drvdata->desc, &pwm_regulator_desc, sizeof(pwm_regulator_desc)); - /* determine the number of voltage-table */ prop = of_find_property(np, "voltage-table", &length); if (!prop) { @@ -133,7 +126,7 @@ static int pwm_regulator_probe(struct platform_device *pdev) return -EINVAL; } - drvdata->desc.n_voltages = length / sizeof(*drvdata->duty_cycle_table); + pwm_regulator_desc.n_voltages = length / sizeof(*drvdata->duty_cycle_table); drvdata->duty_cycle_table = devm_kzalloc(&pdev->dev, length, GFP_KERNEL); @@ -150,7 +143,7 @@ static int pwm_regulator_probe(struct platform_device *pdev) } config.init_data = of_get_regulator_init_data(&pdev->dev, np, - &drvdata->desc); + &pwm_regulator_desc); if (!config.init_data) return -ENOMEM; @@ -165,10 +158,10 @@ static int pwm_regulator_probe(struct platform_device *pdev) } regulator = devm_regulator_register(&pdev->dev, - &drvdata->desc, &config); + &pwm_regulator_desc, &config); if (IS_ERR(regulator)) { dev_err(&pdev->dev, "Failed to register regulator %s\n", - drvdata->desc.name); + pwm_regulator_desc.name); return PTR_ERR(regulator); } |