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 v4 14/20] regulator: s2mps11: update node parsing (allow -supply properties)
Date: Mon, 10 Nov 2025 19:28:57 +0000 [thread overview]
Message-ID: <20251110-s2mpg1x-regulators-v4-14-94c9e726d4ba@linaro.org> (raw)
In-Reply-To: <20251110-s2mpg1x-regulators-v4-0-94c9e726d4ba@linaro.org>
For the upcoming S2MPG10 and S2MPG11 support, we need to be able to
parse -supply properties in the PMIC's DT node.
This currently doesn't work, because the code here currently points the
regulator core at each individual regulator sub-node, and therefore the
regulator core is unable to find the -supply properties.
Update the code to simply let the regulator core handle all the parsing
by adding the ::of_match and ::regulators_node members to all existing
regulator descriptions, by adding ::of_parse_cb() to those
regulators which support the vendor-specific samsung,ext-control-gpios
to parse it (S2MPS14), and by dropping the explicit call to
of_regulator_match().
Configuring the PMIC to respect the external control GPIOs via
s2mps14_pmic_enable_ext_control() is left outside ::of_parse_cb()
because the regulator core ignores errors other than -EPROBE_DEFER from
that callback, while the code currently fails probe on register write
errors and I believe it should stay that way.
The driver can now avoid the devm_gpiod_unhinge() dance due to
simpler error handling of GPIO descriptor acquisition.
This change also has the advantage of reducing runtime memory
consumption by quite a bit as the driver doesn't need to allocate a
'struct of_regulator_match' and a 'struct gpio_desc *' for each
regulator for all PMICs as the regulator core does that. This saves
40+8 bytes on arm64 for each individual regulator on all supported
PMICs (even on non-S2MPS14 due to currently unnecessarily allocating
the extra memory unconditionally). With the upcoming S2MPG10 and
S2MPG11 support, this amounts to 1640+328 and 1120+224 bytes
respectively.
Signed-off-by: André Draszik <andre.draszik@linaro.org>
---
v2:
- fix commit message typos: s2mp1 -> s2mpg1
---
drivers/regulator/s2mps11.c | 192 ++++++++++++++++++++++++--------------------
1 file changed, 105 insertions(+), 87 deletions(-)
diff --git a/drivers/regulator/s2mps11.c b/drivers/regulator/s2mps11.c
index 8a36ab67b73e4151c7f67af0555a6465ee1e7a04..88e21c90832a45547e5791b15cd1de274f81fed6 100644
--- a/drivers/regulator/s2mps11.c
+++ b/drivers/regulator/s2mps11.c
@@ -40,12 +40,6 @@ struct s2mps11_info {
* the suspend mode was enabled.
*/
DECLARE_BITMAP(suspend_state, S2MPS_REGULATOR_MAX);
-
- /*
- * Array (size: number of regulators) with GPIO-s for external
- * sleep control.
- */
- struct gpio_desc **ext_control_gpiod;
};
static int get_ramp_delay(int ramp_delay)
@@ -244,7 +238,7 @@ static int s2mps11_regulator_enable(struct regulator_dev *rdev)
case S2MPS14X:
if (test_bit(rdev_id, s2mps11->suspend_state))
val = S2MPS14_ENABLE_SUSPEND;
- else if (s2mps11->ext_control_gpiod[rdev_id])
+ else if (rdev->ena_pin)
val = S2MPS14_ENABLE_EXT_CONTROL;
else
val = rdev->desc->enable_mask;
@@ -334,6 +328,58 @@ 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)
+{
+ 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 |
+ GPIOD_FLAGS_BIT_NONEXCLUSIVE,
+ "s2mps11-regulator");
+ if (IS_ERR(ena_gpiod)) {
+ ret = PTR_ERR(ena_gpiod);
+
+ /* Ignore all errors except probe defer. */
+ if (ret == -EPROBE_DEFER)
+ return ret;
+
+ if (ret == -ENOENT)
+ dev_info(config->dev,
+ "No entry for control GPIO for %d/%s in node %pOF\n",
+ desc->id, desc->name, np);
+ else
+ dev_warn_probe(config->dev, ret,
+ "Failed to get control GPIO for %d/%s in node %pOF\n",
+ desc->id, desc->name, np);
+ return 0;
+ }
+
+ dev_info(config->dev, "Using GPIO for ext-control over %d/%s\n",
+ desc->id, desc->name);
+
+ config->ena_gpiod = ena_gpiod;
+
+ return 0;
+}
+
static const struct regulator_ops s2mps11_ldo_ops = {
.list_voltage = regulator_list_voltage_linear,
.map_voltage = regulator_map_voltage_linear,
@@ -362,6 +408,8 @@ static const struct regulator_ops s2mps11_buck_ops = {
#define regulator_desc_s2mps11_ldo(num, step) { \
.name = "LDO"#num, \
.id = S2MPS11_LDO##num, \
+ .of_match = of_match_ptr("LDO"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps11_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -378,6 +426,8 @@ static const struct regulator_ops s2mps11_buck_ops = {
#define regulator_desc_s2mps11_buck1_4(num) { \
.name = "BUCK"#num, \
.id = S2MPS11_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps11_buck_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -395,6 +445,8 @@ static const struct regulator_ops s2mps11_buck_ops = {
#define regulator_desc_s2mps11_buck5 { \
.name = "BUCK5", \
.id = S2MPS11_BUCK5, \
+ .of_match = of_match_ptr("BUCK5"), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps11_buck_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -412,6 +464,8 @@ static const struct regulator_ops s2mps11_buck_ops = {
#define regulator_desc_s2mps11_buck67810(num, min, step, min_sel, voltages) { \
.name = "BUCK"#num, \
.id = S2MPS11_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps11_buck_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -429,6 +483,8 @@ static const struct regulator_ops s2mps11_buck_ops = {
#define regulator_desc_s2mps11_buck9 { \
.name = "BUCK9", \
.id = S2MPS11_BUCK9, \
+ .of_match = of_match_ptr("BUCK9"), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps11_buck_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -502,6 +558,8 @@ static const struct regulator_ops s2mps14_reg_ops;
#define regulator_desc_s2mps13_ldo(num, min, step, min_sel) { \
.name = "LDO"#num, \
.id = S2MPS13_LDO##num, \
+ .of_match = of_match_ptr("LDO"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps14_reg_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -518,6 +576,8 @@ static const struct regulator_ops s2mps14_reg_ops;
#define regulator_desc_s2mps13_buck(num, min, step, min_sel) { \
.name = "BUCK"#num, \
.id = S2MPS13_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps14_reg_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -535,6 +595,8 @@ static const struct regulator_ops s2mps14_reg_ops;
#define regulator_desc_s2mps13_buck7(num, min, step, min_sel) { \
.name = "BUCK"#num, \
.id = S2MPS13_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps14_reg_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -552,6 +614,8 @@ static const struct regulator_ops s2mps14_reg_ops;
#define regulator_desc_s2mps13_buck8_10(num, min, step, min_sel) { \
.name = "BUCK"#num, \
.id = S2MPS13_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps14_reg_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -634,6 +698,9 @@ static const struct regulator_ops s2mps14_reg_ops = {
#define regulator_desc_s2mps14_ldo(num, min, step) { \
.name = "LDO"#num, \
.id = S2MPS14_LDO##num, \
+ .of_match = of_match_ptr("LDO"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
+ .of_parse_cb = s2mps11_of_parse_cb, \
.ops = &s2mps14_reg_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -649,6 +716,9 @@ static const struct regulator_ops s2mps14_reg_ops = {
#define regulator_desc_s2mps14_buck(num, min, step, min_sel) { \
.name = "BUCK"#num, \
.id = S2MPS14_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
+ .of_parse_cb = s2mps11_of_parse_cb, \
.ops = &s2mps14_reg_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -725,6 +795,8 @@ static const struct regulator_ops s2mps15_reg_buck_ops = {
#define regulator_desc_s2mps15_ldo(num, range) { \
.name = "LDO"#num, \
.id = S2MPS15_LDO##num, \
+ .of_match = of_match_ptr("LDO"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps15_reg_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -740,6 +812,8 @@ static const struct regulator_ops s2mps15_reg_buck_ops = {
#define regulator_desc_s2mps15_buck(num, range) { \
.name = "BUCK"#num, \
.id = S2MPS15_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mps15_reg_buck_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -835,60 +909,6 @@ static int s2mps14_pmic_enable_ext_control(struct s2mps11_info *s2mps11,
rdev->desc->enable_mask, S2MPS14_ENABLE_EXT_CONTROL);
}
-static void s2mps14_pmic_dt_parse_ext_control_gpio(struct platform_device *pdev,
- struct of_regulator_match *rdata, struct s2mps11_info *s2mps11)
-{
- struct gpio_desc **gpio = s2mps11->ext_control_gpiod;
- unsigned int i;
- unsigned int valid_regulators[3] = { S2MPS14_LDO10, S2MPS14_LDO11,
- S2MPS14_LDO12 };
-
- for (i = 0; i < ARRAY_SIZE(valid_regulators); i++) {
- unsigned int reg = valid_regulators[i];
-
- if (!rdata[reg].init_data || !rdata[reg].of_node)
- continue;
-
- gpio[reg] = devm_fwnode_gpiod_get(&pdev->dev,
- of_fwnode_handle(rdata[reg].of_node),
- "samsung,ext-control",
- GPIOD_OUT_HIGH | GPIOD_FLAGS_BIT_NONEXCLUSIVE,
- "s2mps11-regulator");
- if (PTR_ERR(gpio[reg]) == -ENOENT)
- gpio[reg] = NULL;
- else if (IS_ERR(gpio[reg])) {
- dev_err(&pdev->dev, "Failed to get control GPIO for %d/%s\n",
- reg, rdata[reg].name);
- gpio[reg] = NULL;
- continue;
- }
- if (gpio[reg])
- dev_dbg(&pdev->dev, "Using GPIO for ext-control over %d/%s\n",
- reg, rdata[reg].name);
- }
-}
-
-static int s2mps11_pmic_dt_parse(struct platform_device *pdev,
- struct of_regulator_match *rdata, struct s2mps11_info *s2mps11,
- unsigned int rdev_num)
-{
- struct device_node *reg_np;
-
- reg_np = of_get_child_by_name(pdev->dev.parent->of_node, "regulators");
- if (!reg_np) {
- dev_err(&pdev->dev, "could not find regulators sub-node\n");
- return -EINVAL;
- }
-
- of_regulator_match(&pdev->dev, reg_np, rdata, rdev_num);
- if (s2mps11->dev_type == S2MPS14X)
- s2mps14_pmic_dt_parse_ext_control_gpio(pdev, rdata, s2mps11);
-
- of_node_put(reg_np);
-
- return 0;
-}
-
static int s2mpu02_set_ramp_delay(struct regulator_dev *rdev, int ramp_delay)
{
unsigned int ramp_val, ramp_shift, ramp_reg;
@@ -946,6 +966,8 @@ static const struct regulator_ops s2mpu02_buck_ops = {
#define regulator_desc_s2mpu02_ldo1(num) { \
.name = "LDO"#num, \
.id = S2MPU02_LDO##num, \
+ .of_match = of_match_ptr("LDO"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -961,6 +983,8 @@ static const struct regulator_ops s2mpu02_buck_ops = {
#define regulator_desc_s2mpu02_ldo2(num) { \
.name = "LDO"#num, \
.id = S2MPU02_LDO##num, \
+ .of_match = of_match_ptr("LDO"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -976,6 +1000,8 @@ static const struct regulator_ops s2mpu02_buck_ops = {
#define regulator_desc_s2mpu02_ldo3(num) { \
.name = "LDO"#num, \
.id = S2MPU02_LDO##num, \
+ .of_match = of_match_ptr("LDO"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -991,6 +1017,8 @@ static const struct regulator_ops s2mpu02_buck_ops = {
#define regulator_desc_s2mpu02_ldo4(num) { \
.name = "LDO"#num, \
.id = S2MPU02_LDO##num, \
+ .of_match = of_match_ptr("LDO"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -1006,6 +1034,8 @@ static const struct regulator_ops s2mpu02_buck_ops = {
#define regulator_desc_s2mpu02_ldo5(num) { \
.name = "LDO"#num, \
.id = S2MPU02_LDO##num, \
+ .of_match = of_match_ptr("LDO"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -1022,6 +1052,8 @@ static const struct regulator_ops s2mpu02_buck_ops = {
#define regulator_desc_s2mpu02_buck1234(num) { \
.name = "BUCK"#num, \
.id = S2MPU02_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_buck_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -1038,6 +1070,8 @@ static const struct regulator_ops s2mpu02_buck_ops = {
#define regulator_desc_s2mpu02_buck5(num) { \
.name = "BUCK"#num, \
.id = S2MPU02_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -1054,6 +1088,8 @@ static const struct regulator_ops s2mpu02_buck_ops = {
#define regulator_desc_s2mpu02_buck6(num) { \
.name = "BUCK"#num, \
.id = S2MPU02_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -1070,6 +1106,8 @@ static const struct regulator_ops s2mpu02_buck_ops = {
#define regulator_desc_s2mpu02_buck7(num) { \
.name = "BUCK"#num, \
.id = S2MPU02_BUCK##num, \
+ .of_match = of_match_ptr("BUCK"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -1125,6 +1163,8 @@ static const struct regulator_desc s2mpu02_regulators[] = {
#define regulator_desc_s2mpu05_ldo_reg(num, min, step, reg) { \
.name = "ldo"#num, \
.id = S2MPU05_LDO##num, \
+ .of_match = of_match_ptr("ldo"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_ldo_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -1156,6 +1196,8 @@ static const struct regulator_desc s2mpu02_regulators[] = {
#define regulator_desc_s2mpu05_buck(num, which) { \
.name = "buck"#num, \
.id = S2MPU05_BUCK##num, \
+ .of_match = of_match_ptr("buck"#num), \
+ .regulators_node = of_match_ptr("regulators"), \
.ops = &s2mpu02_buck_ops, \
.type = REGULATOR_VOLTAGE, \
.owner = THIS_MODULE, \
@@ -1254,22 +1296,7 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
s2mps11->dev_type);
}
- s2mps11->ext_control_gpiod = devm_kcalloc(&pdev->dev, rdev_num,
- sizeof(*s2mps11->ext_control_gpiod), GFP_KERNEL);
- if (!s2mps11->ext_control_gpiod)
- return -ENOMEM;
-
- struct of_regulator_match *rdata __free(kfree) =
- kcalloc(rdev_num, sizeof(*rdata), GFP_KERNEL);
- if (!rdata)
- return -ENOMEM;
-
- for (i = 0; i < rdev_num; i++)
- rdata[i].name = regulators[i].name;
-
- ret = s2mps11_pmic_dt_parse(pdev, rdata, s2mps11, rdev_num);
- if (ret)
- return ret;
+ device_set_of_node_from_dev(&pdev->dev, pdev->dev.parent);
platform_set_drvdata(pdev, s2mps11);
@@ -1279,15 +1306,6 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
for (i = 0; i < rdev_num; i++) {
struct regulator_dev *regulator;
- config.init_data = rdata[i].init_data;
- config.of_node = rdata[i].of_node;
- config.ena_gpiod = s2mps11->ext_control_gpiod[i];
- /*
- * Hand the GPIO descriptor management over to the regulator
- * core, remove it from devres management.
- */
- if (config.ena_gpiod)
- devm_gpiod_unhinge(&pdev->dev, config.ena_gpiod);
regulator = devm_regulator_register(&pdev->dev,
®ulators[i], &config);
if (IS_ERR(regulator))
@@ -1296,7 +1314,7 @@ static int s2mps11_pmic_probe(struct platform_device *pdev)
regulators[i].id,
regulators[i].name);
- if (config.ena_gpiod) {
+ if (regulator->ena_pin) {
ret = s2mps14_pmic_enable_ext_control(s2mps11,
regulator);
if (ret < 0)
--
2.51.2.1041.gc1ab5b90ca-goog
next prev parent reply other threads:[~2025-11-10 19:29 UTC|newest]
Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-10 19:28 [PATCH v4 00/20] Samsung S2MPG10 regulator and S2MPG11 PMIC drivers André Draszik
2025-11-10 19:28 ` [PATCH v4 01/20] dt-bindings: firmware: google,gs101-acpm-ipc: convert regulators to lowercase André Draszik
2025-11-10 19:28 ` [PATCH v4 02/20] regulator: dt-bindings: add s2mpg10-pmic regulators André Draszik
2025-11-12 9:51 ` Krzysztof Kozlowski
2025-11-12 15:00 ` André Draszik
2025-11-13 11:13 ` Krzysztof Kozlowski
2025-11-10 19:28 ` [PATCH v4 03/20] regulator: dt-bindings: add s2mpg11-pmic regulators André Draszik
2025-11-13 11:23 ` Krzysztof Kozlowski
2025-11-10 19:28 ` [PATCH v4 04/20] dt-bindings: mfd: samsung,s2mps11: Split s2mpg10-pmic into separate file André Draszik
2025-11-13 11:27 ` Krzysztof Kozlowski
2025-11-10 19:28 ` [PATCH v4 05/20] dt-bindings: mfd: samsung,s2mpg10-pmic: Link to its regulators André Draszik
2025-11-12 10:09 ` Krzysztof Kozlowski
2025-11-10 19:28 ` [PATCH v4 06/20] dt-bindings: mfd: Add samsung,s2mpg11-pmic André Draszik
2025-11-12 10:10 ` Krzysztof Kozlowski
2025-11-10 19:28 ` [PATCH v4 07/20] dt-bindings: firmware: google,gs101-acpm-ipc: add S2MPG11 secondary PMIC André Draszik
2025-11-12 10:08 ` Krzysztof Kozlowski
2025-11-10 19:28 ` [PATCH v4 08/20] mfd: sec-common: Instantiate s2mpg10 bucks and ldos separately André Draszik
2025-11-10 19:28 ` [PATCH v4 09/20] mfd: sec: Add support for S2MPG11 PMIC via ACPM André Draszik
2025-11-10 19:28 ` [PATCH v4 10/20] regulator: add REGULATOR_LINEAR_VRANGE macro André Draszik
2025-11-10 19:28 ` [PATCH v4 11/20] regulator: s2mps11: drop two needless variable initialisations André Draszik
2025-11-10 19:28 ` [PATCH v4 12/20] regulator: s2mps11: use dev_err_probe() where appropriate André Draszik
2025-11-10 19:28 ` [PATCH v4 13/20] regulator: s2mps11: place constants on right side of comparison tests André Draszik
2025-11-10 19:28 ` André Draszik [this message]
2025-11-10 19:28 ` [PATCH v4 15/20] regulator: s2mps11: refactor handling of external rail control André Draszik
2025-11-10 19:28 ` [PATCH v4 16/20] regulator: s2mps11: add S2MPG10 regulator André Draszik
2025-11-10 19:29 ` [PATCH v4 17/20] regulator: s2mps11: refactor S2MPG10 ::set_voltage_time() for S2MPG11 reuse André Draszik
2025-11-10 19:29 ` [PATCH v4 18/20] regulator: s2mps11: refactor S2MPG10 regulator macros " André Draszik
2025-11-10 19:29 ` [PATCH v4 19/20] regulator: s2mps11: add S2MPG11 regulator André Draszik
2025-11-10 19:29 ` [PATCH v4 20/20] regulator: s2mps11: more descriptive gpio consumer name André Draszik
2025-11-13 13:36 ` [PATCH v4 00/20] Samsung S2MPG10 regulator and S2MPG11 PMIC drivers 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=20251110-s2mpg1x-regulators-v4-14-94c9e726d4ba@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).