From nobody Thu Apr 9 11:56:33 2026 Received: from metis.whiteo.stw.pengutronix.de (metis.whiteo.stw.pengutronix.de [185.203.201.7]) (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 797123B8939 for ; Mon, 9 Mar 2026 13:49:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.203.201.7 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773064186; cv=none; b=uzVol7pogLxra4kOI7LUmqDOTLSY+xR/yyBbxftB68MIxkt+Oo89/VGKaJlQwZIYiD3QPMtegOXdBq3QhEsrjBJsdBMgS+1kSgaHKDrMOiOyNncpzh0rcS4NZZiyQxLe7sAk+u0nRbMu3AxOI9hkps2rTYN1oAj3YT8IG7ZEMCU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773064186; c=relaxed/simple; bh=9d3h03P42Cdvda2XkFTeus4f1oyw8dBft79tJ70bjRQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=RsYmSg4zdg41iAz97QzgojJXlacRQOR2T7oty8Egy3pZQVt1xEXXifXb4a/FIiXvrooNxIs8eC2Fk1mR46Do2JUzV+zbQWSDHlf0TEjGFyApJ8phkSTR3KzLlzJMxsGs/069dk1/N7BmSPsUalqKLcMnRly6tHZ2f/2uEZqd2TM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de; spf=pass smtp.mailfrom=pengutronix.de; arc=none smtp.client-ip=185.203.201.7 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=pengutronix.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=pengutronix.de Received: from drehscheibe.grey.stw.pengutronix.de ([2a0a:edc0:0:c01:1d::a2]) by metis.whiteo.stw.pengutronix.de with esmtps (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1vzaz5-0006ff-Ed; Mon, 09 Mar 2026 14:49:23 +0100 Received: from dude04.red.stw.pengutronix.de ([2a0a:edc0:0:1101:1d::ac] helo=dude04) by drehscheibe.grey.stw.pengutronix.de with esmtps (TLS1.3) tls TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384 (Exim 4.96) (envelope-from ) id 1vzaz2-004XYc-1Y; Mon, 09 Mar 2026 14:49:21 +0100 Received: from ore by dude04 with local (Exim 4.98.2) (envelope-from ) id 1vzaz3-0000000833g-3AFj; Mon, 09 Mar 2026 14:49:21 +0100 From: Oleksij Rempel To: Guenter Roeck , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Lee Jones , Peter Rosin , Linus Walleij Cc: Oleksij Rempel , kernel@pengutronix.de, linux-kernel@vger.kernel.org, devicetree@vger.kernel.org, linux-hwmon@vger.kernel.org, linux-gpio@vger.kernel.org, David Jander Subject: [PATCH v3 1/7] dt-bindings: mfd: add NXP MC33978/MC34978 MSDI Date: Mon, 9 Mar 2026 14:49:12 +0100 Message-ID: <20260309134920.1918294-2-o.rempel@pengutronix.de> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260309134920.1918294-1-o.rempel@pengutronix.de> References: <20260309134920.1918294-1-o.rempel@pengutronix.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 X-SA-Exim-Connect-IP: 2a0a:edc0:0:c01:1d::a2 X-SA-Exim-Mail-From: ore@pengutronix.de X-SA-Exim-Scanned: No (on metis.whiteo.stw.pengutronix.de); SAEximRunCond expanded to false X-PTX-Original-Recipient: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Add device tree binding documentation for the NXP MC33978 and MC34978 Multiple Switch Detection Interface (MSDI) devices. These ICs monitor up to 22 mechanical switch contacts in automotive and industrial environments. They provide configurable wetting currents to break through contact oxidation and feature extensive hardware protection against thermal overload and voltage transients (load dumps/brown-outs). The device interfaces via SPI and provides multiple functions. To accurately represent the hardware without unnecessary DT overhead, the binding is structured as follows: - pinctrl: A dedicated child node managing the 22 switch inputs (SG/SP pins) and their GPIO configurations. - hwmon: Integrated into the parent node, exposing critical hardware faults (OT, OV, UV) and static voltage/temperature thresholds. - mux: Integrated into the parent node, controlling the 24-to-1 analog multiplexer to route pin voltages, internal temperature, or battery voltage to an external SoC ADC. Signed-off-by: Oleksij Rempel --- changes v3: - Drop regular expression pattern from pinctrl child node and define it as a standard property - Reorder required properties list in MFD binding - Remove stray blank line from the MFD binding devicetree example - Replace unevaluatedProperties with additionalProperties in the pinctrl binding changes v2: - Squashed MFD, pinctrl, hwmon, and mux bindings into a single patch - Removed the empty hwmon child node - Folded the mux-controller node into the parent MFD node - Added vbatp-supply and vddq-supply to the required properties block - Changed the example node name from mc33978@0 to gpio@0 - Removed unnecessary literal block scalars (|) from descriptions - Documented SG, SP, and SB pin acronyms in the pinctrl description - Added consumer polarity guidance (GPIO_ACTIVE_LOW/HIGH) for SG/SB inputs, with a note on output circuit dependency - Updated commit message --- .../devicetree/bindings/mfd/nxp,mc33978.yaml | 112 ++++++++++++++++++ .../bindings/pinctrl/nxp,mc33978-pinctrl.yaml | 82 +++++++++++++ 2 files changed, 194 insertions(+) create mode 100644 Documentation/devicetree/bindings/mfd/nxp,mc33978.yaml create mode 100644 Documentation/devicetree/bindings/pinctrl/nxp,mc33978-p= inctrl.yaml diff --git a/Documentation/devicetree/bindings/mfd/nxp,mc33978.yaml b/Docum= entation/devicetree/bindings/mfd/nxp,mc33978.yaml new file mode 100644 index 000000000000..23520315d484 --- /dev/null +++ b/Documentation/devicetree/bindings/mfd/nxp,mc33978.yaml @@ -0,0 +1,112 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/mfd/nxp,mc33978.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: NXP MC33978/MC34978 Multiple Switch Detection Interface + +maintainers: + - David Jander + - Oleksij Rempel + +description: + The MC33978 and MC34978 are Multiple Switch Detection Interface (MSDI) + devices with 22 switch inputs, integrated fault detection, and analog + multiplexer (AMUX) for voltage/temperature monitoring. + +allOf: + - $ref: /schemas/spi/spi-peripheral-props.yaml# + +properties: + $nodename: + pattern: "^gpio(@.*)?$" + + compatible: + enum: + - nxp,mc33978 + - nxp,mc34978 + + reg: + maxItems: 1 + description: SPI chip select number + + spi-max-frequency: + maximum: 8000000 + description: Maximum SPI clock frequency (up to 8 MHz) + + interrupts: + maxItems: 1 + description: + INT_B pin interrupt. Active-low, indicates pin state changes or + fault conditions. + + interrupt-controller: true + + '#interrupt-cells': + const: 2 + description: + First cell is the IRQ number (0-21 for pins, 22 for faults). + Second cell is the trigger type (IRQ_TYPE_* from interrupt-controlle= r.h). + + '#mux-control-cells': + const: 0 + description: + Present if the device AMUX selector is used as a mux provider. + Consumers (e.g. io-channel-mux) must provide settle-time-us for the + external ADC sampling path. + + vddq-supply: + description: Digital supply voltage + + vbatp-supply: + description: Battery/power supply + + pinctrl: + type: object + $ref: /schemas/pinctrl/nxp,mc33978-pinctrl.yaml# + description: + Pinctrl and GPIO controller child node for the 22 switch inputs. + +required: + - compatible + - reg + - interrupts + - interrupt-controller + - '#interrupt-cells' + - vddq-supply + - vbatp-supply + +unevaluatedProperties: false + +examples: + - | + #include + #include + + spi { + #address-cells =3D <1>; + #size-cells =3D <0>; + + msdi: gpio@0 { + compatible =3D "nxp,mc33978"; + reg =3D <0>; + spi-max-frequency =3D <4000000>; + + interrupt-parent =3D <&gpiog>; + interrupts =3D <9 IRQ_TYPE_LEVEL_LOW>; + interrupt-controller; + #interrupt-cells =3D <2>; + + vddq-supply =3D <®_3v3>; + vbatp-supply =3D <®_12v>; + + #mux-control-cells =3D <0>; + + pinctrl { + compatible =3D "nxp,mc33978-pinctrl"; + gpio-controller; + #gpio-cells =3D <2>; + }; + }; + }; diff --git a/Documentation/devicetree/bindings/pinctrl/nxp,mc33978-pinctrl.= yaml b/Documentation/devicetree/bindings/pinctrl/nxp,mc33978-pinctrl.yaml new file mode 100644 index 000000000000..ba946906557c --- /dev/null +++ b/Documentation/devicetree/bindings/pinctrl/nxp,mc33978-pinctrl.yaml @@ -0,0 +1,82 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/pinctrl/nxp,mc33978-pinctrl.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: NXP MC33978/MC34978 Pinctrl/GPIO Driver + +maintainers: + - David Jander + - Oleksij Rempel + +description: | + Pin control and GPIO driver for the MC33978/MC34978 MSDI device. + + Pin numbering: + - Pins 0-13: SG0-SG13 (Switch-to-Ground inputs). These pins monitor + contacts closed to ground and typically require GPIO_ACTIVE_LOW + flags when used as digital inputs. + - Pins 14-21: SP0-SP7 (Programmable inputs). These can be configured + as SG (Switch-to-Ground) or SB (Switch-to-Battery) inputs. SB + inputs monitor contacts closed to the battery voltage and typically + require GPIO_ACTIVE_HIGH flags when used as digital inputs. + + Output Emulation: + The hardware lacks standard push-pull output drivers. Outputs are emulat= ed + by toggling the programmable wetting current sources (acting as pull-ups= or + pull-downs) and the hardware tri-state registers. Because of this physic= al + constraint: + - Consumers using pins as outputs MUST flag them with GPIO_OPEN_DRAIN or + GPIO_OPEN_SOURCE in the device tree. + - Push-pull configurations are physically unsupported. + - The active polarity depends entirely on the external circuit (e.g., ho= w an + LED is wired) and must be flagged accordingly by the consumer. + +properties: + compatible: + enum: + - nxp,mc33978-pinctrl + - nxp,mc34978-pinctrl + + gpio-controller: true + + '#gpio-cells': + const: 2 + + ngpios: + const: 22 + +patternProperties: + "^.*-grp$": + type: object + $ref: pincfg-node.yaml# + additionalProperties: false + description: + Pin configuration subnodes. + properties: + pins: true + bias-pull-up: true + bias-pull-down: true + bias-high-impedance: true + +required: + - compatible + - gpio-controller + - '#gpio-cells' + +additionalProperties: false + +examples: + - | + pinctrl { + compatible =3D "nxp,mc33978-pinctrl"; + gpio-controller; + #gpio-cells =3D <2>; + ngpios =3D <22>; + + door-grp { + pins =3D "sg0"; + bias-high-impedance; + }; + }; --=20 2.47.3