@@ -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);
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@free.fr> --- drivers/regulator/axp20x-regulator.c | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-)