summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAbhijeet Dharmapurikar <adharmap@codeaurora.org>2016-01-14 19:38:40 -0800
committerRohit Vaswani <rvaswani@codeaurora.org>2016-03-01 12:22:40 -0800
commit0324b74b3953d846836a2bf1d70edeab1b6829db (patch)
tree708245b4bc61a7684558dd46dff521b0fb646f10
parentd0f6370950d139c392de8ba3f11addd375bd7394 (diff)
regulator: labibb: avail of simpler regulator registration api
Change, a0c7b16 regulator: of: Provide simplified DT parsing method enables to register a regulator without constructing an regulator_init_data structure. The regulator_init_data is instantiated within the registration api and is filled with information by parsing the regualtor device node. Avail of this convenience while registering regulators in the driver. Change-Id: I0d3c6e221b60a79ab011a180c7daa687b69580b1 Signed-off-by: Abhijeet Dharmapurikar <adharmap@codeaurora.org>
-rw-r--r--drivers/regulator/qpnp-labibb-regulator.c115
1 files changed, 32 insertions, 83 deletions
diff --git a/drivers/regulator/qpnp-labibb-regulator.c b/drivers/regulator/qpnp-labibb-regulator.c
index 47d6d987868c..dad82b43ea6e 100644
--- a/drivers/regulator/qpnp-labibb-regulator.c
+++ b/drivers/regulator/qpnp-labibb-regulator.c
@@ -1371,7 +1371,6 @@ static int register_qpnp_lab_regulator(struct qpnp_labibb *labibb,
struct device_node *of_node)
{
int rc = 0;
- struct regulator_init_data *init_data;
struct regulator_desc *rdesc;
struct regulator_config cfg = {};
u8 val;
@@ -1384,12 +1383,6 @@ static int register_qpnp_lab_regulator(struct qpnp_labibb *labibb,
return -EINVAL;
}
- init_data = of_get_regulator_init_data(labibb->dev, of_node);
- if (!init_data) {
- pr_err("unable to get regulator init data for qpnp lab regulator\n");
- return -ENOMEM;
- }
-
rc = of_property_read_u32(of_node, "qcom,qpnp-lab-min-voltage",
&(labibb->lab_vreg.min_volt));
if (rc < 0) {
@@ -1596,34 +1589,25 @@ static int register_qpnp_lab_regulator(struct qpnp_labibb *labibb,
}
}
- if (init_data->constraints.name) {
- rdesc = &(labibb->lab_vreg.rdesc);
- rdesc->owner = THIS_MODULE;
- rdesc->type = REGULATOR_VOLTAGE;
- rdesc->ops = &qpnp_lab_ops;
- rdesc->name = init_data->constraints.name;
-
- cfg.dev = labibb->dev;
- cfg.init_data = init_data;
- cfg.driver_data = labibb;
- cfg.of_node = of_node;
+ rdesc = &(labibb->lab_vreg.rdesc);
+ rdesc->owner = THIS_MODULE;
+ rdesc->type = REGULATOR_VOLTAGE;
+ rdesc->ops = &qpnp_lab_ops;
+ rdesc->name = of_node->name;
+ rdesc->of_match = of_node->name;
- init_data->constraints.valid_ops_mask
- |= REGULATOR_CHANGE_VOLTAGE |
- REGULATOR_CHANGE_STATUS;
+ cfg.dev = labibb->dev;
+ cfg.driver_data = labibb;
- labibb->lab_vreg.rdev = regulator_register(rdesc, &cfg);
- if (IS_ERR(labibb->lab_vreg.rdev)) {
- rc = PTR_ERR(labibb->lab_vreg.rdev);
- labibb->lab_vreg.rdev = NULL;
- pr_err("unable to get regulator init data for qpnp lab regulator, rc = %d\n",
- rc);
+ labibb->lab_vreg.rdev
+ = devm_regulator_register(labibb->dev, rdesc, &cfg);
+ if (IS_ERR(labibb->lab_vreg.rdev)) {
+ rc = PTR_ERR(labibb->lab_vreg.rdev);
+ labibb->lab_vreg.rdev = NULL;
+ pr_err("unable to get regulator init data for qpnp lab regulator, rc = %d\n",
+ rc);
- return rc;
- }
- } else {
- dev_err(labibb->dev, "qpnp lab regulator name missing\n");
- return -EINVAL;
+ return rc;
}
mutex_init(&(labibb->lab_vreg.lab_mutex));
@@ -2060,7 +2044,6 @@ static int register_qpnp_ibb_regulator(struct qpnp_labibb *labibb,
struct device_node *of_node)
{
int rc = 0;
- struct regulator_init_data *init_data;
struct regulator_desc *rdesc;
struct regulator_config cfg = {};
u8 val, ibb_enable_ctl;
@@ -2071,12 +2054,6 @@ static int register_qpnp_ibb_regulator(struct qpnp_labibb *labibb,
return -EINVAL;
}
- init_data = of_get_regulator_init_data(labibb->dev, of_node);
- if (!init_data) {
- pr_err("unable to get regulator init data for qpnp ibb regulator\n");
- return -ENOMEM;
- }
-
rc = of_property_read_u32(of_node, "qcom,qpnp-ibb-min-voltage",
&(labibb->ibb_vreg.min_volt));
if (rc < 0) {
@@ -2297,34 +2274,25 @@ static int register_qpnp_ibb_regulator(struct qpnp_labibb *labibb,
}
}
- if (init_data->constraints.name) {
- rdesc = &(labibb->ibb_vreg.rdesc);
- rdesc->owner = THIS_MODULE;
- rdesc->type = REGULATOR_VOLTAGE;
- rdesc->ops = &qpnp_ibb_ops;
- rdesc->name = init_data->constraints.name;
-
- cfg.dev = labibb->dev;
- cfg.init_data = init_data;
- cfg.driver_data = labibb;
- cfg.of_node = of_node;
+ rdesc = &(labibb->ibb_vreg.rdesc);
+ rdesc->owner = THIS_MODULE;
+ rdesc->type = REGULATOR_VOLTAGE;
+ rdesc->ops = &qpnp_ibb_ops;
+ rdesc->name = of_node->name;
+ rdesc->of_match = of_node->name;
- init_data->constraints.valid_ops_mask
- |= REGULATOR_CHANGE_VOLTAGE |
- REGULATOR_CHANGE_STATUS;
+ cfg.dev = labibb->dev;
+ cfg.driver_data = labibb;
- labibb->ibb_vreg.rdev = regulator_register(rdesc, &cfg);
- if (IS_ERR(labibb->ibb_vreg.rdev)) {
- rc = PTR_ERR(labibb->ibb_vreg.rdev);
- labibb->ibb_vreg.rdev = NULL;
- pr_err("unable to get regulator init data for qpnp ibb regulator, rc = %d\n",
- rc);
+ labibb->ibb_vreg.rdev
+ = devm_regulator_register(labibb->dev, rdesc, &cfg);
+ if (IS_ERR(labibb->ibb_vreg.rdev)) {
+ rc = PTR_ERR(labibb->ibb_vreg.rdev);
+ labibb->ibb_vreg.rdev = NULL;
+ pr_err("unable to get regulator init data for qpnp ibb regulator, rc = %d\n",
+ rc);
- return rc;
- }
- } else {
- dev_err(labibb->dev, "qpnp ibb regulator name missing\n");
- return -EINVAL;
+ return rc;
}
mutex_init(&(labibb->ibb_vreg.ibb_mutex));
@@ -2435,27 +2403,9 @@ static int qpnp_labibb_regulator_probe(struct platform_device *pdev)
return 0;
fail_registration:
- if (labibb->lab_vreg.rdev)
- regulator_unregister(labibb->lab_vreg.rdev);
- if (labibb->ibb_vreg.rdev)
- regulator_unregister(labibb->ibb_vreg.rdev);
-
return rc;
}
-static int qpnp_labibb_regulator_remove(struct platform_device *pdev)
-{
- struct qpnp_labibb *labibb = dev_get_drvdata(&pdev->dev);
-
- if (labibb) {
- if (labibb->lab_vreg.rdev)
- regulator_unregister(labibb->lab_vreg.rdev);
- if (labibb->ibb_vreg.rdev)
- regulator_unregister(labibb->ibb_vreg.rdev);
- }
- return 0;
-}
-
static struct of_device_id spmi_match_table[] = {
{ .compatible = QPNP_LABIBB_REGULATOR_DRIVER_NAME, },
{ },
@@ -2467,7 +2417,6 @@ static struct platform_driver qpnp_labibb_regulator_driver = {
.of_match_table = spmi_match_table,
},
.probe = qpnp_labibb_regulator_probe,
- .remove = qpnp_labibb_regulator_remove,
};
static int __init qpnp_labibb_regulator_init(void)