From: Adam Ward <adam.ward@diasemi.com>
To: Mark Brown <broonie@kernel.org>, Rob Herring <robh+dt@kernel.org>
Cc: Liam Girdwood <lgirdwood@gmail.com>,
Vincent Whitchurch <vincent.whitchurch@axis.com>,
<linux-kernel@vger.kernel.org>, <devicetree@vger.kernel.org>
Subject: [PATCH 6/9] regulator: da9121: Update registration to support multiple buck variants
Date: Fri, 20 Nov 2020 12:14:56 +0000 [thread overview]
Message-ID: <a2b4186b47e4786bd856ec11d2353b7183c22af2.1605868780.git.Adam.Ward.opensource@diasemi.com> (raw)
In-Reply-To: <cover.1605868780.git.Adam.Ward.opensource@diasemi.com>
Checks DT matches tally with variant maximum and register accordingly.
Signed-off-by: Adam Ward <Adam.Ward.opensource@diasemi.com>
---
drivers/regulator/da9121-regulator.c | 81 +++++++++++++++++++++++++++++++-----
1 file changed, 70 insertions(+), 11 deletions(-)
diff --git a/drivers/regulator/da9121-regulator.c b/drivers/regulator/da9121-regulator.c
index 5020774..13b0aad 100644
--- a/drivers/regulator/da9121-regulator.c
+++ b/drivers/regulator/da9121-regulator.c
@@ -314,6 +314,69 @@ static struct da9121_pdata *da9121_parse_regulators_dt(struct da9121 *chip)
}
#endif
+static int da9121_set_regulator_config(struct da9121 *chip)
+{
+ struct regulator_config config = { };
+ unsigned int max_matches = chip->pdata->num_buck;
+ int ret = 0;
+ int i;
+
+ if (max_matches > variant_parameters[chip->variant_id].num_bucks) {
+ dev_err(chip->dev, "Too many regulators in the DT\n");
+ ret = -EINVAL;
+ goto error;
+ }
+
+ for (i = 0; i < max_matches; i++) {
+ const struct regulator_desc *regl_desc =
+ local_da9121_regulators[chip->variant_id][i];
+ int id = regl_desc->id;
+ struct gpio_desc *gpio_ren;
+
+ if (chip->pdata->gpiod_ren[i])
+ gpio_ren = chip->pdata->gpiod_ren[i];
+ else
+ gpio_ren = NULL;
+
+ config.init_data = chip->pdata->init_data[i];
+ config.dev = chip->dev;
+ config.driver_data = chip;
+ config.regmap = chip->regmap;
+ config.of_node = chip->pdata->reg_node[i];
+
+ switch (id) {
+ case DA9121_IDX_BUCK1:
+ case DA9121_IDX_BUCK2:
+ config.ena_gpiod = gpio_ren;
+ break;
+ default:
+ dev_err(chip->dev, "Invalid regulator ID\n");
+ ret = -EINVAL;
+ goto error;
+ }
+
+ /*
+ * Hand the GPIO descriptor management over to the regulator
+ * core, remove it from GPIO devres management.
+ */
+ if (config.ena_gpiod)
+ devm_gpiod_unhinge(chip->dev, config.ena_gpiod);
+
+ chip->rdev[i] = devm_regulator_register(chip->dev,
+ regl_desc,
+ &config);
+ if (IS_ERR(chip->rdev[i])) {
+ dev_err(chip->dev, "Failed to register regulator %s, %d/%d of_map_mode:%p\n",
+ regl_desc->name, (i+1), max_matches, regl_desc->of_map_mode);
+ ret = PTR_ERR(chip->rdev[i]);
+ goto error;
+ }
+ }
+
+error:
+ return ret;
+}
+
/* DA9121 chip register model */
static const struct regmap_range da9121_1ch_readable_ranges[] = {
regmap_reg_range(DA9121_REG_SYS_STATUS_0, DA9121_REG_SYS_MASK_3),
@@ -586,9 +649,6 @@ static int da9121_i2c_probe(struct i2c_client *i2c,
{
struct da9121 *chip;
int ret = 0;
- struct device *dev = &i2c->dev;
- struct regulator_config config = {};
- struct regulator_dev *rdev;
chip = devm_kzalloc(&i2c->dev, sizeof(struct da9121), GFP_KERNEL);
if (!chip) {
@@ -606,16 +666,15 @@ static int da9121_i2c_probe(struct i2c_client *i2c,
if (!chip->pdata)
chip->pdata = da9121_parse_regulators_dt(chip);
- config.dev = &i2c->dev;
- config.of_node = dev->of_node;
- config.regmap = chip->regmap;
-
- rdev = devm_regulator_register(&i2c->dev, &da9121_reg, &config);
- if (IS_ERR(rdev)) {
- dev_err(&i2c->dev, "Failed to register da9121 regulator\n");
- return PTR_ERR(rdev);
+ if (IS_ERR(chip->pdata)) {
+ dev_err(chip->dev, "No regulators defined for the platform\n");
+ return PTR_ERR(chip->pdata);
}
+ ret = da9121_set_regulator_config(chip);
+ if (ret < 0)
+ goto error;
+
error:
return ret;
}
--
1.9.1
next prev parent reply other threads:[~2020-11-20 12:15 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-20 12:14 [PATCH 0/9] regulator: da9121: extend support to variants, add features Adam Ward
2020-11-20 12:14 ` [PATCH 1/9] regulator: Update DA9121 dt-bindings Adam Ward
2020-11-20 13:47 ` Vincent Whitchurch
2020-11-25 9:21 ` Vincent Whitchurch
2020-11-27 13:01 ` Adam Ward
2020-11-27 14:59 ` Mark Brown
2020-11-20 12:14 ` [PATCH 2/9] regulator: da9121: Add header file Adam Ward
2020-11-20 12:14 ` [PATCH 3/9] regulator: da9121: Add device variants Adam Ward
2020-11-20 12:14 ` [PATCH 4/9] regulator: da9121: Add device variant details and respective regmaps Adam Ward
2020-11-20 12:45 ` Mark Brown
2020-11-20 12:14 ` [PATCH 5/9] regulator: da9121: Add support for device variants via devicetree Adam Ward
2020-11-20 12:51 ` Mark Brown
2020-11-20 12:14 ` Adam Ward [this message]
2020-11-20 13:06 ` [PATCH 6/9] regulator: da9121: Update registration to support multiple buck variants Mark Brown
2020-11-20 12:14 ` [PATCH 7/9] regulator: da9121: add current support Adam Ward
2020-11-20 13:17 ` Mark Brown
2020-11-20 12:14 ` [PATCH 8/9] regulator: da9121: add mode support Adam Ward
2020-11-20 12:14 ` [PATCH 9/9] regulator: da9121: add interrupt support Adam Ward
2020-11-20 13:45 ` Mark Brown
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=a2b4186b47e4786bd856ec11d2353b7183c22af2.1605868780.git.Adam.Ward.opensource@diasemi.com \
--to=adam.ward@diasemi.com \
--cc=broonie@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linux-kernel@vger.kernel.org \
--cc=robh+dt@kernel.org \
--cc=vincent.whitchurch@axis.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®