aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/regulator/da9211-regulator.c28
1 files changed, 4 insertions, 24 deletions
diff --git a/drivers/regulator/da9211-regulator.c b/drivers/regulator/da9211-regulator.c
index bd1850658a3f..1482adafa1ad 100644
--- a/drivers/regulator/da9211-regulator.c
+++ b/drivers/regulator/da9211-regulator.c
@@ -245,7 +245,7 @@ static int da9211_regulator_init(struct da9211 *chip)
245 ret = regmap_read(chip->regmap, DA9211_REG_CONFIG_E, &data); 245 ret = regmap_read(chip->regmap, DA9211_REG_CONFIG_E, &data);
246 if (ret < 0) { 246 if (ret < 0) {
247 dev_err(chip->dev, "Failed to read CONTROL_E reg: %d\n", ret); 247 dev_err(chip->dev, "Failed to read CONTROL_E reg: %d\n", ret);
248 goto err; 248 return ret;
249 } 249 }
250 250
251 data &= DA9211_SLAVE_SEL; 251 data &= DA9211_SLAVE_SEL;
@@ -259,9 +259,8 @@ static int da9211_regulator_init(struct da9211 *chip)
259 else 259 else
260 chip->num_regulator = 2; 260 chip->num_regulator = 2;
261 } else { 261 } else {
262 ret = -EINVAL;
263 dev_err(chip->dev, "Configuration is mismatched\n"); 262 dev_err(chip->dev, "Configuration is mismatched\n");
264 goto err; 263 return -EINVAL;
265 } 264 }
266 265
267 for (i = 0; i < chip->num_regulator; i++) { 266 for (i = 0; i < chip->num_regulator; i++) {
@@ -278,8 +277,7 @@ static int da9211_regulator_init(struct da9211 *chip)
278 if (IS_ERR(chip->rdev[i])) { 277 if (IS_ERR(chip->rdev[i])) {
279 dev_err(chip->dev, 278 dev_err(chip->dev,
280 "Failed to register DA9211 regulator\n"); 279 "Failed to register DA9211 regulator\n");
281 ret = PTR_ERR(chip->rdev[i]); 280 return PTR_ERR(chip->rdev[i]);
282 goto err_regulator;
283 } 281 }
284 282
285 if (chip->chip_irq != 0) { 283 if (chip->chip_irq != 0) {
@@ -288,18 +286,12 @@ static int da9211_regulator_init(struct da9211 *chip)
288 if (ret < 0) { 286 if (ret < 0) {
289 dev_err(chip->dev, 287 dev_err(chip->dev,
290 "Failed to update mask reg: %d\n", ret); 288 "Failed to update mask reg: %d\n", ret);
291 goto err_regulator; 289 return ret;
292 } 290 }
293 } 291 }
294 } 292 }
295 293
296 return 0; 294 return 0;
297
298err_regulator:
299 while (--i >= 0)
300 devm_regulator_unregister(chip->dev, chip->rdev[i]);
301err:
302 return ret;
303} 295}
304/* 296/*
305 * I2C driver interface functions 297 * I2C driver interface functions
@@ -353,17 +345,6 @@ static int da9211_i2c_probe(struct i2c_client *i2c,
353 return ret; 345 return ret;
354} 346}
355 347
356static int da9211_i2c_remove(struct i2c_client *i2c)
357{
358 struct da9211 *chip = i2c_get_clientdata(i2c);
359 int i;
360
361 for (i = 0; i < chip->num_regulator; i++)
362 devm_regulator_unregister(chip->dev, chip->rdev[i]);
363
364 return 0;
365}
366
367static const struct i2c_device_id da9211_i2c_id[] = { 348static const struct i2c_device_id da9211_i2c_id[] = {
368 {"da9211", 0}, 349 {"da9211", 0},
369 {}, 350 {},
@@ -377,7 +358,6 @@ static struct i2c_driver da9211_regulator_driver = {
377 .owner = THIS_MODULE, 358 .owner = THIS_MODULE,
378 }, 359 },
379 .probe = da9211_i2c_probe, 360 .probe = da9211_i2c_probe,
380 .remove = da9211_i2c_remove,
381 .id_table = da9211_i2c_id, 361 .id_table = da9211_i2c_id,
382}; 362};
383 363