Commit 005e4685 authored by Maarten ter Huurne's avatar Maarten ter Huurne Committed by Mark Brown
Browse files

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: default avatarMaarten ter Huurne <maarten@treewalker.org>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent e6e79fd9
Loading
Loading
Loading
Loading
+12 −16
Original line number Diff line number Diff line
@@ -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 = &regulators[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;
}
+2 −0
Original line number Diff line number Diff line
@@ -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;
};

/**