提交 005e4685 编写于 作者: M Maarten ter Huurne 提交者: Mark Brown

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: NMaarten ter Huurne <maarten@treewalker.org>
Signed-off-by: NMark Brown <broonie@kernel.org>
上级 e6e79fd9
...@@ -319,7 +319,6 @@ static struct of_regulator_match act8600_matches[] = { ...@@ -319,7 +319,6 @@ static struct of_regulator_match act8600_matches[] = {
}; };
static int act8865_pdata_from_dt(struct device *dev, static int act8865_pdata_from_dt(struct device *dev,
struct device_node **of_node,
struct act8865_platform_data *pdata, struct act8865_platform_data *pdata,
unsigned long type) unsigned long type)
{ {
...@@ -370,7 +369,7 @@ static int act8865_pdata_from_dt(struct device *dev, ...@@ -370,7 +369,7 @@ static int act8865_pdata_from_dt(struct device *dev,
regulator->id = i; regulator->id = i;
regulator->name = matches[i].name; regulator->name = matches[i].name;
regulator->init_data = matches[i].init_data; regulator->init_data = matches[i].init_data;
of_node[i] = matches[i].of_node; regulator->of_node = matches[i].of_node;
regulator++; regulator++;
} }
...@@ -378,7 +377,6 @@ static int act8865_pdata_from_dt(struct device *dev, ...@@ -378,7 +377,6 @@ static int act8865_pdata_from_dt(struct device *dev,
} }
#else #else
static inline int act8865_pdata_from_dt(struct device *dev, static inline int act8865_pdata_from_dt(struct device *dev,
struct device_node **of_node,
struct act8865_platform_data *pdata, struct act8865_platform_data *pdata,
unsigned long type) unsigned long type)
{ {
...@@ -386,8 +384,8 @@ static inline int act8865_pdata_from_dt(struct device *dev, ...@@ -386,8 +384,8 @@ static inline int act8865_pdata_from_dt(struct device *dev,
} }
#endif #endif
static struct regulator_init_data static struct act8865_regulator_data *act8865_get_regulator_data(
*act8865_get_init_data(int id, struct act8865_platform_data *pdata) int id, struct act8865_platform_data *pdata)
{ {
int i; int i;
...@@ -396,7 +394,7 @@ static struct regulator_init_data ...@@ -396,7 +394,7 @@ static struct regulator_init_data
for (i = 0; i < pdata->num_regulators; i++) { for (i = 0; i < pdata->num_regulators; i++) {
if (pdata->regulators[i].id == id) if (pdata->regulators[i].id == id)
return pdata->regulators[i].init_data; return &pdata->regulators[i];
} }
return NULL; return NULL;
...@@ -418,7 +416,6 @@ static int act8865_pmic_probe(struct i2c_client *client, ...@@ -418,7 +416,6 @@ static int act8865_pmic_probe(struct i2c_client *client,
const struct regulator_desc *regulators; const struct regulator_desc *regulators;
struct act8865_platform_data pdata_of, *pdata; struct act8865_platform_data pdata_of, *pdata;
struct device *dev = &client->dev; struct device *dev = &client->dev;
struct device_node **of_node;
int i, ret, num_regulators; int i, ret, num_regulators;
struct act8865 *act8865; struct act8865 *act8865;
unsigned long type; unsigned long type;
...@@ -472,13 +469,8 @@ static int act8865_pmic_probe(struct i2c_client *client, ...@@ -472,13 +469,8 @@ static int act8865_pmic_probe(struct i2c_client *client,
return -EINVAL; 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) { 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) if (ret < 0)
return ret; return ret;
...@@ -511,14 +503,19 @@ static int act8865_pmic_probe(struct i2c_client *client, ...@@ -511,14 +503,19 @@ static int act8865_pmic_probe(struct i2c_client *client,
for (i = 0; i < num_regulators; i++) { for (i = 0; i < num_regulators; i++) {
const struct regulator_desc *desc = &regulators[i]; const struct regulator_desc *desc = &regulators[i];
struct regulator_config config = { }; struct regulator_config config = { };
struct act8865_regulator_data *rdata;
struct regulator_dev *rdev; struct regulator_dev *rdev;
config.dev = dev; config.dev = dev;
config.init_data = act8865_get_init_data(desc->id, pdata);
config.of_node = of_node[i];
config.driver_data = act8865; config.driver_data = act8865;
config.regmap = act8865->regmap; 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); rdev = devm_regulator_register(dev, desc, &config);
if (IS_ERR(rdev)) { if (IS_ERR(rdev)) {
dev_err(dev, "failed to register %s\n", desc->name); dev_err(dev, "failed to register %s\n", desc->name);
...@@ -527,7 +524,6 @@ static int act8865_pmic_probe(struct i2c_client *client, ...@@ -527,7 +524,6 @@ static int act8865_pmic_probe(struct i2c_client *client,
} }
i2c_set_clientdata(client, act8865); i2c_set_clientdata(client, act8865);
devm_kfree(dev, of_node);
return 0; return 0;
} }
......
...@@ -69,11 +69,13 @@ enum { ...@@ -69,11 +69,13 @@ enum {
* @id: regulator id * @id: regulator id
* @name: regulator name * @name: regulator name
* @init_data: regulator init data * @init_data: regulator init data
* @of_node: device tree node (optional)
*/ */
struct act8865_regulator_data { struct act8865_regulator_data {
int id; int id;
const char *name; const char *name;
struct regulator_init_data *init_data; struct regulator_init_data *init_data;
struct device_node *of_node;
}; };
/** /**
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册