From nobody Sat Sep 26 14:39:46 2026 Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.66]) (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 8B4DC43C043 for ; Mon, 31 Aug 2026 17:50:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.67.36.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198643; cv=none; b=KnALRYetmqfko2uvJKXBZOcF9wM5LFGoQZmGO9y3urOthRhf6nXTAn8BwUuy2vdHXUQEc2U1MGU+7rmr8vDxWTu3b8mctTTFiiKJZxdu6ZtgdeBVOkcvpTh4+28vdoRPGiI2MXlGl7t+Q6vobYhsRU609h/pcZBY6eCQ1d4hook= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198643; c=relaxed/simple; bh=iOtkHFM4xA6Q6ENokRmm5ajvtmTFnJJq+Eo17/gQs/4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=t6UItPC3OXs/zlAWel1xC0Sj2QLKEB0isfMbtfyp33+hSY4NKVbLuct3r5uWyWSHtsCqT51rsNaHe/0xI/wkxFAf5V4fxwg6AvSdvc3+I1cf1Z83AP593Q4ivzXrNKB8lCjsohBL8/zYcFZZ3YHOmIKKeC+0Q8y3N31brOaOkAY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de; spf=pass smtp.mailfrom=posteo.de; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b=AN/6v+S1; arc=none smtp.client-ip=185.67.36.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=posteo.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b="AN/6v+S1" Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 93AF4240105 for ; Mon, 31 Aug 2026 19:42:23 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1788198143; bh=L5e2mIMLldSTVVXlkj+JfWc212Mt4e7gBItG7XdpBdM=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=AN/6v+S1pMI7JHGWhrEQ5jxqDmWfB+v1agACxvEd+u7VS15NPnFQcM8yZBxUZ1MYv xDGNP8piTbfgnDJswIl5FEVCRFmReogb0yXbOmYV3dBZqhrrdZp6ZNRA+2I/Ma0oyr In4UKoLmfaZ/RDbR3coLblVcHFnsf9DN8AVGPkFfkT/4kZhjM4pMYghEZIkv9nZh2B +FGHoagMtBIq5J+wxB7/632EtPY4EcxohVt/yQM7iFYW/ZFwMpkucXJoe2QM63BpbY OiJAaCYF1imylTNiAIoj9FfHhv7CK/UdW+0OuVzHBhly9/jYFBmp2SXFmHqzaIpOyO /ys8QaH1jP4rQ== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hYbsn1Vphz9rxM; Mon, 31 Aug 2026 19:42:21 +0200 (CEST) From: Markus Probst Date: Mon, 31 Aug 2026 17:42:22 +0000 Subject: [PATCH v8 1/6] dt-bindings: rtc: Add pinctrl for S35390A 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 Message-Id: <20260831-rtc_s35390a_int1-v8-1-dac1dc86ce1f@posteo.de> References: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> In-Reply-To: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> To: Alexandre Belloni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , Andrew Lunn , Gregory Clement , Sebastian Hesselbarth , Michael Langer , Andrew Morton , Linus Walleij Cc: linux-arm-kernel@lists.infradead.org, linux-rtc@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Probst X-Developer-Signature: v=1; a=openpgp-sha256; l=4282; i=markus.probst@posteo.de; h=from:subject:message-id; bh=iOtkHFM4xA6Q6ENokRmm5ajvtmTFnJJq+Eo17/gQs/4=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqlbz5DaV99XzebS7Fi0bVSnHiUSXF93zcPM8pz gcssd5/wjqJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCapW8+RsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9KMAQ//YEFW5Ch4Js3fpHtsawYcnM0yxnPDPV9 46/cVOCt80/cqHvAaT0OA0UNu+NwW/HBckbLc+P8Qnn4z/cNBm04NneQRzUUgXaonHKk8uowkkG Qk2l5S8+3tdPfe/ejl/pB3f21bDT3wZxyi3u8TaRkh1vOl1LYwmJ1drDvX//NDrXX9srLdeyZYj mLxMcz+xrN4vrHNJlIa8aBuGVzbn8UfTZ4LWNtzrE3zqEKFGnDaySHbwRSKnDjNla0gnx+D7f/3 un0oK+LqettlxG2BPPboTbXah7CchxfTBMcUkiU51CtFyAZUY0V/8pOBNDUksUufs4Ge6GNZY6f KVRk7C2vHW3V29epR/xIn+K9euMqymJC2CipmIWbVV8sOxC3f//bSv6MM7nIKnvCQHHO5zagUSZ vffbYo0Vjy5nY/DnXxW7PZ/qgwbLWkHVCX83n3DMK0RPfkVcvIACWdW3OQN8t5cIkrpgNUWGR+Z DgpfTRredL9DjXttcf5ecsp9x0xS2MVWhmn3USlWx23BhmUorDlfu65WVyWFDH+F9jCYa+d3+tS aMHviNNpg3jVLrYzp3GJvUL9gHcM6JoEHC6rXjOB78hkIpHVf8EvOqVaU5vA7TrSK02uQUCqOuy BNL63VdbR/m+H1+OgM8JMB3/YAskzXcS5e5YifTu2GZ+H+7aGaik= X-Developer-Key: i=markus.probst@posteo.de; a=openpgp; fpr=827418C4F4AC58E77230C47334761FF8E7AD43D2 Autocrypt: addr=markus.probst@posteo.de; prefer-encrypt=mutual; keydata=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 aBeNN4ijKZchBXHPgVx+YtWRHfcm4l8= OpenPGP: url=https://posteo.de/keys/markus.probst@posteo.de.asc; preference=encrypt Synology NAS devices use the output pin for interrupt signal 1 to wake up the system. Move devicetree bindings for sii,s35390a into its own file. Add necessary properties to configure the individual pins via pinctrl, which allows the interrupt signal 1 to be used for wakeup alarm. Signed-off-by: Markus Probst --- .../devicetree/bindings/rtc/sii,s35390a.yaml | 117 +++++++++++++++++= ++++ .../devicetree/bindings/rtc/trivial-rtc.yaml | 3 - 2 files changed, 117 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/rtc/sii,s35390a.yaml b/Docum= entation/devicetree/bindings/rtc/sii,s35390a.yaml new file mode 100644 index 000000000000..dfe632c4b2c8 --- /dev/null +++ b/Documentation/devicetree/bindings/rtc/sii,s35390a.yaml @@ -0,0 +1,117 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/rtc/sii,s35390a.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: S-35390A 2-WIRE REAL-TIME CLOCK + +maintainers: + - Markus Probst + +description: + The S-35390A is a CMOS 2-wire real-time clock IC which operates with the + very low current consumption in the wide range of operation voltage. + +allOf: + - $ref: rtc.yaml# + +properties: + compatible: + const: sii,s35390a + + reg: + maxItems: 1 + + interrupts: + minItems: 1 + maxItems: 2 + description: Supports up to 2 interrupt lines via the INT1 and INT2 pi= ns. + + interrupt-names: + items: + - const: int1 + - const: int2 + + wakeup-parent: true + + wakeup-source: true + + "#clock-cells": + const: 1 + +patternProperties: + "^pins": + type: object + additionalProperties: false + + patternProperties: + "-pins$": + type: object + additionalProperties: false + + allOf: + - $ref: /schemas/pinctrl/pinmux-node.yaml# + + properties: + pins: + minItems: 1 + items: + enum: + - int1 + - int2 + + function: + description: | + Pin function: + - ignore: Preserve the previous state. + - disable: Disable pin output. + - wakeup: Output wakes up the system. + - clock: Output clock pulse. + - pmin1: Minute periodical output with 50% duty. + - pmin2: Minute periodical output L for 7.81 ms. + Can only be used with pin int1. + enum: + - ignore + - disable + - wakeup + - clock + - pmin1 + - pmin2 + + required: + - pins + - function + +required: + - compatible + - reg + +unevaluatedProperties: false + +examples: + - | + i2c { + #address-cells =3D <1>; + #size-cells =3D <0>; + + rtc@30 { + compatible =3D "sii,s35390a"; + reg =3D <0x30>; + pinctrl-0 =3D <&rtc_pins_default>; + pinctrl-names =3D "default"; + + wakeup-parent =3D <&int>; + + rtc_pins_default: pins { + int1-pins { + pins =3D "int1"; + function =3D "wakeup"; + }; + int2-pins { + pins =3D "int2"; + function =3D "disable"; + }; + }; + }; + }; diff --git a/Documentation/devicetree/bindings/rtc/trivial-rtc.yaml b/Docum= entation/devicetree/bindings/rtc/trivial-rtc.yaml index f4d0eed98a08..7b3f682ef4d5 100644 --- a/Documentation/devicetree/bindings/rtc/trivial-rtc.yaml +++ b/Documentation/devicetree/bindings/rtc/trivial-rtc.yaml @@ -81,8 +81,6 @@ properties: - ricoh,rv5c386 # I2C bus SERIAL INTERFACE REAL-TIME CLOCK IC - ricoh,rv5c387a - # 2-wire CMOS real-time clock - - sii,s35390a # ST SPEAr Real-time Clock - st,spear600-rtc # VIA/Wondermedia VT8500 Real-time Clock @@ -105,5 +103,4 @@ required: - reg =20 additionalProperties: false - ... --=20 2.54.0 From nobody Sat Sep 26 14:39:46 2026 Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.66]) (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 31DB8478E5A for ; Mon, 31 Aug 2026 17:42:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.67.36.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198155; cv=none; b=U+r/vqcNZmrO4vxwmzNm/uM6AHMy0wLCGDUyi6L6d206PVIfBRYb/VId7tRSE14O4/W6skV9cx2g8+xqBRDxsZMO5VC7SPdZtpDhT63Ck6aMXsxkeGlqMQKkP49tJhTWlgSLpGcC6jbyNcbeVHtI8ebQPkgddhCYEx5bDF10Z+g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198155; c=relaxed/simple; bh=QV/D+X9L6iHtWxf2FTb2FsPSMVe+HAIVh5ovcaU9Yq0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=enpUu0deohMz1p0o7x8ltTURnnHOx14ffsnjEVh0g55nBCjQ+iIertlq4Erdt0xXkwA+fVMv2xi1r8Zha4HAnul3FI8TEYrFvCEgVNRrxl5M2D1MZYCuoxZuIJpQoWN6eN9HOaVddAk6XVSApN1wbu8i0dkGrnMbtNQHa4vBx0o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de; spf=pass smtp.mailfrom=posteo.de; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b=UHZCBkUP; arc=none smtp.client-ip=185.67.36.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=posteo.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b="UHZCBkUP" Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id B1E7D240107 for ; Mon, 31 Aug 2026 19:42:25 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1788198145; bh=RGGhD71B+UtcIgYaLVJcbUJD2ZD+NnVvBK4/H22TbeY=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=UHZCBkUPJsZqIU7hHSuUBA9jxGV+ZTvkf5IDO31eKMXgBHg/eGX4dt+zJEjMz5RDq 0Vqjvqew4ze2S3DOSJ8thfIA7TRbZOvUbQmVP9hELPNDoNKYPQq3D2VQChPTY0BCos 4p9qJxMt5NyUIZoUk4+7F5+Ov2DTLtcsLaQ0ntip5UGsEQiLZyaLSFR1WyUrcQGjnn wnk2RBTUqSMDVxN6nh68ZaWcMw/rxpF7Q1BUNiDKVNg4J1TDT+OzeUhEU1PhPbJBNB NLDtA5eSYy18OAUPJweAuA2/4RnG4APnJtRM1w85zNqa4OfkRfH4HfRqBH14ZYmwKH KMJvYf+tCXz+g== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hYbsp5Vssz9rxQ; Mon, 31 Aug 2026 19:42:22 +0200 (CEST) From: Markus Probst Date: Mon, 31 Aug 2026 17:42:24 +0000 Subject: [PATCH v8 2/6] rtc: s35390a: Add missing newline to dev_err 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 Message-Id: <20260831-rtc_s35390a_int1-v8-2-dac1dc86ce1f@posteo.de> References: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> In-Reply-To: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> To: Alexandre Belloni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , Andrew Lunn , Gregory Clement , Sebastian Hesselbarth , Michael Langer , Andrew Morton , Linus Walleij Cc: linux-arm-kernel@lists.infradead.org, linux-rtc@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Probst X-Developer-Signature: v=1; a=openpgp-sha256; l=693; i=markus.probst@posteo.de; h=from:subject:message-id; bh=QV/D+X9L6iHtWxf2FTb2FsPSMVe+HAIVh5ovcaU9Yq0=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqlbz5yQqno9KoPb1mHw0UOAGQbEpysAgOborkH cK1QtBUtLWJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCapW8+RsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9LKBg//RK/N/elt5XV1VMBX2CW8ac49aFIh9cg EMYGzAAf9y9dgtlI8jsEXkKi36nmqY1gW3UWWgxmeCIeKJvVopecaivDiJmeNsID1LeAfkiRV4X iTCOo7KgrZRfYqThNXnoZRw5r9115+R3ZZP19ErbrPDc1igUh+F9tPYxaAzm2JO7+qZOIulWkGx dZJp0ym61tQQduavHDS2jLtMAdeVkbihHGxQeLQdPIPP0IPL3IjxuYE0cDYyqy/+0jFGToZwNX+ RSMu9JH5cUzb7u7xfofL2XMPlYWEz0xrFdPcLrCHWItnwtXr+AUmh23nkFZ9lZP4wC5Fm4eUL+S 9cp0CBFnnXTTIkZYCTYZKnv2gsAwhX8BEhtMAyoJLxpRDZfdBYhy9bqCC5VUv72m8cH6V8FysF3 GnFQnm1UupOGXhHfhx6/UUk0z1p4XChHu/hLbCPOA+c40Im1jVLCl1BOq9aTmxfVZ2eYUC36hrb 5BTo+cHWLc1T9AJX1T4n1vNs8O7skRthjz8BKYg3L2aW9ydlBn1LVZqZnR/mkfRN7DyGa5bCnwf eHkIPbp6AUAjb/kUg4vr9vfTg1j4+4VqMjSQ6Rn6ew0fKCLjpqhtLAOWtgcn8uPLfRZd15uSlAH D9Z2Qh5VfGXAC4yLqXzQWZ0d90T9tGDrmq2gygwO4BfemadT8am4= X-Developer-Key: i=markus.probst@posteo.de; a=openpgp; fpr=827418C4F4AC58E77230C47334761FF8E7AD43D2 Autocrypt: addr=markus.probst@posteo.de; prefer-encrypt=mutual; keydata=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 aBeNN4ijKZchBXHPgVx+YtWRHfcm4l8= OpenPGP: url=https://posteo.de/keys/markus.probst@posteo.de.asc; preference=encrypt Fixes: 3bd32722c827d ("rtc: s35390a: improve irq handling") Signed-off-by: Markus Probst --- drivers/rtc/rtc-s35390a.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c index b72eef4fb099..4cfe7034c516 100644 --- a/drivers/rtc/rtc-s35390a.c +++ b/drivers/rtc/rtc-s35390a.c @@ -494,7 +494,7 @@ static int s35390a_probe(struct i2c_client *client) buf =3D 0; err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &buf, 1); if (err < 0) { - dev_err(dev, "error disabling alarm"); + dev_err(dev, "error disabling alarm\n"); return err; } } else { --=20 2.54.0 From nobody Sat Sep 26 14:39:46 2026 Received: from mout01.posteo.de (mout01.posteo.de [185.67.36.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 8EA69446C00 for ; Mon, 31 Aug 2026 17:52:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.67.36.65 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198739; cv=none; b=WaTooZKI5OrnC1cNrcgxwvIITABVRwMsCoFlbH9/ywJdF34CCipgt6JsXHoTxEza6YHkdOH7/hbpl7dmXzH1ffca8Tld5Dwca00l23wOvKYew42c6FzGhZ/tzgb05HYfRQU1Fue132ydhY6dvGbG1ZcqPlXOIEPR/n7P/grjbOM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198739; c=relaxed/simple; bh=6wArxx1l8Hm9Dqx4mugbk8wsFGsXoxVI7ksSr89OEeg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pk9v6EbA5JA9oD7XcfaKmsUiOXI8Cfo0+2EtMB2rXBzgD4oVdI6qkrp33+AObQyDUcM1KApUHEOJbgAG88xfbyS3clVHrDw3Dtc7/hwFKuarO912etBoWqn8Q5VF2RcLAl1qqP45d/gkxNWe9OMddtNZvcoSSa9la9K6/2UvvMg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de; spf=pass smtp.mailfrom=posteo.de; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b=gMSEYcDz; arc=none smtp.client-ip=185.67.36.65 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=posteo.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b="gMSEYcDz" Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 28AF0240027 for ; Mon, 31 Aug 2026 19:42:27 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1788198147; bh=/IrZMEnYMWz3cHmLNm2dkUh37mtplEA3JG88ye8+6jg=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=gMSEYcDzr+5YYsRLfPjkvUm+isbBsA5OCXpAW2haQnBaHWjGs7k+JZG9+7lJI0fkL mJcJijPOKrb3BOQb8YG6KJ4RhH4dw2KltgzTUH2xSw5My0BQBqTA7yCbZznURFyGiQ RHyG8+OM0Cx6BDFZxn76RkLvrAmmove5YU+WmC79H/zZR2OMpcHSH2BMUUditebMAe FNDb3nY4J8TaJ3pcp9DjCn2+ORWpy2zlWt4CLieD6SWk43ZCRo8G0vNUjqszq6og0a xQbSxo9uSmteoXst47kipvFxnFuW5ZBY0qZiJP61Rd6wzPEnczFrsJWWJJTLZWBbgL GgKWpWvpKp/qw== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hYbsr3qg6z9rxM; Mon, 31 Aug 2026 19:42:24 +0200 (CEST) From: Markus Probst Date: Mon, 31 Aug 2026 17:42:26 +0000 Subject: [PATCH v8 3/6] rtc: s35390a: Fix alarm not disabling 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 Message-Id: <20260831-rtc_s35390a_int1-v8-3-dac1dc86ce1f@posteo.de> References: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> In-Reply-To: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> To: Alexandre Belloni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , Andrew Lunn , Gregory Clement , Sebastian Hesselbarth , Michael Langer , Andrew Morton , Linus Walleij Cc: linux-arm-kernel@lists.infradead.org, linux-rtc@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Probst X-Developer-Signature: v=1; a=openpgp-sha256; l=1828; i=markus.probst@posteo.de; h=from:subject:message-id; bh=6wArxx1l8Hm9Dqx4mugbk8wsFGsXoxVI7ksSr89OEeg=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqlbz5sTLuBYf+NIWgiqnEk5XzLpu8/y7rS6eip z+qs/Mg4YSJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCapW8+RsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9Jqtw//WmEI6sp8XAyVvXllG1kGWsORWKmjp2a Zpw2xMI0O5RrDLb09X/JnryXPyydf8zhrWdekwnKQkU1VQWv+2WQaZwseG2Me+QHWyCzO56FJbQ wnKDDVXZsX4/V0asbvyCgySsTKcPUKDY0JfrsRCbYM5YajACYCg/35AxPITlzsqGr6CdVX00gg6 kJJD+jiezQDFnWAM7AO03qwb6VZaygN0baELfkcYGoMO7lBmGs4wwDYu+KnG+3zguzmd9axPOLN w2lx49qQtL6ib1DSKOKZ6nCZsoDfQNQqaA1IyDhsKTbDmxIvisWiCcsRLKpJ2KL+wt7lC/Eg7P0 U2nMFBFFHH/UXi1VTbH8uw9WS3RTjmyvUo1jv5E2uhW6eEmAq8HkAYE1VrLl2x/U7geiBbHeIQy VdEgcveoDmOPl5u2npD4/WPDpk4nEbWUnbGnqqY+dq7vHjE8oZcsbZKzMFrFHfeIB0pRlqbqWJD brKlqJq1eEEW1BW0mZpwOfUUyflflkNJoFaSKIE46WRd9FuyRnZnsB556bPifbtbcm1fBzBdUql MjMbW4KtIm+7w2ttdfXMHU84w9BR8CYD2yapZAtmc73rtwmG9VKdGAEQIDyIyqXnkJarbM+D8Ur jeoVeRO49dFfvIhK9z3q7icCQpU3O7J3osZWq17tR1nbJLdl8ZJY= X-Developer-Key: i=markus.probst@posteo.de; a=openpgp; fpr=827418C4F4AC58E77230C47334761FF8E7AD43D2 Autocrypt: addr=markus.probst@posteo.de; prefer-encrypt=mutual; keydata=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 aBeNN4ijKZchBXHPgVx+YtWRHfcm4l8= OpenPGP: url=https://posteo.de/keys/markus.probst@posteo.de.asc; preference=encrypt Implement alarm_irq_enable callback. Fixes: 542dd33a4925 ("drivers/rtc/rtc-s35390a.c: add wakealarm support for = rtc-s35390A rtc chip") Signed-off-by: Markus Probst --- drivers/rtc/rtc-s35390a.c | 29 ++++++++++++++++++++++++----- 1 file changed, 24 insertions(+), 5 deletions(-) diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c index 4cfe7034c516..575bb256eb25 100644 --- a/drivers/rtc/rtc-s35390a.c +++ b/drivers/rtc/rtc-s35390a.c @@ -270,6 +270,24 @@ static int s35390a_rtc_read_time(struct device *dev, s= truct rtc_time *tm) return 0; } =20 +static int s35390a_rtc_alarm_irq_enable(struct device *dev, unsigned int e= nabled) +{ + struct s35390a *s35390a =3D dev_get_drvdata(dev); + u8 sts; + int err; + + if (enabled) + sts =3D S35390A_INT2_MODE_ALARM; + else + sts =3D S35390A_INT2_MODE_NOINTR; + + err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); + if (err < 0) + return err; + + return 0; +} + static int s35390a_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *al= m) { struct i2c_client *client =3D to_i2c_client(dev); @@ -410,11 +428,12 @@ static int s35390a_rtc_ioctl(struct device *dev, unsi= gned int cmd, } =20 static const struct rtc_class_ops s35390a_rtc_ops =3D { - .read_time =3D s35390a_rtc_read_time, - .set_time =3D s35390a_rtc_set_time, - .set_alarm =3D s35390a_rtc_set_alarm, - .read_alarm =3D s35390a_rtc_read_alarm, - .ioctl =3D s35390a_rtc_ioctl, + .read_time =3D s35390a_rtc_read_time, + .set_time =3D s35390a_rtc_set_time, + .set_alarm =3D s35390a_rtc_set_alarm, + .read_alarm =3D s35390a_rtc_read_alarm, + .alarm_irq_enable =3D s35390a_rtc_alarm_irq_enable, + .ioctl =3D s35390a_rtc_ioctl, }; =20 static int s35390a_nvmem_read(void *priv, unsigned int offset, void *val, --=20 2.54.0 From nobody Sat Sep 26 14:39:46 2026 Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.66]) (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 3195D440656 for ; Mon, 31 Aug 2026 17:42:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.67.36.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198155; cv=none; b=DmYeREDRNysCTwvOLRdhi2gbeW8MEKyWuTvLXTJMEeOP4LNZknKVLrojJHazqApr5rPU/u1Dmr+fgluwv+3QUz7klZvOoJqAzYYaKur3hCiK4ZpXPjh6C7P/Liu6JIISpKbyjk5iAv28p0IqoCgrvQYUWlv+Be2/IWI1F1aGvyM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198155; c=relaxed/simple; bh=dmIWoSFZxPpddq979fo+hIJW9p1MefbKygM2okwM53I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=oSJWdP9HAAslw9eOJHq7rOWzGTW/jlYjpH2vpQgUOdMun/DfcfCAJwUSCe1qWVATBR8AZdJ099Zyvx8vut09koLTkw3/lMMv0g1+XYjcXFFL3Z7oq/XAoeZaAEoRlqCa+uXTaODaqI24lstZb5X1VAyCAQlUOlDl/N3TOM30DGQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de; spf=pass smtp.mailfrom=posteo.de; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b=YQDCBf5s; arc=none smtp.client-ip=185.67.36.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=posteo.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b="YQDCBf5s" Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 807B8240107 for ; Mon, 31 Aug 2026 19:42:28 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1788198148; bh=lvdtSRsCjJiRYaMm8kjKMtTKpYB52I0Roxl6gkL6ORs=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=YQDCBf5sgdJyOpesgisZqI/2KSl2rR1VI1QgzVUPjBZJ3/C3IrQ34lAM8ZsadA7WY xQ2qhzjXopvM492QyKaVmJJCWAwqIf11+80EIUOFU60t9guGWEVGfhLtvC+ZgpLeAA pweP0jlKsej8ekCFi80tAAKMRAITtmut81TFnyb6ujVDbi2rKjpUXVMuJDy8dqMXpH 1sIb3y8ChAPonRXC06msrMyDa33Mj9SdJzN3QdGyoAKGN8fFNJlZINDqhXNE6+HVjM NuaWv+/AbZEvjiBxH/z+pZmwpKhRorwl0R56NdUPhH4gQ9u1flOe2TIOQFtwU2r5sM ICLcNk58+Fc5g== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hYbst2L6qz9rxF; Mon, 31 Aug 2026 19:42:26 +0200 (CEST) From: Markus Probst Date: Mon, 31 Aug 2026 17:42:27 +0000 Subject: [PATCH v8 4/6] rtc: s35390a: Read 24-hour mode on access 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 Message-Id: <20260831-rtc_s35390a_int1-v8-4-dac1dc86ce1f@posteo.de> References: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> In-Reply-To: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> To: Alexandre Belloni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , Andrew Lunn , Gregory Clement , Sebastian Hesselbarth , Michael Langer , Andrew Morton , Linus Walleij Cc: linux-arm-kernel@lists.infradead.org, linux-rtc@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Probst X-Developer-Signature: v=1; a=openpgp-sha256; l=8692; i=markus.probst@posteo.de; h=from:subject:message-id; bh=dmIWoSFZxPpddq979fo+hIJW9p1MefbKygM2okwM53I=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqlbz5UKapDBg/9Qzo4m2nqdM1F4hOvDXHukBsK qYF5FF6IbCJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCapW8+RsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9IOEw/+L2L/QFkS4cFSL+kI37B34CPVaiAPfUO JzqwnIQ4H9vtWvYTGWYH9yUC35k9145t7NUM/mGO76sii0rqb3VqktJdQdn5GiYsSIRsfntBUq8 CIqo3A8tJcbAkhnfUy2e+wyAsZQiZ3wpahsxeJpafDoAS9Qre+d0qVgjTDCtmE56/eNez4dE59J WFs3c9kHfzJkfpEuqFfSTMy4RajhmOlXzP5C5iZckQvxbkMvf/zZJb3JzaEVeIkybtoLCT+aqBi NmIN6wUGF7gVlpwCcsFYxfo9uqA/EBOft8xMkrE5H7IYz9W2HfY0JU42XaoTWSJ8MfkHFJaDncj 8XmDC7jYmJo4wGspuxh+QU8slXw9P/CzlHOEMN5lgtBfjMXtUFAT2HH6+4jocKsUB77DHEuX+Lm MWHC/7QC8ubD1boRoVnlRdHv2N5O8bLPehmH477TYW2asDTHrvysRlZFDQowvymGdgikDVZucAT jzlx/s+m5nuyi9ZuddG68XGO3nb0UX9/jT3KefkPWw32ngAmjdiUi/o4C/Z2VXmzYP/KznlJAhS fwFV8qVEZOjzkR1tVWlnu20oz75HrQOxJ4Yt4B2p7bk8Ly94dw9WsU/mhabM5G0+CIFID/qN4C4 hQaDAr5gdWp7kSwgsqIHBUzw8yQaqOE62XBjN6EH91Hi6MGuBYk0= X-Developer-Key: i=markus.probst@posteo.de; a=openpgp; fpr=827418C4F4AC58E77230C47334761FF8E7AD43D2 Autocrypt: addr=markus.probst@posteo.de; prefer-encrypt=mutual; keydata=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 aBeNN4ijKZchBXHPgVx+YtWRHfcm4l8= OpenPGP: url=https://posteo.de/keys/markus.probst@posteo.de.asc; preference=encrypt Instead of reading if the 24-hour mode is used on probe once, read it on access. This makes it impossible for the mode to be out of sync and fixes time corruption if resetting the chip while in 12-hour mode, as `s35390a_init` did not update the cached value. Fixes: 16486d0c1c65 ("rtc: s35390a: handle invalid RTC time") Signed-off-by: Markus Probst --- drivers/rtc/rtc-s35390a.c | 78 +++++++++++++++++++++++++------------------= ---- 1 file changed, 42 insertions(+), 36 deletions(-) diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c index 575bb256eb25..12ed504db94d 100644 --- a/drivers/rtc/rtc-s35390a.c +++ b/drivers/rtc/rtc-s35390a.c @@ -64,7 +64,6 @@ MODULE_DEVICE_TABLE(of, s35390a_of_match); =20 struct s35390a { struct i2c_client *client[8]; - int twentyfourhour; }; =20 static int s35390a_set_reg(struct s35390a *s35390a, int reg, u8 *buf, int= len) @@ -102,9 +101,8 @@ static int s35390a_get_reg(struct s35390a *s35390a, int= reg, u8 *buf, int len) return 0; } =20 -static int s35390a_init(struct s35390a *s35390a) +static int s35390a_init(struct s35390a *s35390a, u8 *sts) { - u8 buf; int ret; unsigned initcount =3D 0; =20 @@ -117,17 +115,17 @@ static int s35390a_init(struct s35390a *s35390a) * The 24H bit is kept over reset, so set it already here. */ initialize: - buf =3D S35390A_FLAG_RESET | S35390A_FLAG_24H; - ret =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); + *sts =3D S35390A_FLAG_RESET | S35390A_FLAG_24H; + ret =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS1, sts, 1); =20 if (ret < 0) return ret; =20 - ret =3D s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &buf, 1); + ret =3D s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, sts, 1); if (ret < 0) return ret; =20 - if (buf & (S35390A_FLAG_POC | S35390A_FLAG_BLD)) { + if (*sts & (S35390A_FLAG_POC | S35390A_FLAG_BLD)) { /* Try up to five times to reset the chip */ if (initcount < 5) { ++initcount; @@ -181,9 +179,9 @@ static int s35390a_disable_test_mode(struct s35390a *s3= 5390a) return s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, buf, sizeof(buf)); } =20 -static char s35390a_hr2reg(struct s35390a *s35390a, int hour) +static char s35390a_hr2reg(int hour, bool twentyfourhour) { - if (s35390a->twentyfourhour) + if (twentyfourhour) return bin2bcd(hour); =20 if (hour < 12) @@ -192,11 +190,11 @@ static char s35390a_hr2reg(struct s35390a *s35390a, i= nt hour) return 0x40 | bin2bcd(hour - 12); } =20 -static int s35390a_reg2hr(struct s35390a *s35390a, char reg) +static int s35390a_reg2hr(char reg, bool twentyfourhour) { unsigned hour; =20 - if (s35390a->twentyfourhour) + if (twentyfourhour) return bcd2bin(reg & 0x3f); =20 hour =3D bcd2bin(reg & 0x3f); @@ -210,7 +208,7 @@ static int s35390a_rtc_set_time(struct device *dev, str= uct rtc_time *tm) { struct i2c_client *client =3D to_i2c_client(dev); struct s35390a *s35390a =3D i2c_get_clientdata(client); - int i; + int i, err; u8 buf[7], status; =20 dev_dbg(&client->dev, "%s: tm is secs=3D%d, mins=3D%d, hours=3D%d mday=3D= %d, " @@ -218,14 +216,18 @@ static int s35390a_rtc_set_time(struct device *dev, s= truct rtc_time *tm) tm->tm_min, tm->tm_hour, tm->tm_mday, tm->tm_mon, tm->tm_year, tm->tm_wday); =20 - if (s35390a_read_status(s35390a, &status) =3D=3D 1) - s35390a_init(s35390a); + err =3D s35390a_read_status(s35390a, &status); + if (err =3D=3D 1) + err =3D s35390a_init(s35390a, &status); + + if (err < 0) + return err; =20 buf[S35390A_BYTE_YEAR] =3D bin2bcd(tm->tm_year - 100); buf[S35390A_BYTE_MONTH] =3D bin2bcd(tm->tm_mon + 1); buf[S35390A_BYTE_DAY] =3D bin2bcd(tm->tm_mday); buf[S35390A_BYTE_WDAY] =3D bin2bcd(tm->tm_wday); - buf[S35390A_BYTE_HOURS] =3D s35390a_hr2reg(s35390a, tm->tm_hour); + buf[S35390A_BYTE_HOURS] =3D s35390a_hr2reg(tm->tm_hour, status & S35390A_= FLAG_24H); buf[S35390A_BYTE_MINS] =3D bin2bcd(tm->tm_min); buf[S35390A_BYTE_SECS] =3D bin2bcd(tm->tm_sec); =20 @@ -243,8 +245,11 @@ static int s35390a_rtc_read_time(struct device *dev, s= truct rtc_time *tm) u8 buf[7], status; int i, err; =20 - if (s35390a_read_status(s35390a, &status) =3D=3D 1) + err =3D s35390a_read_status(s35390a, &status); + if (err =3D=3D 1) return -EINVAL; + if (err < 0) + return err; =20 err =3D s35390a_get_reg(s35390a, S35390A_CMD_TIME1, buf, sizeof(buf)); if (err < 0) @@ -256,7 +261,7 @@ static int s35390a_rtc_read_time(struct device *dev, st= ruct rtc_time *tm) =20 tm->tm_sec =3D bcd2bin(buf[S35390A_BYTE_SECS]); tm->tm_min =3D bcd2bin(buf[S35390A_BYTE_MINS]); - tm->tm_hour =3D s35390a_reg2hr(s35390a, buf[S35390A_BYTE_HOURS]); + tm->tm_hour =3D s35390a_reg2hr(buf[S35390A_BYTE_HOURS], status & S35390A_= FLAG_24H); tm->tm_wday =3D bcd2bin(buf[S35390A_BYTE_WDAY]); tm->tm_mday =3D bcd2bin(buf[S35390A_BYTE_DAY]); tm->tm_mon =3D bcd2bin(buf[S35390A_BYTE_MONTH]) - 1; @@ -292,7 +297,7 @@ static int s35390a_rtc_set_alarm(struct device *dev, st= ruct rtc_wkalrm *alm) { struct i2c_client *client =3D to_i2c_client(dev); struct s35390a *s35390a =3D i2c_get_clientdata(client); - u8 buf[3], sts =3D 0; + u8 buf[3], status1, status2 =3D 0; int err, i; =20 dev_dbg(&client->dev, "%s: alm is secs=3D%d, mins=3D%d, hours=3D%d mday= =3D%d, "\ @@ -301,22 +306,22 @@ static int s35390a_rtc_set_alarm(struct device *dev, = struct rtc_wkalrm *alm) alm->time.tm_mon, alm->time.tm_year, alm->time.tm_wday); =20 /* disable interrupt (which deasserts the irq line) */ - err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); + err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &status2, sizeof(st= atus2)); if (err < 0) return err; =20 /* clear pending interrupt (in STATUS1 only), if any */ - err =3D s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &sts, sizeof(sts)); + err =3D s35390a_get_reg(s35390a, S35390A_CMD_STATUS1, &status1, sizeof(st= atus1)); if (err < 0) return err; =20 if (alm->enabled) - sts =3D S35390A_INT2_MODE_ALARM; + status2 =3D S35390A_INT2_MODE_ALARM; else - sts =3D S35390A_INT2_MODE_NOINTR; + status2 =3D S35390A_INT2_MODE_NOINTR; =20 /* set interrupt mode*/ - err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); + err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &status2, sizeof(st= atus2)); if (err < 0) return err; =20 @@ -325,8 +330,8 @@ static int s35390a_rtc_set_alarm(struct device *dev, st= ruct rtc_wkalrm *alm) else buf[S35390A_ALRM_BYTE_WDAY] =3D 0; =20 - buf[S35390A_ALRM_BYTE_HOURS] =3D s35390a_hr2reg(s35390a, - alm->time.tm_hour) | 0x80; + buf[S35390A_ALRM_BYTE_HOURS] =3D s35390a_hr2reg(alm->time.tm_hour, + status1 & S35390A_FLAG_24H) | 0x80; buf[S35390A_ALRM_BYTE_MINS] =3D bin2bcd(alm->time.tm_min) | 0x80; =20 if (alm->time.tm_hour >=3D 12) @@ -345,14 +350,20 @@ static int s35390a_rtc_read_alarm(struct device *dev,= struct rtc_wkalrm *alm) { struct i2c_client *client =3D to_i2c_client(dev); struct s35390a *s35390a =3D i2c_get_clientdata(client); - u8 buf[3], sts; + u8 buf[3], status1, status2; int i, err; =20 - err =3D s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); + err =3D s35390a_read_status(s35390a, &status1); + if (err =3D=3D 1) + return -EINVAL; + if (err < 0) + return err; + + err =3D s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, &status2, sizeof(st= atus2)); if (err < 0) return err; =20 - if ((sts & S35390A_INT2_MODE_MASK) !=3D S35390A_INT2_MODE_ALARM) { + if ((status2 & S35390A_INT2_MODE_MASK) !=3D S35390A_INT2_MODE_ALARM) { /* * When the alarm isn't enabled, the register to configure * the alarm time isn't accessible. @@ -381,8 +392,8 @@ static int s35390a_rtc_read_alarm(struct device *dev, s= truct rtc_wkalrm *alm) =20 if (buf[S35390A_ALRM_BYTE_HOURS] & 0x80) alm->time.tm_hour =3D - s35390a_reg2hr(s35390a, - buf[S35390A_ALRM_BYTE_HOURS] & ~0x80); + s35390a_reg2hr(buf[S35390A_ALRM_BYTE_HOURS] & ~0x80, + status1 & S35390A_FLAG_24H); =20 if (buf[S35390A_ALRM_BYTE_MINS] & 0x80) alm->time.tm_min =3D bcd2bin(buf[S35390A_ALRM_BYTE_MINS] & ~0x80); @@ -416,7 +427,7 @@ static int s35390a_rtc_ioctl(struct device *dev, unsign= ed int cmd, break; case RTC_VL_CLR: /* update flag and clear register */ - err =3D s35390a_init(s35390a); + err =3D s35390a_init(s35390a, &sts); if (err < 0) return err; break; @@ -503,11 +514,6 @@ static int s35390a_probe(struct i2c_client *client) return err_read; } =20 - if (status1 & S35390A_FLAG_24H) - s35390a->twentyfourhour =3D 1; - else - s35390a->twentyfourhour =3D 0; - if (status1 & S35390A_FLAG_INT2) { /* disable alarm (and maybe test mode) */ buf =3D 0; --=20 2.54.0 From nobody Sat Sep 26 14:39:46 2026 Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.66]) (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 B2A5347A0A9 for ; Mon, 31 Aug 2026 17:42:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.67.36.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198159; cv=none; b=Yqg4hZXgIcBTfgexYcceN/KXtGD1XNBK/BTi7aKQvApS7he311dfinSC0R4gJXXy19IxoGsEavVj7PnbRNIKBuHUlN0MB3uveLSk/Hwzgs6z7AVnjO7d6ieCHfiXazV80GmLe0f3tf6HjIb2dbwn5ISaZw5bT7PFzO4dejhFKNI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198159; c=relaxed/simple; bh=tsVsYxR1o+NvlXpQquU1SfNIVX+mOdPyGRxtP47zpKA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=TuUSZa8obxbkdKXyjkIYL7+8OJzuJM9prwjJx7ToFfZP0TPRzR0rxg5/ODwiFtX9lWzCROseyO+CXH2LyWFvDU7cxACjHnitu+hVK2EFiFIYvwy0tdVLX3PYahPKF8fuPI47sp2MrDKWxPviJw942vXAfqh3MSuiUVA/5C/uQPo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de; spf=pass smtp.mailfrom=posteo.de; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b=iJqYiaKf; arc=none smtp.client-ip=185.67.36.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=posteo.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b="iJqYiaKf" Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 3DC70240108 for ; Mon, 31 Aug 2026 19:42:30 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1788198150; bh=b2XxifepCL1lla4ADRTCoGp5bZ7WbRoz1YGWChw1yM8=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=iJqYiaKfheqYiaO6ur9Sf+HLL15RgTto5iPattsTbWiqAayRXwwcYnXQYVAY7RygD E7KNyKEDUcHhBIGTZGNrJEhHdEFPPlSEXWhy2b2CZ3AdpxHyuPDK7sXZAnoyjTG1aQ KUaz97ppOdPIZAnaPGsFD8MqtQbWeDIkrwdyG53B1Ww0REUYhctv6PPVtpoMSLYQOf 9mmrNkHXZFxrSj0rN03iccXRHNnX7qN+2xub5bjDECe5RjGhjIvc8GhFMEr1WHBhhG ILk8MxuBPZipsQShe3tjgUCXXyltLnoOcxICaasu+TUEUbpICAMc9hfU+siQjX++jN whXemMVTPjW6w== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hYbsv6kTWz9rxG; Mon, 31 Aug 2026 19:42:27 +0200 (CEST) From: Markus Probst Date: Mon, 31 Aug 2026 17:42:29 +0000 Subject: [PATCH v8 5/6] rtc: s35390a: Add pinctrl 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 Message-Id: <20260831-rtc_s35390a_int1-v8-5-dac1dc86ce1f@posteo.de> References: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> In-Reply-To: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> To: Alexandre Belloni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , Andrew Lunn , Gregory Clement , Sebastian Hesselbarth , Michael Langer , Andrew Morton , Linus Walleij Cc: linux-arm-kernel@lists.infradead.org, linux-rtc@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Probst X-Developer-Signature: v=1; a=openpgp-sha256; l=18503; i=markus.probst@posteo.de; h=from:subject:message-id; bh=tsVsYxR1o+NvlXpQquU1SfNIVX+mOdPyGRxtP47zpKA=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqlbz5YQ1ZhkqaO2bD0OAJGVsxYMBxyNMH1nY9w To3D2zHNRSJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCapW8+RsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9KAIw/+MzWzraeRXPgLQ4X6XMYgxhyUO08W0SR PUGTBbq9RRo/9nhiUCoIZEC09swLJ9/7AvE/kGq4yDiCUjI0YRJy9dsT0bxyFL7q4Ta4Ieg/rYN EKotDNehfouF2xWdPohiD/OUqP0amPAkJV1vVAnNaN9w2/HDiJifDDnpkDeBqE7kAWRwumnMDLn NMiMsO9+OS49TXp8/iVhU417K2WmkyJOIVM9Wc2Xg3fsdvdXwh9Vtb4f/7oNLOIf8gPPJ0eUdVa 2TG8szZkMJc1Zin6/ME/av7J0cYC0VoPbujvYVtVtkt4XwChscR8SPR6U0IKN8/S+iWft/vth68 +umiRvSwkBroZq1CM8vunMfGBf/jC3r4mYpcMFv6YNHGExuClrqFyIHIpQ+RC1/OPhFPKF0VKWW r4bHepxk024oL+9ojJzSpHEDmiwdYBl/D8y8mGgR9SLPL8o0ZVIMqRkYoziHZtO3nR9P+Frt2ua JPV0LXBwHffW0W1AJRET9puswlWsOR5FxgJm2nPSMAeMM+aNBvJY+2ysn0bBeTH2qTj6E5fmT7A OTlo1pKAfSWElkdJTUTimVS1ySGDwnDqynHB5OgxFhxDVE7fdIkh+O/nrdxNCLylZEhzpZuAozd hchY7qCQHS44/Kb45RV1L1IKcqSOWhQUTPY3UupGZuIMfVf051gA= X-Developer-Key: i=markus.probst@posteo.de; a=openpgp; fpr=827418C4F4AC58E77230C47334761FF8E7AD43D2 Autocrypt: addr=markus.probst@posteo.de; prefer-encrypt=mutual; keydata=xsFNBGiDvXgBEADAXUceKafpl46S35UmDh2wRvvx+UfZbcTjeQOlSwKP7YVJ4JOZrVs93qReNLkO WguIqPBxR9blQ4nyYrqSCV+MMw/3ifyXIm6Pw2YRUDg+WTEOjTixRCoWDgUj1nOsvJ9tVAm76Ww+ /pAnepVRafMID0rqEfD9oGv1YrfpeFJhyE2zUw3SyyNLIKWD6QeLRhKQRbSnsXhGLFBXCqt9k5JA RhgQof9zvztcCVlT5KVvuyfC4H+HzeGmu9201BVyihJwKdcKPq+n/aY5FUVxNTgtI9f8wIbmfAja oT1pjXSp+dszakA98fhONM98pOq723o/1ZGMZukyXFfsDGtA3BB79HoopHKujLGWAGskzClwTjRQ xBqxh/U/lL1pc+0xPWikTNCmtziCOvv0KA0arDOMQlyFvImzX6oGVgE4ksKQYbMZ3Ikw6L1Rv1J+ FvN0aNwOKgL2ztBRYscUGcQvA0Zo1fGCAn/BLEJvQYShWKeKqjyncVGoXFsz2AcuFKe1pwETSsN6 OZncjy32e4ktgs07cWBfx0v62b8md36jau+B6RVnnodaA8++oXl3FRwiEW8XfXWIjy4umIv93tb8 8ekYsfOfWkTSewZYXGoqe4RtK80ulMHb/dh2FZQIFyRdN4HOmB4FYO5sEYFr9YjHLmDkrUgNodJC XCeMe4BO4iaxUQARAQABzRdtYXJrdXMucHJvYnN0QHBvc3Rlby5kZcLBkQQTAQgAOxYhBIJ0GMT0 rFjncjDEczR2H/jnrUPSBQJog714AhsDBQsJCAcCAiICBhUKCQgLAgQWAgMBAh4HAheAAAoJEDR2 H/jnrUPSgdkQAISaTk2D345ehXEkn5z2yUEjaVjHIE7ziqRaOgn/QanCgeTUinIv6L6QXUFvvIfH 1OLPwQ1hfvEg9NnNLyFezWSy6jvoVBTIPqicD/r3FkithnQ1IDkdSjrarPMxJkvuh3l7XZHo49GV HQ8i5zh5w4YISrcEtE99lJisvni2Jqx7we5tey9voQFDyM8jxlSWv3pmoUTCtBkX/eKHJXosgsuS B4TGDCVPOjla/emI5c9MhMG7O4WEEmoSdPbmraPw66YZD6uLyhV4DPHbiDWRzXWnClHSyjB9rky9 lausFxogvu4l9H+KDsXIadNDWdLdu1/enS/wDd9zh5S78rY2jeXaG4mnf4seEKamZ7KQ6FIHrcyP ezdDzssPQcTQcGRMQzCn6wP3tlGk7rsfmyHMlFqdRoNNv+ZER/OkmZFPW655zRfbMi0vtrqK2Awm 9ggobb1oktfd9PPNXMUY+DNVlgR2G7jLnenSoQausLUm0pHoNE8TWFv851Y6SOYnvn488sP1Tki5 F3rKwclawQFHUXTCQw+QSh9ay8xgnNZfH+u9NY7w3gPoeKBOAFcBc2BtzcgekeWS8qgEmm2/oNFV G0ivPQbRx8FjRKbuF7g3YhgNZZ0ac8FneuUtJ2PkSIFTZhaAiC0utvxk0ndmWFiW4acEkMZGrLaM L2zWNjrqwsD2zsFNBGiDvXgBEADCXQy1n7wjRxG12DOVADawjghKcG+5LtEf31WftHKLFbp/HArj BhkT6mj+CCI1ClqY+FYU5CK/s0ScMfLxRGLZ0Ktzawb78vOgBVFT3yB1yWBTewsAXdqNqRooaUNo 8cG/NNJLjhccH/7PO/FWX5qftOVUJ/AIsAhKQJ18Tc8Ik73v427EDxuKb9mTAnYQFA3Ev3hAiVbO 6Rv39amVOfJ8sqwiSUGidj2Fctg2aB5JbeMln0KCUbTD1LhEFepeKypfofAXQbGwaCjAhmkWy/q3 IT1mUrPxOngbxdRoOx1tGUC0HCMUW1sFaJgQPMmDcR0JGPOpgsKnitsSnN7ShcCr1buel7vLnUMD +TAZ5opdoF6HjAvAnBQaijtK6minkrM0seNXnCg0KkV8xhMNa6zCs1rq4GgjNLJue2EmuyHooHA4 7JMoLVHcxVeuNTp6K2+XRx0Pk4e2Lj8IVy9yEYyrywEOC5XRW37KJjsiOAsumi1rkvM7QREWgUDe Xs0+RpxI3QrrANh71fLMRo7LKRF3Gvw13NVCCC9ea20P4PwhgWKStkwO2NO+YJsAoS1QycMi/vKu 0EHhknYXamaSV50oZzHKmX56vEeJHTcngrM8R1SwJCYopCx9gkz90bTVYlitJa5hloWTYeMD7FNj Y6jfVSzgM/K4gMgUNDW/PPGeMwARAQABwsF2BBgBCAAgFiEEgnQYxPSsWOdyMMRzNHYf+OetQ9IF AmiDvXgCGwwACgkQNHYf+OetQ9LHDBAAhk+ab8+WrbS/b1/gYW3q1KDiXU719nCtfkUVXKidW5Ec Idlr5HGt8ilLoxSWT2Zi368iHCXS0WenGgPwlv8ifvB7TOZiiTDZROZkXjEBmU4nYjJ7GymawpWv oQwjMsPuq6ysbzWtOZ7eILx7cI0FjQeJ/Q2baRJub0uAZNwBOxCkAS6lpk5Fntd2u8CWmDQo4SYp xeuQ+pwkp0yEP30RhN2BO2DXiBEGSZSYh+ioGbCHQPIV3iVj0h6lcCPOqopZqyeCfigeacBI0nvN jHWz/spzF3+4OS+3RJvoHtAQmProxyGib8iVsTxgZO3UUi4TSODeEt0i0kHSPY4sCciOyXfAyYoD DFqhRjOEwBBxhr+scU4C1T2AflozvDwq3VSONjrKJUkhd8+WsdXxMdPFgBQuiKKwUy11mz6KQfcR wmDehF3UaUoxa+YIhWPbKmycxuX/D8SvnqavzAeAL1OcRbEI/HsoroVlEFbBRNBZLJUlnTPs8ZcU 4+8rq5YX1GUrJL3jf6SAfSgO7UdkEET3PdcKFYtS+ruV1Cp5V0q4kCfI5jk25iiz8grM2wOzVSsc l1mEkhiEPH87HP0whhb544iioSnumd3HJKL7dzhRegsMizatupp8D65A2JziW0WKopa1iw9fti3A aBeNN4ijKZchBXHPgVx+YtWRHfcm4l8= OpenPGP: url=https://posteo.de/keys/markus.probst@posteo.de.asc; preference=encrypt Allow configuration of pin functions, including: - keeping the previous configured function - disabling output - waking up the system - minute periodical interrupt (1: 50% duty, 2: 7.81 ms) If no function has been configured, fallback to previous behaviour. Signed-off-by: Markus Probst Reviewed-by: Linus Walleij --- drivers/rtc/Kconfig | 2 + drivers/rtc/rtc-s35390a.c | 375 ++++++++++++++++++++++++++++++++++++++----= ---- 2 files changed, 313 insertions(+), 64 deletions(-) diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index 05b9233b9418..c73c7d9751d9 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -668,7 +668,9 @@ config RTC_DRV_RC5T619 =20 config RTC_DRV_S35390A tristate "Seiko Instruments S-35390A" + select PINCTRL select BITREVERSE + select GENERIC_PINCONF help If you say yes here you will get support for the Seiko Instruments S-35390A. diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c index 12ed504db94d..649d36d37f1f 100644 --- a/drivers/rtc/rtc-s35390a.c +++ b/drivers/rtc/rtc-s35390a.c @@ -12,11 +12,17 @@ #include #include #include +#include +#include +#include + +#define DRIVER_NAME "rtc-s35390a" =20 #define S35390A_CMD_STATUS1 0 #define S35390A_CMD_STATUS2 1 #define S35390A_CMD_TIME1 2 #define S35390A_CMD_TIME2 3 +#define S35390A_CMD_INT1_REG1 4 #define S35390A_CMD_INT2_REG1 5 #define S35390A_CMD_FREE_REG 7 =20 @@ -36,19 +42,38 @@ #define S35390A_FLAG_POC BIT(0) #define S35390A_FLAG_BLD BIT(1) #define S35390A_FLAG_INT2 BIT(2) +#define S35390A_FLAG_INT1 BIT(3) #define S35390A_FLAG_24H BIT(6) #define S35390A_FLAG_RESET BIT(7) =20 /* flag for STATUS2 */ #define S35390A_FLAG_TEST BIT(0) =20 +#define S35390A_INT_MODE_NOINTR 0x00 + /* INT2 pin output mode */ #define S35390A_INT2_MODE_MASK 0x0E -#define S35390A_INT2_MODE_NOINTR 0x00 #define S35390A_INT2_MODE_ALARM BIT(1) /* INT2AE */ #define S35390A_INT2_MODE_PMIN_EDG BIT(2) /* INT2ME */ #define S35390A_INT2_MODE_FREQ BIT(3) /* INT2FE */ -#define S35390A_INT2_MODE_PMIN (BIT(3) | BIT(2)) /* INT2FE | INT2ME */ +#define S35390A_INT2_MODE_PMIN1 (BIT(3) | BIT(2)) /* INT2FE | INT2ME */ + +/* INT1 pin output mode */ +#define S35390A_INT1_MODE_MASK 0xF0 +#define S35390A_INT1_MODE_ALARM BIT(5) /* INT1AE */ +#define S35390A_INT1_MODE_PMIN_EDG BIT(6) /* INT1ME */ +#define S35390A_INT1_MODE_FREQ BIT(7) /* INT1FE */ +#define S35390A_INT1_MODE_PMIN1 (BIT(7) | BIT(6)) /* INT1FE | INT1ME */ +#define S35390A_INT1_MODE_PMIN2 (BIT(7) | BIT(6) | BIT(5)) /* INT1FE | IN= T1ME | INT1AE */ +#define S35390A_INT1_MODE_32768KHZ BIT(4) /* 32kE */ + +#define S35390A_FUNC_IGNORE 0x00 +#define S35390A_FUNC_DISABLE 0x01 +#define S35390A_FUNC_WAKEUP 0x02 +#define S35390A_FUNC_CLOCK 0x03 +#define S35390A_FUNC_PMIN1 0x04 +#define S35390A_FUNC_PMIN2 0x05 + =20 static const struct i2c_device_id s35390a_id[] =3D { { .name =3D "s35390a" }, @@ -64,6 +89,10 @@ MODULE_DEVICE_TABLE(of, s35390a_of_match); =20 struct s35390a { struct i2c_client *client[8]; + struct rtc_device *rtc; + + struct mutex pinfunction_lock; /* lock preventing concurrent access of pi= n function */ + int pinfunction[2]; }; =20 static int s35390a_set_reg(struct s35390a *s35390a, int reg, u8 *buf, int= len) @@ -165,20 +194,6 @@ static int s35390a_read_status(struct s35390a *s35390a= , char *status1) return 0; } =20 -static int s35390a_disable_test_mode(struct s35390a *s35390a) -{ - u8 buf[1]; - - if (s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, buf, sizeof(buf)) < 0) - return -EIO; - - if (!(buf[0] & S35390A_FLAG_TEST)) - return 0; - - buf[0] &=3D ~S35390A_FLAG_TEST; - return s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, buf, sizeof(buf)); -} - static char s35390a_hr2reg(int hour, bool twentyfourhour) { if (twentyfourhour) @@ -281,10 +296,25 @@ static int s35390a_rtc_alarm_irq_enable(struct device= *dev, unsigned int enabled u8 sts; int err; =20 - if (enabled) - sts =3D S35390A_INT2_MODE_ALARM; - else - sts =3D S35390A_INT2_MODE_NOINTR; + guard(mutex)(&s35390a->pinfunction_lock); + + err =3D s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); + if (err < 0) + return err; + + if (enabled) { + if (s35390a->pinfunction[0] =3D=3D S35390A_FUNC_WAKEUP) + sts =3D (sts & ~S35390A_INT1_MODE_MASK) | S35390A_INT1_MODE_ALARM; + + if (s35390a->pinfunction[1] =3D=3D S35390A_FUNC_WAKEUP) + sts =3D (sts & ~S35390A_INT2_MODE_MASK) | S35390A_INT2_MODE_ALARM; + } else { + if (s35390a->pinfunction[0] =3D=3D S35390A_FUNC_WAKEUP) + sts =3D (sts & ~S35390A_INT1_MODE_MASK) | S35390A_INT_MODE_NOINTR; + + if (s35390a->pinfunction[1] =3D=3D S35390A_FUNC_WAKEUP) + sts =3D (sts & ~S35390A_INT2_MODE_MASK) | S35390A_INT_MODE_NOINTR; + } =20 err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &sts, sizeof(sts)); if (err < 0) @@ -305,7 +335,19 @@ static int s35390a_rtc_set_alarm(struct device *dev, s= truct rtc_wkalrm *alm) alm->time.tm_min, alm->time.tm_hour, alm->time.tm_mday, alm->time.tm_mon, alm->time.tm_year, alm->time.tm_wday); =20 + guard(mutex)(&s35390a->pinfunction_lock); + + err =3D s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, &status2, sizeof(st= atus2)); + if (err < 0) + return err; + /* disable interrupt (which deasserts the irq line) */ + if (s35390a->pinfunction[0] =3D=3D S35390A_FUNC_WAKEUP) + status2 =3D (status2 & ~S35390A_INT1_MODE_MASK) | S35390A_INT_MODE_NOINT= R; + + if (s35390a->pinfunction[1] =3D=3D S35390A_FUNC_WAKEUP) + status2 =3D (status2 & ~S35390A_INT2_MODE_MASK) | S35390A_INT_MODE_NOINT= R; + err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &status2, sizeof(st= atus2)); if (err < 0) return err; @@ -315,16 +357,6 @@ static int s35390a_rtc_set_alarm(struct device *dev, s= truct rtc_wkalrm *alm) if (err < 0) return err; =20 - if (alm->enabled) - status2 =3D S35390A_INT2_MODE_ALARM; - else - status2 =3D S35390A_INT2_MODE_NOINTR; - - /* set interrupt mode*/ - err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &status2, sizeof(st= atus2)); - if (err < 0) - return err; - if (alm->time.tm_wday !=3D -1) buf[S35390A_ALRM_BYTE_WDAY] =3D bin2bcd(alm->time.tm_wday) | 0x80; else @@ -340,10 +372,32 @@ static int s35390a_rtc_set_alarm(struct device *dev, = struct rtc_wkalrm *alm) for (i =3D 0; i < 3; ++i) buf[i] =3D bitrev8(buf[i]); =20 - err =3D s35390a_set_reg(s35390a, S35390A_CMD_INT2_REG1, buf, - sizeof(buf)); + if (alm->enabled) { + /* set interrupt mode */ + if (s35390a->pinfunction[0] =3D=3D S35390A_FUNC_WAKEUP) + status2 =3D (status2 & ~S35390A_INT1_MODE_MASK) | S35390A_INT1_MODE_ALA= RM; + + if (s35390a->pinfunction[1] =3D=3D S35390A_FUNC_WAKEUP) + status2 =3D (status2 & ~S35390A_INT2_MODE_MASK) | S35390A_INT2_MODE_ALA= RM; =20 - return err; + err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &status2, sizeof(s= tatus2)); + if (err < 0) + return err; + } + + if (s35390a->pinfunction[0] =3D=3D S35390A_FUNC_WAKEUP) { + err =3D s35390a_set_reg(s35390a, S35390A_CMD_INT1_REG1, buf, sizeof(buf)= ); + if (err < 0) + return err; + } + + if (s35390a->pinfunction[1] =3D=3D S35390A_FUNC_WAKEUP) { + err =3D s35390a_set_reg(s35390a, S35390A_CMD_INT2_REG1, buf, sizeof(buf)= ); + if (err < 0) + return err; + } + + return 0; } =20 static int s35390a_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *a= lm) @@ -351,7 +405,9 @@ static int s35390a_rtc_read_alarm(struct device *dev, s= truct rtc_wkalrm *alm) struct i2c_client *client =3D to_i2c_client(dev); struct s35390a *s35390a =3D i2c_get_clientdata(client); u8 buf[3], status1, status2; - int i, err; + int i, err, reg; + + guard(mutex)(&s35390a->pinfunction_lock); =20 err =3D s35390a_read_status(s35390a, &status1); if (err =3D=3D 1) @@ -363,18 +419,24 @@ static int s35390a_rtc_read_alarm(struct device *dev,= struct rtc_wkalrm *alm) if (err < 0) return err; =20 - if ((status2 & S35390A_INT2_MODE_MASK) !=3D S35390A_INT2_MODE_ALARM) { + if (s35390a->pinfunction[1] =3D=3D S35390A_FUNC_WAKEUP && + (status2 & S35390A_INT2_MODE_MASK) =3D=3D S35390A_INT2_MODE_ALARM) { + reg =3D S35390A_CMD_INT2_REG1; + } else if (s35390a->pinfunction[0] =3D=3D S35390A_FUNC_WAKEUP && + (status2 & S35390A_INT1_MODE_MASK) =3D=3D S35390A_INT1_MODE_ALARM) { + reg =3D S35390A_CMD_INT1_REG1; + } else { /* * When the alarm isn't enabled, the register to configure * the alarm time isn't accessible. */ alm->enabled =3D 0; return 0; - } else { - alm->enabled =3D 1; } =20 - err =3D s35390a_get_reg(s35390a, S35390A_CMD_INT2_REG1, buf, sizeof(buf)); + alm->enabled =3D 1; + + err =3D s35390a_get_reg(s35390a, reg, buf, sizeof(buf)); if (err < 0) return err; =20 @@ -383,7 +445,7 @@ static int s35390a_rtc_read_alarm(struct device *dev, s= truct rtc_wkalrm *alm) buf[i] =3D bitrev8(buf[i]); =20 /* - * B0 of the three matching registers is an enable flag. Iff it is set + * B0 of the three matching registers is an enable flag. If it is set * the configured value is used for matching. */ if (buf[S35390A_ALRM_BYTE_WDAY] & 0x80) @@ -464,13 +526,168 @@ static int s35390a_nvmem_write(void *priv, unsigned = int offset, void *val, return s35390a_set_reg(s35390a, S35390A_CMD_FREE_REG, val, bytes); } =20 +static const struct pinctrl_pin_desc s35390a_pins_desc[] =3D { + PINCTRL_PIN(0, "int1"), + PINCTRL_PIN(1, "int2"), +}; + +static const unsigned int int1_pins[] =3D { 0 }; +static const unsigned int int2_pins[] =3D { 1 }; + +static const struct pingroup s35390a_pin_groups[] =3D { + PINCTRL_PINGROUP("int1_grp", int1_pins, ARRAY_SIZE(int1_pins)), + PINCTRL_PINGROUP("int2_grp", int2_pins, ARRAY_SIZE(int2_pins)), +}; + +static int s35390a_pinctrl_get_groups_count(struct pinctrl_dev *pctldev) +{ + return ARRAY_SIZE(s35390a_pin_groups); +} + +static const char *s35390a_pinctrl_get_group_name(struct pinctrl_dev *pctl= dev, + unsigned int group) +{ + return s35390a_pin_groups[group].name; +} + +static int s35390a_pinctrl_get_group_pins(struct pinctrl_dev *pctldev, uns= igned int selector, + const unsigned int **pins, unsigned int *npins) +{ + *pins =3D s35390a_pin_groups[selector].pins; + *npins =3D s35390a_pin_groups[selector].npins; + return 0; +} + +static const char * const all_groups[] =3D { "int1_grp", "int2_grp" }; +static const char * const int1_groups[] =3D { "int1_grp" }; + +static const struct pinfunction s35390a_functions[] =3D { + [S35390A_FUNC_IGNORE] =3D PINCTRL_PINFUNCTION("ignore", all_groups, ARRAY= _SIZE(all_groups)), + [S35390A_FUNC_DISABLE] =3D PINCTRL_PINFUNCTION("disable", all_groups, ARR= AY_SIZE(all_groups)), + [S35390A_FUNC_WAKEUP] =3D PINCTRL_PINFUNCTION("wakeup", all_groups, ARRAY= _SIZE(all_groups)), + [S35390A_FUNC_CLOCK] =3D PINCTRL_PINFUNCTION("clock", all_groups, ARRAY_S= IZE(all_groups)), + [S35390A_FUNC_PMIN1] =3D PINCTRL_PINFUNCTION("pmin1", all_groups, ARRAY_S= IZE(all_groups)), + [S35390A_FUNC_PMIN2] =3D PINCTRL_PINFUNCTION("pmin2", int1_groups, ARRAY_= SIZE(int1_groups)), +}; + +static int s35390a_pinctrl_get_functions_count(struct pinctrl_dev *pctldev) +{ + return ARRAY_SIZE(s35390a_functions); +} + +static const char *s35390a_pinctrl_get_function_name(struct pinctrl_dev *p= ctldev, + unsigned int selector) +{ + return s35390a_functions[selector].name; +} + +static int s35390a_pinctrl_get_function_groups(struct pinctrl_dev *pctldev= , unsigned int selector, + const char * const **groups, + unsigned int * const ngroups) +{ + *groups =3D s35390a_functions[selector].groups; + *ngroups =3D s35390a_functions[selector].ngroups; + return 0; +} + +static int s35390a_pinctrl_set_mux(struct pinctrl_dev *pctldev, unsigned i= nt function, + unsigned int group) +{ + int err; + u8 status2, flag, mask; + struct s35390a *s35390a =3D pinctrl_dev_get_drvdata(pctldev); + + mask =3D group =3D=3D 0 ? S35390A_INT1_MODE_MASK : S35390A_INT2_MODE_MASK; + + guard(mutex)(&s35390a->pinfunction_lock); + + dev_dbg(&s35390a->client[0]->dev, "%s: function=3D%d group=3D%d\n", + __func__, function, group); + + if (function =3D=3D s35390a->pinfunction[group]) + return 0; + + if (function !=3D S35390A_FUNC_IGNORE) { + err =3D s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, &status2, 1); + if (err < 0) { + dev_err(&s35390a->client[0]->dev, "error reading status\n"); + return err; + } + + switch (function) { + case S35390A_FUNC_DISABLE: + case S35390A_FUNC_CLOCK: /* not implemented */ + status2 =3D (status2 & ~mask) | S35390A_INT_MODE_NOINTR; + break; + case S35390A_FUNC_WAKEUP: + flag =3D group =3D=3D 0 ? S35390A_INT1_MODE_ALARM : S35390A_INT2_MODE_A= LARM; + + if ((status2 & mask) !=3D flag) + status2 =3D (status2 & ~mask) | S35390A_INT_MODE_NOINTR; + + break; + case S35390A_FUNC_PMIN1: + flag =3D group =3D=3D 0 ? S35390A_INT1_MODE_PMIN1 : S35390A_INT2_MODE_P= MIN1; + status2 =3D (status2 & ~mask) | flag; + break; + + /* INT1 only modes */ + case S35390A_FUNC_PMIN2: + if (group =3D=3D 1) + return -EINVAL; + + status2 =3D (status2 & ~mask) | S35390A_INT1_MODE_PMIN2; + break; + } + + err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &status2, 1); + if (err < 0) { + dev_err(&s35390a->client[0]->dev, "error setting interrupts\n"); + return err; + } + } + + s35390a->pinfunction[group] =3D function; + + return 0; +} + +static const struct pinctrl_ops s35390a_pinctrl_ops =3D { + .get_groups_count =3D s35390a_pinctrl_get_groups_count, + .get_group_name =3D s35390a_pinctrl_get_group_name, + .get_group_pins =3D s35390a_pinctrl_get_group_pins, +#if IS_ENABLED(CONFIG_OF) + .dt_node_to_map =3D pinconf_generic_dt_node_to_map_all, + .dt_free_map =3D pinconf_generic_dt_free_map +#endif +}; + +static const struct pinmux_ops s35390a_pinmux_ops =3D { + .get_functions_count =3D s35390a_pinctrl_get_functions_count, + .get_function_name =3D s35390a_pinctrl_get_function_name, + .get_function_groups =3D s35390a_pinctrl_get_function_groups, + .set_mux =3D s35390a_pinctrl_set_mux, + .strict =3D true, +}; + +static struct pinctrl_desc s35390a_pinctrl_desc =3D { + .name =3D DRIVER_NAME, + .pins =3D s35390a_pins_desc, + .npins =3D ARRAY_SIZE(s35390a_pins_desc), + .pctlops =3D &s35390a_pinctrl_ops, + .pmxops =3D &s35390a_pinmux_ops, + .owner =3D THIS_MODULE, +}; + static int s35390a_probe(struct i2c_client *client) { - int err, err_read; + int err; unsigned int i; struct s35390a *s35390a; struct rtc_device *rtc; - u8 buf, status1; + struct pinctrl_dev *pctl; + u8 status1, status2; + bool irq =3D false; struct device *dev =3D &client->dev; struct nvmem_config nvmem_cfg =3D { .name =3D "s35390a_nvram", @@ -481,6 +698,7 @@ static int s35390a_probe(struct i2c_client *client) .reg_read =3D s35390a_nvmem_read, .reg_write =3D s35390a_nvmem_write, }; + int fallback[ARRAY_SIZE(s35390a_pin_groups)]; =20 if (!i2c_check_functionality(client->adapter, I2C_FUNC_I2C)) return -ENODEV; @@ -489,7 +707,11 @@ static int s35390a_probe(struct i2c_client *client) if (!s35390a) return -ENOMEM; =20 + mutex_init(&s35390a->pinfunction_lock); + memset(s35390a->pinfunction, -1, sizeof(s35390a->pinfunction)); + s35390a->client[0] =3D client; + i2c_set_clientdata(client, s35390a); =20 /* This chip uses multiple addresses, use dummy devices for them */ @@ -504,33 +726,34 @@ static int s35390a_probe(struct i2c_client *client) } } =20 - rtc =3D devm_rtc_allocate_device(dev); - if (IS_ERR(rtc)) - return PTR_ERR(rtc); - - err_read =3D s35390a_read_status(s35390a, &status1); - if (err_read < 0) { + err =3D s35390a_read_status(s35390a, &status1); + if (err < 0) { dev_err(dev, "error resetting chip\n"); - return err_read; + return err; + } + + err =3D s35390a_get_reg(s35390a, S35390A_CMD_STATUS2, &status2, sizeof(st= atus2)); + if (err < 0) + return dev_err_probe(dev, err, "disabling alarm and test mode failed\n"); + + if (status1 & S35390A_FLAG_INT1) { + status2 =3D (status2 & ~S35390A_INT1_MODE_MASK) | S35390A_INT_MODE_NOINT= R; + irq =3D true; } =20 if (status1 & S35390A_FLAG_INT2) { - /* disable alarm (and maybe test mode) */ - buf =3D 0; - err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &buf, 1); - if (err < 0) { - dev_err(dev, "error disabling alarm\n"); - return err; - } - } else { - err =3D s35390a_disable_test_mode(s35390a); - if (err < 0) { - dev_err(dev, "error disabling test mode\n"); - return err; - } + status2 =3D (status2 & ~S35390A_INT2_MODE_MASK) | S35390A_INT_MODE_NOINT= R; + irq =3D true; } =20 - device_set_wakeup_capable(dev, 1); + status2 &=3D ~S35390A_FLAG_TEST; + err =3D s35390a_set_reg(s35390a, S35390A_CMD_STATUS2, &status2, sizeof(st= atus2)); + if (err < 0) + return dev_err_probe(dev, err, "disabling alarm and test mode failed\n"); + + rtc =3D devm_rtc_allocate_device(dev); + if (IS_ERR(rtc)) + return PTR_ERR(rtc); =20 rtc->ops =3D &s35390a_rtc_ops; rtc->range_min =3D RTC_TIMESTAMP_BEGIN_2000; @@ -539,9 +762,33 @@ static int s35390a_probe(struct i2c_client *client) set_bit(RTC_FEATURE_ALARM_RES_MINUTE, rtc->features); clear_bit(RTC_FEATURE_UPDATE_INTERRUPT, rtc->features); =20 - if (status1 & S35390A_FLAG_INT2) + s35390a->rtc =3D rtc; + + device_set_wakeup_capable(dev, 1); + + if (irq) rtc_update_irq(rtc, 1, RTC_AF); =20 + err =3D devm_pinctrl_register_and_init(dev, &s35390a_pinctrl_desc, s35390= a, &pctl); + if (err) + return dev_err_probe(dev, err, "pinctrl register failed\n"); + + err =3D pinctrl_enable(pctl); + if (err) + return dev_err_probe(dev, err, "pinctrl enable failed\n"); + + /* If no pinmux function is defined in DT, fallback to previous behaviour= */ + fallback[0] =3D S35390A_FUNC_IGNORE; + fallback[1] =3D S35390A_FUNC_WAKEUP; + + for (i =3D 0; i < ARRAY_SIZE(s35390a_pin_groups); i++) { + if (s35390a->pinfunction[i] =3D=3D -1) { + err =3D s35390a_pinctrl_set_mux(pctl, fallback[i], i); + if (err) + return err; + } + } + nvmem_cfg.priv =3D s35390a; err =3D devm_rtc_nvmem_register(rtc, &nvmem_cfg); if (err) @@ -552,7 +799,7 @@ static int s35390a_probe(struct i2c_client *client) =20 static struct i2c_driver s35390a_driver =3D { .driver =3D { - .name =3D "rtc-s35390a", + .name =3D DRIVER_NAME, .of_match_table =3D of_match_ptr(s35390a_of_match), }, .probe =3D s35390a_probe, --=20 2.54.0 From nobody Sat Sep 26 14:39:46 2026 Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.66]) (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 B295047A0A7 for ; Mon, 31 Aug 2026 17:42:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=185.67.36.66 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198158; cv=none; b=K9sa3VIBRARzVqjuIvGIQWx4Bj8aXfmN3PQTxB42J12V2Son2ETc6n3HkcuV9yckVg/ZyLy568Put/PwAulKvKhQuN7pEpBFK2qjJF1/gDXVBKvEGtG1ZfIunvJqWa/XvQemjRQIEjCL7qey3Wpcfc/qclOFJgixIr4+LdTrnaI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788198158; c=relaxed/simple; bh=2SQmS1BEAnLIMbljFkQwkOS3WcPm6gHQujWPW1XjW4I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=NC2WuAwoR5Qy5BVkvj8/wG6cuoVbtn7XdX492NhXMHRA+vkAb+vc51Jmu4tC0FXlehvHKnP10cYnqOTX13AiT8cgLYcbOiEMIHowpu4eTM/mCBSQJWdousruj7cjvigDuCZWzjtZh6P3ru8tabyS3bxLzy2aWJVdwB+PO92fn2M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de; spf=pass smtp.mailfrom=posteo.de; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b=gRyJSczy; arc=none smtp.client-ip=185.67.36.66 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=posteo.de Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=posteo.de Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=posteo.de header.i=@posteo.de header.b="gRyJSczy" Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id D1144240104 for ; Mon, 31 Aug 2026 19:42:31 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1788198151; bh=fzSUA8jz+o+v6OONQ0mLxZOh2EV6BUjpJKgJbuUiqx8=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=gRyJSczyeSj+HvBtHLg4gtbWWgdUUsdQqD6a0JpBscdXJlFCo3ce8aNp6fEXjujgk nmAm8AYkw/OnZj32psL6fV7VBOhWpRfnuP2NX1RDmsGZrWvAm+gSx69d9ZI7V1YOCV pqPjnSOlYrL65Ufm/C1bUVudl5x6UilorvfY8Vn3dhIIiCM4LIXGxbAgQwVdUi1OLd vMwUi6jfKiAscRrXhminLa2H0VkM0NY+ScsRKS3hBZOMXDs+HXhJanmgkBTthhtvki 7sYCxXm5P4WWGRFaH2nH3W9vKKc1Rx/Sw9iHMIvy3OshCy+o6Zxzd/TmYA/8wdTB3J /q34DC0ny8v0A== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hYbsx41R2z9rxK; Mon, 31 Aug 2026 19:42:29 +0200 (CEST) From: Markus Probst Date: Mon, 31 Aug 2026 17:42:31 +0000 Subject: [PATCH v8 6/6] rtc: s35390a: Add synology quirk 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 Message-Id: <20260831-rtc_s35390a_int1-v8-6-dac1dc86ce1f@posteo.de> References: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> In-Reply-To: <20260831-rtc_s35390a_int1-v8-0-dac1dc86ce1f@posteo.de> To: Alexandre Belloni , Rob Herring , Krzysztof Kozlowski , Conor Dooley , =?utf-8?q?Uwe_Kleine-K=C3=B6nig?= , Andrew Lunn , Gregory Clement , Sebastian Hesselbarth , Michael Langer , Andrew Morton , Linus Walleij Cc: linux-arm-kernel@lists.infradead.org, linux-rtc@vger.kernel.org, devicetree@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Markus Probst X-Developer-Signature: v=1; a=openpgp-sha256; l=1557; i=markus.probst@posteo.de; h=from:subject:message-id; bh=2SQmS1BEAnLIMbljFkQwkOS3WcPm6gHQujWPW1XjW4I=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqlbz5V5J0ZvNJiT/2zbcSdjPgf7G6vwjwCAyxx hRnegQxoc6JAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCapW8+RsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9LYvRAAoNhAfPowmr/c/5UB1G2hNYc/9sTdc2v 7Hg4isgQffaXAFU1H/9qWEG4O9am9Xi4gRS+2TGw7Dd8lpp4A+ZWJ9bSvFY8dmPN1WW7lmaS4KK JXoVavLr3CxYVOS3D7ZaUvcLtMtPZ1m9y5IituTbZ24cW0vcpgvGJ2NplGkT1BbsynOy0IR9Ox0 p1Mi/eXkkBZUoLyD8IJT+X5yJhGxvfYjRTMrXko8CLDKdvBpaxRdlosBA8lqjZxKZfUUTDS/QC4 9QSvRAwTsy3iffFRJsVu2hgKSO8ovUoUNyeKCAu80r16gnfkdTrVjP6FozeGEuUS0eD6d55OmMi qKleQpEKjRXopSymMLvCaF/SsokraVF62XQoFV7w16bAsVAziN3KG4jT4otK2EGAuyI6tIksS8N A0K6XlzG58haxKeJEhEY4ITBsuH7+2n/xPgOS8UZYeLxTS8k6DSvrCGQ8cVBzxwp1Mdu7ODGV0D 2arFG0mVgg4oE+tm1IwsL/9QDJlYpOkwvEsp68SR1Md0BLkMpP/XILZ/PRVmiWC1JqRqKCaIY8D 9bcqZNsN1fccx7tZU/fxnqrqLIWkPdpM4/KgmC8xaXmaFXUlBBF6DJW1cBBWW9QNRqbfJ0SBnf6 3/xwXxyGmNPOfry4/biIxFnbhi8NdXAXG2QKPOejlPtxxbs1jgbI= X-Developer-Key: i=markus.probst@posteo.de; a=openpgp; fpr=827418C4F4AC58E77230C47334761FF8E7AD43D2 Autocrypt: addr=markus.probst@posteo.de; prefer-encrypt=mutual; keydata=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 aBeNN4ijKZchBXHPgVx+YtWRHfcm4l8= OpenPGP: url=https://posteo.de/keys/markus.probst@posteo.de.asc; preference=encrypt Synology NAS devices use interrupt signal 1 for wakeup alarms. On ACPI it is not possible to configure pinctrl. Use interrupt signal 1 for wakeup if no pinmux function has been configured in devicetree and dmi sys vendor matches "Synology Inc.". Signed-off-by: Markus Probst --- drivers/rtc/rtc-s35390a.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/rtc/rtc-s35390a.c b/drivers/rtc/rtc-s35390a.c index 649d36d37f1f..d3e829052927 100644 --- a/drivers/rtc/rtc-s35390a.c +++ b/drivers/rtc/rtc-s35390a.c @@ -5,6 +5,7 @@ * Copyright (c) 2007 Byron Bradley */ =20 +#include #include #include #include @@ -778,8 +779,18 @@ static int s35390a_probe(struct i2c_client *client) return dev_err_probe(dev, err, "pinctrl enable failed\n"); =20 /* If no pinmux function is defined in DT, fallback to previous behaviour= */ - fallback[0] =3D S35390A_FUNC_IGNORE; - fallback[1] =3D S35390A_FUNC_WAKEUP; + + if (dmi_match(DMI_SYS_VENDOR, "Synology Inc.")) { + /* + * Synology uses interrupt signal 1 for wakeup. Since pinctrl cannot be + * configured on ACPI, we check against the dmi sys vendor. + */ + fallback[0] =3D S35390A_FUNC_WAKEUP; + fallback[1] =3D S35390A_FUNC_DISABLE; + } else { + fallback[0] =3D S35390A_FUNC_IGNORE; + fallback[1] =3D S35390A_FUNC_WAKEUP; + } =20 for (i =3D 0; i < ARRAY_SIZE(s35390a_pin_groups); i++) { if (s35390a->pinfunction[i] =3D=3D -1) { --=20 2.54.0