Devicetree
 help / color / mirror / Atom feed
* [PATCH 0/7] Add support for the X-Powers AXP2101 PMIC
@ 2026-10-23 10:03 Olivier Louvignes
  2026-10-23 10:03 ` [PATCH 1/7] dt-bindings: mfd: x-powers,axp152: Add the AXP2101 Olivier Louvignes
                   ` (2 more replies)
  0 siblings, 3 replies; 9+ messages in thread
From: Olivier Louvignes @ 2026-10-23 10:03 UTC (permalink / raw)
  To: Lee Jones, Chen-Yu Tsai
  Cc: Olivier Louvignes, Conor Dooley, Krzysztof Kozlowski,
	Liam Girdwood, Mark Brown, Rob Herring, Sebastian Reichel,
	devicetree, linux-kernel, linux-pm, mfd

This adds the AXP2101 to the axp20x drivers: the MFD core with its
registers and interrupts, the regulators, the USB power supply and the
battery charger. The PMIC is on the HiBy R1, a music player built on an
Ingenic X1600. It follows how the AXP717 was added: the existing
drivers are extended, and the two power supplies get their own
compatibles because their registers differ.

Not handled yet: the PMIC's own fuel gauge (the R1 uses a CW2015, and the
AXP2101's reads 0% without a battery model), the power key, the ADC
channels, the TS pin, and writing the input current limit.

Sources: there is no datasheet behind this. The register map comes from
the GPL-2.0 AXP2101 driver of the hiby-custom-kernel project
(github.com/Jepl4r/hiby-custom-kernel), an open replacement for HiBy's
closed module, and was checked against the chip on a running R1.

Tested on the R1, on v7.3 with out-of-tree board patches:
- The rails the stock firmware turns on (DCDC1-4 at 3.3, 1.1, 1.8 and
  1.2 V, ALDO2 3.3 V, ALDO3 1.1 V, ALDO4 3.3 V, BLDO1 and BLDO2 2.8 V)
  read back at their stock voltages, and the regulator registers
  0x80-0x9a stay byte for byte as the stock firmware left them. No
  voltage was changed from Linux. BLDO1 and BLDO2 (2.8 V, the LCD
  supplies) are switched on and off from Linux by the panel driver, which
  claims them: bits 4 and 5 of register 0x90 clear and set again with
  the screen blanking and unblanking, about 20 cycles over 8 boots, with
  the selectors (0x96 and 0x97) staying at 0x17. That does not change a
  voltage, since the registers already held 2.8 V. DCDC5, ALDO1, DLDO1-2
  and CPUSLDO are off on the R1 and only come from the register map.
- "poweroff -f" turns the R1 off, through COMM_CFG.
- Unplugging and replugging USB gives one VBUS_REMOVAL and one
  VBUS_PLUGIN interrupt, and the USB supply goes online 1, 0, 1.
- The charger registers read back as the stock firmware's values after
  boot, and the battery status is Full on USB, Discharging unplugged and
  Charging after a replug.

Every patch builds on 734bef548a96 (v7.3-7363) with W=1, passes
checkpatch --strict, and the three bindings pass dt_binding_check.

Open questions: whether extending the axp20x drivers is what you want
here (the alternative is a driver of its own), and whether programming
the charger from the monitored battery at probe, read-only afterwards,
is acceptable for the battery supply.

Olivier Louvignes (7):
  dt-bindings: mfd: x-powers,axp152: Add the AXP2101
  mfd: axp20x: Add support for the AXP2101
  regulator: axp20x: Add support for the AXP2101
  dt-bindings: power: supply: axp20x-usb-power: Add the AXP2101
  power: supply: axp20x_usb_power: Add support for the AXP2101
  dt-bindings: power: supply: axp20x-battery: Add the AXP2101
  power: supply: axp20x_battery: Add support for the AXP2101

 .../bindings/mfd/x-powers,axp152.yaml         |   3 +
 .../x-powers,axp20x-battery-power-supply.yaml |   1 +
 .../x-powers,axp20x-usb-power-supply.yaml     |   1 +
 drivers/mfd/axp20x-i2c.c                      |   2 +
 drivers/mfd/axp20x.c                          | 107 ++++++++-
 drivers/power/supply/axp20x_battery.c         | 221 ++++++++++++++++++
 drivers/power/supply/axp20x_usb_power.c       |  86 +++++++
 drivers/regulator/axp20x-regulator.c          |  88 +++++++
 include/linux/mfd/axp20x.h                    | 114 +++++++++
 9 files changed, 621 insertions(+), 2 deletions(-)


base-commit: 734bef548a96e8774d6eef5dfa2026c6edc4e80b
-- 
2.39.5


^ permalink raw reply	[flat|nested] 9+ messages in thread

* [PATCH 1/7] dt-bindings: mfd: x-powers,axp152: Add the AXP2101
  2026-10-23 10:03 [PATCH 0/7] Add support for the X-Powers AXP2101 PMIC Olivier Louvignes
@ 2026-10-23 10:03 ` Olivier Louvignes
  2026-10-26  9:30   ` Krzysztof Kozlowski
  2026-10-23 10:03 ` [PATCH 4/7] dt-bindings: power: supply: axp20x-usb-power: " Olivier Louvignes
  2026-10-23 10:04 ` [PATCH 6/7] dt-bindings: power: supply: axp20x-battery: " Olivier Louvignes
  2 siblings, 1 reply; 9+ messages in thread
From: Olivier Louvignes @ 2026-10-23 10:03 UTC (permalink / raw)
  To: Lee Jones, Chen-Yu Tsai
  Cc: Olivier Louvignes, Rob Herring, Krzysztof Kozlowski, Conor Dooley,
	mfd, devicetree, linux-kernel

The AXP2101's interrupt line is optional, as for the AXP313A and the
AXP15060: the driver then registers only the regulators. It has no DCDC
frequency setting.

Signed-off-by: Olivier Louvignes <olivier@mgcrea.io>
---
 Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml | 3 +++
 1 file changed, 3 insertions(+)

diff --git a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
index 45f015d63df1..f5e2c8232581 100644
--- a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
+++ b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
@@ -68,6 +68,7 @@ allOf:
           compatible:
             contains:
               enum:
+                - x-powers,axp2101
                 - x-powers,axp15060
                 - x-powers,axp305
                 - x-powers,axp313a
@@ -84,6 +85,7 @@ allOf:
             enum:
               - x-powers,axp313a
               - x-powers,axp323
+              - x-powers,axp2101
               - x-powers,axp15060
               - x-powers,axp717
 
@@ -108,6 +110,7 @@ properties:
           - x-powers,axp806
           - x-powers,axp809
           - x-powers,axp813
+          - x-powers,axp2101
           - x-powers,axp15060
       - items:
           - const: x-powers,axp228
-- 
2.39.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 4/7] dt-bindings: power: supply: axp20x-usb-power: Add the AXP2101
  2026-10-23 10:03 [PATCH 0/7] Add support for the X-Powers AXP2101 PMIC Olivier Louvignes
  2026-10-23 10:03 ` [PATCH 1/7] dt-bindings: mfd: x-powers,axp152: Add the AXP2101 Olivier Louvignes
@ 2026-10-23 10:03 ` Olivier Louvignes
  2026-10-23 10:11   ` sashiko-bot
  2026-10-26  9:32   ` Krzysztof Kozlowski
  2026-10-23 10:04 ` [PATCH 6/7] dt-bindings: power: supply: axp20x-battery: " Olivier Louvignes
  2 siblings, 2 replies; 9+ messages in thread
From: Olivier Louvignes @ 2026-10-23 10:03 UTC (permalink / raw)
  To: Lee Jones, Chen-Yu Tsai
  Cc: Olivier Louvignes, Sebastian Reichel, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, linux-pm, devicetree,
	linux-kernel

The AXP2101's USB power supply reports whether VBUS is present and the
input current limit, like the AXP717's; its registers differ, so it gets
its own compatible.

Signed-off-by: Olivier Louvignes <olivier@mgcrea.io>
---
 .../bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml  | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml b/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml
index 2ec036405ae4..1c582aa5e1d0 100644
--- a/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml
+++ b/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml
@@ -25,6 +25,7 @@ properties:
           - x-powers,axp223-usb-power-supply
           - x-powers,axp717-usb-power-supply
           - x-powers,axp813-usb-power-supply
+          - x-powers,axp2101-usb-power-supply
       - items:
           - const: x-powers,axp803-usb-power-supply
           - const: x-powers,axp813-usb-power-supply
-- 
2.39.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [PATCH 6/7] dt-bindings: power: supply: axp20x-battery: Add the AXP2101
  2026-10-23 10:03 [PATCH 0/7] Add support for the X-Powers AXP2101 PMIC Olivier Louvignes
  2026-10-23 10:03 ` [PATCH 1/7] dt-bindings: mfd: x-powers,axp152: Add the AXP2101 Olivier Louvignes
  2026-10-23 10:03 ` [PATCH 4/7] dt-bindings: power: supply: axp20x-usb-power: " Olivier Louvignes
@ 2026-10-23 10:04 ` Olivier Louvignes
  2026-10-26  9:33   ` Krzysztof Kozlowski
  2 siblings, 1 reply; 9+ messages in thread
From: Olivier Louvignes @ 2026-10-23 10:04 UTC (permalink / raw)
  To: Lee Jones, Chen-Yu Tsai
  Cc: Olivier Louvignes, Sebastian Reichel, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, linux-pm, devicetree,
	linux-kernel

The AXP2101's charger is programmed from the monitored battery and its
registers differ from the other models', so it gets its own compatible.

Signed-off-by: Olivier Louvignes <olivier@mgcrea.io>
---
 .../power/supply/x-powers,axp20x-battery-power-supply.yaml       | 1 +
 1 file changed, 1 insertion(+)

diff --git a/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-battery-power-supply.yaml b/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-battery-power-supply.yaml
index a90d558e7f86..6a0a0c3f052b 100644
--- a/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-battery-power-supply.yaml
+++ b/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-battery-power-supply.yaml
@@ -21,6 +21,7 @@ properties:
       - const: x-powers,axp209-battery-power-supply
       - const: x-powers,axp221-battery-power-supply
       - const: x-powers,axp717-battery-power-supply
+      - const: x-powers,axp2101-battery-power-supply
       - items:
           - const: x-powers,axp803-battery-power-supply
           - const: x-powers,axp813-battery-power-supply
-- 
2.39.5


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/7] dt-bindings: power: supply: axp20x-usb-power: Add the AXP2101
  2026-10-23 10:03 ` [PATCH 4/7] dt-bindings: power: supply: axp20x-usb-power: " Olivier Louvignes
@ 2026-10-23 10:11   ` sashiko-bot
  2026-10-26  9:32   ` Krzysztof Kozlowski
  1 sibling, 0 replies; 9+ messages in thread
From: sashiko-bot @ 2026-10-23 10:11 UTC (permalink / raw)
  To: Olivier Louvignes; +Cc: devicetree, robh, conor+dt

Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider:
- [Medium] dt-bindings: power: supply: missing allOf constraint for axp2101
--

commit 2c463350d4ace5833f7eb6572cc583175ea48340
Author: Olivier Louvignes <olivier@mgcrea.io>

dt-bindings: power: supply: axp20x-usb-power: Add the AXP2101

This commit adds the x-powers,axp2101-usb-power-supply compatible string to
the AXP20x USB power supply binding schema for the AXP2101 PMIC.

> diff --git a/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml b/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml
> index 2ec036405ae47..1c582aa5e1d0b 100644
> --- a/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml
> +++ b/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml
> @@ -25,6 +25,7 @@ properties:
>            - x-powers,axp223-usb-power-supply
>            - x-powers,axp717-usb-power-supply
>            - x-powers,axp813-usb-power-supply
> +          - x-powers,axp2101-usb-power-supply

[Severity: Medium]
Should x-powers,axp2101-usb-power-supply also have a corresponding if-then
block under allOf to constrain input-current-limit-microamp?

In Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml,
the top-level input-current-limit-microamp property only defines broad generic
bounds (minimum: 100000, maximum: 4000000), while allOf restricts the property
for each existing compatible variant:

  allOf:
    - $ref: power-supply.yaml#
    ...
    - if:
        properties:
          compatible:
            contains:
              enum:
                - x-powers,axp717-usb-power-supply
      then:
        properties:
          input-current-limit-microamp:
            description: Maximum input current in increments of 50000 uA.
            minimum: 100000
            maximum: 3250000

Without a conditional block in allOf for x-powers,axp2101-usb-power-supply,
device tree nodes using this compatible string will pass schema validation
with any input-current-limit-microamp value between 100000 and 4000000 uA,
even though the AXP2101 hardware only supports discrete limits of 100000,
500000, 900000, 1000000, 1500000, and 2000000 uA.

-- 
Sashiko AI review · https://sashiko.dev/#/patchset/20261023100401.67592-1-olivier@mgcrea.io?part=4

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/7] dt-bindings: mfd: x-powers,axp152: Add the AXP2101
  2026-10-23 10:03 ` [PATCH 1/7] dt-bindings: mfd: x-powers,axp152: Add the AXP2101 Olivier Louvignes
@ 2026-10-26  9:30   ` Krzysztof Kozlowski
  2026-10-26  9:31     ` Krzysztof Kozlowski
  0 siblings, 1 reply; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-26  9:30 UTC (permalink / raw)
  To: Olivier Louvignes
  Cc: Lee Jones, Chen-Yu Tsai, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, mfd, devicetree, linux-kernel

On Fri, Oct 23, 2026 at 12:03:55PM +0200, Olivier Louvignes wrote:
> The AXP2101's interrupt line is optional, as for the AXP313A and the
> AXP15060: the driver then registers only the regulators. It has no DCDC
> frequency setting.
> 
> Signed-off-by: Olivier Louvignes <olivier@mgcrea.io>
> ---
>  Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml | 3 +++
>  1 file changed, 3 insertions(+)
> 
> diff --git a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
> index 45f015d63df1..f5e2c8232581 100644
> --- a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
> +++ b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
> @@ -68,6 +68,7 @@ allOf:
>            compatible:
>              contains:
>                enum:
> +                - x-powers,axp2101

Why breaking the order? Keep natural sorted.

>                  - x-powers,axp15060
>                  - x-powers,axp305
>                  - x-powers,axp313a
> @@ -84,6 +85,7 @@ allOf:
>              enum:
>                - x-powers,axp313a
>                - x-powers,axp323
> +              - x-powers,axp2101

Sorting is broken in original code but you placed it completely odd.
Neither keeping sorting of 3xx variants nor, between 15060 and 717.
What's the logic?

>                - x-powers,axp15060
>                - x-powers,axp717
>  
> @@ -108,6 +110,7 @@ properties:
>            - x-powers,axp806
>            - x-powers,axp809
>            - x-powers,axp813
> +          - x-powers,axp2101

Placement of these entries makes no sense.

>            - x-powers,axp15060
>        - items:
>            - const: x-powers,axp228
> -- 
> 2.39.5
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 1/7] dt-bindings: mfd: x-powers,axp152: Add the AXP2101
  2026-10-26  9:30   ` Krzysztof Kozlowski
@ 2026-10-26  9:31     ` Krzysztof Kozlowski
  0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-26  9:31 UTC (permalink / raw)
  To: Olivier Louvignes
  Cc: Lee Jones, Chen-Yu Tsai, Rob Herring, Krzysztof Kozlowski,
	Conor Dooley, mfd, devicetree, linux-kernel

On 26/10/2026 10:30, Krzysztof Kozlowski wrote:
> On Fri, Oct 23, 2026 at 12:03:55PM +0200, Olivier Louvignes wrote:
>> The AXP2101's interrupt line is optional, as for the AXP313A and the
>> AXP15060: the driver then registers only the regulators. It has no DCDC
>> frequency setting.
>>
>> Signed-off-by: Olivier Louvignes <olivier@mgcrea.io>
>> ---
>>  Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml | 3 +++
>>  1 file changed, 3 insertions(+)
>>
>> diff --git a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
>> index 45f015d63df1..f5e2c8232581 100644
>> --- a/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
>> +++ b/Documentation/devicetree/bindings/mfd/x-powers,axp152.yaml
>> @@ -68,6 +68,7 @@ allOf:
>>            compatible:
>>              contains:
>>                enum:
>> +                - x-powers,axp2101
> 
> Why breaking the order? Keep natural sorted.
> 
>>                  - x-powers,axp15060
>>                  - x-powers,axp305
>>                  - x-powers,axp313a
>> @@ -84,6 +85,7 @@ allOf:
>>              enum:
>>                - x-powers,axp313a
>>                - x-powers,axp323
>> +              - x-powers,axp2101
> 
> Sorting is broken in original code but you placed it completely odd.
> Neither keeping sorting of 3xx variants nor, between 15060 and 717.
> What's the logic?
> 
>>                - x-powers,axp15060
>>                - x-powers,axp717
>>  
>> @@ -108,6 +110,7 @@ properties:
>>            - x-powers,axp806
>>            - x-powers,axp809
>>            - x-powers,axp813
>> +          - x-powers,axp2101
> 
> Placement of these entries makes no sense.

Ah, this one is actually sorted by natural sort.

Best regards,
Krzysztof

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 4/7] dt-bindings: power: supply: axp20x-usb-power: Add the AXP2101
  2026-10-23 10:03 ` [PATCH 4/7] dt-bindings: power: supply: axp20x-usb-power: " Olivier Louvignes
  2026-10-23 10:11   ` sashiko-bot
@ 2026-10-26  9:32   ` Krzysztof Kozlowski
  1 sibling, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-26  9:32 UTC (permalink / raw)
  To: Olivier Louvignes
  Cc: Lee Jones, Chen-Yu Tsai, Sebastian Reichel, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, linux-pm, devicetree,
	linux-kernel

On Fri, Oct 23, 2026 at 12:03:58PM +0200, Olivier Louvignes wrote:
> The AXP2101's USB power supply reports whether VBUS is present and the
> input current limit, like the AXP717's; its registers differ, so it gets
> its own compatible.
> 
> Signed-off-by: Olivier Louvignes <olivier@mgcrea.io>
> ---
>  .../bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml  | 1 +
>  1 file changed, 1 insertion(+)
> 
> diff --git a/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml b/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml
> index 2ec036405ae4..1c582aa5e1d0 100644
> --- a/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml
> +++ b/Documentation/devicetree/bindings/power/supply/x-powers,axp20x-usb-power-supply.yaml
> @@ -25,6 +25,7 @@ properties:
>            - x-powers,axp223-usb-power-supply
>            - x-powers,axp717-usb-power-supply
>            - x-powers,axp813-usb-power-supply
> +          - x-powers,axp2101-usb-power-supply

Missing update for constraint of input limit.

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [PATCH 6/7] dt-bindings: power: supply: axp20x-battery: Add the AXP2101
  2026-10-23 10:04 ` [PATCH 6/7] dt-bindings: power: supply: axp20x-battery: " Olivier Louvignes
@ 2026-10-26  9:33   ` Krzysztof Kozlowski
  0 siblings, 0 replies; 9+ messages in thread
From: Krzysztof Kozlowski @ 2026-10-26  9:33 UTC (permalink / raw)
  To: Olivier Louvignes
  Cc: Lee Jones, Chen-Yu Tsai, Sebastian Reichel, Rob Herring,
	Krzysztof Kozlowski, Conor Dooley, linux-pm, devicetree,
	linux-kernel

On Fri, Oct 23, 2026 at 12:04:00PM +0200, Olivier Louvignes wrote:
> The AXP2101's charger is programmed from the monitored battery and its
> registers differ from the other models', so it gets its own compatible.
> 
> Signed-off-by: Olivier Louvignes <olivier@mgcrea.io>
> ---
>  .../power/supply/x-powers,axp20x-battery-power-supply.yaml       | 1 +
>  1 file changed, 1 insertion(+)

Acked-by: Krzysztof Kozlowski <krzysztof.kozlowski@oss.qualcomm.com>

Best regards,
Krzysztof


^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2026-10-26  9:33 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-10-23 10:03 [PATCH 0/7] Add support for the X-Powers AXP2101 PMIC Olivier Louvignes
2026-10-23 10:03 ` [PATCH 1/7] dt-bindings: mfd: x-powers,axp152: Add the AXP2101 Olivier Louvignes
2026-10-26  9:30   ` Krzysztof Kozlowski
2026-10-26  9:31     ` Krzysztof Kozlowski
2026-10-23 10:03 ` [PATCH 4/7] dt-bindings: power: supply: axp20x-usb-power: " Olivier Louvignes
2026-10-23 10:11   ` sashiko-bot
2026-10-26  9:32   ` Krzysztof Kozlowski
2026-10-23 10:04 ` [PATCH 6/7] dt-bindings: power: supply: axp20x-battery: " Olivier Louvignes
2026-10-26  9:33   ` Krzysztof Kozlowski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox