summaryrefslogtreecommitdiff
path: root/drivers/regulator/s2mps11.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/regulator/s2mps11.c')
-rw-r--r--drivers/regulator/s2mps11.c23
1 files changed, 20 insertions, 3 deletions
diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
index 333677d..5eba2ff 100644
--- a/drivers/regulator/s2mps11.c
+++ b/drivers/regulator/s2mps11.c
@@ -448,17 +448,33 @@ common_reg:
config.of_node = rdata[i].of_node;
}
- s2mps11->rdev[i] = devm_regulator_register(&pdev->dev,
- &regulators[i], &config);
+ s2mps11->rdev[i] = regulator_register(&regulators[i], &config);
if (IS_ERR(s2mps11->rdev[i])) {
ret = PTR_ERR(s2mps11->rdev[i]);
dev_err(&pdev->dev, "regulator init failed for %d\n",
i);
- return ret;
+ s2mps11->rdev[i] = NULL;
+ goto err;
}
}
return 0;
+err:
+ for (i = 0; i < S2MPS11_REGULATOR_MAX; i++)
+ regulator_unregister(s2mps11->rdev[i]);
+
+ return ret;
+}
+
+static int s2mps11_pmic_remove(struct platform_device *pdev)
+{
+ struct s2mps11_info *s2mps11 = platform_get_drvdata(pdev);
+ int i;
+
+ for (i = 0; i < S2MPS11_REGULATOR_MAX; i++)
+ regulator_unregister(s2mps11->rdev[i]);
+
+ return 0;
}
static const struct platform_device_id s2mps11_pmic_id[] = {
@@ -473,6 +489,7 @@ static struct platform_driver s2mps11_pmic_driver = {
.owner = THIS_MODULE,
},
.probe = s2mps11_pmic_probe,
+ .remove = s2mps11_pmic_remove,
.id_table = s2mps11_pmic_id,
};