From: "André Draszik" <andre.draszik@linaro.org>
To: Tudor Ambarus <tudor.ambarus@linaro.org>,
Rob Herring <robh@kernel.org>,
Conor Dooley <conor+dt@kernel.org>,
Krzysztof Kozlowski <krzk@kernel.org>,
Liam Girdwood <lgirdwood@gmail.com>,
Mark Brown <broonie@kernel.org>, Lee Jones <lee@kernel.org>,
Linus Walleij <linus.walleij@linaro.org>,
Bartosz Golaszewski <brgl@bgdev.pl>,
Krzysztof Kozlowski <krzk+dt@kernel.org>
Cc: "Peter Griffin" <peter.griffin@linaro.org>,
"Will McVicker" <willmcvicker@google.com>,
kernel-team@android.com, linux-kernel@vger.kernel.org,
linux-samsung-soc@vger.kernel.org, devicetree@vger.kernel.org,
linux-gpio@vger.kernel.org,
"André Draszik" <andre.draszik@linaro.org>
Subject: [PATCH v3 15/20] regulator: s2mps11: refactor handling of external rail control
Date: Mon, 03 Nov 2025 19:14:54 +0000 [thread overview]
Message-ID: <20251103-s2mpg1x-regulators-v3-15-b8b96b79e058@linaro.org> (raw)
In-Reply-To: <20251103-s2mpg1x-regulators-v3-0-b8b96b79e058@linaro.org>
Refactor s2mps14_pmic_enable_ext_control() and s2mps11_of_parse_cb()
slightly as a preparation for adding S2MPG10 and S2MPG11 support, as
both of those PMICs also support control of rails via GPIOs.
Signed-off-by: André Draszik <andre.draszik@linaro.org>
---
drivers/regulator/s2mps11.c | 86 ++++++++++++++++++++++++++++++---------------
1 file changed, 57 insertions(+), 29 deletions(-)
diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
index 88e21c90832a45547e5791b15cd1de274f81fed6..bb0a4f35ef47551f7171321fdde2c0202ce86ede 100644
--- a/drivers/regulator/s2mps11.c
+++ b/drivers/regulator/s2mps11.c
@@ -328,27 +328,13 @@ static int s2mps11_regulator_set_suspend_disable(struct regulator_dev *rdev)
rdev->desc->enable_mask, state);
}
-static int s2mps11_of_parse_cb(struct device_node *np,
- const struct regulator_desc *desc,
- struct regulator_config *config)
+static int s2mps11_of_parse_gpiod(struct device_node *np,
+ const struct regulator_desc *desc,
+ struct regulator_config *config)
{
- const struct s2mps11_info *s2mps11 = config->driver_data;
struct gpio_desc *ena_gpiod;
int ret;
- if (s2mps11->dev_type == S2MPS14X)
- switch (desc->id) {
- case S2MPS14_LDO10:
- case S2MPS14_LDO11:
- case S2MPS14_LDO12:
- break;
-
- default:
- return 0;
- }
- else
- return 0;
-
ena_gpiod = fwnode_gpiod_get_index(of_fwnode_handle(np),
"samsung,ext-control", 0,
GPIOD_OUT_HIGH |
@@ -380,6 +366,28 @@ static int s2mps11_of_parse_cb(struct device_node *np,
return 0;
}
+static int s2mps11_of_parse_cb(struct device_node *np,
+ const struct regulator_desc *desc,
+ struct regulator_config *config)
+{
+ const struct s2mps11_info *s2mps11 = config->driver_data;
+
+ if (s2mps11->dev_type == S2MPS14X)
+ switch (desc->id) {
+ case S2MPS14_LDO10:
+ case S2MPS14_LDO11:
+ case S2MPS14_LDO12:
+ break;
+
+ default:
+ return 0;
+ }
+ else
+ return 0;
+
+ return s2mps11_of_parse_gpiod(np, desc, config);
+}
+
static const struct regulator_ops s2mps11_ldo_ops = {
.list_voltage = regulator_list_voltage_linear,
.map_voltage = regulator_map_voltage_linear,
@@ -903,10 +911,16 @@ static const struct regulator_desc s2mps15_regulators[] = {
};
static int s2mps14_pmic_enable_ext_control(struct s2mps11_info *s2mps11,
- struct regulator_dev *rdev)
+ struct regulator_dev *rdev)
{
- return regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
- rdev->desc->enable_mask, S2MPS14_ENABLE_EXT_CONTROL);
+ int ret = regmap_update_bits(rdev->regmap, rdev->desc->enable_reg,
+ rdev->desc->enable_mask,
+ S2MPS14_ENABLE_EXT_CONTROL);
+ if (ret < 0)
+ return dev_err_probe(rdev_get_dev(rdev), ret,
+ "failed to enable GPIO control over %d/%s\n",
+ rdev->desc->id, rdev->desc->name);
+ return 0;
}
static int s2mpu02_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
@@ -1244,6 +1258,26 @@ static const struct regulator_desc s2mpu05_regulators[] = {
regulator_desc_s2mpu05_buck45(5),
};
+static int s2mps11_handle_ext_control(struct s2mps11_info *s2mps11,
+ struct regulator_dev *rdev)
+{
+ int ret;
+
+ switch (s2mps11->dev_type) {
+ case S2MPS14X:
+ if (!rdev->ena_pin)
+ return 0;
+
+ ret = s2mps14_pmic_enable_ext_control(s2mps11, rdev);
+ break;
+
+ default:
+ return 0;
+ }
+
+ return ret;
+}
+
static int s2mps11_pmic_probe(struct platform_device *pdev)
{
struct sec_pmic_dev *iodev = dev_get_drvdata(pdev->dev.parent);
@@ -1314,15 +1348,9 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
regulators[i].id,
regulators[i].name);
- if (regulator->ena_pin) {
- ret = s2mps14_pmic_enable_ext_control(s2mps11,
- regulator);
- if (ret < 0)
- return dev_err_probe(&pdev->dev, ret,
- "failed to enable GPIO control over %d/%s\n",
- regulator->desc->id,
- regulator->desc->name);
- }
+ ret = s2mps11_handle_ext_control(s2mps11, regulator);
+ if (ret < 0)
+ return ret;
}
return 0;
--
2.51.2.997.g839fc31de9-goog
next prev parent reply other threads:[~2025-11-03 19:14 UTC|newest]
Thread overview: 48+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-03 19:14 [PATCH v3 00/20] Samsung S2MPG10 regulator and S2MPG11 PMIC drivers André Draszik
2025-11-03 19:14 ` [PATCH v3 01/20] dt-bindings: firmware: google,gs101-acpm-ipc: convert regulators to lowercase André Draszik
2025-11-03 19:14 ` [PATCH v3 02/20] dt-bindings: mfd: samsung,s2mps11: split s2mpg10 into separate file André Draszik
2025-11-04 8:26 ` Krzysztof Kozlowski
2025-11-07 11:01 ` André Draszik
2025-11-09 18:59 ` Krzysztof Kozlowski
2025-11-03 19:14 ` [PATCH v3 03/20] regulator: dt-bindings: add s2mpg10-pmic regulators André Draszik
2025-11-03 19:14 ` [PATCH v3 04/20] regulator: dt-bindings: add s2mpg11-pmic regulators André Draszik
2025-11-04 9:39 ` Krzysztof Kozlowski
2025-11-07 11:14 ` André Draszik
2025-11-09 19:00 ` Krzysztof Kozlowski
2025-11-10 6:30 ` André Draszik
2025-11-03 19:14 ` [PATCH v3 05/20] dt-bindings: mfd: samsung,s2mpg10: Link s2mpg10-pmic to its regulators André Draszik
2025-11-04 8:28 ` Krzysztof Kozlowski
2025-11-08 13:48 ` André Draszik
2025-11-03 19:14 ` [PATCH v3 06/20] dt-bindings: mfd: samsung,s2mpg10: Add s2mpg11-pmic André Draszik
2025-11-04 8:37 ` Krzysztof Kozlowski
2025-11-03 19:14 ` [PATCH v3 07/20] dt-bindings: firmware: google,gs101-acpm-ipc: update PMIC examples André Draszik
2025-11-04 8:31 ` Krzysztof Kozlowski
2025-11-08 14:08 ` André Draszik
2025-11-09 19:02 ` Krzysztof Kozlowski
2025-11-04 9:46 ` Krzysztof Kozlowski
2025-11-03 19:14 ` [PATCH v3 08/20] mfd: sec-common: Instantiate s2mpg10 bucks and ldos separately André Draszik
2025-11-03 19:14 ` [PATCH v3 09/20] mfd: sec: Add support for S2MPG11 PMIC via ACPM André Draszik
2025-11-13 16:25 ` Lee Jones
2025-11-13 21:43 ` André Draszik
2025-11-14 16:46 ` Mark Brown
2025-11-14 21:56 ` André Draszik
2025-11-16 1:14 ` Mark Brown
2025-11-16 12:49 ` André Draszik
2025-11-16 16:46 ` Mark Brown
2025-11-17 6:44 ` André Draszik
2025-11-03 19:14 ` [PATCH v3 10/20] regulator: add REGULATOR_LINEAR_VRANGE macro André Draszik
2025-11-04 14:27 ` Mark Brown
2025-11-05 16:15 ` André Draszik
2025-11-03 19:14 ` [PATCH v3 11/20] regulator: s2mps11: drop two needless variable initialisations André Draszik
2025-11-04 8:41 ` Krzysztof Kozlowski
2025-11-03 19:14 ` [PATCH v3 12/20] regulator: s2mps11: use dev_err_probe() where appropriate André Draszik
2025-11-04 8:41 ` Krzysztof Kozlowski
2025-11-03 19:14 ` [PATCH v3 13/20] regulator: s2mps11: place constants on right side of comparison tests André Draszik
2025-11-04 8:40 ` Krzysztof Kozlowski
2025-11-03 19:14 ` [PATCH v3 14/20] regulator: s2mps11: update node parsing (allow -supply properties) André Draszik
2025-11-03 19:14 ` André Draszik [this message]
2025-11-03 19:14 ` [PATCH v3 16/20] regulator: s2mps11: add S2MPG10 regulator André Draszik
2025-11-03 19:14 ` [PATCH v3 17/20] regulator: s2mps11: refactor S2MPG10 ::set_voltage_time() for S2MPG11 reuse André Draszik
2025-11-03 19:14 ` [PATCH v3 18/20] regulator: s2mps11: refactor S2MPG10 regulator macros " André Draszik
2025-11-03 19:14 ` [PATCH v3 19/20] regulator: s2mps11: add S2MPG11 regulator André Draszik
2025-11-03 19:14 ` [PATCH v3 20/20] regulator: s2mps11: more descriptive gpio consumer name André Draszik
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=20251103-s2mpg1x-regulators-v3-15-b8b96b79e058@linaro.org \
--to=andre.draszik@linaro.org \
--cc=brgl@bgdev.pl \
--cc=broonie@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=kernel-team@android.com \
--cc=krzk+dt@kernel.org \
--cc=krzk@kernel.org \
--cc=lee@kernel.org \
--cc=lgirdwood@gmail.com \
--cc=linus.walleij@linaro.org \
--cc=linux-gpio@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-samsung-soc@vger.kernel.org \
--cc=peter.griffin@linaro.org \
--cc=robh@kernel.org \
--cc=tudor.ambarus@linaro.org \
--cc=willmcvicker@google.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;
as well as URLs for NNTP newsgroup(s).