diff options
Diffstat (limited to 'drivers/regulator/max1586.c')
-rw-r--r-- | drivers/regulator/max1586.c | 26 |
1 files changed, 5 insertions, 21 deletions
diff --git a/drivers/regulator/max1586.c b/drivers/regulator/max1586.c index 3a599ee0a456..e242dd316d36 100644 --- a/drivers/regulator/max1586.c +++ b/drivers/regulator/max1586.c | |||
@@ -166,7 +166,7 @@ static int max1586_pmic_probe(struct i2c_client *client, | |||
166 | struct max1586_platform_data *pdata = dev_get_platdata(&client->dev); | 166 | struct max1586_platform_data *pdata = dev_get_platdata(&client->dev); |
167 | struct regulator_config config = { }; | 167 | struct regulator_config config = { }; |
168 | struct max1586_data *max1586; | 168 | struct max1586_data *max1586; |
169 | int i, id, ret = -ENOMEM; | 169 | int i, id; |
170 | 170 | ||
171 | max1586 = devm_kzalloc(&client->dev, sizeof(struct max1586_data) + | 171 | max1586 = devm_kzalloc(&client->dev, sizeof(struct max1586_data) + |
172 | sizeof(struct regulator_dev *) * (MAX1586_V6 + 1), | 172 | sizeof(struct regulator_dev *) * (MAX1586_V6 + 1), |
@@ -193,7 +193,7 @@ static int max1586_pmic_probe(struct i2c_client *client, | |||
193 | continue; | 193 | continue; |
194 | if (id < MAX1586_V3 || id > MAX1586_V6) { | 194 | if (id < MAX1586_V3 || id > MAX1586_V6) { |
195 | dev_err(&client->dev, "invalid regulator id %d\n", id); | 195 | dev_err(&client->dev, "invalid regulator id %d\n", id); |
196 | goto err; | 196 | return -EINVAL; |
197 | } | 197 | } |
198 | 198 | ||
199 | if (id == MAX1586_V3) { | 199 | if (id == MAX1586_V3) { |
@@ -207,33 +207,18 @@ static int max1586_pmic_probe(struct i2c_client *client, | |||
207 | config.init_data = pdata->subdevs[i].platform_data; | 207 | config.init_data = pdata->subdevs[i].platform_data; |
208 | config.driver_data = max1586; | 208 | config.driver_data = max1586; |
209 | 209 | ||
210 | rdev[i] = regulator_register(&max1586_reg[id], &config); | 210 | rdev[i] = devm_regulator_register(&client->dev, |
211 | &max1586_reg[id], &config); | ||
211 | if (IS_ERR(rdev[i])) { | 212 | if (IS_ERR(rdev[i])) { |
212 | ret = PTR_ERR(rdev[i]); | ||
213 | dev_err(&client->dev, "failed to register %s\n", | 213 | dev_err(&client->dev, "failed to register %s\n", |
214 | max1586_reg[id].name); | 214 | max1586_reg[id].name); |
215 | goto err; | 215 | return PTR_ERR(rdev[i]); |
216 | } | 216 | } |
217 | } | 217 | } |
218 | 218 | ||
219 | i2c_set_clientdata(client, max1586); | 219 | i2c_set_clientdata(client, max1586); |
220 | dev_info(&client->dev, "Maxim 1586 regulator driver loaded\n"); | 220 | dev_info(&client->dev, "Maxim 1586 regulator driver loaded\n"); |
221 | return 0; | 221 | return 0; |
222 | |||
223 | err: | ||
224 | while (--i >= 0) | ||
225 | regulator_unregister(rdev[i]); | ||
226 | return ret; | ||
227 | } | ||
228 | |||
229 | static int max1586_pmic_remove(struct i2c_client *client) | ||
230 | { | ||
231 | struct max1586_data *max1586 = i2c_get_clientdata(client); | ||
232 | int i; | ||
233 | |||
234 | for (i = 0; i <= MAX1586_V6; i++) | ||
235 | regulator_unregister(max1586->rdev[i]); | ||
236 | return 0; | ||
237 | } | 222 | } |
238 | 223 | ||
239 | static const struct i2c_device_id max1586_id[] = { | 224 | static const struct i2c_device_id max1586_id[] = { |
@@ -244,7 +229,6 @@ MODULE_DEVICE_TABLE(i2c, max1586_id); | |||
244 | 229 | ||
245 | static struct i2c_driver max1586_pmic_driver = { | 230 | static struct i2c_driver max1586_pmic_driver = { |
246 | .probe = max1586_pmic_probe, | 231 | .probe = max1586_pmic_probe, |
247 | .remove = max1586_pmic_remove, | ||
248 | .driver = { | 232 | .driver = { |
249 | .name = "max1586", | 233 | .name = "max1586", |
250 | .owner = THIS_MODULE, | 234 | .owner = THIS_MODULE, |