regulator: act8865: Pass of_node via act8865_regulator_data
This makes the code easier to read and it avoids a dynamic memory allocation. Signed-off-by: Maarten ter Huurne <maarten@treewalker.org> Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
Родитель
e6e79fd9ce
Коммит
005e46857e
|
@ -319,7 +319,6 @@ static struct of_regulator_match act8600_matches[] = {
|
|||
};
|
||||
|
||||
static int act8865_pdata_from_dt(struct device *dev,
|
||||
struct device_node **of_node,
|
||||
struct act8865_platform_data *pdata,
|
||||
unsigned long type)
|
||||
{
|
||||
|
@ -370,7 +369,7 @@ static int act8865_pdata_from_dt(struct device *dev,
|
|||
regulator->id = i;
|
||||
regulator->name = matches[i].name;
|
||||
regulator->init_data = matches[i].init_data;
|
||||
of_node[i] = matches[i].of_node;
|
||||
regulator->of_node = matches[i].of_node;
|
||||
regulator++;
|
||||
}
|
||||
|
||||
|
@ -378,7 +377,6 @@ static int act8865_pdata_from_dt(struct device *dev,
|
|||
}
|
||||
#else
|
||||
static inline int act8865_pdata_from_dt(struct device *dev,
|
||||
struct device_node **of_node,
|
||||
struct act8865_platform_data *pdata,
|
||||
unsigned long type)
|
||||
{
|
||||
|
@ -386,8 +384,8 @@ static inline int act8865_pdata_from_dt(struct device *dev,
|
|||
}
|
||||
#endif
|
||||
|
||||
static struct regulator_init_data
|
||||
*act8865_get_init_data(int id, struct act8865_platform_data *pdata)
|
||||
static struct act8865_regulator_data *act8865_get_regulator_data(
|
||||
int id, struct act8865_platform_data *pdata)
|
||||
{
|
||||
int i;
|
||||
|
||||
|
@ -396,7 +394,7 @@ static struct regulator_init_data
|
|||
|
||||
for (i = 0; i < pdata->num_regulators; i++) {
|
||||
if (pdata->regulators[i].id == id)
|
||||
return pdata->regulators[i].init_data;
|
||||
return &pdata->regulators[i];
|
||||
}
|
||||
|
||||
return NULL;
|
||||
|
@ -418,7 +416,6 @@ static int act8865_pmic_probe(struct i2c_client *client,
|
|||
const struct regulator_desc *regulators;
|
||||
struct act8865_platform_data pdata_of, *pdata;
|
||||
struct device *dev = &client->dev;
|
||||
struct device_node **of_node;
|
||||
int i, ret, num_regulators;
|
||||
struct act8865 *act8865;
|
||||
unsigned long type;
|
||||
|
@ -472,13 +469,8 @@ static int act8865_pmic_probe(struct i2c_client *client,
|
|||
return -EINVAL;
|
||||
}
|
||||
|
||||
of_node = devm_kzalloc(dev, sizeof(struct device_node *) *
|
||||
num_regulators, GFP_KERNEL);
|
||||
if (!of_node)
|
||||
return -ENOMEM;
|
||||
|
||||
if (dev->of_node && !pdata) {
|
||||
ret = act8865_pdata_from_dt(dev, of_node, &pdata_of, type);
|
||||
ret = act8865_pdata_from_dt(dev, &pdata_of, type);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
|
@ -511,14 +503,19 @@ static int act8865_pmic_probe(struct i2c_client *client,
|
|||
for (i = 0; i < num_regulators; i++) {
|
||||
const struct regulator_desc *desc = ®ulators[i];
|
||||
struct regulator_config config = { };
|
||||
struct act8865_regulator_data *rdata;
|
||||
struct regulator_dev *rdev;
|
||||
|
||||
config.dev = dev;
|
||||
config.init_data = act8865_get_init_data(desc->id, pdata);
|
||||
config.of_node = of_node[i];
|
||||
config.driver_data = act8865;
|
||||
config.regmap = act8865->regmap;
|
||||
|
||||
rdata = act8865_get_regulator_data(desc->id, pdata);
|
||||
if (rdata) {
|
||||
config.init_data = rdata->init_data;
|
||||
config.of_node = rdata->of_node;
|
||||
}
|
||||
|
||||
rdev = devm_regulator_register(dev, desc, &config);
|
||||
if (IS_ERR(rdev)) {
|
||||
dev_err(dev, "failed to register %s\n", desc->name);
|
||||
|
@ -527,7 +524,6 @@ static int act8865_pmic_probe(struct i2c_client *client,
|
|||
}
|
||||
|
||||
i2c_set_clientdata(client, act8865);
|
||||
devm_kfree(dev, of_node);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -69,11 +69,13 @@ enum {
|
|||
* @id: regulator id
|
||||
* @name: regulator name
|
||||
* @init_data: regulator init data
|
||||
* @of_node: device tree node (optional)
|
||||
*/
|
||||
struct act8865_regulator_data {
|
||||
int id;
|
||||
const char *name;
|
||||
struct regulator_init_data *init_data;
|
||||
struct device_node *of_node;
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
Загрузка…
Ссылка в новой задаче