diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-01 19:58:47 +0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2012-10-01 19:58:47 +0400 |
commit | aae6f989c6e97ff8197717fa4d032ad4eba091a7 (patch) | |
tree | 3908e2748a91045688a4778872785b8b0660d073 /drivers/regulator/max77686.c | |
parent | b34e5f55a1e6667a800280fc4045632c139b4e4e (diff) | |
parent | 6a2027abd2048f7f7fdcc6e11ff10b3d9b0d0899 (diff) | |
download | linux-aae6f989c6e97ff8197717fa4d032ad4eba091a7.tar.xz |
Merge tag 'regulator-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator
Pull regulator updates from Mark Brown:
- Support for putting regulators into bypass mode where they simply
switch their input to the output (mainly used for low power
retention).
- A new API for setting voltages based on a voltage plus tolerance
rather than an explicit voltage range.
- Lots of cleanups and API updates from Axel Lin.
- New driver for MAX8907.
* tag 'regulator-3.7' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator: (71 commits)
regulator: arizona-ldo: Remove top voltage
regulator: tps6586x: remove regulator-compatible from DT docs
regulator: tps65217.txt: remove regulator-compatible from DT docs
regulator: deprecate regulator-compatible DT property
regulator: fan53555: remove vsel_max not used
regulator: aat2870: Don't explicitly initialise the first field
extcon: arizona: Use bypass mode for MICVDD
regulator: wm831x-ldo: Add bypass support
regulator: arizona-micsupp: Support get/set bypass
regulator: arizona-ldo: Support get/set bypass
regulator: core: Provide regmap get/set bypass operations
regulator: core: Support bypass mode
regulator: Fairchild fan53555 support
regulator: twl: Remove another unused variable warning
regulator: core: Try using the parent device for the default regmap
regulator: core: Fast path non-deferred disables
regulator: core: Report microvolts in sysfs even with only list_voltage()
regulator: tps6586x: add support for SYS rail
regulator: lp872x: remove unnecessary function
regulator: lp872x: fix NULL pointer access problem
...
Diffstat (limited to 'drivers/regulator/max77686.c')
-rw-r--r-- | drivers/regulator/max77686.c | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/drivers/regulator/max77686.c b/drivers/regulator/max77686.c index c564af6f05a3..2a67d08658ad 100644 --- a/drivers/regulator/max77686.c +++ b/drivers/regulator/max77686.c @@ -66,7 +66,7 @@ enum max77686_ramp_rate { }; struct max77686_data { - struct regulator_dev **rdev; + struct regulator_dev *rdev[MAX77686_REGULATORS]; }; static int max77686_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay) @@ -265,6 +265,7 @@ static int max77686_pmic_dt_parse_pdata(struct max77686_dev *iodev, rmatch.of_node = NULL; of_regulator_match(iodev->dev, regulators_np, &rmatch, 1); rdata[i].initdata = rmatch.init_data; + rdata[i].of_node = rmatch.of_node; } pdata->regulators = rdata; @@ -283,10 +284,8 @@ static __devinit int max77686_pmic_probe(struct platform_device *pdev) { struct max77686_dev *iodev = dev_get_drvdata(pdev->dev.parent); struct max77686_platform_data *pdata = dev_get_platdata(iodev->dev); - struct regulator_dev **rdev; struct max77686_data *max77686; - int i, size; - int ret = 0; + int i, ret = 0; struct regulator_config config = { }; dev_dbg(&pdev->dev, "%s\n", __func__); @@ -313,45 +312,38 @@ static __devinit int max77686_pmic_probe(struct platform_device *pdev) if (!max77686) return -ENOMEM; - size = sizeof(struct regulator_dev *) * MAX77686_REGULATORS; - max77686->rdev = devm_kzalloc(&pdev->dev, size, GFP_KERNEL); - if (!max77686->rdev) - return -ENOMEM; - - rdev = max77686->rdev; config.dev = &pdev->dev; config.regmap = iodev->regmap; platform_set_drvdata(pdev, max77686); for (i = 0; i < MAX77686_REGULATORS; i++) { config.init_data = pdata->regulators[i].initdata; + config.of_node = pdata->regulators[i].of_node; - rdev[i] = regulator_register(®ulators[i], &config); - if (IS_ERR(rdev[i])) { - ret = PTR_ERR(rdev[i]); + max77686->rdev[i] = regulator_register(®ulators[i], &config); + if (IS_ERR(max77686->rdev[i])) { + ret = PTR_ERR(max77686->rdev[i]); dev_err(&pdev->dev, "regulator init failed for %d\n", i); - rdev[i] = NULL; - goto err; + max77686->rdev[i] = NULL; + goto err; } } return 0; err: while (--i >= 0) - regulator_unregister(rdev[i]); + regulator_unregister(max77686->rdev[i]); return ret; } static int __devexit max77686_pmic_remove(struct platform_device *pdev) { struct max77686_data *max77686 = platform_get_drvdata(pdev); - struct regulator_dev **rdev = max77686->rdev; int i; for (i = 0; i < MAX77686_REGULATORS; i++) - if (rdev[i]) - regulator_unregister(rdev[i]); + regulator_unregister(max77686->rdev[i]); return 0; } |