Skip to contentSkip to conversation

dt-bindings: mfd: twl: Consolidate and fix TI TWL family bindings

PATCH Applied Jihed Chaibi 4 participants 7 messages Sep 14, 2025 – Nov 4, 2025

Subsystems (4)
lore
Share & tools
lore
#0 lore raw

v8 cover dt-bindings: mfd: twl: Consolidate and fix TI TWL family bindings

Following extensive maintainer feedback, this patch implements the "define then disable" pattern. All possible child nodes are now defined at the top level. Conditional if/then blocks are used to explicitly disallow sub-modules that are not present on specific chip variants.

This refactoring also moves pre-existing sub-node definitions (e.g. madc, pwrbutton, gpadc, etc.) out of the conditional blocks to the top level, following the new pattern.

The complete dtbs_check for this binding is clean except for two warnings originating from pre-existing bugs in the OMAP DTS files, for which fixes have already been submitted separately [1][2].

---
Changes in v8:
- Restructured binding to define all properties at the top level and use 'property-name: false' to conditionally disable them. This includes refactoring pre-existing sub-node definitions.
- Referenced the existing ti,twl6030-charger.yaml and ti,twl6030-gpadc.yaml schemas for the TWL603x charger and gpadc nodes.
- No changes for (2/3) & (3/3).

Changes in v7:
- (1/3): Moved twl4030/twl6030-specific child node definitions (audio, usb etc.) into the conditional 'if/then' block to improve schema accuracy.
- (2/3 & 3/3): No changes.

Changes in v6:
- Refactored the ti,twl4030-power compatible schema to be much stricter, removing obsolete board-specific compatibles (-n900, -beagleboard-xm), that were added in v5. The schema now only permits specific, valid fallback combinations.
- This series presents two new patches (2/3) & (3/3), which update the affected DTS files by removing obsolete entries.
- Enforced the presence of the compatible property on all relevant sub-nodes by adding 'required: - compatible', closing a key validation loophole.
- Applied various formatting cleanups for readability and correctness.

Changes in v5:
- Restructured the entire binding to define properties at the top level instead of if/then blocks, per maintainer feedback.
- Added specific compatible enums for new child nodes instead of a generic 'compatible: true'.
- Set 'unevaluatedProperties: false' for 'pwm' and 'pwmled' nodes to enforce strict validation.
- Expanded 'power' node compatible enum to include all board-specific compatible strings (used in existing device trees, e.g. OMAP3-based boards) for more complete coverage.
- Corrected the schema for the 'power' node compatible to properly handle single and fallback entries.

Changes in v4:
- Reworked binding to be independent and bisectable per maintainer feedback by using 'additionalProperties: true' for child nodes.
- Added board-specific compatibles to the 'power' node enum.
- Added definitions for 'clocks' and 'clock-names' properties.
- Renamed 'twl6030-usb' child node to 'usb-comparator' to match existing Device Tree usage (twl6030.dtsi).
- Fixed some spelling/grammar erros in the description.

Changes in v3:
- New patch to consolidate simple bindings (power, pwm) and add definitions for all child nodes to fix dtbs_check validation errors found in v2.

Changes in v2:
- This patch is split from larger series [3] per maintainer feedback.
- Added missing sub-node definitions, resolving dtbs_check errors.

[1] https://lore.kernel.org/all/[email protected]/
[2] https://lore.kernel.org/all/[email protected]/
[3] https://lore.kernel.org/all/[email protected]/

Jihed Chaibi (3):
dt-bindings: mfd: twl: Add missing sub-nodes for TWL4030 & TWL603x
ARM: dts: omap3: beagle-xm: Correct obsolete TWL4030 power compatible
ARM: dts: omap3: n900: Correct obsolete TWL4030 power compatible

 .../devicetree/bindings/mfd/ti,twl.yaml       | 319 +++++++++++++++---
 .../devicetree/bindings/mfd/twl4030-power.txt |  48 ---
 .../devicetree/bindings/pwm/ti,twl-pwm.txt    |  17 -
 .../devicetree/bindings/pwm/ti,twl-pwmled.txt |  17 -
 arch/arm/boot/dts/ti/omap/omap3-beagle-xm.dts |   2 +-
 arch/arm/boot/dts/ti/omap/omap3-n900.dts      |   2 +-
 6 files changed, 275 insertions(+), 130 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/mfd/twl4030-power.txt
 delete mode 100644 Documentation/devicetree/bindings/pwm/ti,twl-pwm.txt
 delete mode 100644 Documentation/devicetree/bindings/pwm/ti,twl-pwmled.txt
Signature · 1 line
2.39.5
#1 lore raw

PATCH v8 1/3 dt-bindings: mfd: twl: Add missing sub-nodes for TWL4030 & TWL603x

Update the main TI TWL-family binding to be self-contained and to fix pre-existing validation errors.

To ensure future patches are bisectable, child nodes whose bindings are in other patches (audio, keypad, usb, etc.) are now defined using a flexible 'additionalProperties: true' pattern. This removes hard dependencies between the MFD and subsystem bindings.

The complete dtbs_check for this binding is clean except for two warnings originating from pre-existing bugs in the OMAP DTS files, for which fixes have already been submitted separately [1][2].

---
Changes in v8:
- Moved all (new and pre-existing) sub-node definitions to the main properties node, per maintainer feedback.
- Referenced the existing ti,twl6030-charger.yaml and ti,twl6030-gpadc.yaml schemas for the TWL603x charger and gpadc nodes.

Changes in v7:
- Moved twl4030/twl6030-specific child node definitions (audio, usb..) into the conditional 'if/then' block to improve schema accuracy.

Changes in v6:
- Refactored the ti,twl4030-power compatible schema to be much stricter, removing obsolete board-specific compatibles (-n900, -beagleboard-xm), that were added in v5. The schema now only permits specific, valid fallback combinations. This change is supported by subsequent patches in the same series (2/3) & (3/3), which update the affected DTS files.
- Enforced the presence of the compatible property on all relevant sub-nodes by adding 'required: - compatible', closing a key validation loophole.
- Applied various formatting cleanups for readability and correctness.

Changes in v5:
- Restructured the entire binding to define properties at the top level instead of if/then blocks, per maintainer feedback.
- Added specific compatible enums for new child nodes instead of a generic 'compatible: true'.
- Set 'unevaluatedProperties: false' for 'pwm' and 'pwmled' nodes to enforce strict validation.
- Expanded 'power' node compatible enum to include all board-specific compatible strings (used in existing device trees, e.g. OMAP3-based boards) for more complete coverage.
- Corrected the schema for the 'power' node compatible to properly handle single and fallback entries.

Changes in v4:
- Reworked binding to be independent and bisectable per maintainer feedback by using 'additionalProperties: true' for child nodes.
- Added board-specific compatibles to the 'power' node enum.
- Added definitions for 'clocks' and 'clock-names' properties.
- Renamed 'twl6030-usb' child node to 'usb-comparator' to match existing Device Tree usage (twl6030.dtsi).
- Fixed some spelling/grammar erros in the description.

Changes in v3:
- New patch to consolidate simple bindings (power, pwm) and add definitions for all child nodes to fix dtbs_check validation errors found in v2.

Changes in v2:
- This patch is split from larger series [3] per maintainer feedback.
- Added missing sub-node definitions, resolving dtbs_check errors.

[1] https://lore.kernel.org/all/[email protected]/
[2] https://lore.kernel.org/all/[email protected]/
[3] https://lore.kernel.org/all/[email protected]/

---
 .../devicetree/bindings/mfd/ti,twl.yaml       | 319 +++++++++++++++---
 .../devicetree/bindings/mfd/twl4030-power.txt |  48 ---
 .../devicetree/bindings/pwm/ti,twl-pwm.txt    |  17 -
 .../devicetree/bindings/pwm/ti,twl-pwmled.txt |  17 -
 4 files changed, 273 insertions(+), 128 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/mfd/twl4030-power.txt
 delete mode 100644 Documentation/devicetree/bindings/pwm/ti,twl-pwm.txt
 delete mode 100644 Documentation/devicetree/bindings/pwm/ti,twl-pwmled.txt
Documentation/devicetree/bindings/mfd/ti,twl.yaml +273 -46
index f162ab60c09..776b04e182c 100644
@@ -11,9 +11,9 @@ maintainers:
 
 description: |
   The TWLs are Integrated Power Management Chips.
-  Some version might contain much more analog function like
+  Some versions might contain much more analog functions like
   USB transceiver or Audio amplifier.
-  These chips are connected to an i2c bus.
+  These chips are connected to an I2C bus.
 
 allOf:
   - if:
@@ -49,33 +49,14 @@ allOf:
             ti,retain-on-reset: false
 
       properties:
-        madc:
-          type: object
-          $ref: /schemas/iio/adc/ti,twl4030-madc.yaml
-          unevaluatedProperties: false
-
         charger:
-          type: object
           $ref: /schemas/power/supply/twl4030-charger.yaml
           unevaluatedProperties: false
 
-        pwrbutton:
-          type: object
-          additionalProperties: false
-          properties:
-            compatible:
-              const: ti,twl4030-pwrbutton
-            interrupts:
-              items:
-                - items:
-                    const: 8
-
-        watchdog:
-          type: object
-          additionalProperties: false
-          properties:
-            compatible:
-              const: ti,twl4030-wdt
+        gpadc: false
+
+        usb-comparator: false
+
   - if:
       properties:
         compatible:
@@ -106,15 +87,30 @@ allOf:
 
       properties:
         charger:
-          type: object
-          properties:
-            compatible:
-              const: ti,twl6030-charger
+          $ref: /schemas/power/supply/ti,twl6030-charger.yaml
+          unevaluatedProperties: false
+
         gpadc:
-          type: object
           properties:
             compatible:
               const: ti,twl6030-gpadc
+
+        pwrbutton: false
+
+        madc: false
+
+        watchdog: false
+
+        audio: false
+
+        keypad: false
+
+        twl4030-usb: false
+
+        gpio: false
+
+        power: false
+
   - if:
       properties:
         compatible:
@@ -142,23 +138,36 @@ allOf:
 
       properties:
         charger:
-          type: object
-          properties:
-            compatible:
-              items:
-                - const: ti,twl6032-charger
-                - const: ti,twl6030-charger
+          $ref: /schemas/power/supply/ti,twl6030-charger.yaml
+          unevaluatedProperties: false
+
         gpadc:
-          type: object
           properties:
             compatible:
               const: ti,twl6032-gpadc
 
+        pwrbutton: false
+
+        madc: false
+
+        watchdog: false
+
+        audio: false
+
+        keypad: false
+
+        twl4030-usb: false
+
+        gpio: false
+
+        power: false
+
 properties:
   compatible:
-    description:
-      TWL4030 for integrated power-management/audio CODEC device used in OMAP3
-      based boards
+    description: >
+      TWL4030 for integrated power-management/audio CODEC device used in
+      OMAP3 based boards.
+
       TWL6030/32 for integrated power-management used in OMAP4 based boards
     enum:
       - ti,twl4030
@@ -181,28 +190,221 @@ properties:
   "#clock-cells":
     const: 1
 
+  clocks:
+    maxItems: 1
+
+  clock-names:
+    const: fck
+
   charger:
     type: object
-    additionalProperties: true
+
     properties:
       compatible: true
+
     required:
       - compatible
 
   rtc:
     type: object
     additionalProperties: false
+
     properties:
       compatible:
         const: ti,twl4030-rtc
       interrupts:
         maxItems: 1
 
+  madc:
+    type: object
+    $ref: /schemas/iio/adc/ti,twl4030-madc.yaml
+    unevaluatedProperties: false
+
+  pwrbutton:
+    type: object
+    additionalProperties: false
+
+    properties:
+      compatible:
+        const: ti,twl4030-pwrbutton
+      interrupts:
+        items:
+          - items:
+              const: 8
+
+  watchdog:
+    type: object
+    additionalProperties: false
+
+    properties:
+      compatible:
+        const: ti,twl4030-wdt
+
+  audio:
+    type: object
+    additionalProperties: true
+
+    properties:
+      compatible:
+        const: ti,twl4030-audio
+
+    required:
+      - compatible
+
+  keypad:
+    type: object
+    additionalProperties: true
+
+    properties:
+      compatible:
+        const: ti,twl4030-keypad
+
+    required:
+      - compatible
+
+  twl4030-usb:
+    type: object
+    additionalProperties: true
+
+    properties:
+      compatible:
+        const: ti,twl4030-usb
+
+    required:
+      - compatible
+
+  gpio:
+    type: object
+    additionalProperties: true
+
+    properties:
+      compatible:
+        const: ti,twl4030-gpio
+
+    required:
+      - compatible
+
+  power:
+    type: object
+    additionalProperties: false
+    description: >
+      The power management module inside the TWL4030 provides several
+      facilities to control the power resources, including power scripts.
+
+      For now, the binding only supports the complete shutdown of the
+      system after poweroff.
+
+      Board-specific compatible strings may be used for platform-specific
+      power configurations.
+
+      A board-specific compatible string (e.g., ti,twl4030-power-omap3-evm)
+      may be paired with a generic fallback (generally for power saving mode).
+
+    properties:
+      compatible:
+        oneOf:
+          # Case 1: A single compatible string is provided.
+          - enum:
+              - ti,twl4030-power
+              - ti,twl4030-power-reset
+              - ti,twl4030-power-idle
+              - ti,twl4030-power-idle-osc-off
+              - ti,twl4030-power-omap3-sdp
+              - ti,twl4030-power-omap3-ldp
+              - ti,twl4030-power-omap3-evm
+
+          # Case 2: The specific, valid fallback for 'idle-osc-off'.
+          - items:
+              - const: ti,twl4030-power-idle-osc-off
+              - const: ti,twl4030-power-idle
+
+          # Case 3: The specific, valid fallback for 'omap3-evm'.
+          - items:
+              - const: ti,twl4030-power-omap3-evm
+              - const: ti,twl4030-power-idle
+
+      ti,system-power-controller:
+        type: boolean
+        deprecated: true
+        description: >
+          DEPRECATED. The standard 'system-power-controller'
+          property on the parent node should be used instead.
+
+      ti,use_poweroff:
+        type: boolean
+        deprecated: true
+        description: DEPRECATED, to be removed.
+
+    required:
+      - compatible
+
+  gpadc:
+    type: object
+    $ref: /schemas/iio/adc/ti,twl6030-gpadc.yaml
+    unevaluatedProperties: false
+
+    properties:
+      compatible: true
+
+  usb-comparator:
+    type: object
+    additionalProperties: true
+
+    properties:
+      compatible:
+        const: ti,twl6030-usb
+
+    required:
+      - compatible
+
+  pwm:
+    type: object
+    $ref: /schemas/pwm/pwm.yaml#
+    unevaluatedProperties: false
+    description:
+      PWM controllers (PWM1 and PWM2 on TWL4030, PWM0 and PWM1 on TWL6030/32).
+
+    properties:
+      compatible:
+        enum:
+          - ti,twl4030-pwm
+          - ti,twl6030-pwm
+
+      '#pwm-cells':
+        const: 2
+
+    required:
+      - compatible
+      - '#pwm-cells'
+
+  pwmled:
+    type: object
+    $ref: /schemas/pwm/pwm.yaml#
+    unevaluatedProperties: false
+    description: >
+      PWM controllers connected to LED terminals (PWMA and PWMB on TWL4030.
+
+      LED PWM on TWL6030/32, mainly used as charging indicator LED).
+
+    properties:
+      compatible:
+        enum:
+          - ti,twl4030-pwmled
+          - ti,twl6030-pwmled
+
+      '#pwm-cells':
+        const: 2
+
+    required:
+      - compatible
+      - '#pwm-cells'
+
 patternProperties:
   "^regulator-":
     type: object
     unevaluatedProperties: false
     $ref: /schemas/regulator/regulator.yaml
+
     properties:
       compatible: true
       regulator-initial-mode:
@@ -211,12 +413,13 @@ patternProperties:
                  # with low power consumption with low load current capability
           - 0x0e # Active mode, the regulator can deliver its nominal output
                  # voltage with full-load current capability
+
       ti,retain-on-reset:
-        description:
-          Does not turn off the supplies during warm
-          reset. Could be needed for VMMC, as TWL6030
-          reset sequence for this signal does not comply
-          with the SD specification.
+        description: >
+          Does not turn off the supplies during warm reset.
+
+          Could be needed for VMMC, as TWL6030 reset sequence for
+          this signal does not comply with the SD specification.
         type: boolean
 
 unevaluatedProperties: false
@@ -271,6 +474,16 @@ examples:
           compatible = "ti,twl6030-vmmc";
           ti,retain-on-reset;
         };
+
+        pwm {
+          compatible = "ti,twl6030-pwm";
+          #pwm-cells = <2>;
+        };
+
+        pwmled {
+          compatible = "ti,twl6030-pwmled";
+          #pwm-cells = <2>;
+        };
       };
     };
 
@@ -325,6 +538,20 @@ examples:
         watchdog {
           compatible = "ti,twl4030-wdt";
         };
+
+        power {
+          compatible = "ti,twl4030-power";
+        };
+
+        pwm {
+          compatible = "ti,twl4030-pwm";
+          #pwm-cells = <2>;
+        };
+
+        pwmled {
+          compatible = "ti,twl4030-pwmled";
+          #pwm-cells = <2>;
+        };
       };
     };
 ...
Documentation/devicetree/bindings/mfd/twl4030-power.txt deleted +0 -48

48 lines not on this page · raw message

Documentation/devicetree/bindings/pwm/ti,twl-pwm.txt deleted +0 -17
deleted file mode 100644
index d97ca1964e9..00000000000
@@ -1,17 +0,0 @@
-Texas Instruments TWL series PWM drivers
-
-Supported PWMs:
-On TWL4030 series: PWM1 and PWM2
-On TWL6030 series: PWM0 and PWM1
-
-Required properties:
-- compatible: "ti,twl4030-pwm" or "ti,twl6030-pwm"
-- #pwm-cells: should be 2. See pwm.yaml in this directory for a description of
-  the cells format.
-
-Example:
-
-twl_pwm: pwm {
-	compatible = "ti,twl6030-pwm";
-	#pwm-cells = <2>;
-};
Documentation/devicetree/bindings/pwm/ti,twl-pwmled.txt deleted +0 -17
deleted file mode 100644
index 31ca1b032ef..00000000000
@@ -1,17 +0,0 @@
-Texas Instruments TWL series PWM drivers connected to LED terminals
-
-Supported PWMs:
-On TWL4030 series: PWMA and PWMB (connected to LEDA and LEDB terminals)
-On TWL6030 series: LED PWM (mainly used as charging indicator LED)
-
-Required properties:
-- compatible: "ti,twl4030-pwmled" or "ti,twl6030-pwmled"
-- #pwm-cells: should be 2. See pwm.yaml in this directory for a description of
-  the cells format.
-
-Example:
-
-twl_pwmled: pwmled {
-	compatible = "ti,twl6030-pwmled";
-	#pwm-cells = <2>;
-};
Signature · 1 line
2.39.5
maintainer Reviewed-by on v8 1/3
#2 lore raw

Re: [PATCH v8 1/3] dt-bindings: mfd: twl: Add missing sub-nodes for TWL4030 & TWL603x

Quoted 8 lines · On Sun, 14 Sep 2025 21:25:14 +0200 Jihed Chaibi <[email protected]>…

Update the main TI TWL-family binding to be self-contained and to fix pre-existing validation errors.

To ensure future patches are bisectable, child nodes whose bindings are in other patches (audio, keypad, usb, etc.) are now defined using a flexible 'additionalProperties: true' pattern. This removes hard dependencies between the MFD and subsystem bindings.

Quoted 8 lines

The complete dtbs_check for this binding is clean except for two warnings originating from pre-existing bugs in the OMAP DTS files, for which fixes have already been submitted separately [1][2].

maintainer Applied
#3 lore raw

Re: (subset) [PATCH v8 1/3] dt-bindings: mfd: twl: Add missing sub-nodes for TWL4030 & TWL603x

In reply to Jihed Chaibi
Quoted 9 lines · Jihed Chaibi

Update the main TI TWL-family binding to be self-contained and to fix pre-existing validation errors.

To ensure future patches are bisectable, child nodes whose bindings are in other patches (audio, keypad, usb, etc.) are now defined using a flexible 'additionalProperties: true' pattern. This removes hard dependencies between the MFD and subsystem bindings.

[...]

Applied, thanks!

[1/3] dt-bindings: mfd: twl: Add missing sub-nodes for TWL4030 & TWL603x

      commit: 44232889ce7769dd957972df773b6bd639400b41

--
Lee Jones [李琼斯]

#4 lore raw

PATCH v8 2/3 ARM: dts: omap3: beagle-xm: Correct obsolete TWL4030 power compatible

In reply to Jihed Chaibi

The "ti,twl4030-power-beagleboard-xm" compatible string is obsolete and is not supported by any in-kernel driver. Currently, the kernel falls back to the second entry, "ti,twl4030-power-idle-osc-off", to bind a driver to this node.

Make this fallback explicit by removing the obsolete board-specific compatible. This preserves the existing functionality while making the DTS compliant with the new, stricter 'ti,twl.yaml' binding.

Fixes 9188883fd66e9 ("ARM: dts: Enable twl4030 off-idle configuration for selected omaps")

---
Changes in v8:
- No changes.

Changes in v7:
- No changes.

Changes in v6:
- This patch was added in this version

---
 arch/arm/boot/dts/ti/omap/omap3-beagle-xm.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/ti/omap/omap3-beagle-xm.dts +1 -1
index 08ee0f8ea68..71b39a923d3 100644
@@ -291,7 +291,7 @@ codec {
 		};
 
 		twl_power: power {
-			compatible = "ti,twl4030-power-beagleboard-xm", "ti,twl4030-power-idle-osc-off";
+			compatible = "ti,twl4030-power-idle-osc-off";
 			ti,use_poweroff;
 		};
 	};
Signature · 1 line
2.39.5
#5 lore raw

PATCH v8 3/3 ARM: dts: omap3: n900: Correct obsolete TWL4030 power compatible

In reply to Jihed Chaibi

The "ti,twl4030-power-n900" compatible string is obsolete and is not supported by any in-kernel driver. Currently, the kernel falls back to the second entry, "ti,twl4030-power-idle-osc-off", to bind a driver to this node.

Make this fallback explicit by removing the obsolete board-specific compatible. This preserves the existing functionality while making the DTS compliant with the new, stricter 'ti,twl.yaml' binding.

Fixes daebabd578647 ("mfd: twl4030-power: Fix PM idle pin configuration to not conflict with regulators")

---
Changes in v8:
- No changes.

Changes in v7:
- No changes.

Changes in v6:
- This patch was added in this version

---
 arch/arm/boot/dts/ti/omap/omap3-n900.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)
arch/arm/boot/dts/ti/omap/omap3-n900.dts +1 -1
index c50ca572d1b..7db73d9bed9 100644
@@ -508,7 +508,7 @@ twl_audio: audio {
 	};
 
 	twl_power: power {
-		compatible = "ti,twl4030-power-n900", "ti,twl4030-power-idle-osc-off";
+		compatible = "ti,twl4030-power-idle-osc-off";
 		ti,use_poweroff;
 	};
 };
Signature · 1 line
2.39.5
maintainer Applied
#6 lore raw

Re: (subset) [PATCH v8 0/3] dt-bindings: mfd: twl: Consolidate and fix TI TWL family bindings

In reply to Jihed Chaibi
Quoted 10 lines · Jihed Chaibi

Following extensive maintainer feedback, this patch implements the "define then disable" pattern. All possible child nodes are now defined at the top level. Conditional if/then blocks are used to explicitly disallow sub-modules that are not present on specific chip variants.

This refactoring also moves pre-existing sub-node definitions (e.g. madc, pwrbutton, gpadc, etc.) out of the conditional blocks to the top level, following the new pattern.

[...]

Applied, thanks!

[2/3] ARM: dts: omap3: beagle-xm: Correct obsolete TWL4030 power compatible

      commit: f7f3bc18300a230e0f1bfb17fc8889435c1e47f5
[3/3] ARM: dts: omap3: n900: Correct obsolete TWL4030 power compatible
      commit: 3862123e9b56663c7a3e4a308e6e65bffe44f646

Best regards,

Signature · 1 line
Kevin Hilman <[email protected]>