From nobody Thu Oct 2 16:34:35 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5EFD12E3703; Sun, 14 Sep 2025 19:36:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878562; cv=none; b=kx7YbGZ+HM24Gzd5uqY92kVrE+1M/wZKGJyV3DyFGYed0t+4E3TvSqWKjprPC0CLVh+3MCYke3Pey6ofzoX/2J/P9DsBmpQMQDFi1lcdwUQXR8e+cufLz96NEy8d6xhfKgc0bixAZeOxuNaDSP5EB3yRPdGULaDlCJ4ZWwkj6UY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878562; c=relaxed/simple; bh=DmzhXWCjdabYnUMwC5X+hM2e6Qhw44ROMKNmOpHX65A=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=rFM1CXl+3u3I4+/5oyVyx7czB4dDX76L3/lXrwgToqrFxbOFR9XSoWuL+6Tb4mKY7IEDpUtDFZOcRN6nstCCsC9HBDj24KYp3PsyYfpqrj8p9sht8JcCfndDEhPejdN1BDXpoYDr0HR4c+AhhrPefs/+1jNK0FhqQ+oEtSXCF7M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 58EJbPAi010595; Sun, 14 Sep 2025 19:37:25 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 58EJbP7B010591; Sun, 14 Sep 2025 19:37:25 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH v4 1/8] dt-bindings: mfd: fsl,mc13xxx: convert txt to DT schema Date: Sun, 14 Sep 2025 19:37:16 +0000 Message-Id: <20250914193723.10544-2-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250914193723.10544-1-akurz@blala.de> References: <20250914193723.10544-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Convert the txt mc13xxx bindings to DT schema attempting to keep most information. The nodes codec and touchscreen are not part of the new schema since it was only briefly mentioned before. Following the convention, rename led-control to fsl,led-control. Signed-off-by: Alexander Kurz --- .../devicetree/bindings/mfd/fsl,mc13xxx.yaml | 218 ++++++++++++++++++ .../devicetree/bindings/mfd/mc13xxx.txt | 156 ------------- 2 files changed, 218 insertions(+), 156 deletions(-) create mode 100644 Documentation/devicetree/bindings/mfd/fsl,mc13xxx.yaml delete mode 100644 Documentation/devicetree/bindings/mfd/mc13xxx.txt diff --git a/Documentation/devicetree/bindings/mfd/fsl,mc13xxx.yaml b/Docum= entation/devicetree/bindings/mfd/fsl,mc13xxx.yaml new file mode 100644 index 000000000000..007c2e3eee91 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/fsl,mc13xxx.yaml @@ -0,0 +1,218 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mfd/fsl,mc13xxx.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Freescale MC13xxx Power Management Integrated Circuits (PMIC) + +maintainers: + - Alexander Kurz + +description: > + The MC13xxx PMIC series consists of the three models MC13783, MC13892 + and MC34708 and provide regulators and other features like RTC, ADC, + LED, touchscreen, codec and input buttons. + + Link to datasheets + https://www.nxp.com/docs/en/data-sheet/MC13783.pdf + https://www.nxp.com/docs/en/data-sheet/MC13892.pdf + https://www.nxp.com/docs/en/data-sheet/MC34708.pdf + +properties: + compatible: + enum: + - fsl,mc13783 + - fsl,mc13892 + - fsl,mc34708 + + reg: + description: I2C slave address or SPI chip select number. + maxItems: 1 + + spi-max-frequency: true + + spi-cs-high: true + + system-power-controller: true + + interrupts: + maxItems: 1 + + leds: + type: object + $ref: /schemas/leds/common.yaml# + + properties: + reg: + description: | + One of + MC13783 LED IDs + 0: Main display + 1: AUX display + 2: Keypad + 3: Red 1 + 4: Green 1 + 5: Blue 1 + 6: Red 2 + 7: Green 2 + 8: Blue 2 + 9: Red 3 + 10: Green 3 + 11: Blue 3 + + MC13892 LED IDs + 0: Main display + 1: AUX display + 2: Keypad + 3: Red + 4: Green + 5: Blue + + MC34708 LED IDs + 0: Charger Red + 1: Charger Green + maxItems: 1 + + led-control: + $ref: /schemas/types.yaml#/definitions/uint32-array + description: | + Setting for LED-Control register array length depends on model, + mc13783: 6, mc13892: 4, mc34708: 1 + + regulators: + type: object + + additionalProperties: + type: object + + description: | + List of child nodes specifying the regulators, depending on chip var= iant. + Each child node is defined using the standard binding for regulators= and + the optional regulator properties defined below. + + fsl,mc13xxx-uses-adc: + type: boolean + description: Indicate the ADC is being used + + fsl,mc13xxx-uses-codec: + type: boolean + description: Indicate the Audio Codec is being used + + fsl,mc13xxx-uses-rtc: + type: boolean + description: Indicate the RTC is being used + + fsl,mc13xxx-uses-touch: + type: boolean + description: Indicate the touchscreen controller is being used + +required: + - compatible + - reg + +allOf: + - if: + properties: + compatible: + contains: + const: fsl,mc13783 + then: + properties: + leds: + properties: + led-control: + minItems: 6 + maxItems: 6 + regulators: + patternProperties: + "^gpo[1-4]|pwgt[12]spi|sw[12][ab]|sw3|vaudio|vcam|vdig|vesim|v= gen|viohi|violo|vmmc[12]|vrf[12]|vrfbg|vrfcp|vrfdig|vrfref|vsim|vvib$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + unevaluatedProperties: false + + - if: + properties: + compatible: + contains: + const: fsl,mc13892 + then: + properties: + leds: + properties: + led-control: + minItems: 4 + maxItems: 4 + regulators: + patternProperties: + "^gpo[1-4]|pwgt[12]spi|sw[1-4]|swbst|vaudio|vcam|vcoincell|vdi= g|vgen[1-3]|viohi|vpll|vsd|vusb|vusb2|vvideo$": + type: object + $ref: /schemas/regulator/regulator.yaml# + + unevaluatedProperties: false + + - if: + properties: + compatible: + contains: + const: fsl,mc34708 + then: + properties: + leds: + properties: + led-control: + minItems: 1 + maxItems: 1 + +additionalProperties: false + +examples: + - | + #include + #include + #include + + spi { + #address-cells =3D <1>; + #size-cells =3D <0>; + + pmic: mc13892@0 { + compatible =3D "fsl,mc13892"; + reg =3D <0>; + spi-max-frequency =3D <1000000>; + spi-cs-high; + interrupt-parent =3D <&gpio0>; + interrupts =3D <8 IRQ_TYPE_LEVEL_HIGH>; + fsl,mc13xxx-uses-rtc; + fsl,mc13xxx-uses-adc; + + leds { + #address-cells =3D <1>; + #size-cells =3D <0>; + led-control =3D <0x000 0x000 0x0e0 0x000>; + + sysled@3 { + reg =3D <3>; + label =3D "system:red:live"; + linux,default-trigger =3D "heartbeat"; + }; + }; + + regulators { + sw1_reg: sw1 { + regulator-min-microvolt =3D <600000>; + regulator-max-microvolt =3D <1375000>; + regulator-boot-on; + regulator-always-on; + }; + + sw2_reg: sw2 { + regulator-min-microvolt =3D <900000>; + regulator-max-microvolt =3D <1850000>; + regulator-boot-on; + regulator-always-on; + }; + }; + }; + }; diff --git a/Documentation/devicetree/bindings/mfd/mc13xxx.txt b/Documentat= ion/devicetree/bindings/mfd/mc13xxx.txt deleted file mode 100644 index 8261ea73278a..000000000000 --- a/Documentation/devicetree/bindings/mfd/mc13xxx.txt +++ /dev/null @@ -1,156 +0,0 @@ -* Freescale MC13783/MC13892 Power Management Integrated Circuit (PMIC) - -Required properties: -- compatible : Should be "fsl,mc13783" or "fsl,mc13892" - -Optional properties: -- fsl,mc13xxx-uses-adc : Indicate the ADC is being used -- fsl,mc13xxx-uses-codec : Indicate the Audio Codec is being used -- fsl,mc13xxx-uses-rtc : Indicate the RTC is being used -- fsl,mc13xxx-uses-touch : Indicate the touchscreen controller is being us= ed - -Sub-nodes: -- codec: Contain the Audio Codec node. - - adc-port: Contain PMIC SSI port number used for ADC. - - dac-port: Contain PMIC SSI port number used for DAC. -- leds : Contain the led nodes and initial register values in property - "led-control". Number of register depends of used IC, for MC13783 is 6, - for MC13892 is 4, for MC34708 is 1. See datasheet for bits definitions of - these registers. - - #address-cells: Must be 1. - - #size-cells: Must be 0. - Each led node should contain "reg", which used as LED ID (described belo= w). - Optional properties "label" and "linux,default-trigger" is described in - Documentation/devicetree/bindings/leds/common.txt. -- regulators : Contain the regulator nodes. The regulators are bound using - their names as listed below with their registers and bits for enabling. - -MC13783 LED IDs: - 0 : Main display - 1 : AUX display - 2 : Keypad - 3 : Red 1 - 4 : Green 1 - 5 : Blue 1 - 6 : Red 2 - 7 : Green 2 - 8 : Blue 2 - 9 : Red 3 - 10 : Green 3 - 11 : Blue 3 - -MC13892 LED IDs: - 0 : Main display - 1 : AUX display - 2 : Keypad - 3 : Red - 4 : Green - 5 : Blue - -MC34708 LED IDs: - 0 : Charger Red - 1 : Charger Green - -MC13783 regulators: - sw1a : regulator SW1A (register 24, bit 0) - sw1b : regulator SW1B (register 25, bit 0) - sw2a : regulator SW2A (register 26, bit 0) - sw2b : regulator SW2B (register 27, bit 0) - sw3 : regulator SW3 (register 29, bit 20) - vaudio : regulator VAUDIO (register 32, bit 0) - viohi : regulator VIOHI (register 32, bit 3) - violo : regulator VIOLO (register 32, bit 6) - vdig : regulator VDIG (register 32, bit 9) - vgen : regulator VGEN (register 32, bit 12) - vrfdig : regulator VRFDIG (register 32, bit 15) - vrfref : regulator VRFREF (register 32, bit 18) - vrfcp : regulator VRFCP (register 32, bit 21) - vsim : regulator VSIM (register 33, bit 0) - vesim : regulator VESIM (register 33, bit 3) - vcam : regulator VCAM (register 33, bit 6) - vrfbg : regulator VRFBG (register 33, bit 9) - vvib : regulator VVIB (register 33, bit 11) - vrf1 : regulator VRF1 (register 33, bit 12) - vrf2 : regulator VRF2 (register 33, bit 15) - vmmc1 : regulator VMMC1 (register 33, bit 18) - vmmc2 : regulator VMMC2 (register 33, bit 21) - gpo1 : regulator GPO1 (register 34, bit 6) - gpo2 : regulator GPO2 (register 34, bit 8) - gpo3 : regulator GPO3 (register 34, bit 10) - gpo4 : regulator GPO4 (register 34, bit 12) - pwgt1spi : regulator PWGT1SPI (register 34, bit 15) - pwgt2spi : regulator PWGT2SPI (register 34, bit 16) - -MC13892 regulators: - vcoincell : regulator VCOINCELL (register 13, bit 23) - sw1 : regulator SW1 (register 24, bit 0) - sw2 : regulator SW2 (register 25, bit 0) - sw3 : regulator SW3 (register 26, bit 0) - sw4 : regulator SW4 (register 27, bit 0) - swbst : regulator SWBST (register 29, bit 20) - vgen1 : regulator VGEN1 (register 32, bit 0) - viohi : regulator VIOHI (register 32, bit 3) - vdig : regulator VDIG (register 32, bit 9) - vgen2 : regulator VGEN2 (register 32, bit 12) - vpll : regulator VPLL (register 32, bit 15) - vusb2 : regulator VUSB2 (register 32, bit 18) - vgen3 : regulator VGEN3 (register 33, bit 0) - vcam : regulator VCAM (register 33, bit 6) - vvideo : regulator VVIDEO (register 33, bit 12) - vaudio : regulator VAUDIO (register 33, bit 15) - vsd : regulator VSD (register 33, bit 18) - gpo1 : regulator GPO1 (register 34, bit 6) - gpo2 : regulator GPO2 (register 34, bit 8) - gpo3 : regulator GPO3 (register 34, bit 10) - gpo4 : regulator GPO4 (register 34, bit 12) - pwgt1spi : regulator PWGT1SPI (register 34, bit 15) - pwgt2spi : regulator PWGT2SPI (register 34, bit 16) - vusb : regulator VUSB (register 50, bit 3) - - The bindings details of individual regulator device can be found in: - Documentation/devicetree/bindings/regulator/regulator.txt - -Examples: - -ecspi@70010000 { /* ECSPI1 */ - cs-gpios =3D <&gpio4 24 0>, /* GPIO4_24 */ - <&gpio4 25 0>; /* GPIO4_25 */ - - pmic: mc13892@0 { - #address-cells =3D <1>; - #size-cells =3D <0>; - compatible =3D "fsl,mc13892"; - spi-max-frequency =3D <6000000>; - reg =3D <0>; - interrupt-parent =3D <&gpio0>; - interrupts =3D <8>; - - leds { - #address-cells =3D <1>; - #size-cells =3D <0>; - led-control =3D <0x000 0x000 0x0e0 0x000>; - - sysled@3 { - reg =3D <3>; - label =3D "system:red:live"; - linux,default-trigger =3D "heartbeat"; - }; - }; - - regulators { - sw1_reg: mc13892__sw1 { - regulator-min-microvolt =3D <600000>; - regulator-max-microvolt =3D <1375000>; - regulator-boot-on; - regulator-always-on; - }; - - sw2_reg: mc13892__sw2 { - regulator-min-microvolt =3D <900000>; - regulator-max-microvolt =3D <1850000>; - regulator-boot-on; - regulator-always-on; - }; - }; - }; -}; --=20 2.39.5 From nobody Thu Oct 2 16:34:35 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4D05E2E040E; Sun, 14 Sep 2025 19:35:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878547; cv=none; b=NUIG0AEjSLbdjCM3HMxnOAZqnGyJqhgAZ4PP1xUChrsR4cLKCJG3A2qMiz1Y6ZIL6xAQ1wnRhkW99M4bP9uSCWq5FMbxVG2hgGyhZsUW5eFfVYRp/nnXJutrgTFIuFK1vaAhFGE2Natt4yLKx08yTFKA8sRzRG6HSb79jTdjfJ0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878547; c=relaxed/simple; bh=aTTK8wXZDxPXBF8SHgvVkxik6q6jd8mnQIwiJTIgEr8=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Gb5v7AYndkOKckArQ0vLI57O49gMk+vbBsA99AYBkCOvTYBOGfjMak0mp0BC1n8HvphMiOyUBjzUJNf4ntswidqsarpxQd9rkm+g77rlVjCxh0FvnIP8pmlZyAKWbaYvoMuhU/0V1SCW69f+S0QVVVhrS3CrWRBWjYJ1d6riRsQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 58EJbPsL010603; Sun, 14 Sep 2025 19:37:25 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 58EJbPVQ010598; Sun, 14 Sep 2025 19:37:25 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH v4 2/8] dt-bindings: mfd: fsl,mc13xxx: add buttons node Date: Sun, 14 Sep 2025 19:37:17 +0000 Message-Id: <20250914193723.10544-3-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250914193723.10544-1-akurz@blala.de> References: <20250914193723.10544-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add a buttons node and properties describing the "ONOFD" (MC13783) and "PWRON" (MC13892/MC34708) buttons available in the fsl,mc13xxx PMIC ICs. Signed-off-by: Alexander Kurz --- .../devicetree/bindings/mfd/fsl,mc13xxx.yaml | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) diff --git a/Documentation/devicetree/bindings/mfd/fsl,mc13xxx.yaml b/Docum= entation/devicetree/bindings/mfd/fsl,mc13xxx.yaml index 007c2e3eee91..d2886f2686a8 100644 --- a/Documentation/devicetree/bindings/mfd/fsl,mc13xxx.yaml +++ b/Documentation/devicetree/bindings/mfd/fsl,mc13xxx.yaml @@ -39,6 +39,58 @@ properties: interrupts: maxItems: 1 =20 + buttons: + type: object + properties: + "#address-cells": + const: 1 + + "#size-cells": + const: 0 + + patternProperties: + "^onkey@[0-2]$": + $ref: /schemas/input/input.yaml# + unevaluatedProperties: false + type: object + + properties: + reg: + description: | + One of + MC13783 BUTTON IDs: + 0: ONOFD1 + 1: ONOFD2 + 2: ONOFD3 + + MC13892 BUTTON IDs: + 0: PWRON1 + 1: PWRON2 + 2: PWRON3 + + MC34708 BUTTON IDs: + 0: PWRON1 + 1: PWRON2 + maximum: 2 + + debounce-delay-ms: + enum: [0, 30, 150, 750] + default: 30 + description: + Sets the debouncing delay in milliseconds. + + active-low: + description: Set active when pin is pulled low. + + linux,code: true + + fsl,enable-reset: + description: + Setting of the global reset option. + type: boolean + + unevaluatedProperties: false + leds: type: object $ref: /schemas/leds/common.yaml# @@ -159,6 +211,12 @@ allOf: const: fsl,mc34708 then: properties: + buttons: + patternProperties: + "^onkey@[0-2]$": + properties: + reg: + maximum: 1 leds: properties: led-control: @@ -187,6 +245,18 @@ examples: fsl,mc13xxx-uses-rtc; fsl,mc13xxx-uses-adc; =20 + buttons { + #address-cells =3D <1>; + #size-cells =3D <0>; + + onkey@0 { + reg =3D <0>; + debounce-delay-ms =3D <30>; + active-low; + fsl,enable-reset; + }; + }; + leds { #address-cells =3D <1>; #size-cells =3D <0>; --=20 2.39.5 From nobody Thu Oct 2 16:34:35 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 17B4A2DF137; Sun, 14 Sep 2025 19:35:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878545; cv=none; b=OY0e84iHOiwgDRGEu90OaLJo2440TGdZVk/jFxwwWOAZ8I2MOIkznrlgmL7LRwd3dHa2UDOwdstRSTAWBH0ogxC52Y47yF/a0F87yVegfHYdvl6bfsvedQLgfBZX5jHiVtyB2RZybE4x7EmlXE8PG1/pI6dxwJw7fqjhxTSLHBk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878545; c=relaxed/simple; bh=G0xQgQyrwSJHVmBE1CSnLN/FrJeKs1BASiMsyj5D/lo=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=nwObLPGPZPuubfYMGcRaKkTFg1wVI3rRvUGNRErLEgGwmqkwnbmSz30A0eICUEFQpT5Xu6SxTSXDzNzPewICjNv6h7IC4V+UkGjgmdZ+JO9KM7psUJcvh/IjlvdeEqVH5L4WJ6rLqfD5B5uLFkjJxxsEHR3VCmzBPp1u6txBR8s= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 58EJbPD0010611; Sun, 14 Sep 2025 19:37:25 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 58EJbPuQ010606; Sun, 14 Sep 2025 19:37:25 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH v4 3/8] Input: mc13783-pwrbutton: use managed resources Date: Sun, 14 Sep 2025 19:37:18 +0000 Message-Id: <20250914193723.10544-4-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250914193723.10544-1-akurz@blala.de> References: <20250914193723.10544-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use devres functionality to simplify resource freeing, dev.parent will be set by devm_input_allocate_device(). Signed-off-by: Alexander Kurz --- drivers/input/misc/mc13783-pwrbutton.c | 28 ++++++++------------------ 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc= 13783-pwrbutton.c index b83d762ae2e9..82434ea9cca5 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c @@ -21,6 +21,7 @@ =20 #include #include +#include #include #include #include @@ -102,18 +103,13 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) return -ENODEV; } =20 - pwr =3D input_allocate_device(); - if (!pwr) { - dev_dbg(&pdev->dev, "Can't allocate power button\n"); + pwr =3D devm_input_allocate_device(&pdev->dev); + if (!pwr) return -ENOMEM; - } =20 - priv =3D kzalloc(sizeof(*priv), GFP_KERNEL); - if (!priv) { - err =3D -ENOMEM; - dev_dbg(&pdev->dev, "Can't allocate power button\n"); - goto free_input_dev; - } + priv =3D devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; =20 reg |=3D (pdata->b1on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON1BDBNC; reg |=3D (pdata->b2on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON2BDBNC; @@ -139,7 +135,7 @@ static int mc13783_pwrbutton_probe(struct platform_devi= ce *pdev) button_irq, "b1on", priv); if (err) { dev_dbg(&pdev->dev, "Can't request irq\n"); - goto free_priv; + goto free_mc13xxx_lock; } } =20 @@ -187,7 +183,6 @@ static int mc13783_pwrbutton_probe(struct platform_devi= ce *pdev) =20 pwr->name =3D "mc13783_pwrbutton"; pwr->phys =3D "mc13783_pwrbutton/input0"; - pwr->dev.parent =3D &pdev->dev; =20 pwr->keycode =3D priv->keymap; pwr->keycodemax =3D ARRAY_SIZE(priv->keymap); @@ -218,12 +213,8 @@ static int mc13783_pwrbutton_probe(struct platform_dev= ice *pdev) if (pdata->b1on_flags & MC13783_BUTTON_ENABLE) mc13xxx_irq_free(mc13783, MC13783_IRQ_ONOFD1, priv); =20 -free_priv: +free_mc13xxx_lock: mc13xxx_unlock(mc13783); - kfree(priv); - -free_input_dev: - input_free_device(pwr); =20 return err; } @@ -245,9 +236,6 @@ static void mc13783_pwrbutton_remove(struct platform_de= vice *pdev) mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD1, priv); =20 mc13xxx_unlock(priv->mc13783); - - input_unregister_device(priv->pwr); - kfree(priv); } =20 static struct platform_driver mc13783_pwrbutton_driver =3D { --=20 2.39.5 From nobody Thu Oct 2 16:34:35 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id DC1021ADFFB; Sun, 14 Sep 2025 19:35:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878543; cv=none; b=PMKm7Jok4o3Fy/4xndGZ4D2XPgRZkt6gA7jXldj+9cq0LVkQQNrOfsNF6uFSIK/+fmA1PNOQQ386Ou+/PHA/h87RXCe1ggWvaO1U/cv3M5uh5eKyKm6UVl5QaoaLR+SZmRlQO3ka48D4hKCh10gGm8rKmS0wyLLGmdJ38UdxQPc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878543; c=relaxed/simple; bh=T7S3tGDSkRkjUCD68dVv+kgTO8r6VOa4JBA80JkSbJY=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=RiTucy7PSFoJ9YHS6nShCTeMNto4kKScbZerdW15qO69bf00eB7wMg5UYJpuIk0P5h5RiCkmWmuzVvLv1kIz+ZvD8saHhHXiFPIeB0fTo985x92rbaW6xPXpX6a5G80WTXepIHq4K5fz1DwSK8hl1CCujfD2bfYtlSDq2qEhwvs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 58EJbPdE010619; Sun, 14 Sep 2025 19:37:25 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 58EJbPMS010614; Sun, 14 Sep 2025 19:37:25 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH v4 4/8] mfd: mc13xxx: Use devm_mfd_add_devices and devm_regmap_add_irq_chip Date: Sun, 14 Sep 2025 19:37:19 +0000 Message-Id: <20250914193723.10544-5-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250914193723.10544-1-akurz@blala.de> References: <20250914193723.10544-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Use devm_mfd_add_devices() for adding MFD child devices and devm_regmap_add_irq_chip() for IRQ chip registration. This reduces the amount of required cleanup. Signed-off-by: Alexander Kurz --- drivers/mfd/mc13xxx-core.c | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c index 920797b806ce..091c9171b2b7 100644 --- a/drivers/mfd/mc13xxx-core.c +++ b/drivers/mfd/mc13xxx-core.c @@ -381,7 +381,7 @@ static int mc13xxx_add_subdevice_pdata(struct mc13xxx *= mc13xxx, if (!cell.name) return -ENOMEM; =20 - return mfd_add_devices(mc13xxx->dev, -1, &cell, 1, NULL, 0, + return devm_mfd_add_devices(mc13xxx->dev, -1, &cell, 1, NULL, 0, regmap_irq_get_domain(mc13xxx->irq_data)); } =20 @@ -455,8 +455,9 @@ int mc13xxx_common_init(struct device *dev) mc13xxx->irq_chip.irqs =3D mc13xxx->irqs; mc13xxx->irq_chip.num_irqs =3D ARRAY_SIZE(mc13xxx->irqs); =20 - ret =3D regmap_add_irq_chip(mc13xxx->regmap, mc13xxx->irq, IRQF_ONESHOT, - 0, &mc13xxx->irq_chip, &mc13xxx->irq_data); + ret =3D devm_regmap_add_irq_chip(dev, mc13xxx->regmap, mc13xxx->irq, + IRQF_ONESHOT, 0, &mc13xxx->irq_chip, + &mc13xxx->irq_data); if (ret) return ret; =20 @@ -502,8 +503,6 @@ void mc13xxx_common_exit(struct device *dev) { struct mc13xxx *mc13xxx =3D dev_get_drvdata(dev); =20 - mfd_remove_devices(dev); - regmap_del_irq_chip(mc13xxx->irq, mc13xxx->irq_data); mutex_destroy(&mc13xxx->lock); } EXPORT_SYMBOL_GPL(mc13xxx_common_exit); --=20 2.39.5 From nobody Thu Oct 2 16:34:35 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 5113A2E2286; Sun, 14 Sep 2025 19:35:55 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878557; cv=none; b=KPPjtdkwoifipj6z1drvpcn0TcforAImxiRRi8XFLW463Dl2ETCLWevXvS8RdxKSn7QdHdowlGk/O+hgZ3ns/YpXSfgR3Fis6mPSSvgQ7lasPuvKArxXrWyHHFKQ7ljktnZ6Z3/ESA+srUbrXSIaFu6tXlAMfdPaZxTPwG0tdUA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878557; c=relaxed/simple; bh=rgIMccvWhJUWlQLsoUTIOWyCUA8xC0v2jTgTbjDv+Fw=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=cqbHoTfvnw2Dnu859EJcGMEQVRhD/0p7RqCpmfxkPavbt+JLQdfdIh2iZL0bthyId6DV0UA9X1zzu/iymJqWEeSFWf6VuatpUYqc5AMJKFvH8NqqxM9Gn9X/RY3Ge+ZX0zxC5aJJGMu9adZE1myq1/R98h0qdnhV7wQwEXUYkm4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 58EJbPhf010627; Sun, 14 Sep 2025 19:37:25 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 58EJbP7l010622; Sun, 14 Sep 2025 19:37:25 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH v4 5/8] Input: mc13783-pwrbutton: fix irq mixup and use resources Date: Sun, 14 Sep 2025 19:37:20 +0000 Message-Id: <20250914193723.10544-6-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250914193723.10544-1-akurz@blala.de> References: <20250914193723.10544-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The mfd mc13xxx interrupt handling was migrated to regmap with commit 10f9edaeaa30 ("mfd: mc13xxx: Use regmap irq framework for interrupts"). As a consequence, button_irq() got get called with virtual irq instead of chip-internal irq. Make use of mfd_cell resources to pass interrupts from mfd so that platform_get_irq_byname() can be used in mc13783-pwrbutton. The amount of required interrupt related cleanup can be reduced this way. Note, that mc13783-pwrbutton is still considered to support only the model mc13783. Signed-off-by: Alexander Kurz --- drivers/input/misc/mc13783-pwrbutton.c | 103 +++++++++++-------------- drivers/mfd/mc13xxx-core.c | 39 ++++++++-- drivers/mfd/mc13xxx.h | 2 + 3 files changed, 79 insertions(+), 65 deletions(-) diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc= 13783-pwrbutton.c index 82434ea9cca5..20f68aab6edf 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c @@ -33,13 +33,15 @@ struct mc13783_pwrb { struct input_dev *pwr; struct mc13xxx *mc13783; -#define MC13783_PWRB_B1_POL_INVERT (1 << 0) -#define MC13783_PWRB_B2_POL_INVERT (1 << 1) -#define MC13783_PWRB_B3_POL_INVERT (1 << 2) int flags; unsigned short keymap[3]; + int irq[3]; }; =20 +#define MC13783_PWRB_B1_POL_INVERT (1 << 0) +#define MC13783_PWRB_B2_POL_INVERT (1 << 1) +#define MC13783_PWRB_B3_POL_INVERT (1 << 2) + #define MC13783_REG_INTERRUPT_SENSE_1 5 #define MC13783_IRQSENSE1_ONOFD1S (1 << 3) #define MC13783_IRQSENSE1_ONOFD2S (1 << 4) @@ -60,27 +62,21 @@ static irqreturn_t button_irq(int irq, void *_priv) =20 mc13xxx_reg_read(priv->mc13783, MC13783_REG_INTERRUPT_SENSE_1, &val); =20 - switch (irq) { - case MC13783_IRQ_ONOFD1: + if (irq =3D=3D priv->irq[0]) { val =3D val & MC13783_IRQSENSE1_ONOFD1S ? 1 : 0; if (priv->flags & MC13783_PWRB_B1_POL_INVERT) val ^=3D 1; input_report_key(priv->pwr, priv->keymap[0], val); - break; - - case MC13783_IRQ_ONOFD2: + } else if (irq =3D=3D priv->irq[1]) { val =3D val & MC13783_IRQSENSE1_ONOFD2S ? 1 : 0; if (priv->flags & MC13783_PWRB_B2_POL_INVERT) val ^=3D 1; input_report_key(priv->pwr, priv->keymap[1], val); - break; - - case MC13783_IRQ_ONOFD3: + } else if (irq =3D=3D priv->irq[2]) { val =3D val & MC13783_IRQSENSE1_ONOFD3S ? 1 : 0; if (priv->flags & MC13783_PWRB_B3_POL_INVERT) val ^=3D 1; input_report_key(priv->pwr, priv->keymap[2], val); - break; } =20 input_sync(priv->pwr); @@ -96,6 +92,7 @@ static int mc13783_pwrbutton_probe(struct platform_device= *pdev) struct mc13783_pwrb *priv; int err =3D 0; int reg =3D 0; + int irq =3D 0; =20 pdata =3D dev_get_platdata(&pdev->dev); if (!pdata) { @@ -131,12 +128,20 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) if (pdata->b1on_flags & MC13783_BUTTON_RESET_EN) reg |=3D MC13783_POWER_CONTROL_2_ON1BRSTEN; =20 - err =3D mc13xxx_irq_request(mc13783, MC13783_IRQ_ONOFD1, - button_irq, "b1on", priv); - if (err) { + irq =3D platform_get_irq_byname(pdev, "b1on"); + + if (irq < 0) { dev_dbg(&pdev->dev, "Can't request irq\n"); goto free_mc13xxx_lock; } + + err =3D devm_request_any_context_irq(&pdev->dev, irq, button_irq, + IRQF_ONESHOT, "b1on", + priv); + if (err < 0) + goto free_mc13xxx_lock; + + priv->irq[0] =3D irq; } =20 if (pdata->b2on_flags & MC13783_BUTTON_ENABLE) { @@ -150,12 +155,20 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) if (pdata->b2on_flags & MC13783_BUTTON_RESET_EN) reg |=3D MC13783_POWER_CONTROL_2_ON2BRSTEN; =20 - err =3D mc13xxx_irq_request(mc13783, MC13783_IRQ_ONOFD2, - button_irq, "b2on", priv); - if (err) { + irq =3D platform_get_irq_byname(pdev, "b2on"); + + if (irq < 0) { dev_dbg(&pdev->dev, "Can't request irq\n"); - goto free_irq_b1; + goto free_mc13xxx_lock; } + + err =3D devm_request_any_context_irq(&pdev->dev, irq, button_irq, + IRQF_ONESHOT, "b2on", + priv); + if (err < 0) + goto free_mc13xxx_lock; + + priv->irq[1] =3D irq; } =20 if (pdata->b3on_flags & MC13783_BUTTON_ENABLE) { @@ -169,12 +182,20 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) if (pdata->b3on_flags & MC13783_BUTTON_RESET_EN) reg |=3D MC13783_POWER_CONTROL_2_ON3BRSTEN; =20 - err =3D mc13xxx_irq_request(mc13783, MC13783_IRQ_ONOFD3, - button_irq, "b3on", priv); - if (err) { + irq =3D platform_get_irq_byname(pdev, "b3on"); + + if (irq < 0) { dev_dbg(&pdev->dev, "Can't request irq: %d\n", err); - goto free_irq_b2; + goto free_mc13xxx_lock; } + + err =3D devm_request_any_context_irq(&pdev->dev, irq, button_irq, + IRQF_ONESHOT, "b3on", + priv); + if (err < 0) + goto free_mc13xxx_lock; + + priv->irq[2] =3D irq; } =20 mc13xxx_reg_rmw(mc13783, MC13783_REG_POWER_CONTROL_2, 0x3FE, reg); @@ -192,55 +213,21 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) err =3D input_register_device(pwr); if (err) { dev_dbg(&pdev->dev, "Can't register power button: %d\n", err); - goto free_irq; + return err; } =20 platform_set_drvdata(pdev, priv); =20 return 0; =20 -free_irq: - mc13xxx_lock(mc13783); - - if (pdata->b3on_flags & MC13783_BUTTON_ENABLE) - mc13xxx_irq_free(mc13783, MC13783_IRQ_ONOFD3, priv); - -free_irq_b2: - if (pdata->b2on_flags & MC13783_BUTTON_ENABLE) - mc13xxx_irq_free(mc13783, MC13783_IRQ_ONOFD2, priv); - -free_irq_b1: - if (pdata->b1on_flags & MC13783_BUTTON_ENABLE) - mc13xxx_irq_free(mc13783, MC13783_IRQ_ONOFD1, priv); - free_mc13xxx_lock: mc13xxx_unlock(mc13783); =20 return err; } =20 -static void mc13783_pwrbutton_remove(struct platform_device *pdev) -{ - struct mc13783_pwrb *priv =3D platform_get_drvdata(pdev); - const struct mc13xxx_buttons_platform_data *pdata; - - pdata =3D dev_get_platdata(&pdev->dev); - - mc13xxx_lock(priv->mc13783); - - if (pdata->b3on_flags & MC13783_BUTTON_ENABLE) - mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD3, priv); - if (pdata->b2on_flags & MC13783_BUTTON_ENABLE) - mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD2, priv); - if (pdata->b1on_flags & MC13783_BUTTON_ENABLE) - mc13xxx_irq_free(priv->mc13783, MC13783_IRQ_ONOFD1, priv); - - mc13xxx_unlock(priv->mc13783); -} - static struct platform_driver mc13783_pwrbutton_driver =3D { .probe =3D mc13783_pwrbutton_probe, - .remove =3D mc13783_pwrbutton_remove, .driver =3D { .name =3D "mc13783-pwrbutton", }, diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c index 091c9171b2b7..0791d9b4dec3 100644 --- a/drivers/mfd/mc13xxx-core.c +++ b/drivers/mfd/mc13xxx-core.c @@ -13,6 +13,7 @@ #include #include #include +#include =20 #include "mc13xxx.h" =20 @@ -46,6 +47,12 @@ =20 #define MC13XXX_ADC2 45 =20 +static const struct resource mc13783_button_resources[] =3D { + DEFINE_RES_IRQ_NAMED(MC13783_IRQ_ONOFD1, "b1on"), + DEFINE_RES_IRQ_NAMED(MC13783_IRQ_ONOFD2, "b2on"), + DEFINE_RES_IRQ_NAMED(MC13783_IRQ_ONOFD3, "b3on"), +}; + void mc13xxx_lock(struct mc13xxx *mc13xxx) { if (!mutex_trylock(&mc13xxx->lock)) { @@ -201,18 +208,22 @@ static void mc34708_print_revision(struct mc13xxx *mc= 13xxx, u32 revision) /* These are only exported for mc13xxx-i2c and mc13xxx-spi */ struct mc13xxx_variant mc13xxx_variant_mc13783 =3D { .name =3D "mc13783", + .button_resources =3D mc13783_button_resources, + .button_resources_size =3D ARRAY_SIZE(mc13783_button_resources), .print_revision =3D mc13xxx_print_revision, }; EXPORT_SYMBOL_GPL(mc13xxx_variant_mc13783); =20 struct mc13xxx_variant mc13xxx_variant_mc13892 =3D { .name =3D "mc13892", + .button_resources_size =3D 0, .print_revision =3D mc13xxx_print_revision, }; EXPORT_SYMBOL_GPL(mc13xxx_variant_mc13892); =20 struct mc13xxx_variant mc13xxx_variant_mc34708 =3D { .name =3D "mc34708", + .button_resources_size =3D 0, .print_revision =3D mc34708_print_revision, }; EXPORT_SYMBOL_GPL(mc13xxx_variant_mc34708); @@ -362,15 +373,18 @@ int mc13xxx_adc_do_conversion(struct mc13xxx *mc13xxx= , unsigned int mode, } EXPORT_SYMBOL_GPL(mc13xxx_adc_do_conversion); =20 -static int mc13xxx_add_subdevice_pdata(struct mc13xxx *mc13xxx, - const char *format, void *pdata, size_t pdata_size) +static int mc13xxx_add_subdevice_pdata_res(struct mc13xxx *mc13xxx, + const char *format, void *pdata, size_t pdata_size, + const struct resource *resources, int num_resources) { char buf[30]; const char *name =3D mc13xxx_get_chipname(mc13xxx); =20 struct mfd_cell cell =3D { - .platform_data =3D pdata, - .pdata_size =3D pdata_size, + .platform_data =3D pdata, + .pdata_size =3D pdata_size, + .resources =3D resources, + .num_resources =3D num_resources, }; =20 /* there is no asnprintf in the kernel :-( */ @@ -385,6 +399,12 @@ static int mc13xxx_add_subdevice_pdata(struct mc13xxx = *mc13xxx, regmap_irq_get_domain(mc13xxx->irq_data)); } =20 +static int mc13xxx_add_subdevice_pdata(struct mc13xxx *mc13xxx, + const char *format, void *pdata, size_t pdata_size) +{ + return mc13xxx_add_subdevice_pdata_res(mc13xxx, format, pdata, pdata_size= , NULL, 0); +} + static int mc13xxx_add_subdevice(struct mc13xxx *mc13xxx, const char *form= at) { return mc13xxx_add_subdevice_pdata(mc13xxx, format, NULL, 0); @@ -471,8 +491,10 @@ int mc13xxx_common_init(struct device *dev) &pdata->regulators, sizeof(pdata->regulators)); mc13xxx_add_subdevice_pdata(mc13xxx, "%s-led", pdata->leds, sizeof(*pdata->leds)); - mc13xxx_add_subdevice_pdata(mc13xxx, "%s-pwrbutton", - pdata->buttons, sizeof(*pdata->buttons)); + mc13xxx_add_subdevice_pdata_res(mc13xxx, "%s-pwrbutton", + pdata->buttons, sizeof(*pdata->buttons), + mc13xxx->variant->button_resources, + mc13xxx->variant->button_resources_size); if (mc13xxx->flags & MC13XXX_USE_CODEC) mc13xxx_add_subdevice_pdata(mc13xxx, "%s-codec", pdata->codec, sizeof(*pdata->codec)); @@ -482,7 +504,10 @@ int mc13xxx_common_init(struct device *dev) } else { mc13xxx_add_subdevice(mc13xxx, "%s-regulator"); mc13xxx_add_subdevice(mc13xxx, "%s-led"); - mc13xxx_add_subdevice(mc13xxx, "%s-pwrbutton"); + mc13xxx_add_subdevice_pdata_res(mc13xxx, "%s-pwrbutton", + NULL, 0, + mc13xxx->variant->button_resources, + mc13xxx->variant->button_resources_size); if (mc13xxx->flags & MC13XXX_USE_CODEC) mc13xxx_add_subdevice(mc13xxx, "%s-codec"); if (mc13xxx->flags & MC13XXX_USE_TOUCHSCREEN) diff --git a/drivers/mfd/mc13xxx.h b/drivers/mfd/mc13xxx.h index bd5ba9a0e14f..b13ae652f4ec 100644 --- a/drivers/mfd/mc13xxx.h +++ b/drivers/mfd/mc13xxx.h @@ -18,6 +18,8 @@ struct mc13xxx; =20 struct mc13xxx_variant { const char *name; + const struct resource *button_resources; + int button_resources_size; void (*print_revision)(struct mc13xxx *mc13xxx, u32 revision); }; =20 --=20 2.39.5 From nobody Thu Oct 2 16:34:35 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 14C962E173E; Sun, 14 Sep 2025 19:35:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878554; cv=none; b=P7UYgsZ74SOeunyehB0/9Lq8wUX3s4j6j0+zqgelCdey8DWq51bSJ1iutL5swQBxJ8Vmz0A0CWx0AuCMrYXOvmr6KfafGq1X4PnlVLG1HzVIvBK98yX3GfoM+B5GghZ3MW+kaqjDHj4Lh3PeIU1XJNhVDX74c/m9YCe6BWSZ1P0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878554; c=relaxed/simple; bh=f3nk6RtA5IYDVa82v6LnaN3lzAk1OrTgcNHp4zY+tDk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=XHGyUCsMybt1KlO6FpVb38uv4gJSaaqlc6mEWODI6p8hxo5y0/VkN7ZCMNxFFNpWe1XZrBy56WppKBhDhZIL/gV8e/bkZfpfbZuFdaj95Yxakt1b2q+bcKL/M5omDtVquY7bCZ2Rwqor2zkniZMDwcxN71YVNTOcUOVQtvedWxw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 58EJbPYx010635; Sun, 14 Sep 2025 19:37:25 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 58EJbPdC010630; Sun, 14 Sep 2025 19:37:25 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH v4 6/8] Input: mc13783-pwrbutton: convert pdata members to array Date: Sun, 14 Sep 2025 19:37:21 +0000 Message-Id: <20250914193723.10544-7-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250914193723.10544-1-akurz@blala.de> References: <20250914193723.10544-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" As preparation for the extension of support for all three mc13xxx variants, convert the members of mc13xxx_buttons_platform_data to arrays to allow index access within the next commit. Signed-off-by: Alexander Kurz --- drivers/input/misc/mc13783-pwrbutton.c | 42 +++++++++++++------------- include/linux/mfd/mc13xxx.h | 8 ++--- 2 files changed, 23 insertions(+), 27 deletions(-) diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc= 13783-pwrbutton.c index 20f68aab6edf..2ee115d77b1c 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c @@ -108,24 +108,24 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) if (!priv) return -ENOMEM; =20 - reg |=3D (pdata->b1on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON1BDBNC; - reg |=3D (pdata->b2on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON2BDBNC; - reg |=3D (pdata->b3on_flags & 0x3) << MC13783_POWER_CONTROL_2_ON3BDBNC; + reg |=3D (pdata->b_on_flags[0] & 0x3) << MC13783_POWER_CONTROL_2_ON1BDBNC; + reg |=3D (pdata->b_on_flags[1] & 0x3) << MC13783_POWER_CONTROL_2_ON2BDBNC; + reg |=3D (pdata->b_on_flags[2] & 0x3) << MC13783_POWER_CONTROL_2_ON3BDBNC; =20 priv->pwr =3D pwr; priv->mc13783 =3D mc13783; =20 mc13xxx_lock(mc13783); =20 - if (pdata->b1on_flags & MC13783_BUTTON_ENABLE) { - priv->keymap[0] =3D pdata->b1on_key; - if (pdata->b1on_key !=3D KEY_RESERVED) - __set_bit(pdata->b1on_key, pwr->keybit); + if (pdata->b_on_flags[0] & MC13783_BUTTON_ENABLE) { + priv->keymap[0] =3D pdata->b_on_key[0]; + if (pdata->b_on_key[0] !=3D KEY_RESERVED) + __set_bit(pdata->b_on_key[0], pwr->keybit); =20 - if (pdata->b1on_flags & MC13783_BUTTON_POL_INVERT) + if (pdata->b_on_flags[0] & MC13783_BUTTON_POL_INVERT) priv->flags |=3D MC13783_PWRB_B1_POL_INVERT; =20 - if (pdata->b1on_flags & MC13783_BUTTON_RESET_EN) + if (pdata->b_on_flags[0] & MC13783_BUTTON_RESET_EN) reg |=3D MC13783_POWER_CONTROL_2_ON1BRSTEN; =20 irq =3D platform_get_irq_byname(pdev, "b1on"); @@ -144,15 +144,15 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) priv->irq[0] =3D irq; } =20 - if (pdata->b2on_flags & MC13783_BUTTON_ENABLE) { - priv->keymap[1] =3D pdata->b2on_key; - if (pdata->b2on_key !=3D KEY_RESERVED) - __set_bit(pdata->b2on_key, pwr->keybit); + if (pdata->b_on_flags[1] & MC13783_BUTTON_ENABLE) { + priv->keymap[1] =3D pdata->b_on_key[1]; + if (pdata->b_on_key[1] !=3D KEY_RESERVED) + __set_bit(pdata->b_on_key[1], pwr->keybit); =20 - if (pdata->b2on_flags & MC13783_BUTTON_POL_INVERT) + if (pdata->b_on_flags[1] & MC13783_BUTTON_POL_INVERT) priv->flags |=3D MC13783_PWRB_B2_POL_INVERT; =20 - if (pdata->b2on_flags & MC13783_BUTTON_RESET_EN) + if (pdata->b_on_flags[1] & MC13783_BUTTON_RESET_EN) reg |=3D MC13783_POWER_CONTROL_2_ON2BRSTEN; =20 irq =3D platform_get_irq_byname(pdev, "b2on"); @@ -171,15 +171,15 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) priv->irq[1] =3D irq; } =20 - if (pdata->b3on_flags & MC13783_BUTTON_ENABLE) { - priv->keymap[2] =3D pdata->b3on_key; - if (pdata->b3on_key !=3D KEY_RESERVED) - __set_bit(pdata->b3on_key, pwr->keybit); + if (pdata->b_on_flags[2] & MC13783_BUTTON_ENABLE) { + priv->keymap[2] =3D pdata->b_on_key[2]; + if (pdata->b_on_key[2] !=3D KEY_RESERVED) + __set_bit(pdata->b_on_key[2], pwr->keybit); =20 - if (pdata->b3on_flags & MC13783_BUTTON_POL_INVERT) + if (pdata->b_on_flags[2] & MC13783_BUTTON_POL_INVERT) priv->flags |=3D MC13783_PWRB_B3_POL_INVERT; =20 - if (pdata->b3on_flags & MC13783_BUTTON_RESET_EN) + if (pdata->b_on_flags[2] & MC13783_BUTTON_RESET_EN) reg |=3D MC13783_POWER_CONTROL_2_ON3BRSTEN; =20 irq =3D platform_get_irq_byname(pdev, "b3on"); diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h index dd46fe424a80..4437ab80fcf8 100644 --- a/include/linux/mfd/mc13xxx.h +++ b/include/linux/mfd/mc13xxx.h @@ -181,12 +181,8 @@ struct mc13xxx_leds_platform_data { #define MC13783_BUTTON_RESET_EN (1 << 4) =20 struct mc13xxx_buttons_platform_data { - int b1on_flags; - unsigned short b1on_key; - int b2on_flags; - unsigned short b2on_key; - int b3on_flags; - unsigned short b3on_key; + int b_on_flags[3]; + unsigned int b_on_key[3]; }; =20 #define MC13783_TS_ATO_FIRST false --=20 2.39.5 From nobody Thu Oct 2 16:34:35 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C9E252E2DC4; Sun, 14 Sep 2025 19:35:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878559; cv=none; b=RBxEF0XWvNEyly6Nq8pS61nTVwOuUld1DlKb7kNIMEAQqvDrYF6eZ6FKnwGRF+v8wOr6t1hIberDM1QaDJ2J+JeO79gBtpH5PV2+q06q0bteSuu6HJDqtjTtyx3+brZFiK0X7FKp00tDlkuoeBbUr08NnAc6Iul8wWEuoEpfxek= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878559; c=relaxed/simple; bh=Xm7JSBgKfHMkXzX8LVvdjw7HSVFlIMZc13DONmV0JJs=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=AddvTrVhJHAGLFZXBWGEAw4QckziR38O2RvpFLmg580rimQAn3i2OEznbHY+LCldMsmGI61le5L9b8lSG9OgCqls4v7fQ+eOeRLwgL1C/8NmHBuGMN/Va5xEdBkk2lYHWURJ65FZErT9oAqayX0/5oYBNVcsR4QYXy8eeg7m7hA= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 58EJbQkO010643; Sun, 14 Sep 2025 19:37:26 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 58EJbQ8V010638; Sun, 14 Sep 2025 19:37:26 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH v4 7/8] Input: mc13783-pwrbutton: enable other mc13xxx PMIC Date: Sun, 14 Sep 2025 19:37:22 +0000 Message-Id: <20250914193723.10544-8-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250914193723.10544-1-akurz@blala.de> References: <20250914193723.10544-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" All three mc13xxx types feature two common power buttons referred in the datasheets as ONOFD[12] (mc13783) and PWRON[12] (mc13892/mc34708). A third button is available on the mc13783 and mc13892 models, which however uses distinct interrupt register bits. Add support for mc13892/mc34708 to support all available power buttons in the mc13xxx series. Signed-off-by: Alexander Kurz --- drivers/input/misc/Kconfig | 4 +- drivers/input/misc/mc13783-pwrbutton.c | 131 +++++++++++-------------- drivers/mfd/mc13xxx-core.c | 22 ++++- include/linux/mfd/mc13783.h | 4 +- include/linux/mfd/mc13892.h | 1 + include/linux/mfd/mc13xxx.h | 2 + 6 files changed, 84 insertions(+), 80 deletions(-) diff --git a/drivers/input/misc/Kconfig b/drivers/input/misc/Kconfig index 0fb21c99a5e3..b66e920369f2 100644 --- a/drivers/input/misc/Kconfig +++ b/drivers/input/misc/Kconfig @@ -276,8 +276,8 @@ config INPUT_MC13783_PWRBUTTON tristate "MC13783 ON buttons" depends on MFD_MC13XXX help - Support the ON buttons of MC13783 PMIC as an input device - reporting power button status. + Support the ON buttons of MC13783/MC13892/MC34708 PMIC as an input + device reporting power button status. =20 To compile this driver as a module, choose M here: the module will be called mc13783-pwrbutton. diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc= 13783-pwrbutton.c index 2ee115d77b1c..08618c59197f 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c @@ -30,9 +30,16 @@ #include #include =20 +struct mc13xxx_button_devtype { + int button_id_max; + const char *irq_name[3]; + int irq_sense_reg[3]; +}; + struct mc13783_pwrb { struct input_dev *pwr; struct mc13xxx *mc13783; + const struct mc13xxx_button_devtype *devtype; int flags; unsigned short keymap[3]; int irq[3]; @@ -43,9 +50,6 @@ struct mc13783_pwrb { #define MC13783_PWRB_B3_POL_INVERT (1 << 2) =20 #define MC13783_REG_INTERRUPT_SENSE_1 5 -#define MC13783_IRQSENSE1_ONOFD1S (1 << 3) -#define MC13783_IRQSENSE1_ONOFD2S (1 << 4) -#define MC13783_IRQSENSE1_ONOFD3S (1 << 5) =20 #define MC13783_REG_POWER_CONTROL_2 15 #define MC13783_POWER_CONTROL_2_ON1BDBNC 4 @@ -63,17 +67,17 @@ static irqreturn_t button_irq(int irq, void *_priv) mc13xxx_reg_read(priv->mc13783, MC13783_REG_INTERRUPT_SENSE_1, &val); =20 if (irq =3D=3D priv->irq[0]) { - val =3D val & MC13783_IRQSENSE1_ONOFD1S ? 1 : 0; + val =3D val & (1 << priv->devtype->irq_sense_reg[0]) ? 1 : 0; if (priv->flags & MC13783_PWRB_B1_POL_INVERT) val ^=3D 1; input_report_key(priv->pwr, priv->keymap[0], val); } else if (irq =3D=3D priv->irq[1]) { - val =3D val & MC13783_IRQSENSE1_ONOFD2S ? 1 : 0; + val =3D val & (1 << priv->devtype->irq_sense_reg[1]) ? 1 : 0; if (priv->flags & MC13783_PWRB_B2_POL_INVERT) val ^=3D 1; input_report_key(priv->pwr, priv->keymap[1], val); - } else if (irq =3D=3D priv->irq[2]) { - val =3D val & MC13783_IRQSENSE1_ONOFD3S ? 1 : 0; + } else if (irq =3D=3D priv->irq[2] && priv->devtype->button_id_max >=3D 2= ) { + val =3D val & (1 << priv->devtype->irq_sense_reg[2]) ? 1 : 0; if (priv->flags & MC13783_PWRB_B3_POL_INVERT) val ^=3D 1; input_report_key(priv->pwr, priv->keymap[2], val); @@ -88,6 +92,8 @@ static int mc13783_pwrbutton_probe(struct platform_device= *pdev) { const struct mc13xxx_buttons_platform_data *pdata; struct mc13xxx *mc13783 =3D dev_get_drvdata(pdev->dev.parent); + struct mc13xxx_button_devtype *devtype =3D + (struct mc13xxx_button_devtype *)pdev->id_entry->driver_data; struct input_dev *pwr; struct mc13783_pwrb *priv; int err =3D 0; @@ -108,54 +114,36 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) if (!priv) return -ENOMEM; =20 + if (devtype->button_id_max < 2 && pdata->b_on_flags[2] & 0x3) { + dev_err(&pdev->dev, "button not supported\n"); + return -ENODEV; + } + reg |=3D (pdata->b_on_flags[0] & 0x3) << MC13783_POWER_CONTROL_2_ON1BDBNC; reg |=3D (pdata->b_on_flags[1] & 0x3) << MC13783_POWER_CONTROL_2_ON2BDBNC; reg |=3D (pdata->b_on_flags[2] & 0x3) << MC13783_POWER_CONTROL_2_ON3BDBNC; =20 priv->pwr =3D pwr; priv->mc13783 =3D mc13783; + priv->devtype =3D devtype; =20 mc13xxx_lock(mc13783); =20 - if (pdata->b_on_flags[0] & MC13783_BUTTON_ENABLE) { - priv->keymap[0] =3D pdata->b_on_key[0]; - if (pdata->b_on_key[0] !=3D KEY_RESERVED) - __set_bit(pdata->b_on_key[0], pwr->keybit); + for (int i =3D 0; i < devtype->button_id_max; i++) { + if ((pdata->b_on_flags[i] & MC13783_BUTTON_ENABLE) =3D=3D 0) + continue; =20 - if (pdata->b_on_flags[0] & MC13783_BUTTON_POL_INVERT) - priv->flags |=3D MC13783_PWRB_B1_POL_INVERT; + priv->keymap[i] =3D pdata->b_on_key[i]; + if (pdata->b_on_key[i] !=3D KEY_RESERVED) + __set_bit(pdata->b_on_key[i], pwr->keybit); =20 - if (pdata->b_on_flags[0] & MC13783_BUTTON_RESET_EN) - reg |=3D MC13783_POWER_CONTROL_2_ON1BRSTEN; + if (pdata->b_on_flags[i] & MC13783_BUTTON_POL_INVERT) + priv->flags |=3D (MC13783_PWRB_B1_POL_INVERT << i); =20 - irq =3D platform_get_irq_byname(pdev, "b1on"); + if (pdata->b_on_flags[i] & MC13783_BUTTON_RESET_EN) + reg |=3D (MC13783_POWER_CONTROL_2_ON1BRSTEN << i); =20 - if (irq < 0) { - dev_dbg(&pdev->dev, "Can't request irq\n"); - goto free_mc13xxx_lock; - } - - err =3D devm_request_any_context_irq(&pdev->dev, irq, button_irq, - IRQF_ONESHOT, "b1on", - priv); - if (err < 0) - goto free_mc13xxx_lock; - - priv->irq[0] =3D irq; - } - - if (pdata->b_on_flags[1] & MC13783_BUTTON_ENABLE) { - priv->keymap[1] =3D pdata->b_on_key[1]; - if (pdata->b_on_key[1] !=3D KEY_RESERVED) - __set_bit(pdata->b_on_key[1], pwr->keybit); - - if (pdata->b_on_flags[1] & MC13783_BUTTON_POL_INVERT) - priv->flags |=3D MC13783_PWRB_B2_POL_INVERT; - - if (pdata->b_on_flags[1] & MC13783_BUTTON_RESET_EN) - reg |=3D MC13783_POWER_CONTROL_2_ON2BRSTEN; - - irq =3D platform_get_irq_byname(pdev, "b2on"); + irq =3D platform_get_irq_byname(pdev, devtype->irq_name[i]); =20 if (irq < 0) { dev_dbg(&pdev->dev, "Can't request irq\n"); @@ -163,39 +151,12 @@ static int mc13783_pwrbutton_probe(struct platform_de= vice *pdev) } =20 err =3D devm_request_any_context_irq(&pdev->dev, irq, button_irq, - IRQF_ONESHOT, "b2on", - priv); + IRQF_ONESHOT, devtype->irq_name[i], + priv); if (err < 0) goto free_mc13xxx_lock; =20 - priv->irq[1] =3D irq; - } - - if (pdata->b_on_flags[2] & MC13783_BUTTON_ENABLE) { - priv->keymap[2] =3D pdata->b_on_key[2]; - if (pdata->b_on_key[2] !=3D KEY_RESERVED) - __set_bit(pdata->b_on_key[2], pwr->keybit); - - if (pdata->b_on_flags[2] & MC13783_BUTTON_POL_INVERT) - priv->flags |=3D MC13783_PWRB_B3_POL_INVERT; - - if (pdata->b_on_flags[2] & MC13783_BUTTON_RESET_EN) - reg |=3D MC13783_POWER_CONTROL_2_ON3BRSTEN; - - irq =3D platform_get_irq_byname(pdev, "b3on"); - - if (irq < 0) { - dev_dbg(&pdev->dev, "Can't request irq: %d\n", err); - goto free_mc13xxx_lock; - } - - err =3D devm_request_any_context_irq(&pdev->dev, irq, button_irq, - IRQF_ONESHOT, "b3on", - priv); - if (err < 0) - goto free_mc13xxx_lock; - - priv->irq[2] =3D irq; + priv->irq[i] =3D irq; } =20 mc13xxx_reg_rmw(mc13783, MC13783_REG_POWER_CONTROL_2, 0x3FE, reg); @@ -226,7 +187,33 @@ static int mc13783_pwrbutton_probe(struct platform_dev= ice *pdev) return err; } =20 +static const struct mc13xxx_button_devtype mc13783_button_devtype =3D { + .button_id_max =3D 2, + .irq_name =3D { "b1on", "b2on", "b3on" }, + .irq_sense_reg =3D { 3, 4, 5 }, +}; + +static const struct mc13xxx_button_devtype mc13892_button_devtype =3D { + .button_id_max =3D 2, + .irq_name =3D { "b1on", "b2on", "b3on" }, + .irq_sense_reg =3D { 3, 4, 2 }, +}; + +static const struct mc13xxx_button_devtype mc34708_button_devtype =3D { + .button_id_max =3D 1, + .irq_name =3D { "b1on", "b2on" }, + .irq_sense_reg =3D { 3, 4 }, +}; + +static const struct platform_device_id mc13xxx_pwrbutton_idtable[] =3D { + { "mc13783-pwrbutton", (kernel_ulong_t)&mc13783_button_devtype }, + { "mc13892-pwrbutton", (kernel_ulong_t)&mc13892_button_devtype }, + { "mc34708-pwrbutton", (kernel_ulong_t)&mc34708_button_devtype }, + { /* sentinel */ } +}; + static struct platform_driver mc13783_pwrbutton_driver =3D { + .id_table =3D mc13xxx_pwrbutton_idtable, .probe =3D mc13783_pwrbutton_probe, .driver =3D { .name =3D "mc13783-pwrbutton", diff --git a/drivers/mfd/mc13xxx-core.c b/drivers/mfd/mc13xxx-core.c index 0791d9b4dec3..a620edab432e 100644 --- a/drivers/mfd/mc13xxx-core.c +++ b/drivers/mfd/mc13xxx-core.c @@ -14,6 +14,7 @@ #include #include #include +#include =20 #include "mc13xxx.h" =20 @@ -48,11 +49,22 @@ #define MC13XXX_ADC2 45 =20 static const struct resource mc13783_button_resources[] =3D { - DEFINE_RES_IRQ_NAMED(MC13783_IRQ_ONOFD1, "b1on"), - DEFINE_RES_IRQ_NAMED(MC13783_IRQ_ONOFD2, "b2on"), + DEFINE_RES_IRQ_NAMED(MC13XXX_IRQ_PWRON1, "b1on"), + DEFINE_RES_IRQ_NAMED(MC13XXX_IRQ_PWRON2, "b2on"), DEFINE_RES_IRQ_NAMED(MC13783_IRQ_ONOFD3, "b3on"), }; =20 +static const struct resource mc13892_button_resources[] =3D { + DEFINE_RES_IRQ_NAMED(MC13XXX_IRQ_PWRON1, "b1on"), + DEFINE_RES_IRQ_NAMED(MC13XXX_IRQ_PWRON2, "b2on"), + DEFINE_RES_IRQ_NAMED(MC13892_IRQ_PWRON3, "b3on"), +}; + +static const struct resource mc34708_button_resources[] =3D { + DEFINE_RES_IRQ_NAMED(MC13XXX_IRQ_PWRON1, "b1on"), + DEFINE_RES_IRQ_NAMED(MC13XXX_IRQ_PWRON2, "b2on"), +}; + void mc13xxx_lock(struct mc13xxx *mc13xxx) { if (!mutex_trylock(&mc13xxx->lock)) { @@ -216,14 +228,16 @@ EXPORT_SYMBOL_GPL(mc13xxx_variant_mc13783); =20 struct mc13xxx_variant mc13xxx_variant_mc13892 =3D { .name =3D "mc13892", - .button_resources_size =3D 0, + .button_resources =3D mc13892_button_resources, + .button_resources_size =3D ARRAY_SIZE(mc13892_button_resources), .print_revision =3D mc13xxx_print_revision, }; EXPORT_SYMBOL_GPL(mc13xxx_variant_mc13892); =20 struct mc13xxx_variant mc13xxx_variant_mc34708 =3D { .name =3D "mc34708", - .button_resources_size =3D 0, + .button_resources =3D mc34708_button_resources, + .button_resources_size =3D ARRAY_SIZE(mc34708_button_resources), .print_revision =3D mc34708_print_revision, }; EXPORT_SYMBOL_GPL(mc13xxx_variant_mc34708); diff --git a/include/linux/mfd/mc13783.h b/include/linux/mfd/mc13783.h index c25b1676741b..ab6db774e1fa 100644 --- a/include/linux/mfd/mc13783.h +++ b/include/linux/mfd/mc13783.h @@ -65,8 +65,8 @@ #define MC13783_IRQ_UDM 23 #define MC13783_IRQ_1HZ MC13XXX_IRQ_1HZ #define MC13783_IRQ_TODA MC13XXX_IRQ_TODA -#define MC13783_IRQ_ONOFD1 27 -#define MC13783_IRQ_ONOFD2 28 +#define MC13783_IRQ_ONOFD1 MC13XXX_IRQ_PWRON1 +#define MC13783_IRQ_ONOFD2 MC13XXX_IRQ_PWRON2 #define MC13783_IRQ_ONOFD3 29 #define MC13783_IRQ_SYSRST MC13XXX_IRQ_SYSRST #define MC13783_IRQ_RTCRST MC13XXX_IRQ_RTCRST diff --git a/include/linux/mfd/mc13892.h b/include/linux/mfd/mc13892.h index 880cd949d12a..567d527825df 100644 --- a/include/linux/mfd/mc13892.h +++ b/include/linux/mfd/mc13892.h @@ -33,4 +33,5 @@ #define MC13892_PWGT2SPI 22 #define MC13892_VCOINCELL 23 =20 +#define MC13892_IRQ_PWRON3 26 #endif diff --git a/include/linux/mfd/mc13xxx.h b/include/linux/mfd/mc13xxx.h index 4437ab80fcf8..71c7d3614d4c 100644 --- a/include/linux/mfd/mc13xxx.h +++ b/include/linux/mfd/mc13xxx.h @@ -61,6 +61,8 @@ int mc13xxx_irq_unmask(struct mc13xxx *mc13xxx, int irq); #define MC13XXX_IRQ_LOBATH 14 #define MC13XXX_IRQ_1HZ 24 #define MC13XXX_IRQ_TODA 25 +#define MC13XXX_IRQ_PWRON1 27 +#define MC13XXX_IRQ_PWRON2 28 #define MC13XXX_IRQ_SYSRST 30 #define MC13XXX_IRQ_RTCRST 31 #define MC13XXX_IRQ_PC 32 --=20 2.39.5 From nobody Thu Oct 2 16:34:35 2025 Received: from vs81.iboxed.net (vs10.datenmanufaktur-hosting.net [213.160.73.65]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C23A92E11B8; Sun, 14 Sep 2025 19:35:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=213.160.73.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878552; cv=none; b=NqEt7pV+6W/VbdxqcHxMK7wcnHEnZNvkFiONtWxY7Gu9rKBq7BalLVPqqagBv802OAvzJaHuDJ6RNKjasSYj+Pz+LqKKUXOHrw85Izxql8mJNvXLjBHVStG5jxPqVbv3ELDqFWEM7NzFLMr5QgkFo3ETs2nJcp+fTJsN2/krgqU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757878552; c=relaxed/simple; bh=wQiby7wRPkklNCARvA/jcIM2aN/AonZNYqQIMPKvH1c=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=TqSzHPfzNuLG2GWQ81GfjukecERciHLFueqhy8azhL/4u1rYN5tyEJaroOIhkRyyXlK9qHDK5wUDUKYiiqshpgV9DjnyBhuK5g7+zqxUICOEODk0gqR6RY4Lhv+k1wb6Ak7i9H70+idH4wfIamFYBO1OVNzxa16J0uao7BPWpkg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de; spf=pass smtp.mailfrom=blala.de; arc=none smtp.client-ip=213.160.73.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=blala.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=blala.de Received: from blala.de (localhost [127.0.0.1]) by vs81.iboxed.net (8.15.2/8.15.2/Debian-14~deb10u1) with ESMTP id 58EJbQuU010651; Sun, 14 Sep 2025 19:37:26 GMT Received: (from akurz@localhost) by blala.de (8.15.2/8.15.2/Submit) id 58EJbQEI010646; Sun, 14 Sep 2025 19:37:26 GMT From: Alexander Kurz To: Lee Jones , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Dmitry Torokhov , Dzmitry Sankouski , "Dr. David Alan Gilbert" , Heiko Stuebner , =?UTF-8?q?Uwe=20Kleine-K=C3=B6nig?= , devicetree@vger.kernel.org, linux-input@vger.kernel.org Cc: linux-kernel@vger.kernel.org, Alexander Kurz Subject: [PATCH v4 8/8] Input: mc13783-pwrbutton: add OF support Date: Sun, 14 Sep 2025 19:37:23 +0000 Message-Id: <20250914193723.10544-9-akurz@blala.de> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20250914193723.10544-1-akurz@blala.de> References: <20250914193723.10544-1-akurz@blala.de> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Add OF support for the mc13783-pwrbutton so that it can be used with modern DT based systems. Signed-off-by: Alexander Kurz --- drivers/input/misc/mc13783-pwrbutton.c | 82 ++++++++++++++++++++++++-- 1 file changed, 76 insertions(+), 6 deletions(-) diff --git a/drivers/input/misc/mc13783-pwrbutton.c b/drivers/input/misc/mc= 13783-pwrbutton.c index 08618c59197f..46bef0af46ee 100644 --- a/drivers/input/misc/mc13783-pwrbutton.c +++ b/drivers/input/misc/mc13783-pwrbutton.c @@ -27,6 +27,7 @@ #include #include #include +#include #include #include =20 @@ -88,8 +89,74 @@ static irqreturn_t button_irq(int irq, void *_priv) return IRQ_HANDLED; } =20 -static int mc13783_pwrbutton_probe(struct platform_device *pdev) +static struct mc13xxx_buttons_platform_data __init *mc13xxx_pwrbutton_prob= e_dt( + struct platform_device *pdev) { + struct mc13xxx_buttons_platform_data *pdata; + struct fwnode_handle *child; + struct device *dev =3D &pdev->dev; + struct mc13xxx_button_devtype *devtype =3D + (struct mc13xxx_button_devtype *)platform_get_device_id(pdev)->driver_da= ta; + + pdata =3D devm_kzalloc(dev, sizeof(*pdata), GFP_KERNEL); + if (!pdata) + return ERR_PTR(-ENOMEM); + + struct fwnode_handle *parent __free(fwnode_handle) =3D + device_get_named_child_node(dev->parent, "buttons"); + if (!parent) + return ERR_PTR(-ENODATA); + + fwnode_for_each_named_child_node(parent, child, "onkey") { + u32 idx; + u8 dbnc =3D MC13783_BUTTON_DBNC_30MS; + u16 dbnc_ms; + + if (fwnode_property_read_u32(child, "reg", &idx)) + continue; + + if (idx > devtype->button_id_max) { + dev_warn(dev, "reg out of range\n"); + continue; + } + + fwnode_property_read_u16(child, "debounce-delay-ms", &dbnc_ms); + switch (dbnc_ms) { + case 0: + dbnc =3D MC13783_BUTTON_DBNC_0MS; + break; + case 30: + dbnc =3D MC13783_BUTTON_DBNC_30MS; + break; + case 150: + dbnc =3D MC13783_BUTTON_DBNC_150MS; + break; + case 750: + dbnc =3D MC13783_BUTTON_DBNC_750MS; + break; + default: + dev_warn(dev, "invalid debounce-delay-ms value\n"); + continue; + } + + if (fwnode_property_read_u32(child, "linux,code", &pdata->b_on_key[idx])) + continue; + + if (fwnode_property_read_bool(child, "active-low")) + pdata->b_on_flags[idx] |=3D MC13783_BUTTON_POL_INVERT; + + if (fwnode_property_read_bool(child, "fsl,enable-reset")) + pdata->b_on_flags[idx] |=3D MC13783_BUTTON_RESET_EN; + + pdata->b_on_flags[idx] |=3D MC13783_BUTTON_ENABLE | dbnc; + } + + return pdata; +} + +static int __init mc13783_pwrbutton_probe(struct platform_device *pdev) +{ + struct device *dev =3D &pdev->dev; const struct mc13xxx_buttons_platform_data *pdata; struct mc13xxx *mc13783 =3D dev_get_drvdata(pdev->dev.parent); struct mc13xxx_button_devtype *devtype =3D @@ -101,9 +168,13 @@ static int mc13783_pwrbutton_probe(struct platform_dev= ice *pdev) int irq =3D 0; =20 pdata =3D dev_get_platdata(&pdev->dev); - if (!pdata) { - dev_err(&pdev->dev, "missing platform data\n"); - return -ENODEV; + if (dev->parent->of_node) { + pdata =3D mc13xxx_pwrbutton_probe_dt(pdev); + if (IS_ERR(pdata)) + return PTR_ERR(pdata); + } else if (!pdata) { + dev_err(dev, "missing platform data\n"); + return -ENODATA; } =20 pwr =3D devm_input_allocate_device(&pdev->dev); @@ -214,13 +285,12 @@ static const struct platform_device_id mc13xxx_pwrbut= ton_idtable[] =3D { =20 static struct platform_driver mc13783_pwrbutton_driver =3D { .id_table =3D mc13xxx_pwrbutton_idtable, - .probe =3D mc13783_pwrbutton_probe, .driver =3D { .name =3D "mc13783-pwrbutton", }, }; =20 -module_platform_driver(mc13783_pwrbutton_driver); +module_platform_driver_probe(mc13783_pwrbutton_driver, mc13783_pwrbutton_p= robe); =20 MODULE_ALIAS("platform:mc13783-pwrbutton"); MODULE_DESCRIPTION("MC13783 Power Button"); --=20 2.39.5