* [PATCH 0/2] regulator: qcom_usb_vbus: add pm4125 VBUS regulator support
@ 2026-05-20 9:07 Rakesh Kota
2026-05-20 9:07 ` [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg Rakesh Kota
2026-05-20 9:07 ` [PATCH 2/2] regulator: qcom_usb_vbus: add support for qcom,pm4125-vbus-reg Rakesh Kota
0 siblings, 2 replies; 11+ messages in thread
From: Rakesh Kota @ 2026-05-20 9:07 UTC (permalink / raw)
To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Wesley Cheng
Cc: linux-arm-msm, linux-kernel, devicetree, jishnu.prakash,
kamal.wadhwa, Rakesh Kota
Add support for PM4125 USB VBUS regulator. Unlike PM8150B which uses
a current-limit selector, PM4125 uses a 2-bit VBOOST voltage selector
supporting 4.25 V, 4.5 V, 4.75 V and 5.0 V output.
Signed-off-by: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
---
Rakesh Kota (2):
dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg
regulator: qcom_usb_vbus: add support for qcom,pm4125-vbus-reg
.../regulator/qcom,usb-vbus-regulator.yaml | 50 +++++++++-
drivers/regulator/qcom_usb_vbus-regulator.c | 102 ++++++++++++++++++---
2 files changed, 133 insertions(+), 19 deletions(-)
---
base-commit: 6a50ba100ace43f43c87384367eb2d2605fcc16c
change-id: 20260520-add_pm4125-vbus-reg-95c858c6ae43
Best regards,
--
Rakesh Kota <rakesh.kota@oss.qualcomm.com>
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg
2026-05-20 9:07 [PATCH 0/2] regulator: qcom_usb_vbus: add pm4125 VBUS regulator support Rakesh Kota
@ 2026-05-20 9:07 ` Rakesh Kota
2026-05-20 9:20 ` sashiko-bot
` (2 more replies)
2026-05-20 9:07 ` [PATCH 2/2] regulator: qcom_usb_vbus: add support for qcom,pm4125-vbus-reg Rakesh Kota
1 sibling, 3 replies; 11+ messages in thread
From: Rakesh Kota @ 2026-05-20 9:07 UTC (permalink / raw)
To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Wesley Cheng
Cc: linux-arm-msm, linux-kernel, devicetree, jishnu.prakash,
kamal.wadhwa, Rakesh Kota
The pm4125 PMIC uses a different USB VBUS register layout than pm8150b.
It uses a 2-bit VBOOST voltage selector supporting output voltages of
4.25 V, 4.5 V, 4.75 V and 5.0 V, instead of a current-limit selector.
Move qcom,pm4125-vbus-reg from the pm8150b fallback items list into the
standalone enum since the driver handles it with its own match-data and
register layout.
Make regulator-min/max-microamp conditional so they are only required
for current-limit variants (pm8150b, pm6150, pm7250b, pmi632). Add an
if/then condition for qcom,pm4125-vbus-reg requiring regulator-min/
max-microvolt instead, and update the pm4125 example accordingly.
Signed-off-by: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
---
.../regulator/qcom,usb-vbus-regulator.yaml | 50 +++++++++++++++++++---
1 file changed, 45 insertions(+), 5 deletions(-)
diff --git a/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml b/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
index fcefc722ee2a495837fedba026669de97350c566..7c74573848bcdafbf6260f69cfcd7a9b58bc9f2d 100644
--- a/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
+++ b/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
@@ -14,17 +14,21 @@ description: |
regulator will be enabled in situations where the device is required to
provide power to the connected peripheral.
-allOf:
- - $ref: regulator.yaml#
+ The pm8150b variant uses an OTG current-limit selector, supporting limits
+ of 500 mA, 1000 mA, 1500 mA, 2000 mA, 2500 mA and 3000 mA.
+
+ The pm4125 variant uses a different register layout with a 2-bit VBOOST
+ voltage selector supporting output voltages of 4.25 V, 4.5 V, 4.75 V
+ and 5.0 V.
properties:
compatible:
oneOf:
- enum:
- qcom,pm8150b-vbus-reg
+ - qcom,pm4125-vbus-reg
- items:
- enum:
- - qcom,pm4125-vbus-reg
- qcom,pm6150-vbus-reg
- qcom,pm7250b-vbus-reg
- qcom,pmi632-vbus-reg
@@ -34,11 +38,35 @@ properties:
maxItems: 1
description: VBUS output base address
+allOf:
+ - $ref: regulator.yaml#
+ - if:
+ properties:
+ compatible:
+ contains:
+ enum:
+ - qcom,pm8150b-vbus-reg
+ - qcom,pm6150-vbus-reg
+ - qcom,pm7250b-vbus-reg
+ - qcom,pmi632-vbus-reg
+ then:
+ required:
+ - regulator-min-microamp
+ - regulator-max-microamp
+
+ - if:
+ properties:
+ compatible:
+ contains:
+ const: qcom,pm4125-vbus-reg
+ then:
+ required:
+ - regulator-min-microvolt
+ - regulator-max-microvolt
+
required:
- compatible
- reg
- - regulator-min-microamp
- - regulator-max-microamp
unevaluatedProperties: false
@@ -55,4 +83,16 @@ examples:
regulator-max-microamp = <3000000>;
};
};
+ - |
+ pmic {
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ usb-vbus-regulator@5000 {
+ compatible = "qcom,pm4125-vbus-reg";
+ reg = <0x1100>;
+ regulator-min-microvolt = <4250000>;
+ regulator-max-microvolt = <5000000>;
+ };
+ };
...
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/2] regulator: qcom_usb_vbus: add support for qcom,pm4125-vbus-reg
2026-05-20 9:07 [PATCH 0/2] regulator: qcom_usb_vbus: add pm4125 VBUS regulator support Rakesh Kota
2026-05-20 9:07 ` [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg Rakesh Kota
@ 2026-05-20 9:07 ` Rakesh Kota
2026-05-20 9:51 ` Konrad Dybcio
1 sibling, 1 reply; 11+ messages in thread
From: Rakesh Kota @ 2026-05-20 9:07 UTC (permalink / raw)
To: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Wesley Cheng
Cc: linux-arm-msm, linux-kernel, devicetree, jishnu.prakash,
kamal.wadhwa, Rakesh Kota
The PM4125 PMIC uses a different register layout for USB VBUS control
compared to PM8150B. On PM4125, CMD_OTG is at offset 0x50, OTG_CFG is
at 0x56, and offset 0x52 is a 2-bit VBOOST voltage selector rather than
a current-limit selector.
Introduce per-compatible regulator descriptor data to accommodate these
differences. This keeps the existing PM8150B current-limit logic intact
while adding a dedicated voltage-selector path for PM4125.
Signed-off-by: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
---
drivers/regulator/qcom_usb_vbus-regulator.c | 102 ++++++++++++++++++++++++----
1 file changed, 88 insertions(+), 14 deletions(-)
diff --git a/drivers/regulator/qcom_usb_vbus-regulator.c b/drivers/regulator/qcom_usb_vbus-regulator.c
index cd94ed67621fee9f6d7a0327054db0ebab6cc7ee..3d425452a0b35b35c4b454f84eb28e87cc8ba4f8 100644
--- a/drivers/regulator/qcom_usb_vbus-regulator.c
+++ b/drivers/regulator/qcom_usb_vbus-regulator.c
@@ -20,10 +20,35 @@
#define OTG_CFG 0x53
#define OTG_EN_SRC_CFG BIT(1)
+#define PM4125_CMD_OTG 0x50
+#define PM4125_VBOOST_CFG 0x52
+#define PM4125_VBOOST_CFG_MASK GENMASK(1, 0)
+#define PM4125_OTG_CFG 0x56
+#define PM4125_OTG_EN_SRC_CFG BIT(0)
+
+struct qcom_usb_vbus_reg_data {
+ u16 cmd_otg;
+ u16 otg_cfg;
+ u8 otg_en_src_cfg;
+ u16 csel_reg;
+ u8 csel_mask;
+ const unsigned int *curr_table;
+ unsigned int n_current_limits;
+ u16 vsel_reg;
+ u8 vsel_mask;
+ const unsigned int *volt_table;
+ unsigned int n_voltages;
+ const struct regulator_ops *ops;
+};
+
static const unsigned int curr_table[] = {
500000, 1000000, 1500000, 2000000, 2500000, 3000000,
};
+static const unsigned int pm4125_vboost_table[] = {
+ 4250000, 4500000, 4750000, 5000000,
+};
+
static const struct regulator_ops qcom_usb_vbus_reg_ops = {
.enable = regulator_enable_regmap,
.disable = regulator_disable_regmap,
@@ -32,19 +57,43 @@ static const struct regulator_ops qcom_usb_vbus_reg_ops = {
.set_current_limit = regulator_set_current_limit_regmap,
};
-static struct regulator_desc qcom_usb_vbus_rdesc = {
- .name = "usb_vbus",
- .ops = &qcom_usb_vbus_reg_ops,
- .owner = THIS_MODULE,
- .type = REGULATOR_VOLTAGE,
+static const struct regulator_ops qcom_usb_vbus_pm4125_reg_ops = {
+ .enable = regulator_enable_regmap,
+ .disable = regulator_disable_regmap,
+ .is_enabled = regulator_is_enabled_regmap,
+ .get_voltage_sel = regulator_get_voltage_sel_regmap,
+ .set_voltage_sel = regulator_set_voltage_sel_regmap,
+ .list_voltage = regulator_list_voltage_table,
+};
+
+static const struct qcom_usb_vbus_reg_data pm8150b_data = {
+ .cmd_otg = CMD_OTG,
+ .otg_cfg = OTG_CFG,
+ .otg_en_src_cfg = OTG_EN_SRC_CFG,
+ .csel_reg = OTG_CURRENT_LIMIT_CFG,
+ .csel_mask = OTG_CURRENT_LIMIT_MASK,
.curr_table = curr_table,
.n_current_limits = ARRAY_SIZE(curr_table),
+ .ops = &qcom_usb_vbus_reg_ops,
+};
+
+static const struct qcom_usb_vbus_reg_data pm4125_data = {
+ .cmd_otg = PM4125_CMD_OTG,
+ .otg_cfg = PM4125_OTG_CFG,
+ .otg_en_src_cfg = PM4125_OTG_EN_SRC_CFG,
+ .vsel_reg = PM4125_VBOOST_CFG,
+ .vsel_mask = PM4125_VBOOST_CFG_MASK,
+ .volt_table = pm4125_vboost_table,
+ .n_voltages = ARRAY_SIZE(pm4125_vboost_table),
+ .ops = &qcom_usb_vbus_pm4125_reg_ops,
};
static int qcom_usb_vbus_regulator_probe(struct platform_device *pdev)
{
struct device *dev = &pdev->dev;
+ const struct qcom_usb_vbus_reg_data *data;
struct regulator_dev *rdev;
+ struct regulator_desc *rdesc;
struct regmap *regmap;
struct regulator_config config = { };
struct regulator_init_data *init_data;
@@ -57,27 +106,51 @@ static int qcom_usb_vbus_regulator_probe(struct platform_device *pdev)
return ret;
}
+ data = of_device_get_match_data(dev);
+ if (!data)
+ return -EINVAL;
+
regmap = dev_get_regmap(dev->parent, NULL);
if (!regmap) {
dev_err(dev, "Failed to get regmap\n");
return -ENOENT;
}
- init_data = of_get_regulator_init_data(dev, dev->of_node,
- &qcom_usb_vbus_rdesc);
+ rdesc = devm_kzalloc(dev, sizeof(*rdesc), GFP_KERNEL);
+ if (!rdesc)
+ return -ENOMEM;
+
+ rdesc->name = "usb_vbus";
+ rdesc->ops = data->ops;
+ rdesc->owner = THIS_MODULE;
+ rdesc->type = REGULATOR_VOLTAGE;
+ rdesc->enable_reg = base + data->cmd_otg;
+ rdesc->enable_mask = OTG_EN;
+
+ if (data->curr_table) {
+ rdesc->curr_table = data->curr_table;
+ rdesc->n_current_limits = data->n_current_limits;
+ rdesc->csel_reg = base + data->csel_reg;
+ rdesc->csel_mask = data->csel_mask;
+ }
+
+ if (data->volt_table) {
+ rdesc->volt_table = data->volt_table;
+ rdesc->n_voltages = data->n_voltages;
+ rdesc->vsel_reg = base + data->vsel_reg;
+ rdesc->vsel_mask = data->vsel_mask;
+ }
+
+ init_data = of_get_regulator_init_data(dev, dev->of_node, rdesc);
if (!init_data)
return -ENOMEM;
- qcom_usb_vbus_rdesc.enable_reg = base + CMD_OTG;
- qcom_usb_vbus_rdesc.enable_mask = OTG_EN;
- qcom_usb_vbus_rdesc.csel_reg = base + OTG_CURRENT_LIMIT_CFG;
- qcom_usb_vbus_rdesc.csel_mask = OTG_CURRENT_LIMIT_MASK;
config.dev = dev;
config.init_data = init_data;
config.of_node = dev->of_node;
config.regmap = regmap;
- rdev = devm_regulator_register(dev, &qcom_usb_vbus_rdesc, &config);
+ rdev = devm_regulator_register(dev, rdesc, &config);
if (IS_ERR(rdev)) {
ret = PTR_ERR(rdev);
dev_err(dev, "not able to register vbus reg %d\n", ret);
@@ -85,13 +158,14 @@ static int qcom_usb_vbus_regulator_probe(struct platform_device *pdev)
}
/* Disable HW logic for VBUS enable */
- regmap_update_bits(regmap, base + OTG_CFG, OTG_EN_SRC_CFG, 0);
+ regmap_update_bits(regmap, base + data->otg_cfg, data->otg_en_src_cfg, 0);
return 0;
}
static const struct of_device_id qcom_usb_vbus_regulator_match[] = {
- { .compatible = "qcom,pm8150b-vbus-reg" },
+ { .compatible = "qcom,pm8150b-vbus-reg", .data = &pm8150b_data },
+ { .compatible = "qcom,pm4125-vbus-reg", .data = &pm4125_data },
{ }
};
MODULE_DEVICE_TABLE(of, qcom_usb_vbus_regulator_match);
--
2.34.1
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg
2026-05-20 9:07 ` [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg Rakesh Kota
@ 2026-05-20 9:20 ` sashiko-bot
2026-05-20 10:18 ` Rakesh Kota
2026-05-20 9:44 ` Konrad Dybcio
2026-05-20 9:58 ` Dmitry Baryshkov
2 siblings, 1 reply; 11+ messages in thread
From: sashiko-bot @ 2026-05-20 9:20 UTC (permalink / raw)
To: Rakesh Kota; +Cc: robh, conor+dt, devicetree
Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
- [High] Removing the fallback compatible string for `qcom,pm4125-vbus-reg` breaks backwards compatibility and schema validation for existing device trees.
- [Low] Unit-address mismatch in the newly added pm4125 device tree example causes a dtc compiler warning/error.
--
commit d88778938ce0889e7c6904b04eca901125a815cb
Author: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg
This commit moves qcom,pm4125-vbus-reg from the fallback items list into
a standalone enum since it has a different register layout. It also updates
the required properties for this variant to use microvolt instead of
microamp, and adds a new example.
> diff --git a/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml b/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
> --- a/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
> +++ b/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
[ ... ]
> properties:
> compatible:
> oneOf:
> - enum:
> - qcom,pm8150b-vbus-reg
> + - qcom,pm4125-vbus-reg
> - items:
> - enum:
> - - qcom,pm4125-vbus-reg
> - qcom,pm6150-vbus-reg
> - qcom,pm7250b-vbus-reg
[Severity: High]
Does removing this fallback compatible string break backwards compatibility
for existing device trees?
Previously, the binding allowed the compatible string list to be
qcom,pm4125-vbus-reg, qcom,pm8150b-vbus-reg, which is currently used in
arch/arm64/boot/dts/qcom/pm4125.dtsi.
Additionally, the required properties for qcom,pm4125-vbus-reg are changed
from regulator-min/max-microamp to regulator-min/max-microvolt. Since
existing device trees like qrb2210-rb1.dts rely on the microamp properties,
will this cause make dtbs_check to fail for existing in-tree device trees?
[ ... ]
> + - |
> + pmic {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + usb-vbus-regulator@5000 {
> + compatible = "qcom,pm4125-vbus-reg";
> + reg = <0x1100>;
[Severity: Low]
Will this unit-address mismatch cause a compiler warning during validation?
The node name specifies an address of 5000, but the reg property specifies
0x1100. This usually triggers a unit_address_vs_reg warning from the dtc
compiler during make dt_binding_check.
Should the node name be updated to match the reg property address?
--
Sashiko AI review · https://sashiko.dev/#/patchset/20260520-add_pm4125-vbus-reg-v1-0-f6d15d7dbbe8@oss.qualcomm.com?part=1
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg
2026-05-20 9:07 ` [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg Rakesh Kota
2026-05-20 9:20 ` sashiko-bot
@ 2026-05-20 9:44 ` Konrad Dybcio
2026-05-20 10:21 ` Rakesh Kota
2026-05-20 9:58 ` Dmitry Baryshkov
2 siblings, 1 reply; 11+ messages in thread
From: Konrad Dybcio @ 2026-05-20 9:44 UTC (permalink / raw)
To: Rakesh Kota, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Wesley Cheng
Cc: linux-arm-msm, linux-kernel, devicetree, jishnu.prakash,
kamal.wadhwa
On 5/20/26 11:07 AM, Rakesh Kota wrote:
> The pm4125 PMIC uses a different USB VBUS register layout than pm8150b.
> It uses a 2-bit VBOOST voltage selector supporting output voltages of
> 4.25 V, 4.5 V, 4.75 V and 5.0 V, instead of a current-limit selector.
>
> Move qcom,pm4125-vbus-reg from the pm8150b fallback items list into the
> standalone enum since the driver handles it with its own match-data and
> register layout.
>
> Make regulator-min/max-microamp conditional so they are only required
> for current-limit variants (pm8150b, pm6150, pm7250b, pmi632). Add an
> if/then condition for qcom,pm4125-vbus-reg requiring regulator-min/
> max-microvolt instead, and update the pm4125 example accordingly.
>
> Signed-off-by: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
> ---
> .../regulator/qcom,usb-vbus-regulator.yaml | 50 +++++++++++++++++++---
> 1 file changed, 45 insertions(+), 5 deletions(-)
>
> diff --git a/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml b/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
> index fcefc722ee2a495837fedba026669de97350c566..7c74573848bcdafbf6260f69cfcd7a9b58bc9f2d 100644
> --- a/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
> +++ b/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
> @@ -14,17 +14,21 @@ description: |
> regulator will be enabled in situations where the device is required to
> provide power to the connected peripheral.
>
> -allOf:
> - - $ref: regulator.yaml#
> + The pm8150b variant uses an OTG current-limit selector, supporting limits
> + of 500 mA, 1000 mA, 1500 mA, 2000 mA, 2500 mA and 3000 mA.
> +
> + The pm4125 variant uses a different register layout with a 2-bit VBOOST
> + voltage selector supporting output voltages of 4.25 V, 4.5 V, 4.75 V
> + and 5.0 V.
>
> properties:
> compatible:
> oneOf:
> - enum:
> - qcom,pm8150b-vbus-reg
> + - qcom,pm4125-vbus-reg
> - items:
> - enum:
> - - qcom,pm4125-vbus-reg
> - qcom,pm6150-vbus-reg
> - qcom,pm7250b-vbus-reg
> - qcom,pmi632-vbus-reg
This change needs to be paired with an update to the existing DTS users,
or validation will fail
[...]
> + pmic {
> + #address-cells = <1>;
> + #size-cells = <0>;
> +
> + usb-vbus-regulator@5000 {
> + compatible = "qcom,pm4125-vbus-reg";
> + reg = <0x1100>;
This should fail make dt_binding_check, as the reg value doesn't match the
unit address (after the @ sign)
Konrad
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] regulator: qcom_usb_vbus: add support for qcom,pm4125-vbus-reg
2026-05-20 9:07 ` [PATCH 2/2] regulator: qcom_usb_vbus: add support for qcom,pm4125-vbus-reg Rakesh Kota
@ 2026-05-20 9:51 ` Konrad Dybcio
2026-05-20 11:21 ` Rakesh Kota
0 siblings, 1 reply; 11+ messages in thread
From: Konrad Dybcio @ 2026-05-20 9:51 UTC (permalink / raw)
To: Rakesh Kota, Liam Girdwood, Mark Brown, Rob Herring,
Krzysztof Kozlowski, Conor Dooley, Wesley Cheng
Cc: linux-arm-msm, linux-kernel, devicetree, jishnu.prakash,
kamal.wadhwa
On 5/20/26 11:07 AM, Rakesh Kota wrote:
> The PM4125 PMIC uses a different register layout for USB VBUS control
> compared to PM8150B. On PM4125, CMD_OTG is at offset 0x50, OTG_CFG is
> at 0x56, and offset 0x52 is a 2-bit VBOOST voltage selector rather than
> a current-limit selector.
>
> Introduce per-compatible regulator descriptor data to accommodate these
> differences. This keeps the existing PM8150B current-limit logic intact
> while adding a dedicated voltage-selector path for PM4125.
>
> Signed-off-by: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
> ---
> drivers/regulator/qcom_usb_vbus-regulator.c | 102 ++++++++++++++++++++++++----
> 1 file changed, 88 insertions(+), 14 deletions(-)
>
> diff --git a/drivers/regulator/qcom_usb_vbus-regulator.c b/drivers/regulator/qcom_usb_vbus-regulator.c
> index cd94ed67621fee9f6d7a0327054db0ebab6cc7ee..3d425452a0b35b35c4b454f84eb28e87cc8ba4f8 100644
> --- a/drivers/regulator/qcom_usb_vbus-regulator.c
> +++ b/drivers/regulator/qcom_usb_vbus-regulator.c
> @@ -20,10 +20,35 @@
> #define OTG_CFG 0x53
> #define OTG_EN_SRC_CFG BIT(1)
>
> +#define PM4125_CMD_OTG 0x50
This register is named differently
> +#define PM4125_VBOOST_CFG 0x52
> +#define PM4125_VBOOST_CFG_MASK GENMASK(1, 0)
> +#define PM4125_OTG_CFG 0x56
And so is this one
> +#define PM4125_OTG_EN_SRC_CFG BIT(0)
> +
> +struct qcom_usb_vbus_reg_data {
> + u16 cmd_otg;
> + u16 otg_cfg;
> + u8 otg_en_src_cfg;
> + u16 csel_reg;
> + u8 csel_mask;
> + const unsigned int *curr_table;
> + unsigned int n_current_limits;
> + u16 vsel_reg;
> + u8 vsel_mask;
> + const unsigned int *volt_table;
> + unsigned int n_voltages;
> + const struct regulator_ops *ops;
> +};
And because they're so different, keeping them in a single driver starts to
look a little odd
> +
> static const unsigned int curr_table[] = {
> 500000, 1000000, 1500000, 2000000, 2500000, 3000000,
> };
And I think there's current-limiting on this PMIC too, except in a differnt
peripheral (@1300)
Konrad
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg
2026-05-20 9:07 ` [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg Rakesh Kota
2026-05-20 9:20 ` sashiko-bot
2026-05-20 9:44 ` Konrad Dybcio
@ 2026-05-20 9:58 ` Dmitry Baryshkov
2026-05-20 11:36 ` Rakesh Kota
2 siblings, 1 reply; 11+ messages in thread
From: Dmitry Baryshkov @ 2026-05-20 9:58 UTC (permalink / raw)
To: Rakesh Kota
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Wesley Cheng, linux-arm-msm, linux-kernel,
devicetree, jishnu.prakash, kamal.wadhwa
On Wed, May 20, 2026 at 02:37:11PM +0530, Rakesh Kota wrote:
> The pm4125 PMIC uses a different USB VBUS register layout than pm8150b.
> It uses a 2-bit VBOOST voltage selector supporting output voltages of
> 4.25 V, 4.5 V, 4.75 V and 5.0 V, instead of a current-limit selector.
Is it only PM4125? What about other PMICs which have the VBUS regulator
(e.g. PMI632)?
>
> Move qcom,pm4125-vbus-reg from the pm8150b fallback items list into the
> standalone enum since the driver handles it with its own match-data and
> register layout.
>
> Make regulator-min/max-microamp conditional so they are only required
> for current-limit variants (pm8150b, pm6150, pm7250b, pmi632). Add an
> if/then condition for qcom,pm4125-vbus-reg requiring regulator-min/
> max-microvolt instead, and update the pm4125 example accordingly.
>
> Signed-off-by: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
> ---
> .../regulator/qcom,usb-vbus-regulator.yaml | 50 +++++++++++++++++++---
> 1 file changed, 45 insertions(+), 5 deletions(-)
>
--
With best wishes
Dmitry
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg
2026-05-20 9:20 ` sashiko-bot
@ 2026-05-20 10:18 ` Rakesh Kota
0 siblings, 0 replies; 11+ messages in thread
From: Rakesh Kota @ 2026-05-20 10:18 UTC (permalink / raw)
To: sashiko-reviews; +Cc: robh, conor+dt, devicetree, jishnu.prakash, kamal.wadhwa
On Wed, May 20, 2026 at 09:20:17AM +0000, sashiko-bot@kernel.org wrote:
> Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider:
> - [High] Removing the fallback compatible string for `qcom,pm4125-vbus-reg` breaks backwards compatibility and schema validation for existing device trees.
> - [Low] Unit-address mismatch in the newly added pm4125 device tree example causes a dtc compiler warning/error.
> --
>
> commit d88778938ce0889e7c6904b04eca901125a815cb
> Author: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
>
> dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg
>
> This commit moves qcom,pm4125-vbus-reg from the fallback items list into
> a standalone enum since it has a different register layout. It also updates
> the required properties for this variant to use microvolt instead of
> microamp, and adds a new example.
>
> > diff --git a/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml b/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
> > --- a/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
> > +++ b/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
>
> [ ... ]
>
> > properties:
> > compatible:
> > oneOf:
> > - enum:
> > - qcom,pm8150b-vbus-reg
> > + - qcom,pm4125-vbus-reg
> > - items:
> > - enum:
> > - - qcom,pm4125-vbus-reg
> > - qcom,pm6150-vbus-reg
> > - qcom,pm7250b-vbus-reg
>
> [Severity: High]
> Does removing this fallback compatible string break backwards compatibility
> for existing device trees?
>
> Previously, the binding allowed the compatible string list to be
> qcom,pm4125-vbus-reg, qcom,pm8150b-vbus-reg, which is currently used in
> arch/arm64/boot/dts/qcom/pm4125.dtsi.
>
> Additionally, the required properties for qcom,pm4125-vbus-reg are changed
> from regulator-min/max-microamp to regulator-min/max-microvolt. Since
> existing device trees like qrb2210-rb1.dts rely on the microamp properties,
> will this cause make dtbs_check to fail for existing in-tree device trees?
>
You are correct, I will include the DT changes in the same patch
series to keep things atomic and ensure dtbs_check compliance.
> [ ... ]
>
> > + - |
> > + pmic {
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > +
> > + usb-vbus-regulator@5000 {
> > + compatible = "qcom,pm4125-vbus-reg";
> > + reg = <0x1100>;
>
> [Severity: Low]
> Will this unit-address mismatch cause a compiler warning during validation?
>
> The node name specifies an address of 5000, but the reg property specifies
> 0x1100. This usually triggers a unit_address_vs_reg warning from the dtc
> compiler during make dt_binding_check.
>
> Should the node name be updated to match the reg property address?
>
Sure, will fix the node name to usb-vbus-regulator@1100 in the next
version.
regrads
Rakesh
> --
> Sashiko AI review · https://sashiko.dev/#/patchset/20260520-add_pm4125-vbus-reg-v1-0-f6d15d7dbbe8@oss.qualcomm.com?part=1
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg
2026-05-20 9:44 ` Konrad Dybcio
@ 2026-05-20 10:21 ` Rakesh Kota
0 siblings, 0 replies; 11+ messages in thread
From: Rakesh Kota @ 2026-05-20 10:21 UTC (permalink / raw)
To: Konrad Dybcio
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Wesley Cheng, linux-arm-msm, linux-kernel,
devicetree, jishnu.prakash, kamal.wadhwa
On Wed, May 20, 2026 at 11:44:42AM +0200, Konrad Dybcio wrote:
> On 5/20/26 11:07 AM, Rakesh Kota wrote:
> > The pm4125 PMIC uses a different USB VBUS register layout than pm8150b.
> > It uses a 2-bit VBOOST voltage selector supporting output voltages of
> > 4.25 V, 4.5 V, 4.75 V and 5.0 V, instead of a current-limit selector.
> >
> > Move qcom,pm4125-vbus-reg from the pm8150b fallback items list into the
> > standalone enum since the driver handles it with its own match-data and
> > register layout.
> >
> > Make regulator-min/max-microamp conditional so they are only required
> > for current-limit variants (pm8150b, pm6150, pm7250b, pmi632). Add an
> > if/then condition for qcom,pm4125-vbus-reg requiring regulator-min/
> > max-microvolt instead, and update the pm4125 example accordingly.
> >
> > Signed-off-by: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
> > ---
> > .../regulator/qcom,usb-vbus-regulator.yaml | 50 +++++++++++++++++++---
> > 1 file changed, 45 insertions(+), 5 deletions(-)
> >
> > diff --git a/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml b/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
> > index fcefc722ee2a495837fedba026669de97350c566..7c74573848bcdafbf6260f69cfcd7a9b58bc9f2d 100644
> > --- a/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
> > +++ b/Documentation/devicetree/bindings/regulator/qcom,usb-vbus-regulator.yaml
> > @@ -14,17 +14,21 @@ description: |
> > regulator will be enabled in situations where the device is required to
> > provide power to the connected peripheral.
> >
> > -allOf:
> > - - $ref: regulator.yaml#
> > + The pm8150b variant uses an OTG current-limit selector, supporting limits
> > + of 500 mA, 1000 mA, 1500 mA, 2000 mA, 2500 mA and 3000 mA.
> > +
> > + The pm4125 variant uses a different register layout with a 2-bit VBOOST
> > + voltage selector supporting output voltages of 4.25 V, 4.5 V, 4.75 V
> > + and 5.0 V.
> >
> > properties:
> > compatible:
> > oneOf:
> > - enum:
> > - qcom,pm8150b-vbus-reg
> > + - qcom,pm4125-vbus-reg
> > - items:
> > - enum:
> > - - qcom,pm4125-vbus-reg
> > - qcom,pm6150-vbus-reg
> > - qcom,pm7250b-vbus-reg
> > - qcom,pmi632-vbus-reg
>
> This change needs to be paired with an update to the existing DTS users,
> or validation will fail
>
sure, I will include the DT changes in the same patch
series to keep things atomic and ensure dtbs_check compliance.
> [...]
>
> > + pmic {
> > + #address-cells = <1>;
> > + #size-cells = <0>;
> > +
> > + usb-vbus-regulator@5000 {
> > + compatible = "qcom,pm4125-vbus-reg";
> > + reg = <0x1100>;
>
> This should fail make dt_binding_check, as the reg value doesn't match the
> unit address (after the @ sign)
>
Ok, I will fix the node name to usb-vbus-regulator@1100 in the next version.
regards
Rakesh
> Konrad
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/2] regulator: qcom_usb_vbus: add support for qcom,pm4125-vbus-reg
2026-05-20 9:51 ` Konrad Dybcio
@ 2026-05-20 11:21 ` Rakesh Kota
0 siblings, 0 replies; 11+ messages in thread
From: Rakesh Kota @ 2026-05-20 11:21 UTC (permalink / raw)
To: Konrad Dybcio
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Wesley Cheng, linux-arm-msm, linux-kernel,
devicetree, jishnu.prakash, kamal.wadhwa
On Wed, May 20, 2026 at 11:51:49AM +0200, Konrad Dybcio wrote:
> On 5/20/26 11:07 AM, Rakesh Kota wrote:
> > The PM4125 PMIC uses a different register layout for USB VBUS control
> > compared to PM8150B. On PM4125, CMD_OTG is at offset 0x50, OTG_CFG is
> > at 0x56, and offset 0x52 is a 2-bit VBOOST voltage selector rather than
> > a current-limit selector.
> >
> > Introduce per-compatible regulator descriptor data to accommodate these
> > differences. This keeps the existing PM8150B current-limit logic intact
> > while adding a dedicated voltage-selector path for PM4125.
> >
> > Signed-off-by: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
> > ---
> > drivers/regulator/qcom_usb_vbus-regulator.c | 102 ++++++++++++++++++++++++----
> > 1 file changed, 88 insertions(+), 14 deletions(-)
> >
> > diff --git a/drivers/regulator/qcom_usb_vbus-regulator.c b/drivers/regulator/qcom_usb_vbus-regulator.c
> > index cd94ed67621fee9f6d7a0327054db0ebab6cc7ee..3d425452a0b35b35c4b454f84eb28e87cc8ba4f8 100644
> > --- a/drivers/regulator/qcom_usb_vbus-regulator.c
> > +++ b/drivers/regulator/qcom_usb_vbus-regulator.c
> > @@ -20,10 +20,35 @@
> > #define OTG_CFG 0x53
> > #define OTG_EN_SRC_CFG BIT(1)
> >
> > +#define PM4125_CMD_OTG 0x50
>
> This register is named differently
Ok, i will update name to PM4125_VBOOST_EN in next version.
>
> > +#define PM4125_VBOOST_CFG 0x52
> > +#define PM4125_VBOOST_CFG_MASK GENMASK(1, 0)
> > +#define PM4125_OTG_CFG 0x56
>
> And so is this one
update name to PM4125_VBOOST_CFG in next version
>
>
> > +#define PM4125_OTG_EN_SRC_CFG BIT(0)
> > +
> > +struct qcom_usb_vbus_reg_data {
> > + u16 cmd_otg;
> > + u16 otg_cfg;
> > + u8 otg_en_src_cfg;
> > + u16 csel_reg;
> > + u8 csel_mask;
> > + const unsigned int *curr_table;
> > + unsigned int n_current_limits;
> > + u16 vsel_reg;
> > + u8 vsel_mask;
> > + const unsigned int *volt_table;
> > + unsigned int n_voltages;
> > + const struct regulator_ops *ops;
> > +};
>
> And because they're so different, keeping them in a single driver starts to
> look a little odd
You are right, they differ in control mechanism — one uses current
control and the other uses voltage control for VBUS in host mode.
Since the functional purpose is the same (VBUS regulation in host
mode), I felt a single driver made sense to avoid code duplication.
But open to suggestions — should I split this into separate drivers
or is there a better way to handle this cleanly?
>
> > +
> > static const unsigned int curr_table[] = {
> > 500000, 1000000, 1500000, 2000000, 2500000, 3000000,
> > };
>
> And I think there's current-limiting on this PMIC too, except in a differnt
> peripheral (@1300)
>
The @1300 peripheral is for ICL (Input Current Limit) in device mode
charging — not for host mode VBUS regulation.
Could you share the register you're referring to for further clarity?
regards
Rakesh
> Konrad
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg
2026-05-20 9:58 ` Dmitry Baryshkov
@ 2026-05-20 11:36 ` Rakesh Kota
0 siblings, 0 replies; 11+ messages in thread
From: Rakesh Kota @ 2026-05-20 11:36 UTC (permalink / raw)
To: Dmitry Baryshkov
Cc: Liam Girdwood, Mark Brown, Rob Herring, Krzysztof Kozlowski,
Conor Dooley, Wesley Cheng, linux-arm-msm, linux-kernel,
devicetree, jishnu.prakash, kamal.wadhwa
On Wed, May 20, 2026 at 12:58:35PM +0300, Dmitry Baryshkov wrote:
> On Wed, May 20, 2026 at 02:37:11PM +0530, Rakesh Kota wrote:
> > The pm4125 PMIC uses a different USB VBUS register layout than pm8150b.
> > It uses a 2-bit VBOOST voltage selector supporting output voltages of
> > 4.25 V, 4.5 V, 4.75 V and 5.0 V, instead of a current-limit selector.
>
> Is it only PM4125? What about other PMICs which have the VBUS regulator
> (e.g. PMI632)?
>
Yes, this change is specific to PM4125. I have verified that PM6150,
PM7250B, and PMI632 all use the same register offsets (0x40, 0x52
and 0x53) as PM8150B, so no changes are required for those PMICs.
regards
Rakesh
> >
> > Move qcom,pm4125-vbus-reg from the pm8150b fallback items list into the
> > standalone enum since the driver handles it with its own match-data and
> > register layout.
> >
> > Make regulator-min/max-microamp conditional so they are only required
> > for current-limit variants (pm8150b, pm6150, pm7250b, pmi632). Add an
> > if/then condition for qcom,pm4125-vbus-reg requiring regulator-min/
> > max-microvolt instead, and update the pm4125 example accordingly.
> >
> > Signed-off-by: Rakesh Kota <rakesh.kota@oss.qualcomm.com>
> > ---
> > .../regulator/qcom,usb-vbus-regulator.yaml | 50 +++++++++++++++++++---
> > 1 file changed, 45 insertions(+), 5 deletions(-)
> >
>
> --
> With best wishes
> Dmitry
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2026-05-20 11:36 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-05-20 9:07 [PATCH 0/2] regulator: qcom_usb_vbus: add pm4125 VBUS regulator support Rakesh Kota
2026-05-20 9:07 ` [PATCH 1/2] dt-bindings: regulator: qcom,usb-vbus-regulator: add qcom,pm4125-vbus-reg Rakesh Kota
2026-05-20 9:20 ` sashiko-bot
2026-05-20 10:18 ` Rakesh Kota
2026-05-20 9:44 ` Konrad Dybcio
2026-05-20 10:21 ` Rakesh Kota
2026-05-20 9:58 ` Dmitry Baryshkov
2026-05-20 11:36 ` Rakesh Kota
2026-05-20 9:07 ` [PATCH 2/2] regulator: qcom_usb_vbus: add support for qcom,pm4125-vbus-reg Rakesh Kota
2026-05-20 9:51 ` Konrad Dybcio
2026-05-20 11:21 ` Rakesh Kota
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox