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>
This commit is contained in:
parent
d0f6370950
commit
0324b74b39
1 changed files with 32 additions and 83 deletions
|
@ -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;
|
||||
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;
|
||||
|
||||
cfg.dev = labibb->dev;
|
||||
cfg.init_data = init_data;
|
||||
cfg.driver_data = labibb;
|
||||
cfg.of_node = of_node;
|
||||
cfg.dev = labibb->dev;
|
||||
cfg.driver_data = labibb;
|
||||
|
||||
init_data->constraints.valid_ops_mask
|
||||
|= REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS;
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
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;
|
||||
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;
|
||||
|
||||
cfg.dev = labibb->dev;
|
||||
cfg.init_data = init_data;
|
||||
cfg.driver_data = labibb;
|
||||
cfg.of_node = of_node;
|
||||
cfg.dev = labibb->dev;
|
||||
cfg.driver_data = labibb;
|
||||
|
||||
init_data->constraints.valid_ops_mask
|
||||
|= REGULATOR_CHANGE_VOLTAGE |
|
||||
REGULATOR_CHANGE_STATUS;
|
||||
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);
|
||||
|
||||
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);
|
||||
|
||||
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)
|
||||
|
|
Loading…
Add table
Reference in a new issue