提交 d3452436 编写于 作者: L Linus Torvalds

Merge tag 'regulator-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator

Pull regulator fixes from Mark Brown:
 "A few small things here and there, nothing major here really.  The
  conversion of twl4030ldo_ops to get_voltage_sel is a fix, as covered
  in the commit log it fixes inconsistency in handling of the IS_UNSUP()
  feature in the driver."

* tag 'regulator-3.9-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/regulator:
  regulator: fixed regulator_bulk_enable unwinding code
  regulator: twl: Convert twl4030ldo_ops to get_voltage_sel
  regulator: palmas: fix number of SMPS voltages
  regulator: core: fix documentation error in regulator_allow_bypass
  regulator: core: update kernel documentation for regulator_desc
  regulator: db8500-prcmu - remove incorrect __exit markup
...@@ -2830,7 +2830,7 @@ EXPORT_SYMBOL_GPL(regulator_get_bypass_regmap); ...@@ -2830,7 +2830,7 @@ EXPORT_SYMBOL_GPL(regulator_get_bypass_regmap);
* regulator_allow_bypass - allow the regulator to go into bypass mode * regulator_allow_bypass - allow the regulator to go into bypass mode
* *
* @regulator: Regulator to configure * @regulator: Regulator to configure
* @allow: enable or disable bypass mode * @enable: enable or disable bypass mode
* *
* Allow the regulator to go into bypass mode if all other consumers * Allow the regulator to go into bypass mode if all other consumers
* for the regulator also enable bypass mode and the machine * for the regulator also enable bypass mode and the machine
...@@ -3057,9 +3057,13 @@ int regulator_bulk_enable(int num_consumers, ...@@ -3057,9 +3057,13 @@ int regulator_bulk_enable(int num_consumers,
return 0; return 0;
err: err:
pr_err("Failed to enable %s: %d\n", consumers[i].supply, ret); for (i = 0; i < num_consumers; i++) {
while (--i >= 0) if (consumers[i].ret < 0)
regulator_disable(consumers[i].consumer); pr_err("Failed to enable %s: %d\n", consumers[i].supply,
consumers[i].ret);
else
regulator_disable(consumers[i].consumer);
}
return ret; return ret;
} }
......
...@@ -528,7 +528,7 @@ static int db8500_regulator_probe(struct platform_device *pdev) ...@@ -528,7 +528,7 @@ static int db8500_regulator_probe(struct platform_device *pdev)
return 0; return 0;
} }
static int __exit db8500_regulator_remove(struct platform_device *pdev) static int db8500_regulator_remove(struct platform_device *pdev)
{ {
int i; int i;
...@@ -553,7 +553,7 @@ static struct platform_driver db8500_regulator_driver = { ...@@ -553,7 +553,7 @@ static struct platform_driver db8500_regulator_driver = {
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
.probe = db8500_regulator_probe, .probe = db8500_regulator_probe,
.remove = __exit_p(db8500_regulator_remove), .remove = db8500_regulator_remove,
}; };
static int __init db8500_regulator_init(void) static int __init db8500_regulator_init(void)
......
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
* Copyright 2011-2012 Texas Instruments Inc. * Copyright 2011-2012 Texas Instruments Inc.
* *
* Author: Graeme Gregory <gg@slimlogic.co.uk> * Author: Graeme Gregory <gg@slimlogic.co.uk>
* Author: Ian Lartey <ian@slimlogic.co.uk>
* *
* This program is free software; you can redistribute it and/or modify it * This program is free software; you can redistribute it and/or modify it
* under the terms of the GNU General Public License as published by the * under the terms of the GNU General Public License as published by the
...@@ -156,7 +157,7 @@ static const struct regs_info palmas_regs_info[] = { ...@@ -156,7 +157,7 @@ static const struct regs_info palmas_regs_info[] = {
* *
* So they are basically (maxV-minV)/stepV * So they are basically (maxV-minV)/stepV
*/ */
#define PALMAS_SMPS_NUM_VOLTAGES 116 #define PALMAS_SMPS_NUM_VOLTAGES 117
#define PALMAS_SMPS10_NUM_VOLTAGES 2 #define PALMAS_SMPS10_NUM_VOLTAGES 2
#define PALMAS_LDO_NUM_VOLTAGES 50 #define PALMAS_LDO_NUM_VOLTAGES 50
......
...@@ -471,24 +471,23 @@ twl4030ldo_set_voltage_sel(struct regulator_dev *rdev, unsigned selector) ...@@ -471,24 +471,23 @@ twl4030ldo_set_voltage_sel(struct regulator_dev *rdev, unsigned selector)
selector); selector);
} }
static int twl4030ldo_get_voltage(struct regulator_dev *rdev) static int twl4030ldo_get_voltage_sel(struct regulator_dev *rdev)
{ {
struct twlreg_info *info = rdev_get_drvdata(rdev); struct twlreg_info *info = rdev_get_drvdata(rdev);
int vsel = twlreg_read(info, TWL_MODULE_PM_RECEIVER, int vsel = twlreg_read(info, TWL_MODULE_PM_RECEIVER, VREG_VOLTAGE);
VREG_VOLTAGE);
if (vsel < 0) if (vsel < 0)
return vsel; return vsel;
vsel &= info->table_len - 1; vsel &= info->table_len - 1;
return LDO_MV(info->table[vsel]) * 1000; return vsel;
} }
static struct regulator_ops twl4030ldo_ops = { static struct regulator_ops twl4030ldo_ops = {
.list_voltage = twl4030ldo_list_voltage, .list_voltage = twl4030ldo_list_voltage,
.set_voltage_sel = twl4030ldo_set_voltage_sel, .set_voltage_sel = twl4030ldo_set_voltage_sel,
.get_voltage = twl4030ldo_get_voltage, .get_voltage_sel = twl4030ldo_get_voltage_sel,
.enable = twl4030reg_enable, .enable = twl4030reg_enable,
.disable = twl4030reg_disable, .disable = twl4030reg_disable,
......
...@@ -199,6 +199,8 @@ enum regulator_type { ...@@ -199,6 +199,8 @@ enum regulator_type {
* output when using regulator_set_voltage_sel_regmap * output when using regulator_set_voltage_sel_regmap
* @enable_reg: Register for control when using regmap enable/disable ops * @enable_reg: Register for control when using regmap enable/disable ops
* @enable_mask: Mask for control when using regmap enable/disable ops * @enable_mask: Mask for control when using regmap enable/disable ops
* @bypass_reg: Register for control when using regmap set_bypass
* @bypass_mask: Mask for control when using regmap set_bypass
* *
* @enable_time: Time taken for initial enable of regulator (in uS). * @enable_time: Time taken for initial enable of regulator (in uS).
*/ */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册