From nobody Thu Oct 2 17:52:13 2025 Received: from mail-ej1-f52.google.com (mail-ej1-f52.google.com [209.85.218.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id EAB7D2D0C9A for ; Sun, 14 Sep 2025 19:26:11 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.218.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757877974; cv=none; b=jXS3WWQ15Pyz9gJ59LYxqOKtReg+JdDzDks4xgBQ5fMqHNjom2tPVEFFjtjY5irkFSygTyqdJPg3WHHAUUIOv6qVW38s/xYGeSB3xsWy3ZEcmrYUpvztPhFt+xyPnVsnXi9GwMcRYlJu0E8jxoKpS02P+5zFWjGz4g4hFOmXb7E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757877974; c=relaxed/simple; bh=IlBm5b7UCspR+SdN3LnBaqvywdtk3VF0w3OOARM/UfI=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version:Content-Type; b=c87Br+5DJNTT1ZXgorsclcJqzXK/4+bWHmGXOYY/4ViXlsRr1jnpMoqoaqLF9+ByKeSofRvw1bNJFVYHx1KLLsw57s5YpXTP0xxp8ZFWMGyaUaMLBbJ2TM0zw7xFR/6DmtxQ51uGQSSXeiV0Ti4xIo5EpYE4kKfX1n6dlnXXXGc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=c9k1HhXF; arc=none smtp.client-ip=209.85.218.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="c9k1HhXF" Received: by mail-ej1-f52.google.com with SMTP id a640c23a62f3a-b07d01fd4fbso288306566b.0 for ; Sun, 14 Sep 2025 12:26:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1757877970; x=1758482770; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=jwW/R/A5xZwys01CvakVSoYRo/l13tkxSycHTGd+3aM=; b=c9k1HhXFaTv2djP4Ki2YJvv6R6iWlzlmol63dv8zEWmoMJluCVaOBFUGgpUHnm5gJG cgOntZ1zlBH5sJ7phtkCpCUrcSDGdwxaDqKmj76c6BO+vd3KgJLHee1ExWmwKslgyMpF e65V9JZbeJ1TqEqPRjpFlvRcq7J/L5Cy8711a1y5FGiKxSTfep4JazaH8iqdwEtppo7f 8SmINon1vF6LwQWDa72joNwKXxi7MDU7+wsEvtDDbUke5sVDWwls1esoIGyjB+jQpIaR iTRmatWxpTu945N1v8dRFgjQAVX4CzEgii+TT0fXox1iS9taEO42QZYOT9prfskrm4mj OOdA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757877970; x=1758482770; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=jwW/R/A5xZwys01CvakVSoYRo/l13tkxSycHTGd+3aM=; b=nzXzykfqwd185I4KVDlvWXd+uCuqA7G/R4PGOQFzRaSzVPvqlDBypelQPlfpOj40Nl ztB1uEVPX0x2WYAh30XSmucUdlPuGzT45V82vxm9cyfOHarp5bN2N1LH3VoafMu/ggU3 dvRi3x+Qh2rOX5zD3BD/EX3G2cF0wo+yRb3fIir3FBYnJFpisTND64fXS0Uh7GC25NLm fuBlVw76wf02OfzLOE8pCeafLEm0eU4/OnqHAWXnMdLmxigWp70hag+Mi9iaPlpWGZt+ Z7uYJaC5IeOUUfPfYuYsZWoSknJIaTDFBmU0zzP3tYn7s2yYlesN+O8FVXEKn/QeGpJI 1otA== X-Forwarded-Encrypted: i=1; AJvYcCVR0OO8uBDGpclH3YOqtzMVak+uIFda0bZRUJqcR87Kin6V7gglrbwLaxKgsPaA8WEYphF9qJTGAAtfSds=@vger.kernel.org X-Gm-Message-State: AOJu0Yy2Le+gUYGStuC49InVXtrM7ktRmvsfCn3EUO/vx8qpBlENEnGX AAdPdsD6scOTlH2zrUSh/Y/1FSv5Tkp9RFMt16U+niu6kuh9BxXwavA= X-Gm-Gg: ASbGncueySDdlnbxSx/ztJlwGXs6j/TsSi7tiI1JeaUIATdsyBpTMccNrxJpLuzt1xD YM4P37Pbro13N4W4ZUSCAMaRWaFcp/NYHvlW6Q2Em6xj9wTRy3Udu+93TAXTdqFxhesOsMqn8A3 qRRsh5gNLdwggwNA82brVfBWyTLGG37XLe6gsX5SLHjO5fRjTZUxvwOwKjPaxmIcjYeAa1rLvas FPIuRSwp5CfiwHLXN47niul7OOijWF1r7IeC2ww3/OCzboVMcgd7isoh/Wtw8B9OFkDFD0say6W +ZwvTIpSbaB0nod0JDFT5LeQ0LqVhObWzDBoQv8dWhtvPf3WhJBTfRcpBTSJK4Xu0c7ZgSXnatW GoaaG5m+4h7PTIN9woH1mvG/Y+hGkb/d8Iqf3aNmYbP25FnY= X-Google-Smtp-Source: AGHT+IFPkXo/2uSLf/bLQytE5K26K7uGtcJArvk6tN2XySQCzXiYk+iOQ19HEsbYc9HThEh3KxPD8A== X-Received: by 2002:a17:907:944b:b0:b04:21c9:ad83 with SMTP id a640c23a62f3a-b07c3662cf5mr936292466b.52.1757877970114; Sun, 14 Sep 2025 12:26:10 -0700 (PDT) Received: from localhost.localdomain ([2a0d:e487:226e:7d72:f695:46fd:3aef:7487]) by smtp.gmail.com with ESMTPSA id a640c23a62f3a-b07baf35488sm707841066b.38.2025.09.14.12.26.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 14 Sep 2025 12:26:09 -0700 (PDT) From: Jihed Chaibi To: andreas@kemnade.info Cc: lee@kernel.org, krzk+dt@kernel.org, tony@atomide.com, robh@kernel.org, conor+dt@kernel.org, ukleinek@kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pwm@vger.kernel.org, linux-omap@vger.kernel.org, jihed.chaibi.dev@gmail.com Subject: [PATCH v8 1/3] dt-bindings: mfd: twl: Add missing sub-nodes for TWL4030 & TWL603x Date: Sun, 14 Sep 2025 21:25:14 +0200 Message-Id: <20250914192516.164629-2-jihed.chaibi.dev@gmail.com> X-Mailer: git-send-email 2.39.5 In-Reply-To: <20250914192516.164629-1-jihed.chaibi.dev@gmail.com> References: <20250914192516.164629-1-jihed.chaibi.dev@gmail.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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]. Reviewed-by: Rob Herring Acked-by: Uwe Kleine-K=C3=B6nig Signed-off-by: Jihed Chaibi Reviewed-by: Andreas Kemnade --- 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/20250822222530.113520-1-jihed.chaibi.dev@gm= ail.com/ [2] https://lore.kernel.org/all/20250822225052.136919-1-jihed.chaibi.dev@gm= ail.com/ [3] https://lore.kernel.org/all/20250816021523.167049-1-jihed.chaibi.dev@gm= ail.com/ --- .../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 diff --git a/Documentation/devicetree/bindings/mfd/ti,twl.yaml b/Documentat= ion/devicetree/bindings/mfd/ti,twl.yaml index f162ab60c09..776b04e182c 100644 --- a/Documentation/devicetree/bindings/mfd/ti,twl.yaml +++ b/Documentation/devicetree/bindings/mfd/ti,twl.yaml @@ -11,9 +11,9 @@ maintainers: =20 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. =20 allOf: - if: @@ -49,33 +49,14 @@ allOf: ti,retain-on-reset: false =20 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 =20 - 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: =20 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: =20 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 =20 + 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 O= MAP3 - 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 =20 + clocks: + maxItems: 1 + + clock-names: + const: fck + charger: type: object - additionalProperties: true + properties: compatible: true + required: - compatible =20 rtc: type: object additionalProperties: false + properties: compatible: const: ti,twl4030-rtc interrupts: maxItems: 1 =20 + 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 mo= de). + + 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 capabi= lity - 0x0e # Active mode, the regulator can deliver its nominal outp= ut # 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 =20 unevaluatedProperties: false @@ -271,6 +474,16 @@ examples: compatible =3D "ti,twl6030-vmmc"; ti,retain-on-reset; }; + + pwm { + compatible =3D "ti,twl6030-pwm"; + #pwm-cells =3D <2>; + }; + + pwmled { + compatible =3D "ti,twl6030-pwmled"; + #pwm-cells =3D <2>; + }; }; }; =20 @@ -325,6 +538,20 @@ examples: watchdog { compatible =3D "ti,twl4030-wdt"; }; + + power { + compatible =3D "ti,twl4030-power"; + }; + + pwm { + compatible =3D "ti,twl4030-pwm"; + #pwm-cells =3D <2>; + }; + + pwmled { + compatible =3D "ti,twl4030-pwmled"; + #pwm-cells =3D <2>; + }; }; }; ... diff --git a/Documentation/devicetree/bindings/mfd/twl4030-power.txt b/Docu= mentation/devicetree/bindings/mfd/twl4030-power.txt deleted file mode 100644 index 3d19963312c..00000000000 --- a/Documentation/devicetree/bindings/mfd/twl4030-power.txt +++ /dev/null @@ -1,48 +0,0 @@ -Texas Instruments TWL family (twl4030) reset and power management module - -The power management module inside the TWL family provides several facilit= ies -to control the power resources, including power scripts. For now, the -binding only supports the complete shutdown of the system after poweroff. - -Required properties: -- compatible : must be one of the following - "ti,twl4030-power" - "ti,twl4030-power-reset" - "ti,twl4030-power-idle" - "ti,twl4030-power-idle-osc-off" - -The use of ti,twl4030-power-reset is recommended at least on -3530 that needs a special configuration for warm reset to work. - -When using ti,twl4030-power-idle, the TI recommended configuration -for idle modes is loaded to the tlw4030 PMIC. - -When using ti,twl4030-power-idle-osc-off, the TI recommended -configuration is used with the external oscillator being shut -down during off-idle. Note that this does not work on all boards -depending on how the external oscillator is wired. - -Optional properties: - -- ti,system-power-controller: This indicates that TWL4030 is the - power supply master of the system. With this flag, the chip will - initiate an ACTIVE-to-OFF or SLEEP-to-OFF transition when the - system poweroffs. - -- ti,use_poweroff: Deprecated name for ti,system-power-controller - -Example: -&i2c1 { - clock-frequency =3D <2600000>; - - twl: twl@48 { - reg =3D <0x48>; - interrupts =3D <7>; /* SYS_NIRQ cascaded to intc */ - interrupt-parent =3D <&intc>; - - twl_power: power { - compatible =3D "ti,twl4030-power"; - ti,use_poweroff; - }; - }; -}; diff --git a/Documentation/devicetree/bindings/pwm/ti,twl-pwm.txt b/Documen= tation/devicetree/bindings/pwm/ti,twl-pwm.txt deleted file mode 100644 index d97ca1964e9..00000000000 --- a/Documentation/devicetree/bindings/pwm/ti,twl-pwm.txt +++ /dev/null @@ -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 descriptio= n of - the cells format. - -Example: - -twl_pwm: pwm { - compatible =3D "ti,twl6030-pwm"; - #pwm-cells =3D <2>; -}; diff --git a/Documentation/devicetree/bindings/pwm/ti,twl-pwmled.txt b/Docu= mentation/devicetree/bindings/pwm/ti,twl-pwmled.txt deleted file mode 100644 index 31ca1b032ef..00000000000 --- a/Documentation/devicetree/bindings/pwm/ti,twl-pwmled.txt +++ /dev/null @@ -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 descriptio= n of - the cells format. - -Example: - -twl_pwmled: pwmled { - compatible =3D "ti,twl6030-pwmled"; - #pwm-cells =3D <2>; -}; --=20 2.39.5