aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/regulator/88pm8607.c2
-rw-r--r--drivers/regulator/Kconfig1
-rw-r--r--drivers/regulator/Makefile1
-rw-r--r--drivers/regulator/aat2870-regulator.c4
-rw-r--r--drivers/regulator/ab3100.c2
-rw-r--r--drivers/regulator/ab8500.c2
-rw-r--r--drivers/regulator/ad5398.c2
-rw-r--r--drivers/regulator/bq24022.c2
-rw-r--r--drivers/regulator/core.c85
-rw-r--r--drivers/regulator/da903x.c2
-rw-r--r--drivers/regulator/db8500-prcmu.c2
-rw-r--r--drivers/regulator/dummy.c2
-rw-r--r--drivers/regulator/fixed.c83
-rw-r--r--drivers/regulator/gpio-regulator.c2
-rw-r--r--drivers/regulator/isl6271a-regulator.c2
-rw-r--r--drivers/regulator/lp3971.c2
-rw-r--r--drivers/regulator/lp3972.c2
-rw-r--r--drivers/regulator/max1586.c2
-rw-r--r--drivers/regulator/max8649.c157
-rw-r--r--drivers/regulator/max8660.c2
-rw-r--r--drivers/regulator/max8925-regulator.c2
-rw-r--r--drivers/regulator/max8952.c2
-rw-r--r--drivers/regulator/max8997.c2
-rw-r--r--drivers/regulator/max8998.c2
-rw-r--r--drivers/regulator/mc13783-regulator.c2
-rw-r--r--drivers/regulator/mc13892-regulator.c2
-rw-r--r--drivers/regulator/of_regulator.c83
-rw-r--r--drivers/regulator/pcap-regulator.c2
-rw-r--r--drivers/regulator/pcf50633-regulator.c2
-rw-r--r--drivers/regulator/tps6105x-regulator.c3
-rw-r--r--drivers/regulator/tps65023-regulator.c89
-rw-r--r--drivers/regulator/tps6507x-regulator.c2
-rw-r--r--drivers/regulator/tps6524x-regulator.c2
-rw-r--r--drivers/regulator/tps6586x-regulator.c2
-rw-r--r--drivers/regulator/tps65910-regulator.c39
-rw-r--r--drivers/regulator/tps65912-regulator.c2
-rw-r--r--drivers/regulator/twl-regulator.c2
-rw-r--r--drivers/regulator/userspace-consumer.c13
-rw-r--r--drivers/regulator/virtual.c12
-rw-r--r--drivers/regulator/wm831x-dcdc.c8
-rw-r--r--drivers/regulator/wm831x-isink.c2
-rw-r--r--drivers/regulator/wm831x-ldo.c6
-rw-r--r--drivers/regulator/wm8350-regulator.c2
-rw-r--r--drivers/regulator/wm8400-regulator.c2
-rw-r--r--drivers/regulator/wm8994-regulator.c2
45 files changed, 380 insertions, 266 deletions
diff --git a/drivers/regulator/88pm8607.c b/drivers/regulator/88pm8607.c
index ca0d608f8248..df33530cec4a 100644
--- a/drivers/regulator/88pm8607.c
+++ b/drivers/regulator/88pm8607.c
@@ -427,7 +427,7 @@ static int __devinit pm8607_regulator_probe(struct platform_device *pdev)
427 427
428 /* replace driver_data with info */ 428 /* replace driver_data with info */
429 info->regulator = regulator_register(&info->desc, &pdev->dev, 429 info->regulator = regulator_register(&info->desc, &pdev->dev,
430 pdata, info); 430 pdata, info, NULL);
431 if (IS_ERR(info->regulator)) { 431 if (IS_ERR(info->regulator)) {
432 dev_err(&pdev->dev, "failed to register regulator %s\n", 432 dev_err(&pdev->dev, "failed to register regulator %s\n",
433 info->desc.name); 433 info->desc.name);
diff --git a/drivers/regulator/Kconfig b/drivers/regulator/Kconfig
index 9713b1b860cb..4e919b2ac7ee 100644
--- a/drivers/regulator/Kconfig
+++ b/drivers/regulator/Kconfig
@@ -93,6 +93,7 @@ config REGULATOR_MAX1586
93config REGULATOR_MAX8649 93config REGULATOR_MAX8649
94 tristate "Maxim 8649 voltage regulator" 94 tristate "Maxim 8649 voltage regulator"
95 depends on I2C 95 depends on I2C
96 select REGMAP_I2C
96 help 97 help
97 This driver controls a Maxim 8649 voltage output regulator via 98 This driver controls a Maxim 8649 voltage output regulator via
98 I2C bus. 99 I2C bus.
diff --git a/drivers/regulator/Makefile b/drivers/regulator/Makefile
index 93a6318f5328..c75a5229cb27 100644
--- a/drivers/regulator/Makefile
+++ b/drivers/regulator/Makefile
@@ -4,6 +4,7 @@
4 4
5 5
6obj-$(CONFIG_REGULATOR) += core.o dummy.o 6obj-$(CONFIG_REGULATOR) += core.o dummy.o
7obj-$(CONFIG_OF) += of_regulator.o
7obj-$(CONFIG_REGULATOR_FIXED_VOLTAGE) += fixed.o 8obj-$(CONFIG_REGULATOR_FIXED_VOLTAGE) += fixed.o
8obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o 9obj-$(CONFIG_REGULATOR_VIRTUAL_CONSUMER) += virtual.o
9obj-$(CONFIG_REGULATOR_USERSPACE_CONSUMER) += userspace-consumer.o 10obj-$(CONFIG_REGULATOR_USERSPACE_CONSUMER) += userspace-consumer.o
diff --git a/drivers/regulator/aat2870-regulator.c b/drivers/regulator/aat2870-regulator.c
index 298c6c6a2795..685ad43b0749 100644
--- a/drivers/regulator/aat2870-regulator.c
+++ b/drivers/regulator/aat2870-regulator.c
@@ -63,7 +63,7 @@ static int aat2870_ldo_set_voltage_sel(struct regulator_dev *rdev,
63 struct aat2870_data *aat2870 = dev_get_drvdata(ri->pdev->dev.parent); 63 struct aat2870_data *aat2870 = dev_get_drvdata(ri->pdev->dev.parent);
64 64
65 return aat2870->update(aat2870, ri->voltage_addr, ri->voltage_mask, 65 return aat2870->update(aat2870, ri->voltage_addr, ri->voltage_mask,
66 (selector << ri->voltage_shift) & ri->voltage_mask); 66 selector << ri->voltage_shift);
67} 67}
68 68
69static int aat2870_ldo_get_voltage_sel(struct regulator_dev *rdev) 69static int aat2870_ldo_get_voltage_sel(struct regulator_dev *rdev)
@@ -188,7 +188,7 @@ static int aat2870_regulator_probe(struct platform_device *pdev)
188 ri->pdev = pdev; 188 ri->pdev = pdev;
189 189
190 rdev = regulator_register(&ri->desc, &pdev->dev, 190 rdev = regulator_register(&ri->desc, &pdev->dev,
191 pdev->dev.platform_data, ri); 191 pdev->dev.platform_data, ri, NULL);
192 if (IS_ERR(rdev)) { 192 if (IS_ERR(rdev)) {
193 dev_err(&pdev->dev, "Failed to register regulator %s\n", 193 dev_err(&pdev->dev, "Failed to register regulator %s\n",
194 ri->desc.name); 194 ri->desc.name);
diff --git a/drivers/regulator/ab3100.c b/drivers/regulator/ab3100.c
index 585e4946fe0a..042271aace6a 100644
--- a/drivers/regulator/ab3100.c
+++ b/drivers/regulator/ab3100.c
@@ -634,7 +634,7 @@ static int __devinit ab3100_regulators_probe(struct platform_device *pdev)
634 rdev = regulator_register(&ab3100_regulator_desc[i], 634 rdev = regulator_register(&ab3100_regulator_desc[i],
635 &pdev->dev, 635 &pdev->dev,
636 &plfdata->reg_constraints[i], 636 &plfdata->reg_constraints[i],
637 reg); 637 reg, NULL);
638 638
639 if (IS_ERR(rdev)) { 639 if (IS_ERR(rdev)) {
640 err = PTR_ERR(rdev); 640 err = PTR_ERR(rdev);
diff --git a/drivers/regulator/ab8500.c b/drivers/regulator/ab8500.c
index 6e1ae69646b3..e91b8ddc2793 100644
--- a/drivers/regulator/ab8500.c
+++ b/drivers/regulator/ab8500.c
@@ -822,7 +822,7 @@ static __devinit int ab8500_regulator_probe(struct platform_device *pdev)
822 822
823 /* register regulator with framework */ 823 /* register regulator with framework */
824 info->regulator = regulator_register(&info->desc, &pdev->dev, 824 info->regulator = regulator_register(&info->desc, &pdev->dev,
825 &pdata->regulator[i], info); 825 &pdata->regulator[i], info, NULL);
826 if (IS_ERR(info->regulator)) { 826 if (IS_ERR(info->regulator)) {
827 err = PTR_ERR(info->regulator); 827 err = PTR_ERR(info->regulator);
828 dev_err(&pdev->dev, "failed to register regulator %s\n", 828 dev_err(&pdev->dev, "failed to register regulator %s\n",
diff --git a/drivers/regulator/ad5398.c b/drivers/regulator/ad5398.c
index a4be41614eeb..483c80930852 100644
--- a/drivers/regulator/ad5398.c
+++ b/drivers/regulator/ad5398.c
@@ -233,7 +233,7 @@ static int __devinit ad5398_probe(struct i2c_client *client,
233 chip->current_mask = (chip->current_level - 1) << chip->current_offset; 233 chip->current_mask = (chip->current_level - 1) << chip->current_offset;
234 234
235 chip->rdev = regulator_register(&ad5398_reg, &client->dev, 235 chip->rdev = regulator_register(&ad5398_reg, &client->dev,
236 init_data, chip); 236 init_data, chip, NULL);
237 if (IS_ERR(chip->rdev)) { 237 if (IS_ERR(chip->rdev)) {
238 ret = PTR_ERR(chip->rdev); 238 ret = PTR_ERR(chip->rdev);
239 dev_err(&client->dev, "failed to register %s %s\n", 239 dev_err(&client->dev, "failed to register %s %s\n",
diff --git a/drivers/regulator/bq24022.c b/drivers/regulator/bq24022.c
index e24d1b7d97a8..9fab6d1bbe80 100644
--- a/drivers/regulator/bq24022.c
+++ b/drivers/regulator/bq24022.c
@@ -107,7 +107,7 @@ static int __init bq24022_probe(struct platform_device *pdev)
107 ret = gpio_direction_output(pdata->gpio_nce, 1); 107 ret = gpio_direction_output(pdata->gpio_nce, 1);
108 108
109 bq24022 = regulator_register(&bq24022_desc, &pdev->dev, 109 bq24022 = regulator_register(&bq24022_desc, &pdev->dev,
110 pdata->init_data, pdata); 110 pdata->init_data, pdata, NULL);
111 if (IS_ERR(bq24022)) { 111 if (IS_ERR(bq24022)) {
112 dev_dbg(&pdev->dev, "couldn't register regulator\n"); 112 dev_dbg(&pdev->dev, "couldn't register regulator\n");
113 ret = PTR_ERR(bq24022); 113 ret = PTR_ERR(bq24022);
diff --git a/drivers/regulator/core.c b/drivers/regulator/core.c
index 669d02160221..f489bed2d848 100644
--- a/drivers/regulator/core.c
+++ b/drivers/regulator/core.c
@@ -25,6 +25,8 @@
25#include <linux/mutex.h> 25#include <linux/mutex.h>
26#include <linux/suspend.h> 26#include <linux/suspend.h>
27#include <linux/delay.h> 27#include <linux/delay.h>
28#include <linux/of.h>
29#include <linux/regulator/of_regulator.h>
28#include <linux/regulator/consumer.h> 30#include <linux/regulator/consumer.h>
29#include <linux/regulator/driver.h> 31#include <linux/regulator/driver.h>
30#include <linux/regulator/machine.h> 32#include <linux/regulator/machine.h>
@@ -132,6 +134,33 @@ static struct regulator *get_device_regulator(struct device *dev)
132 return NULL; 134 return NULL;
133} 135}
134 136
137/**
138 * of_get_regulator - get a regulator device node based on supply name
139 * @dev: Device pointer for the consumer (of regulator) device
140 * @supply: regulator supply name
141 *
142 * Extract the regulator device node corresponding to the supply name.
143 * retruns the device node corresponding to the regulator if found, else
144 * returns NULL.
145 */
146static struct device_node *of_get_regulator(struct device *dev, const char *supply)
147{
148 struct device_node *regnode = NULL;
149 char prop_name[32]; /* 32 is max size of property name */
150
151 dev_dbg(dev, "Looking up %s-supply from device tree\n", supply);
152
153 snprintf(prop_name, 32, "%s-supply", supply);
154 regnode = of_parse_phandle(dev->of_node, prop_name, 0);
155
156 if (!regnode) {
157 dev_warn(dev, "%s property in node %s references invalid phandle",
158 prop_name, dev->of_node->full_name);
159 return NULL;
160 }
161 return regnode;
162}
163
135/* Platform voltage constraint check */ 164/* Platform voltage constraint check */
136static int regulator_check_voltage(struct regulator_dev *rdev, 165static int regulator_check_voltage(struct regulator_dev *rdev,
137 int *min_uV, int *max_uV) 166 int *min_uV, int *max_uV)
@@ -1148,6 +1177,30 @@ static int _regulator_get_enable_time(struct regulator_dev *rdev)
1148 return rdev->desc->ops->enable_time(rdev); 1177 return rdev->desc->ops->enable_time(rdev);
1149} 1178}
1150 1179
1180static struct regulator_dev *regulator_dev_lookup(struct device *dev,
1181 const char *supply)
1182{
1183 struct regulator_dev *r;
1184 struct device_node *node;
1185
1186 /* first do a dt based lookup */
1187 if (dev && dev->of_node) {
1188 node = of_get_regulator(dev, supply);
1189 if (node)
1190 list_for_each_entry(r, &regulator_list, list)
1191 if (r->dev.parent &&
1192 node == r->dev.of_node)
1193 return r;
1194 }
1195
1196 /* if not found, try doing it non-dt way */
1197 list_for_each_entry(r, &regulator_list, list)
1198 if (strcmp(rdev_get_name(r), supply) == 0)
1199 return r;
1200
1201 return NULL;
1202}
1203
1151/* Internal regulator request function */ 1204/* Internal regulator request function */
1152static struct regulator *_regulator_get(struct device *dev, const char *id, 1205static struct regulator *_regulator_get(struct device *dev, const char *id,
1153 int exclusive) 1206 int exclusive)
@@ -1168,6 +1221,10 @@ static struct regulator *_regulator_get(struct device *dev, const char *id,
1168 1221
1169 mutex_lock(&regulator_list_mutex); 1222 mutex_lock(&regulator_list_mutex);
1170 1223
1224 rdev = regulator_dev_lookup(dev, id);
1225 if (rdev)
1226 goto found;
1227
1171 list_for_each_entry(map, &regulator_map_list, list) { 1228 list_for_each_entry(map, &regulator_map_list, list) {
1172 /* If the mapping has a device set up it must match */ 1229 /* If the mapping has a device set up it must match */
1173 if (map->dev_name && 1230 if (map->dev_name &&
@@ -2503,7 +2560,8 @@ static int add_regulator_attributes(struct regulator_dev *rdev)
2503 int status = 0; 2560 int status = 0;
2504 2561
2505 /* some attributes need specific methods to be displayed */ 2562 /* some attributes need specific methods to be displayed */
2506 if (ops->get_voltage || ops->get_voltage_sel) { 2563 if ((ops->get_voltage && ops->get_voltage(rdev) >= 0) ||
2564 (ops->get_voltage_sel && ops->get_voltage_sel(rdev) >= 0)) {
2507 status = device_create_file(dev, &dev_attr_microvolts); 2565 status = device_create_file(dev, &dev_attr_microvolts);
2508 if (status < 0) 2566 if (status < 0)
2509 return status; 2567 return status;
@@ -2637,11 +2695,12 @@ static void rdev_init_debugfs(struct regulator_dev *rdev)
2637 */ 2695 */
2638struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc, 2696struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
2639 struct device *dev, const struct regulator_init_data *init_data, 2697 struct device *dev, const struct regulator_init_data *init_data,
2640 void *driver_data) 2698 void *driver_data, struct device_node *of_node)
2641{ 2699{
2642 static atomic_t regulator_no = ATOMIC_INIT(0); 2700 static atomic_t regulator_no = ATOMIC_INIT(0);
2643 struct regulator_dev *rdev; 2701 struct regulator_dev *rdev;
2644 int ret, i; 2702 int ret, i;
2703 const char *supply = NULL;
2645 2704
2646 if (regulator_desc == NULL) 2705 if (regulator_desc == NULL)
2647 return ERR_PTR(-EINVAL); 2706 return ERR_PTR(-EINVAL);
@@ -2696,6 +2755,7 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
2696 2755
2697 /* register with sysfs */ 2756 /* register with sysfs */
2698 rdev->dev.class = &regulator_class; 2757 rdev->dev.class = &regulator_class;
2758 rdev->dev.of_node = of_node;
2699 rdev->dev.parent = dev; 2759 rdev->dev.parent = dev;
2700 dev_set_name(&rdev->dev, "regulator.%d", 2760 dev_set_name(&rdev->dev, "regulator.%d",
2701 atomic_inc_return(&regulator_no) - 1); 2761 atomic_inc_return(&regulator_no) - 1);
@@ -2717,21 +2777,18 @@ struct regulator_dev *regulator_register(struct regulator_desc *regulator_desc,
2717 if (ret < 0) 2777 if (ret < 0)
2718 goto scrub; 2778 goto scrub;
2719 2779
2720 if (init_data->supply_regulator) { 2780 if (init_data->supply_regulator)
2781 supply = init_data->supply_regulator;
2782 else if (regulator_desc->supply_name)
2783 supply = regulator_desc->supply_name;
2784
2785 if (supply) {
2721 struct regulator_dev *r; 2786 struct regulator_dev *r;
2722 int found = 0;
2723 2787
2724 list_for_each_entry(r, &regulator_list, list) { 2788 r = regulator_dev_lookup(dev, supply);
2725 if (strcmp(rdev_get_name(r),
2726 init_data->supply_regulator) == 0) {
2727 found = 1;
2728 break;
2729 }
2730 }
2731 2789
2732 if (!found) { 2790 if (!r) {
2733 dev_err(dev, "Failed to find supply %s\n", 2791 dev_err(dev, "Failed to find supply %s\n", supply);
2734 init_data->supply_regulator);
2735 ret = -ENODEV; 2792 ret = -ENODEV;
2736 goto scrub; 2793 goto scrub;
2737 } 2794 }
diff --git a/drivers/regulator/da903x.c b/drivers/regulator/da903x.c
index e23ddfa8b2c6..8dbc54da7d70 100644
--- a/drivers/regulator/da903x.c
+++ b/drivers/regulator/da903x.c
@@ -537,7 +537,7 @@ static int __devinit da903x_regulator_probe(struct platform_device *pdev)
537 ri->desc.ops = &da9030_regulator_ldo1_15_ops; 537 ri->desc.ops = &da9030_regulator_ldo1_15_ops;
538 538
539 rdev = regulator_register(&ri->desc, &pdev->dev, 539 rdev = regulator_register(&ri->desc, &pdev->dev,
540 pdev->dev.platform_data, ri); 540 pdev->dev.platform_data, ri, NULL);
541 if (IS_ERR(rdev)) { 541 if (IS_ERR(rdev)) {
542 dev_err(&pdev->dev, "failed to register regulator %s\n", 542 dev_err(&pdev->dev, "failed to register regulator %s\n",
543 ri->desc.name); 543 ri->desc.name);
diff --git a/drivers/regulator/db8500-prcmu.c b/drivers/regulator/db8500-prcmu.c
index 78329751af54..515443fcd26b 100644
--- a/drivers/regulator/db8500-prcmu.c
+++ b/drivers/regulator/db8500-prcmu.c
@@ -486,7 +486,7 @@ static int __devinit db8500_regulator_probe(struct platform_device *pdev)
486 486
487 /* register with the regulator framework */ 487 /* register with the regulator framework */
488 info->rdev = regulator_register(&info->desc, &pdev->dev, 488 info->rdev = regulator_register(&info->desc, &pdev->dev,
489 init_data, info); 489 init_data, info, NULL);
490 if (IS_ERR(info->rdev)) { 490 if (IS_ERR(info->rdev)) {
491 err = PTR_ERR(info->rdev); 491 err = PTR_ERR(info->rdev);
492 dev_err(&pdev->dev, "failed to register %s: err %i\n", 492 dev_err(&pdev->dev, "failed to register %s: err %i\n",
diff --git a/drivers/regulator/dummy.c b/drivers/regulator/dummy.c
index b8f520513ce7..0ee00de4be72 100644
--- a/drivers/regulator/dummy.c
+++ b/drivers/regulator/dummy.c
@@ -42,7 +42,7 @@ static int __devinit dummy_regulator_probe(struct platform_device *pdev)
42 int ret; 42 int ret;
43 43
44 dummy_regulator_rdev = regulator_register(&dummy_desc, NULL, 44 dummy_regulator_rdev = regulator_register(&dummy_desc, NULL,
45 &dummy_initdata, NULL); 45 &dummy_initdata, NULL, NULL);
46 if (IS_ERR(dummy_regulator_rdev)) { 46 if (IS_ERR(dummy_regulator_rdev)) {
47 ret = PTR_ERR(dummy_regulator_rdev); 47 ret = PTR_ERR(dummy_regulator_rdev);
48 pr_err("Failed to register regulator: %d\n", ret); 48 pr_err("Failed to register regulator: %d\n", ret);
diff --git a/drivers/regulator/fixed.c b/drivers/regulator/fixed.c
index 21ecf212a522..72abbf5507a6 100644
--- a/drivers/regulator/fixed.c
+++ b/drivers/regulator/fixed.c
@@ -27,6 +27,10 @@
27#include <linux/gpio.h> 27#include <linux/gpio.h>
28#include <linux/delay.h> 28#include <linux/delay.h>
29#include <linux/slab.h> 29#include <linux/slab.h>
30#include <linux/of.h>
31#include <linux/of_gpio.h>
32#include <linux/regulator/of_regulator.h>
33#include <linux/regulator/machine.h>
30 34
31struct fixed_voltage_data { 35struct fixed_voltage_data {
32 struct regulator_desc desc; 36 struct regulator_desc desc;
@@ -38,6 +42,57 @@ struct fixed_voltage_data {
38 bool is_enabled; 42 bool is_enabled;
39}; 43};
40 44
45
46/**
47 * of_get_fixed_voltage_config - extract fixed_voltage_config structure info
48 * @dev: device requesting for fixed_voltage_config
49 *
50 * Populates fixed_voltage_config structure by extracting data from device
51 * tree node, returns a pointer to the populated structure of NULL if memory
52 * alloc fails.
53 */
54static struct fixed_voltage_config *
55of_get_fixed_voltage_config(struct device *dev)
56{
57 struct fixed_voltage_config *config;
58 struct device_node *np = dev->of_node;
59 const __be32 *delay;
60 struct regulator_init_data *init_data;
61
62 config = devm_kzalloc(dev, sizeof(struct fixed_voltage_config),
63 GFP_KERNEL);
64 if (!config)
65 return NULL;
66
67 config->init_data = of_get_regulator_init_data(dev);
68 if (!config->init_data)
69 return NULL;
70
71 init_data = config->init_data;
72
73 config->supply_name = init_data->constraints.name;
74 if (init_data->constraints.min_uV == init_data->constraints.max_uV) {
75 config->microvolts = init_data->constraints.min_uV;
76 } else {
77 dev_err(dev,
78 "Fixed regulator specified with variable voltages\n");
79 return NULL;
80 }
81
82 if (init_data->constraints.boot_on)
83 config->enabled_at_boot = true;
84
85 config->gpio = of_get_named_gpio(np, "gpio", 0);
86 delay = of_get_property(np, "startup-delay-us", NULL);
87 if (delay)
88 config->startup_delay = be32_to_cpu(*delay);
89
90 if (of_find_property(np, "enable-active-high", NULL))
91 config->enable_high = true;
92
93 return config;
94}
95
41static int fixed_voltage_is_enabled(struct regulator_dev *dev) 96static int fixed_voltage_is_enabled(struct regulator_dev *dev)
42{ 97{
43 struct fixed_voltage_data *data = rdev_get_drvdata(dev); 98 struct fixed_voltage_data *data = rdev_get_drvdata(dev);
@@ -80,7 +135,10 @@ static int fixed_voltage_get_voltage(struct regulator_dev *dev)
80{ 135{
81 struct fixed_voltage_data *data = rdev_get_drvdata(dev); 136 struct fixed_voltage_data *data = rdev_get_drvdata(dev);
82 137
83 return data->microvolts; 138 if (data->microvolts)
139 return data->microvolts;
140 else
141 return -EINVAL;
84} 142}
85 143
86static int fixed_voltage_list_voltage(struct regulator_dev *dev, 144static int fixed_voltage_list_voltage(struct regulator_dev *dev,
@@ -105,10 +163,18 @@ static struct regulator_ops fixed_voltage_ops = {
105 163
106static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev) 164static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev)
107{ 165{
108 struct fixed_voltage_config *config = pdev->dev.platform_data; 166 struct fixed_voltage_config *config;
109 struct fixed_voltage_data *drvdata; 167 struct fixed_voltage_data *drvdata;
110 int ret; 168 int ret;
111 169
170 if (pdev->dev.of_node)
171 config = of_get_fixed_voltage_config(&pdev->dev);
172 else
173 config = pdev->dev.platform_data;
174
175 if (!config)
176 return -ENOMEM;
177
112 drvdata = kzalloc(sizeof(struct fixed_voltage_data), GFP_KERNEL); 178 drvdata = kzalloc(sizeof(struct fixed_voltage_data), GFP_KERNEL);
113 if (drvdata == NULL) { 179 if (drvdata == NULL) {
114 dev_err(&pdev->dev, "Failed to allocate device data\n"); 180 dev_err(&pdev->dev, "Failed to allocate device data\n");
@@ -180,7 +246,7 @@ static int __devinit reg_fixed_voltage_probe(struct platform_device *pdev)
180 } 246 }
181 247
182 drvdata->dev = regulator_register(&drvdata->desc, &pdev->dev, 248 drvdata->dev = regulator_register(&drvdata->desc, &pdev->dev,
183 config->init_data, drvdata); 249 config->init_data, drvdata, NULL);
184 if (IS_ERR(drvdata->dev)) { 250 if (IS_ERR(drvdata->dev)) {
185 ret = PTR_ERR(drvdata->dev); 251 ret = PTR_ERR(drvdata->dev);
186 dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret); 252 dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret);
@@ -217,12 +283,23 @@ static int __devexit reg_fixed_voltage_remove(struct platform_device *pdev)
217 return 0; 283 return 0;
218} 284}
219 285
286#if defined(CONFIG_OF)
287static const struct of_device_id fixed_of_match[] __devinitconst = {
288 { .compatible = "regulator-fixed", },
289 {},
290};
291MODULE_DEVICE_TABLE(of, fixed_of_match);
292#else
293#define fixed_of_match NULL
294#endif
295
220static struct platform_driver regulator_fixed_voltage_driver = { 296static struct platform_driver regulator_fixed_voltage_driver = {
221 .probe = reg_fixed_voltage_probe, 297 .probe = reg_fixed_voltage_probe,
222 .remove = __devexit_p(reg_fixed_voltage_remove), 298 .remove = __devexit_p(reg_fixed_voltage_remove),
223 .driver = { 299 .driver = {
224 .name = "reg-fixed-voltage", 300 .name = "reg-fixed-voltage",
225 .owner = THIS_MODULE, 301 .owner = THIS_MODULE,
302 .of_match_table = fixed_of_match,
226 }, 303 },
227}; 304};
228 305
diff --git a/drivers/regulator/gpio-regulator.c b/drivers/regulator/gpio-regulator.c
index f0acf52498bd..42e1cb1835e5 100644
--- a/drivers/regulator/gpio-regulator.c
+++ b/drivers/regulator/gpio-regulator.c
@@ -284,7 +284,7 @@ static int __devinit gpio_regulator_probe(struct platform_device *pdev)
284 drvdata->state = state; 284 drvdata->state = state;
285 285
286 drvdata->dev = regulator_register(&drvdata->desc, &pdev->dev, 286 drvdata->dev = regulator_register(&drvdata->desc, &pdev->dev,
287 config->init_data, drvdata); 287 config->init_data, drvdata, NULL);
288 if (IS_ERR(drvdata->dev)) { 288 if (IS_ERR(drvdata->dev)) {
289 ret = PTR_ERR(drvdata->dev); 289 ret = PTR_ERR(drvdata->dev);
290 dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret); 290 dev_err(&pdev->dev, "Failed to register regulator: %d\n", ret);
diff --git a/drivers/regulator/isl6271a-regulator.c b/drivers/regulator/isl6271a-regulator.c
index e4b3592e8176..c1a456c4257c 100644
--- a/drivers/regulator/isl6271a-regulator.c
+++ b/drivers/regulator/isl6271a-regulator.c
@@ -170,7 +170,7 @@ static int __devinit isl6271a_probe(struct i2c_client *i2c,
170 170
171 for (i = 0; i < 3; i++) { 171 for (i = 0; i < 3; i++) {
172 pmic->rdev[i] = regulator_register(&isl_rd[i], &i2c->dev, 172 pmic->rdev[i] = regulator_register(&isl_rd[i], &i2c->dev,
173 init_data, pmic); 173 init_data, pmic, NULL);
174 if (IS_ERR(pmic->rdev[i])) { 174 if (IS_ERR(pmic->rdev[i])) {
175 dev_err(&i2c->dev, "failed to register %s\n", id->name); 175 dev_err(&i2c->dev, "failed to register %s\n", id->name);
176 err = PTR_ERR(pmic->rdev[i]); 176 err = PTR_ERR(pmic->rdev[i]);
diff --git a/drivers/regulator/lp3971.c b/drivers/regulator/lp3971.c
index 72b16b5f3db6..0cfabd318a59 100644
--- a/drivers/regulator/lp3971.c
+++ b/drivers/regulator/lp3971.c
@@ -451,7 +451,7 @@ static int __devinit setup_regulators(struct lp3971 *lp3971,
451 for (i = 0; i < pdata->num_regulators; i++) { 451 for (i = 0; i < pdata->num_regulators; i++) {
452 struct lp3971_regulator_subdev *reg = &pdata->regulators[i]; 452 struct lp3971_regulator_subdev *reg = &pdata->regulators[i];
453 lp3971->rdev[i] = regulator_register(&regulators[reg->id], 453 lp3971->rdev[i] = regulator_register(&regulators[reg->id],
454 lp3971->dev, reg->initdata, lp3971); 454 lp3971->dev, reg->initdata, lp3971, NULL);
455 455
456 if (IS_ERR(lp3971->rdev[i])) { 456 if (IS_ERR(lp3971->rdev[i])) {
457 err = PTR_ERR(lp3971->rdev[i]); 457 err = PTR_ERR(lp3971->rdev[i]);
diff --git a/drivers/regulator/lp3972.c b/drivers/regulator/lp3972.c
index fbc5e3741bef..49a15eefe5fe 100644
--- a/drivers/regulator/lp3972.c
+++ b/drivers/regulator/lp3972.c
@@ -555,7 +555,7 @@ static int __devinit setup_regulators(struct lp3972 *lp3972,
555 for (i = 0; i < pdata->num_regulators; i++) { 555 for (i = 0; i < pdata->num_regulators; i++) {
556 struct lp3972_regulator_subdev *reg = &pdata->regulators[i]; 556 struct lp3972_regulator_subdev *reg = &pdata->regulators[i];
557 lp3972->rdev[i] = regulator_register(&regulators[reg->id], 557 lp3972->rdev[i] = regulator_register(&regulators[reg->id],
558 lp3972->dev, reg->initdata, lp3972); 558 lp3972->dev, reg->initdata, lp3972, NULL);
559 559
560 if (IS_ERR(lp3972->rdev[i])) { 560 if (IS_ERR(lp3972->rdev[i])) {
561 err = PTR_ERR(lp3972->rdev[i]); 561 err = PTR_ERR(lp3972->rdev[i]);
diff --git a/drivers/regulator/max1586.c b/drivers/regulator/max1586.c
index 3f49512c5134..40e7a4db2853 100644
--- a/drivers/regulator/max1586.c
+++ b/drivers/regulator/max1586.c
@@ -214,7 +214,7 @@ static int __devinit max1586_pmic_probe(struct i2c_client *client,
214 } 214 }
215 rdev[i] = regulator_register(&max1586_reg[id], &client->dev, 215 rdev[i] = regulator_register(&max1586_reg[id], &client->dev,
216 pdata->subdevs[i].platform_data, 216 pdata->subdevs[i].platform_data,
217 max1586); 217 max1586, NULL);
218 if (IS_ERR(rdev[i])) { 218 if (IS_ERR(rdev[i])) {
219 ret = PTR_ERR(rdev[i]); 219 ret = PTR_ERR(rdev[i]);
220 dev_err(&client->dev, "failed to register %s\n", 220 dev_err(&client->dev, "failed to register %s\n",
diff --git a/drivers/regulator/max8649.c b/drivers/regulator/max8649.c
index 1062cf9f02dc..b06a2399587c 100644
--- a/drivers/regulator/max8649.c
+++ b/drivers/regulator/max8649.c
@@ -16,6 +16,7 @@
16#include <linux/regulator/driver.h> 16#include <linux/regulator/driver.h>
17#include <linux/slab.h> 17#include <linux/slab.h>
18#include <linux/regulator/max8649.h> 18#include <linux/regulator/max8649.h>
19#include <linux/regmap.h>
19 20
20#define MAX8649_DCDC_VMIN 750000 /* uV */ 21#define MAX8649_DCDC_VMIN 750000 /* uV */
21#define MAX8649_DCDC_VMAX 1380000 /* uV */ 22#define MAX8649_DCDC_VMAX 1380000 /* uV */
@@ -49,9 +50,8 @@
49 50
50struct max8649_regulator_info { 51struct max8649_regulator_info {
51 struct regulator_dev *regulator; 52 struct regulator_dev *regulator;
52 struct i2c_client *i2c;
53 struct device *dev; 53 struct device *dev;
54 struct mutex io_lock; 54 struct regmap *regmap;
55 55
56 int vol_reg; 56 int vol_reg;
57 unsigned mode:2; /* bit[1:0] = VID1, VID0 */ 57 unsigned mode:2; /* bit[1:0] = VID1, VID0 */
@@ -63,71 +63,6 @@ struct max8649_regulator_info {
63 63
64/* I2C operations */ 64/* I2C operations */
65 65
66static inline int max8649_read_device(struct i2c_client *i2c,
67 int reg, int bytes, void *dest)
68{
69 unsigned char data;
70 int ret;
71
72 data = (unsigned char)reg;
73 ret = i2c_master_send(i2c, &data, 1);
74 if (ret < 0)
75 return ret;
76 ret = i2c_master_recv(i2c, dest, bytes);
77 if (ret < 0)
78 return ret;
79 return 0;
80}
81
82static inline int max8649_write_device(struct i2c_client *i2c,
83 int reg, int bytes, void *src)
84{
85 unsigned char buf[bytes + 1];
86 int ret;
87
88 buf[0] = (unsigned char)reg;
89 memcpy(&buf[1], src, bytes);
90
91 ret = i2c_master_send(i2c, buf, bytes + 1);
92 if (ret < 0)
93 return ret;
94 return 0;
95}
96
97static int max8649_reg_read(struct i2c_client *i2c, int reg)
98{
99 struct max8649_regulator_info *info = i2c_get_clientdata(i2c);
100 unsigned char data;
101 int ret;
102
103 mutex_lock(&info->io_lock);
104 ret = max8649_read_device(i2c, reg, 1, &data);
105 mutex_unlock(&info->io_lock);
106
107 if (ret < 0)
108 return ret;
109 return (int)data;
110}
111
112static int max8649_set_bits(struct i2c_client *i2c, int reg,
113 unsigned char mask, unsigned char data)
114{
115 struct max8649_regulator_info *info = i2c_get_clientdata(i2c);
116 unsigned char value;
117 int ret;
118
119 mutex_lock(&info->io_lock);
120 ret = max8649_read_device(i2c, reg, 1, &value);
121 if (ret < 0)
122 goto out;
123 value &= ~mask;
124 value |= data;
125 ret = max8649_write_device(i2c, reg, 1, &value);
126out:
127 mutex_unlock(&info->io_lock);
128 return ret;
129}
130
131static inline int check_range(int min_uV, int max_uV) 66static inline int check_range(int min_uV, int max_uV)
132{ 67{
133 if ((min_uV < MAX8649_DCDC_VMIN) || (max_uV > MAX8649_DCDC_VMAX) 68 if ((min_uV < MAX8649_DCDC_VMIN) || (max_uV > MAX8649_DCDC_VMAX)
@@ -144,13 +79,14 @@ static int max8649_list_voltage(struct regulator_dev *rdev, unsigned index)
144static int max8649_get_voltage(struct regulator_dev *rdev) 79static int max8649_get_voltage(struct regulator_dev *rdev)
145{ 80{
146 struct max8649_regulator_info *info = rdev_get_drvdata(rdev); 81 struct max8649_regulator_info *info = rdev_get_drvdata(rdev);
82 unsigned int val;
147 unsigned char data; 83 unsigned char data;
148 int ret; 84 int ret;
149 85
150 ret = max8649_reg_read(info->i2c, info->vol_reg); 86 ret = regmap_read(info->regmap, info->vol_reg, &val);
151 if (ret < 0) 87 if (ret != 0)
152 return ret; 88 return ret;
153 data = (unsigned char)ret & MAX8649_VOL_MASK; 89 data = (unsigned char)val & MAX8649_VOL_MASK;
154 return max8649_list_voltage(rdev, data); 90 return max8649_list_voltage(rdev, data);
155} 91}
156 92
@@ -170,14 +106,14 @@ static int max8649_set_voltage(struct regulator_dev *rdev,
170 mask = MAX8649_VOL_MASK; 106 mask = MAX8649_VOL_MASK;
171 *selector = data & mask; 107 *selector = data & mask;
172 108
173 return max8649_set_bits(info->i2c, info->vol_reg, mask, data); 109 return regmap_update_bits(info->regmap, info->vol_reg, mask, data);
174} 110}
175 111
176/* EN_PD means pulldown on EN input */ 112/* EN_PD means pulldown on EN input */
177static int max8649_enable(struct regulator_dev *rdev) 113static int max8649_enable(struct regulator_dev *rdev)
178{ 114{
179 struct max8649_regulator_info *info = rdev_get_drvdata(rdev); 115 struct max8649_regulator_info *info = rdev_get_drvdata(rdev);
180 return max8649_set_bits(info->i2c, MAX8649_CONTROL, MAX8649_EN_PD, 0); 116 return regmap_update_bits(info->regmap, MAX8649_CONTROL, MAX8649_EN_PD, 0);
181} 117}
182 118
183/* 119/*
@@ -187,38 +123,40 @@ static int max8649_enable(struct regulator_dev *rdev)
187static int max8649_disable(struct regulator_dev *rdev) 123static int max8649_disable(struct regulator_dev *rdev)
188{ 124{
189 struct max8649_regulator_info *info = rdev_get_drvdata(rdev); 125 struct max8649_regulator_info *info = rdev_get_drvdata(rdev);
190 return max8649_set_bits(info->i2c, MAX8649_CONTROL, MAX8649_EN_PD, 126 return regmap_update_bits(info->regmap, MAX8649_CONTROL, MAX8649_EN_PD,
191 MAX8649_EN_PD); 127 MAX8649_EN_PD);
192} 128}
193 129
194static int max8649_is_enabled(struct regulator_dev *rdev) 130static int max8649_is_enabled(struct regulator_dev *rdev)
195{ 131{
196 struct max8649_regulator_info *info = rdev_get_drvdata(rdev); 132 struct max8649_regulator_info *info = rdev_get_drvdata(rdev);
133 unsigned int val;
197 int ret; 134 int ret;
198 135
199 ret = max8649_reg_read(info->i2c, MAX8649_CONTROL); 136 ret = regmap_read(info->regmap, MAX8649_CONTROL, &val);
200 if (ret < 0) 137 if (ret != 0)
201 return ret; 138 return ret;
202 return !((unsigned char)ret & MAX8649_EN_PD); 139 return !((unsigned char)val & MAX8649_EN_PD);
203} 140}
204 141
205static int max8649_enable_time(struct regulator_dev *rdev) 142static int max8649_enable_time(struct regulator_dev *rdev)
206{ 143{
207 struct max8649_regulator_info *info = rdev_get_drvdata(rdev); 144 struct max8649_regulator_info *info = rdev_get_drvdata(rdev);
208 int voltage, rate, ret; 145 int voltage, rate, ret;
146 unsigned int val;
209 147
210 /* get voltage */ 148 /* get voltage */
211 ret = max8649_reg_read(info->i2c, info->vol_reg); 149 ret = regmap_read(info->regmap, info->vol_reg, &val);
212 if (ret < 0) 150 if (ret != 0)
213 return ret; 151 return ret;
214 ret &= MAX8649_VOL_MASK; 152 val &= MAX8649_VOL_MASK;
215 voltage = max8649_list_voltage(rdev, (unsigned char)ret); /* uV */ 153 voltage = max8649_list_voltage(rdev, (unsigned char)ret); /* uV */
216 154
217 /* get rate */ 155 /* get rate */
218 ret = max8649_reg_read(info->i2c, MAX8649_RAMP); 156 ret = regmap_read(info->regmap, MAX8649_RAMP, &val);
219 if (ret < 0) 157 if (ret != 0)
220 return ret; 158 return ret;
221 ret = (ret & MAX8649_RAMP_MASK) >> 5; 159 ret = (val & MAX8649_RAMP_MASK) >> 5;
222 rate = (32 * 1000) >> ret; /* uV/uS */ 160 rate = (32 * 1000) >> ret; /* uV/uS */
223 161
224 return DIV_ROUND_UP(voltage, rate); 162 return DIV_ROUND_UP(voltage, rate);
@@ -230,12 +168,12 @@ static int max8649_set_mode(struct regulator_dev *rdev, unsigned int mode)
230 168
231 switch (mode) { 169 switch (mode) {
232 case REGULATOR_MODE_FAST: 170 case REGULATOR_MODE_FAST:
233 max8649_set_bits(info->i2c, info->vol_reg, MAX8649_FORCE_PWM, 171 regmap_update_bits(info->regmap, info->vol_reg, MAX8649_FORCE_PWM,
234 MAX8649_FORCE_PWM); 172 MAX8649_FORCE_PWM);
235 break; 173 break;
236 case REGULATOR_MODE_NORMAL: 174 case REGULATOR_MODE_NORMAL:
237 max8649_set_bits(info->i2c, info->vol_reg, 175 regmap_update_bits(info->regmap, info->vol_reg,
238 MAX8649_FORCE_PWM, 0); 176 MAX8649_FORCE_PWM, 0);
239 break; 177 break;
240 default: 178 default:
241 return -EINVAL; 179 return -EINVAL;
@@ -246,10 +184,13 @@ static int max8649_set_mode(struct regulator_dev *rdev, unsigned int mode)
246static unsigned int max8649_get_mode(struct regulator_dev *rdev) 184static unsigned int max8649_get_mode(struct regulator_dev *rdev)
247{ 185{
248 struct max8649_regulator_info *info = rdev_get_drvdata(rdev); 186 struct max8649_regulator_info *info = rdev_get_drvdata(rdev);
187 unsigned int val;
249 int ret; 188 int ret;
250 189
251 ret = max8649_reg_read(info->i2c, info->vol_reg); 190 ret = regmap_read(info->regmap, info->vol_reg, &val);
252 if (ret & MAX8649_FORCE_PWM) 191 if (ret != 0)
192 return ret;
193 if (val & MAX8649_FORCE_PWM)
253 return REGULATOR_MODE_FAST; 194 return REGULATOR_MODE_FAST;
254 return REGULATOR_MODE_NORMAL; 195 return REGULATOR_MODE_NORMAL;
255} 196}
@@ -275,11 +216,17 @@ static struct regulator_desc dcdc_desc = {
275 .owner = THIS_MODULE, 216 .owner = THIS_MODULE,
276}; 217};
277 218
219static struct regmap_config max8649_regmap_config = {
220 .reg_bits = 8,
221 .val_bits = 8,
222};
223
278static int __devinit max8649_regulator_probe(struct i2c_client *client, 224static int __devinit max8649_regulator_probe(struct i2c_client *client,
279 const struct i2c_device_id *id) 225 const struct i2c_device_id *id)
280{ 226{
281 struct max8649_platform_data *pdata = client->dev.platform_data; 227 struct max8649_platform_data *pdata = client->dev.platform_data;
282 struct max8649_regulator_info *info = NULL; 228 struct max8649_regulator_info *info = NULL;
229 unsigned int val;
283 unsigned char data; 230 unsigned char data;
284 int ret; 231 int ret;
285 232
@@ -289,9 +236,14 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client,
289 return -ENOMEM; 236 return -ENOMEM;
290 } 237 }
291 238
292 info->i2c = client; 239 info->regmap = regmap_init_i2c(client, &max8649_regmap_config);
240 if (IS_ERR(info->regmap)) {
241 ret = PTR_ERR(info->regmap);
242 dev_err(&client->dev, "Failed to allocate register map: %d\n", ret);
243 goto fail;
244 }
245
293 info->dev = &client->dev; 246 info->dev = &client->dev;
294 mutex_init(&info->io_lock);
295 i2c_set_clientdata(client, info); 247 i2c_set_clientdata(client, info);
296 248
297 info->mode = pdata->mode; 249 info->mode = pdata->mode;
@@ -312,8 +264,8 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client,
312 break; 264 break;
313 } 265 }
314 266
315 ret = max8649_reg_read(info->i2c, MAX8649_CHIP_ID1); 267 ret = regmap_read(info->regmap, MAX8649_CHIP_ID1, &val);
316 if (ret < 0) { 268 if (ret != 0) {
317 dev_err(info->dev, "Failed to detect ID of MAX8649:%d\n", 269 dev_err(info->dev, "Failed to detect ID of MAX8649:%d\n",
318 ret); 270 ret);
319 goto out; 271 goto out;
@@ -321,33 +273,33 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client,
321 dev_info(info->dev, "Detected MAX8649 (ID:%x)\n", ret); 273 dev_info(info->dev, "Detected MAX8649 (ID:%x)\n", ret);
322 274
323 /* enable VID0 & VID1 */ 275 /* enable VID0 & VID1 */
324 max8649_set_bits(info->i2c, MAX8649_CONTROL, MAX8649_VID_MASK, 0); 276 regmap_update_bits(info->regmap, MAX8649_CONTROL, MAX8649_VID_MASK, 0);
325 277
326 /* enable/disable external clock synchronization */ 278 /* enable/disable external clock synchronization */
327 info->extclk = pdata->extclk; 279 info->extclk = pdata->extclk;
328 data = (info->extclk) ? MAX8649_SYNC_EXTCLK : 0; 280 data = (info->extclk) ? MAX8649_SYNC_EXTCLK : 0;
329 max8649_set_bits(info->i2c, info->vol_reg, MAX8649_SYNC_EXTCLK, data); 281 regmap_update_bits(info->regmap, info->vol_reg, MAX8649_SYNC_EXTCLK, data);
330 if (info->extclk) { 282 if (info->extclk) {
331 /* set external clock frequency */ 283 /* set external clock frequency */
332 info->extclk_freq = pdata->extclk_freq; 284 info->extclk_freq = pdata->extclk_freq;
333 max8649_set_bits(info->i2c, MAX8649_SYNC, MAX8649_EXT_MASK, 285 regmap_update_bits(info->regmap, MAX8649_SYNC, MAX8649_EXT_MASK,
334 info->extclk_freq << 6); 286 info->extclk_freq << 6);
335 } 287 }
336 288
337 if (pdata->ramp_timing) { 289 if (pdata->ramp_timing) {
338 info->ramp_timing = pdata->ramp_timing; 290 info->ramp_timing = pdata->ramp_timing;
339 max8649_set_bits(info->i2c, MAX8649_RAMP, MAX8649_RAMP_MASK, 291 regmap_update_bits(info->regmap, MAX8649_RAMP, MAX8649_RAMP_MASK,
340 info->ramp_timing << 5); 292 info->ramp_timing << 5);
341 } 293 }
342 294
343 info->ramp_down = pdata->ramp_down; 295 info->ramp_down = pdata->ramp_down;
344 if (info->ramp_down) { 296 if (info->ramp_down) {
345 max8649_set_bits(info->i2c, MAX8649_RAMP, MAX8649_RAMP_DOWN, 297 regmap_update_bits(info->regmap, MAX8649_RAMP, MAX8649_RAMP_DOWN,
346 MAX8649_RAMP_DOWN); 298 MAX8649_RAMP_DOWN);
347 } 299 }
348 300
349 info->regulator = regulator_register(&dcdc_desc, &client->dev, 301 info->regulator = regulator_register(&dcdc_desc, &client->dev,
350 pdata->regulator, info); 302 pdata->regulator, info, NULL);
351 if (IS_ERR(info->regulator)) { 303 if (IS_ERR(info->regulator)) {
352 dev_err(info->dev, "failed to register regulator %s\n", 304 dev_err(info->dev, "failed to register regulator %s\n",
353 dcdc_desc.name); 305 dcdc_desc.name);
@@ -358,6 +310,8 @@ static int __devinit max8649_regulator_probe(struct i2c_client *client,
358 dev_info(info->dev, "Max8649 regulator device is detected.\n"); 310 dev_info(info->dev, "Max8649 regulator device is detected.\n");
359 return 0; 311 return 0;
360out: 312out:
313 regmap_exit(info->regmap);
314fail:
361 kfree(info); 315 kfree(info);
362 return ret; 316 return ret;
363} 317}
@@ -369,6 +323,7 @@ static int __devexit max8649_regulator_remove(struct i2c_client *client)
369 if (info) { 323 if (info) {
370 if (info->regulator) 324 if (info->regulator)
371 regulator_unregister(info->regulator); 325 regulator_unregister(info->regulator);
326 regmap_exit(info->regmap);
372 kfree(info); 327 kfree(info);
373 } 328 }
374 329
diff --git a/drivers/regulator/max8660.c b/drivers/regulator/max8660.c
index 33f5d9a492ef..a838e664569f 100644
--- a/drivers/regulator/max8660.c
+++ b/drivers/regulator/max8660.c
@@ -449,7 +449,7 @@ static int __devinit max8660_probe(struct i2c_client *client,
449 449
450 rdev[i] = regulator_register(&max8660_reg[id], &client->dev, 450 rdev[i] = regulator_register(&max8660_reg[id], &client->dev,
451 pdata->subdevs[i].platform_data, 451 pdata->subdevs[i].platform_data,
452 max8660); 452 max8660, NULL);
453 if (IS_ERR(rdev[i])) { 453 if (IS_ERR(rdev[i])) {
454 ret = PTR_ERR(rdev[i]); 454 ret = PTR_ERR(rdev[i]);
455 dev_err(&client->dev, "failed to register %s\n", 455 dev_err(&client->dev, "failed to register %s\n",
diff --git a/drivers/regulator/max8925-regulator.c b/drivers/regulator/max8925-regulator.c
index cc9ec0e03271..f976e5d0867e 100644
--- a/drivers/regulator/max8925-regulator.c
+++ b/drivers/regulator/max8925-regulator.c
@@ -266,7 +266,7 @@ static int __devinit max8925_regulator_probe(struct platform_device *pdev)
266 ri->chip = chip; 266 ri->chip = chip;
267 267
268 rdev = regulator_register(&ri->desc, &pdev->dev, 268 rdev = regulator_register(&ri->desc, &pdev->dev,
269 pdata->regulator[pdev->id], ri); 269 pdata->regulator[pdev->id], ri, NULL);
270 if (IS_ERR(rdev)) { 270 if (IS_ERR(rdev)) {
271 dev_err(&pdev->dev, "failed to register regulator %s\n", 271 dev_err(&pdev->dev, "failed to register regulator %s\n",
272 ri->desc.name); 272 ri->desc.name);
diff --git a/drivers/regulator/max8952.c b/drivers/regulator/max8952.c
index 3883d85c5b88..75d89400c123 100644
--- a/drivers/regulator/max8952.c
+++ b/drivers/regulator/max8952.c
@@ -208,7 +208,7 @@ static int __devinit max8952_pmic_probe(struct i2c_client *client,
208 max8952->pdata = pdata; 208 max8952->pdata = pdata;
209 209
210 max8952->rdev = regulator_register(&regulator, max8952->dev, 210 max8952->rdev = regulator_register(&regulator, max8952->dev,
211 &pdata->reg_data, max8952); 211 &pdata->reg_data, max8952, NULL);
212 212
213 if (IS_ERR(max8952->rdev)) { 213 if (IS_ERR(max8952->rdev)) {
214 ret = PTR_ERR(max8952->rdev); 214 ret = PTR_ERR(max8952->rdev);
diff --git a/drivers/regulator/max8997.c b/drivers/regulator/max8997.c
index 6176129a27e5..d26e8646277b 100644
--- a/drivers/regulator/max8997.c
+++ b/drivers/regulator/max8997.c
@@ -1146,7 +1146,7 @@ static __devinit int max8997_pmic_probe(struct platform_device *pdev)
1146 regulators[id].n_voltages = 16; 1146 regulators[id].n_voltages = 16;
1147 1147
1148 rdev[i] = regulator_register(&regulators[id], max8997->dev, 1148 rdev[i] = regulator_register(&regulators[id], max8997->dev,
1149 pdata->regulators[i].initdata, max8997); 1149 pdata->regulators[i].initdata, max8997, NULL);
1150 if (IS_ERR(rdev[i])) { 1150 if (IS_ERR(rdev[i])) {
1151 ret = PTR_ERR(rdev[i]); 1151 ret = PTR_ERR(rdev[i]);
1152 dev_err(max8997->dev, "regulator init failed for %d\n", 1152 dev_err(max8997->dev, "regulator init failed for %d\n",
diff --git a/drivers/regulator/max8998.c b/drivers/regulator/max8998.c
index 41a1495eec2b..2d38c2493a07 100644
--- a/drivers/regulator/max8998.c
+++ b/drivers/regulator/max8998.c
@@ -847,7 +847,7 @@ static __devinit int max8998_pmic_probe(struct platform_device *pdev)
847 regulators[index].n_voltages = count; 847 regulators[index].n_voltages = count;
848 } 848 }
849 rdev[i] = regulator_register(&regulators[index], max8998->dev, 849 rdev[i] = regulator_register(&regulators[index], max8998->dev,
850 pdata->regulators[i].initdata, max8998); 850 pdata->regulators[i].initdata, max8998, NULL);
851 if (IS_ERR(rdev[i])) { 851 if (IS_ERR(rdev[i])) {
852 ret = PTR_ERR(rdev[i]); 852 ret = PTR_ERR(rdev[i]);
853 dev_err(max8998->dev, "regulator init failed\n"); 853 dev_err(max8998->dev, "regulator init failed\n");
diff --git a/drivers/regulator/mc13783-regulator.c b/drivers/regulator/mc13783-regulator.c
index 8479082e1aea..56d4a677c404 100644
--- a/drivers/regulator/mc13783-regulator.c
+++ b/drivers/regulator/mc13783-regulator.c
@@ -357,7 +357,7 @@ static int __devinit mc13783_regulator_probe(struct platform_device *pdev)
357 init_data = &pdata->regulators[i]; 357 init_data = &pdata->regulators[i];
358 priv->regulators[i] = regulator_register( 358 priv->regulators[i] = regulator_register(
359 &mc13783_regulators[init_data->id].desc, 359 &mc13783_regulators[init_data->id].desc,
360 &pdev->dev, init_data->init_data, priv); 360 &pdev->dev, init_data->init_data, priv, NULL);
361 361
362 if (IS_ERR(priv->regulators[i])) { 362 if (IS_ERR(priv->regulators[i])) {
363 dev_err(&pdev->dev, "failed to register regulator %s\n", 363 dev_err(&pdev->dev, "failed to register regulator %s\n",
diff --git a/drivers/regulator/mc13892-regulator.c b/drivers/regulator/mc13892-regulator.c
index 023d17d022cf..2824804a2892 100644
--- a/drivers/regulator/mc13892-regulator.c
+++ b/drivers/regulator/mc13892-regulator.c
@@ -573,7 +573,7 @@ static int __devinit mc13892_regulator_probe(struct platform_device *pdev)
573 init_data = &pdata->regulators[i]; 573 init_data = &pdata->regulators[i];
574 priv->regulators[i] = regulator_register( 574 priv->regulators[i] = regulator_register(
575 &mc13892_regulators[init_data->id].desc, 575 &mc13892_regulators[init_data->id].desc,
576 &pdev->dev, init_data->init_data, priv); 576 &pdev->dev, init_data->init_data, priv, NULL);
577 577
578 if (IS_ERR(priv->regulators[i])) { 578 if (IS_ERR(priv->regulators[i])) {
579 dev_err(&pdev->dev, "failed to register regulator %s\n", 579 dev_err(&pdev->dev, "failed to register regulator %s\n",
diff --git a/drivers/regulator/of_regulator.c b/drivers/regulator/of_regulator.c
new file mode 100644
index 000000000000..acd7045d1601
--- /dev/null
+++ b/drivers/regulator/of_regulator.c
@@ -0,0 +1,83 @@
1/*
2 * OF helpers for regulator framework
3 *
4 * Copyright (C) 2011 Texas Instruments, Inc.
5 * Rajendra Nayak <rnayak@ti.com>
6 *
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
11 */
12
13#include <linux/module.h>
14#include <linux/slab.h>
15#include <linux/of.h>
16#include <linux/regulator/machine.h>
17
18static void of_get_regulation_constraints(struct device_node *np,
19 struct regulator_init_data **init_data)
20{
21 const __be32 *min_uV, *max_uV, *uV_offset;
22 const __be32 *min_uA, *max_uA;
23 struct regulation_constraints *constraints = &(*init_data)->constraints;
24
25 constraints->name = of_get_property(np, "regulator-name", NULL);
26
27 min_uV = of_get_property(np, "regulator-min-microvolt", NULL);
28 if (min_uV)
29 constraints->min_uV = be32_to_cpu(*min_uV);
30 max_uV = of_get_property(np, "regulator-max-microvolt", NULL);
31 if (max_uV)
32 constraints->max_uV = be32_to_cpu(*max_uV);
33
34 /* Voltage change possible? */
35 if (constraints->min_uV != constraints->max_uV)
36 constraints->valid_ops_mask |= REGULATOR_CHANGE_VOLTAGE;
37
38 uV_offset = of_get_property(np, "regulator-microvolt-offset", NULL);
39 if (uV_offset)
40 constraints->uV_offset = be32_to_cpu(*uV_offset);
41 min_uA = of_get_property(np, "regulator-min-microamp", NULL);
42 if (min_uA)
43 constraints->min_uA = be32_to_cpu(*min_uA);
44 max_uA = of_get_property(np, "regulator-max-microamp", NULL);
45 if (max_uA)
46 constraints->max_uA = be32_to_cpu(*max_uA);
47
48 /* Current change possible? */
49 if (constraints->min_uA != constraints->max_uA)
50 constraints->valid_ops_mask |= REGULATOR_CHANGE_CURRENT;
51
52 if (of_find_property(np, "regulator-boot-on", NULL))
53 constraints->boot_on = true;
54
55 if (of_find_property(np, "regulator-always-on", NULL))
56 constraints->always_on = true;
57 else /* status change should be possible if not always on. */
58 constraints->valid_ops_mask |= REGULATOR_CHANGE_STATUS;
59}
60
61/**
62 * of_get_regulator_init_data - extract regulator_init_data structure info
63 * @dev: device requesting for regulator_init_data
64 *
65 * Populates regulator_init_data structure by extracting data from device
66 * tree node, returns a pointer to the populated struture or NULL if memory
67 * alloc fails.
68 */
69struct regulator_init_data *of_get_regulator_init_data(struct device *dev)
70{
71 struct regulator_init_data *init_data;
72
73 if (!dev->of_node)
74 return NULL;
75
76 init_data = devm_kzalloc(dev, sizeof(*init_data), GFP_KERNEL);
77 if (!init_data)
78 return NULL; /* Out of memory? */
79
80 of_get_regulation_constraints(dev->of_node, &init_data);
81 return init_data;
82}
83EXPORT_SYMBOL_GPL(of_get_regulator_init_data);
diff --git a/drivers/regulator/pcap-regulator.c b/drivers/regulator/pcap-regulator.c
index 31f6e11a7f16..a5aab1b08bcf 100644
--- a/drivers/regulator/pcap-regulator.c
+++ b/drivers/regulator/pcap-regulator.c
@@ -277,7 +277,7 @@ static int __devinit pcap_regulator_probe(struct platform_device *pdev)
277 void *pcap = dev_get_drvdata(pdev->dev.parent); 277 void *pcap = dev_get_drvdata(pdev->dev.parent);
278 278
279 rdev = regulator_register(&pcap_regulators[pdev->id], &pdev->dev, 279 rdev = regulator_register(&pcap_regulators[pdev->id], &pdev->dev,
280 pdev->dev.platform_data, pcap); 280 pdev->dev.platform_data, pcap, NULL);
281 if (IS_ERR(rdev)) 281 if (IS_ERR(rdev))
282 return PTR_ERR(rdev); 282 return PTR_ERR(rdev);
283 283
diff --git a/drivers/regulator/pcf50633-regulator.c b/drivers/regulator/pcf50633-regulator.c
index 69a11d9dd87f..1d1c31056297 100644
--- a/drivers/regulator/pcf50633-regulator.c
+++ b/drivers/regulator/pcf50633-regulator.c
@@ -320,7 +320,7 @@ static int __devinit pcf50633_regulator_probe(struct platform_device *pdev)
320 pcf = dev_to_pcf50633(pdev->dev.parent); 320 pcf = dev_to_pcf50633(pdev->dev.parent);
321 321
322 rdev = regulator_register(&regulators[pdev->id], &pdev->dev, 322 rdev = regulator_register(&regulators[pdev->id], &pdev->dev,
323 pdev->dev.platform_data, pcf); 323 pdev->dev.platform_data, pcf, NULL);
324 if (IS_ERR(rdev)) 324 if (IS_ERR(rdev))
325 return PTR_ERR(rdev); 325 return PTR_ERR(rdev);
326 326
diff --git a/drivers/regulator/tps6105x-regulator.c b/drivers/regulator/tps6105x-regulator.c
index 1011873896dc..d9278da18a9e 100644
--- a/drivers/regulator/tps6105x-regulator.c
+++ b/drivers/regulator/tps6105x-regulator.c
@@ -151,7 +151,8 @@ static int __devinit tps6105x_regulator_probe(struct platform_device *pdev)
151 /* Register regulator with framework */ 151 /* Register regulator with framework */
152 tps6105x->regulator = regulator_register(&tps6105x_regulator_desc, 152 tps6105x->regulator = regulator_register(&tps6105x_regulator_desc,
153 &tps6105x->client->dev, 153 &tps6105x->client->dev,
154 pdata->regulator_data, tps6105x); 154 pdata->regulator_data, tps6105x,
155 NULL);
155 if (IS_ERR(tps6105x->regulator)) { 156 if (IS_ERR(tps6105x->regulator)) {
156 ret = PTR_ERR(tps6105x->regulator); 157 ret = PTR_ERR(tps6105x->regulator);
157 dev_err(&tps6105x->client->dev, 158 dev_err(&tps6105x->client->dev,
diff --git a/drivers/regulator/tps65023-regulator.c b/drivers/regulator/tps65023-regulator.c
index 9fb4c7b81753..18d61a0529a9 100644
--- a/drivers/regulator/tps65023-regulator.c
+++ b/drivers/regulator/tps65023-regulator.c
@@ -152,48 +152,21 @@ struct tps_driver_data {
152 u8 core_regulator; 152 u8 core_regulator;
153}; 153};
154 154
155static int tps_65023_set_bits(struct tps_pmic *tps, u8 reg, u8 mask)
156{
157 return regmap_update_bits(tps->regmap, reg, mask, mask);
158}
159
160static int tps_65023_clear_bits(struct tps_pmic *tps, u8 reg, u8 mask)
161{
162 return regmap_update_bits(tps->regmap, reg, mask, 0);
163}
164
165static int tps_65023_reg_read(struct tps_pmic *tps, u8 reg)
166{
167 unsigned int val;
168 int ret;
169
170 ret = regmap_read(tps->regmap, reg, &val);
171
172 if (ret != 0)
173 return ret;
174 else
175 return val;
176}
177
178static int tps_65023_reg_write(struct tps_pmic *tps, u8 reg, u8 val)
179{
180 return regmap_write(tps->regmap, reg, val);
181}
182
183static int tps65023_dcdc_is_enabled(struct regulator_dev *dev) 155static int tps65023_dcdc_is_enabled(struct regulator_dev *dev)
184{ 156{
185 struct tps_pmic *tps = rdev_get_drvdata(dev); 157 struct tps_pmic *tps = rdev_get_drvdata(dev);
186 int data, dcdc = rdev_get_id(dev); 158 int data, dcdc = rdev_get_id(dev);
159 int ret;
187 u8 shift; 160 u8 shift;
188 161
189 if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3) 162 if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3)
190 return -EINVAL; 163 return -EINVAL;
191 164
192 shift = TPS65023_NUM_REGULATOR - dcdc; 165 shift = TPS65023_NUM_REGULATOR - dcdc;
193 data = tps_65023_reg_read(tps, TPS65023_REG_REG_CTRL); 166 ret = regmap_read(tps->regmap, TPS65023_REG_REG_CTRL, &data);
194 167
195 if (data < 0) 168 if (ret != 0)
196 return data; 169 return ret;
197 else 170 else
198 return (data & 1<<shift) ? 1 : 0; 171 return (data & 1<<shift) ? 1 : 0;
199} 172}
@@ -202,16 +175,17 @@ static int tps65023_ldo_is_enabled(struct regulator_dev *dev)
202{ 175{
203 struct tps_pmic *tps = rdev_get_drvdata(dev); 176 struct tps_pmic *tps = rdev_get_drvdata(dev);
204 int data, ldo = rdev_get_id(dev); 177 int data, ldo = rdev_get_id(dev);
178 int ret;
205 u8 shift; 179 u8 shift;
206 180
207 if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) 181 if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2)
208 return -EINVAL; 182 return -EINVAL;
209 183
210 shift = (ldo == TPS65023_LDO_1 ? 1 : 2); 184 shift = (ldo == TPS65023_LDO_1 ? 1 : 2);
211 data = tps_65023_reg_read(tps, TPS65023_REG_REG_CTRL); 185 ret = regmap_read(tps->regmap, TPS65023_REG_REG_CTRL, &data);
212 186
213 if (data < 0) 187 if (ret != 0)
214 return data; 188 return ret;
215 else 189 else
216 return (data & 1<<shift) ? 1 : 0; 190 return (data & 1<<shift) ? 1 : 0;
217} 191}
@@ -226,7 +200,7 @@ static int tps65023_dcdc_enable(struct regulator_dev *dev)
226 return -EINVAL; 200 return -EINVAL;
227 201
228 shift = TPS65023_NUM_REGULATOR - dcdc; 202 shift = TPS65023_NUM_REGULATOR - dcdc;
229 return tps_65023_set_bits(tps, TPS65023_REG_REG_CTRL, 1 << shift); 203 return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 1 << shift);
230} 204}
231 205
232static int tps65023_dcdc_disable(struct regulator_dev *dev) 206static int tps65023_dcdc_disable(struct regulator_dev *dev)
@@ -239,7 +213,7 @@ static int tps65023_dcdc_disable(struct regulator_dev *dev)
239 return -EINVAL; 213 return -EINVAL;
240 214
241 shift = TPS65023_NUM_REGULATOR - dcdc; 215 shift = TPS65023_NUM_REGULATOR - dcdc;
242 return tps_65023_clear_bits(tps, TPS65023_REG_REG_CTRL, 1 << shift); 216 return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 0);
243} 217}
244 218
245static int tps65023_ldo_enable(struct regulator_dev *dev) 219static int tps65023_ldo_enable(struct regulator_dev *dev)
@@ -252,7 +226,7 @@ static int tps65023_ldo_enable(struct regulator_dev *dev)
252 return -EINVAL; 226 return -EINVAL;
253 227
254 shift = (ldo == TPS65023_LDO_1 ? 1 : 2); 228 shift = (ldo == TPS65023_LDO_1 ? 1 : 2);
255 return tps_65023_set_bits(tps, TPS65023_REG_REG_CTRL, 1 << shift); 229 return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 1 << shift);
256} 230}
257 231
258static int tps65023_ldo_disable(struct regulator_dev *dev) 232static int tps65023_ldo_disable(struct regulator_dev *dev)
@@ -265,21 +239,22 @@ static int tps65023_ldo_disable(struct regulator_dev *dev)
265 return -EINVAL; 239 return -EINVAL;
266 240
267 shift = (ldo == TPS65023_LDO_1 ? 1 : 2); 241 shift = (ldo == TPS65023_LDO_1 ? 1 : 2);
268 return tps_65023_clear_bits(tps, TPS65023_REG_REG_CTRL, 1 << shift); 242 return regmap_update_bits(tps->regmap, TPS65023_REG_REG_CTRL, 1 << shift, 0);
269} 243}
270 244
271static int tps65023_dcdc_get_voltage(struct regulator_dev *dev) 245static int tps65023_dcdc_get_voltage(struct regulator_dev *dev)
272{ 246{
273 struct tps_pmic *tps = rdev_get_drvdata(dev); 247 struct tps_pmic *tps = rdev_get_drvdata(dev);
248 int ret;
274 int data, dcdc = rdev_get_id(dev); 249 int data, dcdc = rdev_get_id(dev);
275 250
276 if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3) 251 if (dcdc < TPS65023_DCDC_1 || dcdc > TPS65023_DCDC_3)
277 return -EINVAL; 252 return -EINVAL;
278 253
279 if (dcdc == tps->core_regulator) { 254 if (dcdc == tps->core_regulator) {
280 data = tps_65023_reg_read(tps, TPS65023_REG_DEF_CORE); 255 ret = regmap_read(tps->regmap, TPS65023_REG_DEF_CORE, &data);
281 if (data < 0) 256 if (ret != 0)
282 return data; 257 return ret;
283 data &= (tps->info[dcdc]->table_len - 1); 258 data &= (tps->info[dcdc]->table_len - 1);
284 return tps->info[dcdc]->table[data] * 1000; 259 return tps->info[dcdc]->table[data] * 1000;
285 } else 260 } else
@@ -318,13 +293,13 @@ static int tps65023_dcdc_set_voltage(struct regulator_dev *dev,
318 if (vsel == tps->info[dcdc]->table_len) 293 if (vsel == tps->info[dcdc]->table_len)
319 goto failed; 294 goto failed;
320 295
321 ret = tps_65023_reg_write(tps, TPS65023_REG_DEF_CORE, vsel); 296 ret = regmap_write(tps->regmap, TPS65023_REG_DEF_CORE, vsel);
322 297
323 /* Tell the chip that we have changed the value in DEFCORE 298 /* Tell the chip that we have changed the value in DEFCORE
324 * and its time to update the core voltage 299 * and its time to update the core voltage
325 */ 300 */
326 tps_65023_set_bits(tps, TPS65023_REG_CON_CTRL2, 301 regmap_update_bits(tps->regmap, TPS65023_REG_CON_CTRL2,
327 TPS65023_REG_CTRL2_GO); 302 TPS65023_REG_CTRL2_GO, TPS65023_REG_CTRL2_GO);
328 303
329 return ret; 304 return ret;
330 305
@@ -336,13 +311,14 @@ static int tps65023_ldo_get_voltage(struct regulator_dev *dev)
336{ 311{
337 struct tps_pmic *tps = rdev_get_drvdata(dev); 312 struct tps_pmic *tps = rdev_get_drvdata(dev);
338 int data, ldo = rdev_get_id(dev); 313 int data, ldo = rdev_get_id(dev);
314 int ret;
339 315
340 if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) 316 if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2)
341 return -EINVAL; 317 return -EINVAL;
342 318
343 data = tps_65023_reg_read(tps, TPS65023_REG_LDO_CTRL); 319 ret = regmap_read(tps->regmap, TPS65023_REG_LDO_CTRL, &data);
344 if (data < 0) 320 if (ret != 0)
345 return data; 321 return ret;
346 322
347 data >>= (TPS65023_LDO_CTRL_LDOx_SHIFT(ldo - TPS65023_LDO_1)); 323 data >>= (TPS65023_LDO_CTRL_LDOx_SHIFT(ldo - TPS65023_LDO_1));
348 data &= (tps->info[ldo]->table_len - 1); 324 data &= (tps->info[ldo]->table_len - 1);
@@ -354,6 +330,7 @@ static int tps65023_ldo_set_voltage(struct regulator_dev *dev,
354{ 330{
355 struct tps_pmic *tps = rdev_get_drvdata(dev); 331 struct tps_pmic *tps = rdev_get_drvdata(dev);
356 int data, vsel, ldo = rdev_get_id(dev); 332 int data, vsel, ldo = rdev_get_id(dev);
333 int ret;
357 334
358 if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2) 335 if (ldo < TPS65023_LDO_1 || ldo > TPS65023_LDO_2)
359 return -EINVAL; 336 return -EINVAL;
@@ -377,13 +354,13 @@ static int tps65023_ldo_set_voltage(struct regulator_dev *dev,
377 354
378 *selector = vsel; 355 *selector = vsel;
379 356
380 data = tps_65023_reg_read(tps, TPS65023_REG_LDO_CTRL); 357 ret = regmap_read(tps->regmap, TPS65023_REG_LDO_CTRL, &data);
381 if (data < 0) 358 if (ret != 0)
382 return data; 359 return ret;
383 360
384 data &= TPS65023_LDO_CTRL_LDOx_MASK(ldo - TPS65023_LDO_1); 361 data &= TPS65023_LDO_CTRL_LDOx_MASK(ldo - TPS65023_LDO_1);
385 data |= (vsel << (TPS65023_LDO_CTRL_LDOx_SHIFT(ldo - TPS65023_LDO_1))); 362 data |= (vsel << (TPS65023_LDO_CTRL_LDOx_SHIFT(ldo - TPS65023_LDO_1)));
386 return tps_65023_reg_write(tps, TPS65023_REG_LDO_CTRL, data); 363 return regmap_write(tps->regmap, TPS65023_REG_LDO_CTRL, data);
387} 364}
388 365
389static int tps65023_dcdc_list_voltage(struct regulator_dev *dev, 366static int tps65023_dcdc_list_voltage(struct regulator_dev *dev,
@@ -496,7 +473,7 @@ static int __devinit tps_65023_probe(struct i2c_client *client,
496 473
497 /* Register the regulators */ 474 /* Register the regulators */
498 rdev = regulator_register(&tps->desc[i], &client->dev, 475 rdev = regulator_register(&tps->desc[i], &client->dev,
499 init_data, tps); 476 init_data, tps, NULL);
500 if (IS_ERR(rdev)) { 477 if (IS_ERR(rdev)) {
501 dev_err(&client->dev, "failed to register %s\n", 478 dev_err(&client->dev, "failed to register %s\n",
502 id->name); 479 id->name);
@@ -511,12 +488,12 @@ static int __devinit tps_65023_probe(struct i2c_client *client,
511 i2c_set_clientdata(client, tps); 488 i2c_set_clientdata(client, tps);
512 489
513 /* Enable setting output voltage by I2C */ 490 /* Enable setting output voltage by I2C */
514 tps_65023_clear_bits(tps, TPS65023_REG_CON_CTRL2, 491 regmap_update_bits(tps->regmap, TPS65023_REG_CON_CTRL2,
515 TPS65023_REG_CTRL2_CORE_ADJ); 492 TPS65023_REG_CTRL2_CORE_ADJ, TPS65023_REG_CTRL2_CORE_ADJ);
516 493
517 /* Enable setting output voltage by I2C */ 494 /* Enable setting output voltage by I2C */
518 tps_65023_clear_bits(tps, TPS65023_REG_CON_CTRL2, 495 regmap_update_bits(tps->regmap, TPS65023_REG_CON_CTRL2,
519 TPS65023_REG_CTRL2_CORE_ADJ); 496 TPS65023_REG_CTRL2_CORE_ADJ, TPS65023_REG_CTRL2_CORE_ADJ);
520 497
521 return 0; 498 return 0;
522 499
diff --git a/drivers/regulator/tps6507x-regulator.c b/drivers/regulator/tps6507x-regulator.c
index bdef70365f52..0b63ef71a5fe 100644
--- a/drivers/regulator/tps6507x-regulator.c
+++ b/drivers/regulator/tps6507x-regulator.c
@@ -599,7 +599,7 @@ int tps6507x_pmic_probe(struct platform_device *pdev)
599 tps->desc[i].owner = THIS_MODULE; 599 tps->desc[i].owner = THIS_MODULE;
600 600
601 rdev = regulator_register(&tps->desc[i], 601 rdev = regulator_register(&tps->desc[i],
602 tps6507x_dev->dev, init_data, tps); 602 tps6507x_dev->dev, init_data, tps, NULL);
603 if (IS_ERR(rdev)) { 603 if (IS_ERR(rdev)) {
604 dev_err(tps6507x_dev->dev, 604 dev_err(tps6507x_dev->dev,
605 "failed to register %s regulator\n", 605 "failed to register %s regulator\n",
diff --git a/drivers/regulator/tps6524x-regulator.c b/drivers/regulator/tps6524x-regulator.c
index 9166aa0a9df7..70b7b1f4f000 100644
--- a/drivers/regulator/tps6524x-regulator.c
+++ b/drivers/regulator/tps6524x-regulator.c
@@ -651,7 +651,7 @@ static int __devinit pmic_probe(struct spi_device *spi)
651 hw->desc[i].n_voltages = 1; 651 hw->desc[i].n_voltages = 1;
652 652
653 hw->rdev[i] = regulator_register(&hw->desc[i], dev, 653 hw->rdev[i] = regulator_register(&hw->desc[i], dev,
654 init_data, hw); 654 init_data, hw, NULL);
655 if (IS_ERR(hw->rdev[i])) { 655 if (IS_ERR(hw->rdev[i])) {
656 ret = PTR_ERR(hw->rdev[i]); 656 ret = PTR_ERR(hw->rdev[i]);
657 hw->rdev[i] = NULL; 657 hw->rdev[i] = NULL;
diff --git a/drivers/regulator/tps6586x-regulator.c b/drivers/regulator/tps6586x-regulator.c
index 14b9389dd52a..c75fb20faa57 100644
--- a/drivers/regulator/tps6586x-regulator.c
+++ b/drivers/regulator/tps6586x-regulator.c
@@ -396,7 +396,7 @@ static int __devinit tps6586x_regulator_probe(struct platform_device *pdev)
396 return err; 396 return err;
397 397
398 rdev = regulator_register(&ri->desc, &pdev->dev, 398 rdev = regulator_register(&ri->desc, &pdev->dev,
399 pdev->dev.platform_data, ri); 399 pdev->dev.platform_data, ri, NULL);
400 if (IS_ERR(rdev)) { 400 if (IS_ERR(rdev)) {
401 dev_err(&pdev->dev, "failed to register regulator %s\n", 401 dev_err(&pdev->dev, "failed to register regulator %s\n",
402 ri->desc.name); 402 ri->desc.name);
diff --git a/drivers/regulator/tps65910-regulator.c b/drivers/regulator/tps65910-regulator.c
index b552aae55b41..5c15ba01e9c7 100644
--- a/drivers/regulator/tps65910-regulator.c
+++ b/drivers/regulator/tps65910-regulator.c
@@ -25,30 +25,6 @@
25#include <linux/gpio.h> 25#include <linux/gpio.h>
26#include <linux/mfd/tps65910.h> 26#include <linux/mfd/tps65910.h>
27 27
28#define TPS65910_REG_VRTC 0
29#define TPS65910_REG_VIO 1
30#define TPS65910_REG_VDD1 2
31#define TPS65910_REG_VDD2 3
32#define TPS65910_REG_VDD3 4
33#define TPS65910_REG_VDIG1 5
34#define TPS65910_REG_VDIG2 6
35#define TPS65910_REG_VPLL 7
36#define TPS65910_REG_VDAC 8
37#define TPS65910_REG_VAUX1 9
38#define TPS65910_REG_VAUX2 10
39#define TPS65910_REG_VAUX33 11
40#define TPS65910_REG_VMMC 12
41
42#define TPS65911_REG_VDDCTRL 4
43#define TPS65911_REG_LDO1 5
44#define TPS65911_REG_LDO2 6
45#define TPS65911_REG_LDO3 7
46#define TPS65911_REG_LDO4 8
47#define TPS65911_REG_LDO5 9
48#define TPS65911_REG_LDO6 10
49#define TPS65911_REG_LDO7 11
50#define TPS65911_REG_LDO8 12
51
52#define TPS65910_SUPPLY_STATE_ENABLED 0x1 28#define TPS65910_SUPPLY_STATE_ENABLED 0x1
53 29
54/* supported VIO voltages in milivolts */ 30/* supported VIO voltages in milivolts */
@@ -885,8 +861,6 @@ static __devinit int tps65910_probe(struct platform_device *pdev)
885 if (!pmic_plat_data) 861 if (!pmic_plat_data)
886 return -EINVAL; 862 return -EINVAL;
887 863
888 reg_data = pmic_plat_data->tps65910_pmic_init_data;
889
890 pmic = kzalloc(sizeof(*pmic), GFP_KERNEL); 864 pmic = kzalloc(sizeof(*pmic), GFP_KERNEL);
891 if (!pmic) 865 if (!pmic)
892 return -ENOMEM; 866 return -ENOMEM;
@@ -937,7 +911,16 @@ static __devinit int tps65910_probe(struct platform_device *pdev)
937 goto err_free_info; 911 goto err_free_info;
938 } 912 }
939 913
940 for (i = 0; i < pmic->num_regulators; i++, info++, reg_data++) { 914 for (i = 0; i < pmic->num_regulators && i < TPS65910_NUM_REGS;
915 i++, info++) {
916
917 reg_data = pmic_plat_data->tps65910_pmic_init_data[i];
918
919 /* Regulator API handles empty constraints but not NULL
920 * constraints */
921 if (!reg_data)
922 continue;
923
941 /* Register the regulators */ 924 /* Register the regulators */
942 pmic->info[i] = info; 925 pmic->info[i] = info;
943 926
@@ -965,7 +948,7 @@ static __devinit int tps65910_probe(struct platform_device *pdev)
965 pmic->desc[i].owner = THIS_MODULE; 948 pmic->desc[i].owner = THIS_MODULE;
966 949
967 rdev = regulator_register(&pmic->desc[i], 950 rdev = regulator_register(&pmic->desc[i],
968 tps65910->dev, reg_data, pmic); 951 tps65910->dev, reg_data, pmic, NULL);
969 if (IS_ERR(rdev)) { 952 if (IS_ERR(rdev)) {
970 dev_err(tps65910->dev, 953 dev_err(tps65910->dev,
971 "failed to register %s regulator\n", 954 "failed to register %s regulator\n",
diff --git a/drivers/regulator/tps65912-regulator.c b/drivers/regulator/tps65912-regulator.c
index 39d4a1749e71..da00d88f94b7 100644
--- a/drivers/regulator/tps65912-regulator.c
+++ b/drivers/regulator/tps65912-regulator.c
@@ -727,7 +727,7 @@ static __devinit int tps65912_probe(struct platform_device *pdev)
727 pmic->desc[i].owner = THIS_MODULE; 727 pmic->desc[i].owner = THIS_MODULE;
728 range = tps65912_get_range(pmic, i); 728 range = tps65912_get_range(pmic, i);
729 rdev = regulator_register(&pmic->desc[i], 729 rdev = regulator_register(&pmic->desc[i],
730 tps65912->dev, reg_data, pmic); 730 tps65912->dev, reg_data, pmic, NULL);
731 if (IS_ERR(rdev)) { 731 if (IS_ERR(rdev)) {
732 dev_err(tps65912->dev, 732 dev_err(tps65912->dev,
733 "failed to register %s regulator\n", 733 "failed to register %s regulator\n",
diff --git a/drivers/regulator/twl-regulator.c b/drivers/regulator/twl-regulator.c
index ee8747f4fa08..9a2e07a094b3 100644
--- a/drivers/regulator/twl-regulator.c
+++ b/drivers/regulator/twl-regulator.c
@@ -1070,7 +1070,7 @@ static int __devinit twlreg_probe(struct platform_device *pdev)
1070 break; 1070 break;
1071 } 1071 }
1072 1072
1073 rdev = regulator_register(&info->desc, &pdev->dev, initdata, info); 1073 rdev = regulator_register(&info->desc, &pdev->dev, initdata, info, NULL);
1074 if (IS_ERR(rdev)) { 1074 if (IS_ERR(rdev)) {
1075 dev_err(&pdev->dev, "can't register %s, %ld\n", 1075 dev_err(&pdev->dev, "can't register %s, %ld\n",
1076 info->desc.name, PTR_ERR(rdev)); 1076 info->desc.name, PTR_ERR(rdev));
diff --git a/drivers/regulator/userspace-consumer.c b/drivers/regulator/userspace-consumer.c
index fc6655146999..518667ef9a0d 100644
--- a/drivers/regulator/userspace-consumer.c
+++ b/drivers/regulator/userspace-consumer.c
@@ -185,18 +185,7 @@ static struct platform_driver regulator_userspace_consumer_driver = {
185 }, 185 },
186}; 186};
187 187
188 188module_platform_driver(regulator_userspace_consumer_driver);
189static int __init regulator_userspace_consumer_init(void)
190{
191 return platform_driver_register(&regulator_userspace_consumer_driver);
192}
193module_init(regulator_userspace_consumer_init);
194
195static void __exit regulator_userspace_consumer_exit(void)
196{
197 platform_driver_unregister(&regulator_userspace_consumer_driver);
198}
199module_exit(regulator_userspace_consumer_exit);
200 189
201MODULE_AUTHOR("Mike Rapoport <mike@compulab.co.il>"); 190MODULE_AUTHOR("Mike Rapoport <mike@compulab.co.il>");
202MODULE_DESCRIPTION("Userspace consumer for voltage and current regulators"); 191MODULE_DESCRIPTION("Userspace consumer for voltage and current regulators");
diff --git a/drivers/regulator/virtual.c b/drivers/regulator/virtual.c
index 858c1f861ba5..ee0b161c998f 100644
--- a/drivers/regulator/virtual.c
+++ b/drivers/regulator/virtual.c
@@ -352,17 +352,7 @@ static struct platform_driver regulator_virtual_consumer_driver = {
352 }, 352 },
353}; 353};
354 354
355static int __init regulator_virtual_consumer_init(void) 355module_platform_driver(regulator_virtual_consumer_driver);
356{
357 return platform_driver_register(&regulator_virtual_consumer_driver);
358}
359module_init(regulator_virtual_consumer_init);
360
361static void __exit regulator_virtual_consumer_exit(void)
362{
363 platform_driver_unregister(&regulator_virtual_consumer_driver);
364}
365module_exit(regulator_virtual_consumer_exit);
366 356
367MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>"); 357MODULE_AUTHOR("Mark Brown <broonie@opensource.wolfsonmicro.com>");
368MODULE_DESCRIPTION("Virtual regulator consumer"); 358MODULE_DESCRIPTION("Virtual regulator consumer");
diff --git a/drivers/regulator/wm831x-dcdc.c b/drivers/regulator/wm831x-dcdc.c
index bd3531d8b2ac..7558a9666a50 100644
--- a/drivers/regulator/wm831x-dcdc.c
+++ b/drivers/regulator/wm831x-dcdc.c
@@ -553,7 +553,7 @@ static __devinit int wm831x_buckv_probe(struct platform_device *pdev)
553 wm831x_buckv_dvs_init(dcdc, pdata->dcdc[id]->driver_data); 553 wm831x_buckv_dvs_init(dcdc, pdata->dcdc[id]->driver_data);
554 554
555 dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev, 555 dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
556 pdata->dcdc[id], dcdc); 556 pdata->dcdc[id], dcdc, NULL);
557 if (IS_ERR(dcdc->regulator)) { 557 if (IS_ERR(dcdc->regulator)) {
558 ret = PTR_ERR(dcdc->regulator); 558 ret = PTR_ERR(dcdc->regulator);
559 dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n", 559 dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n",
@@ -747,7 +747,7 @@ static __devinit int wm831x_buckp_probe(struct platform_device *pdev)
747 dcdc->desc.owner = THIS_MODULE; 747 dcdc->desc.owner = THIS_MODULE;
748 748
749 dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev, 749 dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
750 pdata->dcdc[id], dcdc); 750 pdata->dcdc[id], dcdc, NULL);
751 if (IS_ERR(dcdc->regulator)) { 751 if (IS_ERR(dcdc->regulator)) {
752 ret = PTR_ERR(dcdc->regulator); 752 ret = PTR_ERR(dcdc->regulator);
753 dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n", 753 dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n",
@@ -874,7 +874,7 @@ static __devinit int wm831x_boostp_probe(struct platform_device *pdev)
874 dcdc->desc.owner = THIS_MODULE; 874 dcdc->desc.owner = THIS_MODULE;
875 875
876 dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev, 876 dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
877 pdata->dcdc[id], dcdc); 877 pdata->dcdc[id], dcdc, NULL);
878 if (IS_ERR(dcdc->regulator)) { 878 if (IS_ERR(dcdc->regulator)) {
879 ret = PTR_ERR(dcdc->regulator); 879 ret = PTR_ERR(dcdc->regulator);
880 dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n", 880 dev_err(wm831x->dev, "Failed to register DCDC%d: %d\n",
@@ -973,7 +973,7 @@ static __devinit int wm831x_epe_probe(struct platform_device *pdev)
973 dcdc->desc.owner = THIS_MODULE; 973 dcdc->desc.owner = THIS_MODULE;
974 974
975 dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev, 975 dcdc->regulator = regulator_register(&dcdc->desc, &pdev->dev,
976 pdata->epe[id], dcdc); 976 pdata->epe[id], dcdc, NULL);
977 if (IS_ERR(dcdc->regulator)) { 977 if (IS_ERR(dcdc->regulator)) {
978 ret = PTR_ERR(dcdc->regulator); 978 ret = PTR_ERR(dcdc->regulator);
979 dev_err(wm831x->dev, "Failed to register EPE%d: %d\n", 979 dev_err(wm831x->dev, "Failed to register EPE%d: %d\n",
diff --git a/drivers/regulator/wm831x-isink.c b/drivers/regulator/wm831x-isink.c
index 01f27c7f4236..d3ad3f5cff46 100644
--- a/drivers/regulator/wm831x-isink.c
+++ b/drivers/regulator/wm831x-isink.c
@@ -189,7 +189,7 @@ static __devinit int wm831x_isink_probe(struct platform_device *pdev)
189 isink->desc.owner = THIS_MODULE; 189 isink->desc.owner = THIS_MODULE;
190 190
191 isink->regulator = regulator_register(&isink->desc, &pdev->dev, 191 isink->regulator = regulator_register(&isink->desc, &pdev->dev,
192 pdata->isink[id], isink); 192 pdata->isink[id], isink, NULL);
193 if (IS_ERR(isink->regulator)) { 193 if (IS_ERR(isink->regulator)) {
194 ret = PTR_ERR(isink->regulator); 194 ret = PTR_ERR(isink->regulator);
195 dev_err(wm831x->dev, "Failed to register ISINK%d: %d\n", 195 dev_err(wm831x->dev, "Failed to register ISINK%d: %d\n",
diff --git a/drivers/regulator/wm831x-ldo.c b/drivers/regulator/wm831x-ldo.c
index 6709710a059e..5e96a2386b1d 100644
--- a/drivers/regulator/wm831x-ldo.c
+++ b/drivers/regulator/wm831x-ldo.c
@@ -351,7 +351,7 @@ static __devinit int wm831x_gp_ldo_probe(struct platform_device *pdev)
351 ldo->desc.owner = THIS_MODULE; 351 ldo->desc.owner = THIS_MODULE;
352 352
353 ldo->regulator = regulator_register(&ldo->desc, &pdev->dev, 353 ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
354 pdata->ldo[id], ldo); 354 pdata->ldo[id], ldo, NULL);
355 if (IS_ERR(ldo->regulator)) { 355 if (IS_ERR(ldo->regulator)) {
356 ret = PTR_ERR(ldo->regulator); 356 ret = PTR_ERR(ldo->regulator);
357 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n", 357 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
@@ -621,7 +621,7 @@ static __devinit int wm831x_aldo_probe(struct platform_device *pdev)
621 ldo->desc.owner = THIS_MODULE; 621 ldo->desc.owner = THIS_MODULE;
622 622
623 ldo->regulator = regulator_register(&ldo->desc, &pdev->dev, 623 ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
624 pdata->ldo[id], ldo); 624 pdata->ldo[id], ldo, NULL);
625 if (IS_ERR(ldo->regulator)) { 625 if (IS_ERR(ldo->regulator)) {
626 ret = PTR_ERR(ldo->regulator); 626 ret = PTR_ERR(ldo->regulator);
627 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n", 627 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
@@ -818,7 +818,7 @@ static __devinit int wm831x_alive_ldo_probe(struct platform_device *pdev)
818 ldo->desc.owner = THIS_MODULE; 818 ldo->desc.owner = THIS_MODULE;
819 819
820 ldo->regulator = regulator_register(&ldo->desc, &pdev->dev, 820 ldo->regulator = regulator_register(&ldo->desc, &pdev->dev,
821 pdata->ldo[id], ldo); 821 pdata->ldo[id], ldo, NULL);
822 if (IS_ERR(ldo->regulator)) { 822 if (IS_ERR(ldo->regulator)) {
823 ret = PTR_ERR(ldo->regulator); 823 ret = PTR_ERR(ldo->regulator);
824 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n", 824 dev_err(wm831x->dev, "Failed to register LDO%d: %d\n",
diff --git a/drivers/regulator/wm8350-regulator.c b/drivers/regulator/wm8350-regulator.c
index 1bcb22c44095..6894009d815a 100644
--- a/drivers/regulator/wm8350-regulator.c
+++ b/drivers/regulator/wm8350-regulator.c
@@ -1428,7 +1428,7 @@ static int wm8350_regulator_probe(struct platform_device *pdev)
1428 /* register regulator */ 1428 /* register regulator */
1429 rdev = regulator_register(&wm8350_reg[pdev->id], &pdev->dev, 1429 rdev = regulator_register(&wm8350_reg[pdev->id], &pdev->dev,
1430 pdev->dev.platform_data, 1430 pdev->dev.platform_data,
1431 dev_get_drvdata(&pdev->dev)); 1431 dev_get_drvdata(&pdev->dev), NULL);
1432 if (IS_ERR(rdev)) { 1432 if (IS_ERR(rdev)) {
1433 dev_err(&pdev->dev, "failed to register %s\n", 1433 dev_err(&pdev->dev, "failed to register %s\n",
1434 wm8350_reg[pdev->id].name); 1434 wm8350_reg[pdev->id].name);
diff --git a/drivers/regulator/wm8400-regulator.c b/drivers/regulator/wm8400-regulator.c
index 71632ddc3781..706f39563a7b 100644
--- a/drivers/regulator/wm8400-regulator.c
+++ b/drivers/regulator/wm8400-regulator.c
@@ -326,7 +326,7 @@ static int __devinit wm8400_regulator_probe(struct platform_device *pdev)
326 struct regulator_dev *rdev; 326 struct regulator_dev *rdev;
327 327
328 rdev = regulator_register(&regulators[pdev->id], &pdev->dev, 328 rdev = regulator_register(&regulators[pdev->id], &pdev->dev,
329 pdev->dev.platform_data, wm8400); 329 pdev->dev.platform_data, wm8400, NULL);
330 330
331 if (IS_ERR(rdev)) 331 if (IS_ERR(rdev))
332 return PTR_ERR(rdev); 332 return PTR_ERR(rdev);
diff --git a/drivers/regulator/wm8994-regulator.c b/drivers/regulator/wm8994-regulator.c
index b87bf5c841f8..435e335d6e67 100644
--- a/drivers/regulator/wm8994-regulator.c
+++ b/drivers/regulator/wm8994-regulator.c
@@ -269,7 +269,7 @@ static __devinit int wm8994_ldo_probe(struct platform_device *pdev)
269 ldo->is_enabled = true; 269 ldo->is_enabled = true;
270 270
271 ldo->regulator = regulator_register(&wm8994_ldo_desc[id], &pdev->dev, 271 ldo->regulator = regulator_register(&wm8994_ldo_desc[id], &pdev->dev,
272 pdata->ldo[id].init_data, ldo); 272 pdata->ldo[id].init_data, ldo, NULL);
273 if (IS_ERR(ldo->regulator)) { 273 if (IS_ERR(ldo->regulator)) {
274 ret = PTR_ERR(ldo->regulator); 274 ret = PTR_ERR(ldo->regulator);
275 dev_err(wm8994->dev, "Failed to register LDO%d: %d\n", 275 dev_err(wm8994->dev, "Failed to register LDO%d: %d\n",