[PATCH 2/3] regulator: axp20x: simplify the treatment of linked regulators
Jean-Francois Moine
moinejf at free.fr
Tue Sep 20 09:38:31 PDT 2016
Using ancillary variables for handling the linked regulators simplifies
the loop of regulator creation and makes easier the addition of new
regulator types.
Signed-off-by: Jean-Francois Moine <moinejf at free.fr>
---
drivers/regulator/axp20x-regulator.c | 24 ++++++++++++++++--------
1 file changed, 16 insertions(+), 8 deletions(-)
diff --git a/drivers/regulator/axp20x-regulator.c b/drivers/regulator/axp20x-regulator.c
index 4e5e7c8..7405f5b 100644
--- a/drivers/regulator/axp20x-regulator.c
+++ b/drivers/regulator/axp20x-regulator.c
@@ -511,6 +511,10 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
u32 workmode;
const char *dcdc1_name = axp22x_regulators[AXP22X_DCDC1].name;
const char *dcdc5_name = axp22x_regulators[AXP22X_DCDC5].name;
+ s8 dcdc1_ix = -1;
+ s8 dcdc5_ix = -1;
+ s8 dc1sw_ix = -1;
+ s8 dc5ldo_ix = -1;
bool drivevbus = false;
u32 skip_bitmap = 0;
@@ -524,6 +528,10 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
case AXP223_ID:
regulators = axp22x_regulators;
nregulators = AXP22X_REG_ID_MAX;
+ dcdc1_ix = AXP22X_DCDC1;
+ dcdc5_ix = AXP22X_DCDC5;
+ dc1sw_ix = AXP22X_DC1SW;
+ dc5ldo_ix = AXP22X_DC5LDO;
drivevbus = of_property_read_bool(pdev->dev.parent->of_node,
"x-powers,drive-vbus-en");
break;
@@ -541,6 +549,10 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
case AXP809_ID:
regulators = axp809_regulators;
nregulators = AXP809_REG_ID_MAX;
+ dcdc1_ix = AXP809_DCDC1;
+ dcdc5_ix = AXP809_DCDC5;
+ dc1sw_ix = AXP809_DC1SW;
+ dc5ldo_ix = AXP809_DC5LDO;
break;
default:
dev_err(&pdev->dev, "Unsupported AXP variant: %ld\n",
@@ -567,8 +579,7 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
* part of this loop to see where we save the DT defined
* name.
*/
- if ((regulators == axp22x_regulators && i == AXP22X_DC1SW) ||
- (regulators == axp809_regulators && i == AXP809_DC1SW)) {
+ if (i == dc1sw_ix && dcdc1_name) {
new_desc = devm_kzalloc(&pdev->dev, sizeof(*desc),
GFP_KERNEL);
*new_desc = regulators[i];
@@ -576,8 +587,7 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
desc = new_desc;
}
- if ((regulators == axp22x_regulators && i == AXP22X_DC5LDO) ||
- (regulators == axp809_regulators && i == AXP809_DC5LDO)) {
+ if (i == dc5ldo_ix && dcdc5_name) {
new_desc = devm_kzalloc(&pdev->dev, sizeof(*desc),
GFP_KERNEL);
*new_desc = regulators[i];
@@ -605,14 +615,12 @@ static int axp20x_regulator_probe(struct platform_device *pdev)
/*
* Save AXP22X DCDC1 / DCDC5 regulator names for later.
*/
- if ((regulators == axp22x_regulators && i == AXP22X_DCDC1) ||
- (regulators == axp809_regulators && i == AXP809_DCDC1))
+ if (i == dcdc1_ix)
of_property_read_string(rdev->dev.of_node,
"regulator-name",
&dcdc1_name);
- if ((regulators == axp22x_regulators && i == AXP22X_DCDC5) ||
- (regulators == axp809_regulators && i == AXP809_DCDC5))
+ if (i == dcdc5_ix)
of_property_read_string(rdev->dev.of_node,
"regulator-name",
&dcdc5_name);
--
2.10.0
More information about the linux-arm-kernel
mailing list