staging: regulator: hi6421v600-regulator: better handle modes
Instead of implementing a custom set of properties, set valid_modes_mask based on having or not a mask for enabling the eco_mode. This makes the code clearer, and remove some uneeded props from DT. Signed-off-by: Mauro Carvalho Chehab <mchehab+huawei@kernel.org> Link: https://lore.kernel.org/r/0f4ac5a4167bbca428c8507b6992acd8b3ebabd1.1597647359.git.mchehab+huawei@kernel.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
parent
db27f8294c
commit
e086a9cd2b
@ -338,7 +338,6 @@ static int hisi_regulator_probe_ldo(struct platform_device *pdev,
|
|||||||
struct regulator_config config = { };
|
struct regulator_config config = { };
|
||||||
struct regulation_constraints *constraint;
|
struct regulation_constraints *constraint;
|
||||||
const char *supplyname = NULL;
|
const char *supplyname = NULL;
|
||||||
unsigned int temp_modes;
|
|
||||||
int ret = 0;
|
int ret = 0;
|
||||||
|
|
||||||
initdata = of_get_regulator_init_data(dev, np, NULL);
|
initdata = of_get_regulator_init_data(dev, np, NULL);
|
||||||
@ -347,25 +346,6 @@ static int hisi_regulator_probe_ldo(struct platform_device *pdev,
|
|||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* hisi regulator supports two modes */
|
|
||||||
constraint = &initdata->constraints;
|
|
||||||
|
|
||||||
ret = of_property_read_u32_array(np, "valid-modes-mask",
|
|
||||||
&constraint->valid_modes_mask, 1);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "no valid modes mask\n");
|
|
||||||
ret = -ENODEV;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
ret = of_property_read_u32_array(np, "valid-idle-mask",
|
|
||||||
&temp_modes, 1);
|
|
||||||
if (ret) {
|
|
||||||
dev_err(dev, "no valid idle mask\n");
|
|
||||||
ret = -ENODEV;
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
constraint->valid_ops_mask |= temp_modes;
|
|
||||||
|
|
||||||
sreg = kzalloc(sizeof(*sreg), GFP_KERNEL);
|
sreg = kzalloc(sizeof(*sreg), GFP_KERNEL);
|
||||||
if (!sreg)
|
if (!sreg)
|
||||||
return -ENOMEM;
|
return -ENOMEM;
|
||||||
@ -387,6 +367,15 @@ static int hisi_regulator_probe_ldo(struct platform_device *pdev,
|
|||||||
if (ret)
|
if (ret)
|
||||||
goto hisi_probe_end;
|
goto hisi_probe_end;
|
||||||
|
|
||||||
|
/* hisi regulator supports two modes */
|
||||||
|
constraint = &initdata->constraints;
|
||||||
|
|
||||||
|
constraint->valid_modes_mask = REGULATOR_MODE_NORMAL;
|
||||||
|
if (sreg->eco_mode_mask) {
|
||||||
|
constraint->valid_modes_mask |= REGULATOR_MODE_IDLE;
|
||||||
|
constraint->valid_ops_mask |= REGULATOR_CHANGE_MODE;
|
||||||
|
}
|
||||||
|
|
||||||
config.dev = &pdev->dev;
|
config.dev = &pdev->dev;
|
||||||
config.init_data = initdata;
|
config.init_data = initdata;
|
||||||
config.driver_data = sreg;
|
config.driver_data = sreg;
|
||||||
@ -401,8 +390,7 @@ static int hisi_regulator_probe_ldo(struct platform_device *pdev,
|
|||||||
goto hisi_probe_end;
|
goto hisi_probe_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
dev_dbg(dev, "%s:valid_modes_mask: 0x%x, valid_ops_mask: 0x%x\n",
|
dev_dbg(dev, "valid_modes_mask: 0x%x, valid_ops_mask: 0x%x\n",
|
||||||
rdesc->name,
|
|
||||||
constraint->valid_modes_mask, constraint->valid_ops_mask);
|
constraint->valid_modes_mask, constraint->valid_ops_mask);
|
||||||
|
|
||||||
dev_set_drvdata(dev, rdev);
|
dev_set_drvdata(dev, rdev);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user