From nobody Fri Sep 25 08:48:16 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 387EF4AB3D8 for ; Wed, 16 Sep 2026 16:00:46 +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=1789574450; cv=none; b=ukFhCD4wxr1IiHJjrWtdCvAtYSaStPJZWCtNdfN+vDykI4JbnMAVKChPXaqbqKEriPr0BTsrb6OfGzYYC/11qhbQ3ITfdZDoEcc3b0zJ3kUzNrjFYToG/xk8TzzgIdPcnCCcCteIxwLZPZFQLE8gnTKEioSdsUKwZgn8hErbIBM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789574450; c=relaxed/simple; bh=UX/efH+lBc6+UCLzeIm/9pqwUCwaZ+zcP4iJF2iifN0=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=uCEA6ydcdTHQCL2qHKsBfEgDIbY0QxTVziSY+gvKcgKUZNuLeji32gZ7r+x+j+MSPcwrbAvS3bQiGyUy8cUwpkfjrBEDlWovDm1QrMdqVY+ZneVmtrvZR7Lrd8GnbFpYMV1RpnJ23Jpp/bAnYdl1glGw1rS8UmrDX8V6Py+51zA= 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=H8fU9iIq; 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="H8fU9iIq" Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 531A2240101 for ; Wed, 16 Sep 2026 18:00:37 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1789574437; bh=iTqVZfIUB83xPkoxQGkPTV6znmjbfKj5BRXJjzpcKtk=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=H8fU9iIq/DXkVLOfxbyg/eVZrzMTPwF7SBgylE2SkdJRqsnNIvdMFxMas+Nc/ZEcz pCYs58Ms7H4g9hORpy/nT+WqtnrcfxniCLh2S0SIHFcd5M8C2md5YPEt/v5Z2t518h bkG9OcFTPe1NsAkgUMrLfddh3WacaTbuaO7pJLvGacrHQJ9eHheGUWbDCCqJ3C75v9 33p6yA3x/nL4JOS5nI2r2az6Y/QxU4LO3G09j/KQG86MK4Y7Zuo8aKEOXWRrUNiizU Lft/Do5Qmy5KJaYmaVEw9lPF1SMHT+O7/XcLo6DsAiVkGOVTPpttzgd1aeSzBWucMS 9WfWFmUjxw0/Q== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hlNrz0cBCz9rxL; Wed, 16 Sep 2026 18:00:35 +0200 (CEST) From: Markus Probst Date: Wed, 16 Sep 2026 16:00:36 +0000 Subject: [PATCH v9 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: <20260916-rtc_s35390a_int1-v9-1-b2567a3e4959@posteo.de> References: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@posteo.de> In-Reply-To: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@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=4357; i=markus.probst@posteo.de; h=from:subject:message-id; bh=UX/efH+lBc6+UCLzeIm/9pqwUCwaZ+zcP4iJF2iifN0=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqqr0fuFvfpLb4DfXDaBAL2HDx1kqm2fmP0pH/u MS0/fkxGBSJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCaqq9HxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9LTDA/8D4ICBD4qb4WHEJoZzzNLkYXzXCVFhuA SeE89K3/R8H0gMt/78WIqw9I+oFPcvzByYSxbj05vkDtgGkVTVrCleX7ejE3sEUrheNll6WSIGo 2V1Ha4Q5Gn6LBSAZNvTO2byNlvGLd8mHTMJc1q7kVu26O+kXF+d3djGZDB6okXbcy4+8gpx3Bkd RGEhit3qmdAc6ZgH9yuFn+wrfuXgWzBLzJembLfqqUC2epiGPo+G+8jr63qtyuAJCvgdyQYfrY8 3qP+/PDHtOOvOGKW1DGEiEeStdBvUckyjiQJni+HOUFmz1vUYaF6N2qiydp5hwzDhQv5Y4BIDOH RrYjobFCewNiqNfTgeYVjskdq+nlbK78AzultxG9ljx+HMQcVHx+vsUSolrtWOQfRM85cJ2R19W b7J3FkmGmdWHM+hI3jFIoknhx96CaRQyA4KSpQsSWpLHkNMWvqJf9It5xAufvxcLo6a1vx3TjC5 AHv+t7DiUpT/7f2vXc1RI89mD+v3pBD26py3/4i0SzrMXW5qJP8Oi+rHQ1Nh0A7KT6F7pCUNalh 5kMXPd17ktvzFWOZ3OLxkjfbhW6Gom8N41mLxK1nKvzbrDdtxRjom4OaPWmc3ab21hnXJe+mcBt gkaDG9xAn/outG2on8vISNSOD5ybCCpbJRWPuwv2rGS+sncbwxW0= 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 | 121 +++++++++++++++++= ++++ .../devicetree/bindings/rtc/trivial-rtc.yaml | 3 - 2 files changed, 121 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..f3bf5900fb3c --- /dev/null +++ b/Documentation/devicetree/bindings/rtc/sii,s35390a.yaml @@ -0,0 +1,121 @@ +# 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: + minItems: 1 + maxItems: 2 + items: + enum: + - int1 + - 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"; + + interrupt-names =3D "int1"; + interrupts =3D <23>; + + 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.55.0 From nobody Fri Sep 25 08:48:16 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 84C0D4C6523 for ; Wed, 16 Sep 2026 16:00:52 +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=1789574458; cv=none; b=W4uoJpw/3WWeUl66JfWUnyQr5mOL/FVi+xYCMQ80o5XxwU42wImx2lL/dJP/SNjy7UGS1CAtswoDleWLQxrUpe6qseHBf2GvlkvnjO+/MKCNeg/pslS4pDdgGvycI4gcqCVfSWAhGrt4EvNjvG15lWe3/QHkBusxnosm0Rj3tlE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789574458; c=relaxed/simple; bh=njz0LoIjBX+iLSp+6dhCTZ9IUn801irSwkTWARXUa2I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=OYFlY1GbdwF/bsxG4YmJ/I6zlW9ilFnC/tVFOy6PsKJwUQGz2B5VzlesfOskTLWANHQGoiFyGRkFwg0Gnza3LcJPMO/qKxLFyZVFKsfm2JivjbyphwFE9me/OoG78c3LVLMImLq5jJjSO3446jvgnkUN8ihB/O0fzUtNvAM3Ltg= 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=JUSMcvGn; 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="JUSMcvGn" Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id F309024002B for ; Wed, 16 Sep 2026 18:00:38 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1789574438; bh=Brzq1+lLBNFr+bk2j3Rb+JV/YKNAySvoirb0/4mGr2w=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=JUSMcvGnuTI0YZW7NkfExOIqKXtIcAe7YUPJqHrG7vA3ft6zcuneefHi9YWnIKlft HfekoaAOUqZL3VsAR6OLpKzN5h+VS8iVK5G2kbX3sHZYNPJj9m6HweoH0g3uMF4VPf JDtrZiIoxbk+/cBt+7y9n0uKxnV/Wy+LnfnRnHp2VbKj/CtYjt7tU9v40b40MtOe1q Tjr9NrklEDN7s6uWJ0T2qZJkubtRlQ1uwwtu/mxeI40IwTwosxyNymLsMXw2OwRiqA RzULOUN/QQBUDbZ6xSwTbi8qNnvgCvLsEjrXg4D3HaF4AQYg/lmhAKcEksoo+Hl17R 20GYXLLHSdsJA== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hlNs053Ydz9rxG; Wed, 16 Sep 2026 18:00:36 +0200 (CEST) From: Markus Probst Date: Wed, 16 Sep 2026 16:00:38 +0000 Subject: [PATCH v9 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: <20260916-rtc_s35390a_int1-v9-2-b2567a3e4959@posteo.de> References: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@posteo.de> In-Reply-To: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@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=njz0LoIjBX+iLSp+6dhCTZ9IUn801irSwkTWARXUa2I=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqqr0fsHfMQ5xhmA6UlFvDLVBV0NCrCpGAHC1X1 XYwSpNUL4yJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCaqq9HxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9IJhA//Rr531OEKae/8VjFnfeqfbMD4VUagf/K RA3sn5m++OJ7H5gF2xTyRC77AvOxeLQG3v7TRWKSNofCUb9Q/e5sJfYVRMuWyfWUon8NWLTRycB Pn39Vvd7Rbh+ar31qxGKELB3KklUMFG5NWpTFPNrzjE+bd79tHFrSBO8Pa2c/ArhTFbbcWmdCRu YE7OEGX5RM8YWTlFKnZZIajyajVR7CpDo6PtIzjC450ukL3SeyvZOB//SYAdKwBd7boId8ohMH8 KeJrdZPp8hyGkHULXVm4jvRNhuhIab7u7WhgJsfB8e0vyXHNPbTcC8h7q+XlFKEAWPpA9Dge1TX URHUNqXGm82W6C5iIBnnbUBF3eKNQMwm+NhyzzkjS0dphf0+TCVQvqU33qcGd2C1LLGgxTQPsgN /57h4jT2IIUKPO2hgrX8Dk2ttCoeE7r30WbUN0Dfn2kb5ZKnxdtMtT7hqaSHRdd2YtV4NWeiKhs BylP/Yf1whP3pcI3D7utjEmqc31nIEkzFEuA7HTNqp8zaRsyDb7A0sOoZVbfJ4TTlTLw6beSzEw PrrcRJyKZxkRAEnigclLyL87FmPKnqeS1zz6OfeZBmvKzXryrOvGxvEA9BpBC7zjBlqXrdhokDt viGHuasH1tcuE+y9MfIWDHGaPCSa6yxYG8iYINKYLXhLbfGxf9j8= 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.55.0 From nobody Fri Sep 25 08:48:16 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 671D64C2253 for ; Wed, 16 Sep 2026 16:00:49 +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=1789574451; cv=none; b=pE28x99AUnEuAH3ncvtbjXekgymkfh+4izHbYO/RQT/lUesl9zfVvFgyIKMk8swQKEPPQTaJ8TkgEtmaE+OlOkA4LLoWM+6L3rdWK+69AeKBCrru0CmNAevvmZmqdhCJ1gqW1G4DNhGtyvN6NoejIU5juGlluaqxr9kUegsk4so= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789574451; c=relaxed/simple; bh=69bZeDdtzZVtx2NgsHAqG2m19TIvfF7isZUwwI/l+NI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=iEjDfWd2GaqXyeKi60zy3Vs5CKNpQI1qYBwZSIB1S0C0oQ+0FBHZYJHPTbLWrGx2xi7p5sGbhd0/mQX5olWgTrV1uajQgbY9lwM6aTXc/EoHOHJlvnFr3ea9TmxPjntffLZjeuEfzgfDREkMDS4tLpOYiWUK5+XwvCkyJhMJd4k= 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=n1mObpee; 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="n1mObpee" Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 9CD53240105 for ; Wed, 16 Sep 2026 18:00:40 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1789574440; bh=FSd2CW7eXmpI9/waQr4TVGSQ1H+Y5vbyaezeZzrZAIM=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=n1mObpeeLZjXeB8xj9dP04dnQlTVmfMPF/vhFUcaC/fR9uk/vnbkBMJiqAR/Zj08X G1MRavfyg3H+S9kPSSPYJJWvME+cO5mLuqAYHjW0soQptp77ZpQJ1K6QEFVQt8MAMz avoBuzaFjOk5tFzwd8uz930jqeXQkbr6wzLUvv0nQNU7FZ6UTxIYu3XeKR1nyHSKJ5 pmB8ek4iiU1QJ0Scz5luUyk1NPAz2ZOEBSzJ4+sBc98nyuA3TTveM8ZwQh78EFqXbH FZrc+TjsTMCnt9e22NOdgi4k8TfCPS47m8s5pN57Sktpj1OQhN1O4MFe5E4YgD7RVs yN4R+mdPWZGSQ== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hlNs22ncVz9rxK; Wed, 16 Sep 2026 18:00:38 +0200 (CEST) From: Markus Probst Date: Wed, 16 Sep 2026 16:00:39 +0000 Subject: [PATCH v9 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: <20260916-rtc_s35390a_int1-v9-3-b2567a3e4959@posteo.de> References: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@posteo.de> In-Reply-To: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@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=69bZeDdtzZVtx2NgsHAqG2m19TIvfF7isZUwwI/l+NI=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqqr0f0KcpoGvEk8RtI5MpOLLgHPk6p6oPvBEf5 gHI9fJN+pWJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCaqq9HxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9Ja9Q/+PhQmrRblNzwfIFXcR782VQqOSx+nlqK kBC7x8BlG1LyFLcanEmNOXHArW4jGNT8/6xSjv4IdwbOQQAUSRn6roiva9iigWictGLQMnDcYZe k/cLeS52jK3kRSxzZ5Ck5/uccUVPwSofBF7J1rwuyjUXTjdkbI6UjW781QDAvOdt+P/w29JW7rI 9pnyzhg5Dx+ZBNf4XVDgNKoh8NVTJPdfu/zwQI0dO5CVw+2r06ftpn2d1J2oNIX46gyWD82Gj+d Rx4iqEtNAjF6Typ6nT5xYsJoJkZ4Ekj21/lcEnpMjctfjTQ2piZU12BTItEV/WaGKviZYAx9WGb IALLstUC4l5ztMMks/b49DGZZuyol+ZvtAu6kNNfqgZQqqv6nU1FVTDOIN46gGL0EfEECyl5syJ MBUAB+Z6IbwKFPA4KgDIpb2YPVy5cL3KVgROZUpoFGqbMuG5IBJMAi+oHBJGADDlONZJPPLQmj9 bHDWzBiERX1gLngkTvQydp7rl2Ch78r14Gzn1PUy+b4hkttUT3YQ2JOKDen7P++7JT8xJ2qo72o JlsRpxi1Rnf8C3ZfztINPw1SLYLWVlXGdXDwD8Y7+OnFBFhhOzYCh29ji31cdWW51XVFrMKRebY HZJQTg4T/uBVUOS4YVd9gIs+lll5WLZZCX34tVBeY4DJ9bn8y8Wk= 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.55.0 From nobody Fri Sep 25 08:48:16 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 4A6504C653D for ; Wed, 16 Sep 2026 16:00:53 +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=1789574457; cv=none; b=K/8NE4fBlQ2GrjXW98alDQekV59FrVWtYlCCNykhba9fSD7QG2aWGElTwK5akSLvE6DeKzD9nM/ijGpoihprjDAo+/dz87kqkq8bfQ3pmCTuoFpZg3aXAtQG5yzVXvQKGCAAUT18snpZCQ+HrJP1ERsA4ZhNnB27TRa87EFFgpw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789574457; c=relaxed/simple; bh=OU0NdFDUjbJfIufQ3mrj2OLqBXCffXKuAH9iUeuCQGk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=JpSLMkDw8f7dTe07J1xa0ianbp74sHnZYlvqxN1w1841qpvU8x9UUGl5sxRQgA3u0btN1G7QrpUCwDazeXWTU9n16oOe7NAXvIFMgGi80ybTq0KTabq+sLgglESgIX8ktZGAIsR1Wsq/ThM3bkWdbHviQCff97FZQqK1cRCxqMQ= 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=gyN5iPId; 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="gyN5iPId" Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 827E9240027 for ; Wed, 16 Sep 2026 18:00:42 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1789574442; bh=DaVe63ljG5kZuILIywsAkaB4MezJYtSBdRUA2OCmMxY=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=gyN5iPId0Y8vD19OMWshRN59+SS5lzVFgmQ9FV0p4occpq8FfxDTB/8D+Gaez0yE1 0RwfDP0az1dQ70bNK79khA3yuLfkrBvteZ9e9l0C5RHx0Xp0xRQnl2KFAAIvsWtkl7 X838nd58BEeKuyIYTYy2bDpoYrYlfUKDselJUuWKKw64kjX5AtAHkvvAN4gYbE5yw3 uC04Z2SA2XPv9tKqNPzEYZA0odMNFLffXC4nPO7HDV9TX/pV1GX31J36DFUUgRAbWt BJPjhWYCLOiCqRpuMmCbywEot/qIRF+lk/jCKYwmUaFDaF7SJ6vXNpOz0iur7QrH6z EigmdOtjsq0Jw== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hlNs372VGz9rxF; Wed, 16 Sep 2026 18:00:39 +0200 (CEST) From: Markus Probst Date: Wed, 16 Sep 2026 16:00:41 +0000 Subject: [PATCH v9 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: <20260916-rtc_s35390a_int1-v9-4-b2567a3e4959@posteo.de> References: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@posteo.de> In-Reply-To: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@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=OU0NdFDUjbJfIufQ3mrj2OLqBXCffXKuAH9iUeuCQGk=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqqr0f1BslJkSuPNW0TLdR1hMHXgtEeWSY1Zvs+ XekCE5owEWJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCaqq9HxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9KaYBAAhwLdnw1wMMVw39cgda1s7nc3lmGAfGs hjZVqpp/sHUd/zSaOsGp0eaLY3eM8ttbxUpJqioJBIRvQLG6R3CrFlUrwcwotfVZ7kcyTHQuPQR 6yfynYnVc/NtpZk/iH722b+JlnnV3hWiK4Y/xESRjhMhHTtOr+aTTQffGYlKcfk9skAzYcUcwAJ eEwdw8ZIpsvgnF2P50oVul6Cay9yP4i1+l+Qrssz2OTKng9Jf4wrAMYhfUxwj6aYOn4HCC8oWgq vJ8YBvTQeT998Qn287YCANjhGyPMVZGh66CIXrZqy6BwW8vIqdEnAQ/5aYqpJgZm65uTlb0S0fT G30xrJ8TFToPlaD11QqhCA4fLXAdYLAE12Hg0Tf3BBAx0+97xKc9MuOnknkJsNMArDhf5TZR51F TGIvqXLRcCpgy0n2Ofp950P4ttHjqB2beozN+uFU0PwT72nKyDRVZbaSz23AfwwRgijLjzs8Lbu Z4TpXPIHfNGk3RO1Xmmxbua7ILEuhDnQemcynCzA/0qgToIC6fdxuJ0+NtLSBZnP3PGfDa0HeKP nlUm5pL+FOkSCVLGBv9I3QSKLOHKGE1pbpS8IHgZcSF2THRjOIiFvqMOjKOCDUtqtBbhrkcGf8b MNCUzka8vtKvPsMtrqe6T9s3KcmKGWDlKaDOzX0PmCoDsudkGrbs= 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.55.0 From nobody Fri Sep 25 08:48:16 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 4235D49B452 for ; Wed, 16 Sep 2026 16:00:56 +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=1789574465; cv=none; b=jD32VpyW7br6HU8wyZprhl8VHtt5Cto3JRnCSKV41twApt7cZq+ym0FBJdYvUsnveTW2bA7CS5Lue/983RYxSOlotaKWfNXFPYrusvQ5K02Hl4kXKHaOOQ7yRc7a0YT2vd/ZbSk4177SV+OEoT0gRtb5nV4pUUGC4TEPhc5iEe4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789574465; c=relaxed/simple; bh=FYoQlUDgCRNSVctLBUq2157n5gxHm80aT5LNffMkb04=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=hJhKxqTSbxrNw4Ct7bNLu+4kmoQby/ApuY92kVTn32YwHUVFPJemmOFAtNQu1FXlV+lRCwuUPF+CVTQupZVedPmw580U/RTSQi34jkkCB2F2Lf8TxSSjxoaK32nx3hHlozQeGrpucLI6mlE2WX1KRt7VszJR1auC1c7B/XqBv8o= 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=jzcF2UUi; 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="jzcF2UUi" Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id E3F4E24002E for ; Wed, 16 Sep 2026 18:00:43 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1789574443; bh=ce/UduRNkMNJQ2TzeVdWzc7HEaRTTcY3rIYP1QPIoe4=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=jzcF2UUickivwf2ulnk/vl67NEyrotmSgKUXMQulIKB0B2fehSE6KYhgyUcaeMEll qdtFnt71siUKOCkXyLFyPh0/gdAlygdjYTGMoGpwBWfgnWJvvWPpiV7gLG8h2/R4rO fvg5DM5/noP3ee3syix8L7DsCvDVVkS6oPSjH0DGApM+bpftNO2Mx4ZpBDjh0DHxyt OdS4SnKyIcZOVqXoHwmTv72MwHN+93AhWH9uDxAvPz1Tsys3zqUXPjdeoT+ruo6OpS Fc729G0/GZrQdv9VWuV2VoIeq7ZvIBxd1UXIysnsXdP1/8x+xrb6Mclmj4lG5wDmCZ jAr3i7ZpgBf9A== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hlNs54jWrz9rxN; Wed, 16 Sep 2026 18:00:41 +0200 (CEST) From: Markus Probst Date: Wed, 16 Sep 2026 16:00:43 +0000 Subject: [PATCH v9 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: <20260916-rtc_s35390a_int1-v9-5-b2567a3e4959@posteo.de> References: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@posteo.de> In-Reply-To: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@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=18551; i=markus.probst@posteo.de; h=from:subject:message-id; bh=FYoQlUDgCRNSVctLBUq2157n5gxHm80aT5LNffMkb04=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqqr0fage3lpFdkmaVZpmJM2V/w6dk1xsR2feK6 vJTdeZ5Z+6JAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCaqq9HxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9JoFA//VVaYhxgRODazpWzNWtBS2ct8grurZPL t8Yu7MOvmQJ/0zoYjtw3WMuSqAkTG30/OzA6rnbXuDmIgpC7uM7kT+UT8L/b3PU11PKYv+ZTxDg SN+PjR4xAHaDfa+GMNr0O1IOxORBNWpxs8CK+G8BCwJDrvA9RlyY2DcPmZSA53pSz4iErpIMGLi UNxYRtgwubLHakHtr/v+FltnT446f9aLsf4cqvH958OHo9WqO2oos3yTqtWuCgNb/Z8OGtZ9qDv SLKu2PWA+dWu4yTL85m0tXxtdIfOVYGdrPzAl1eNgqx2GxTlmcPS1kjIuigqnrSxVyfb/Un2KIU aXlKiMpfvoLDH7XNlCnyYqSBAH/zdRDmibrmhCKGQgeevpYd9ym1OIplcik4ztYizpJeCDQVB08 HVU0spItFfXpQAkHjCJnIxDwxd98IbzpOUcCXrQ/an4H5Htl4ioGik/GhOnKxqTpaNhiZQBDOfA oINXNRlVftg3+7B2FMR45UuSo0Dq3KHTEqvMb8YrCzNRWpIRn8q9wf82VU3krua6FOC8JMep7s1 IYAL1JIcSPL4cPjtgGAdZtOr+lihde2Pu/Y10V16f2HwdC7kGaiOH7hEcCPjCaJoKLw1vdimZe7 8M3kCQT73Gi3lT6LHsX6P/j/+fpDv/n++S6OKJl7L7sVfSIKK0BY= 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. Reviewed-by: Linus Walleij Signed-off-by: Markus Probst --- 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.55.0 From nobody Fri Sep 25 08:48:16 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 50F034B95A9 for ; Wed, 16 Sep 2026 16:01:00 +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=1789574465; cv=none; b=HjqvTGB8VYQL/pdd2kEuarrcm+8NmMZrcKN1bchKJTJqjmAdUZsS108D3tK553OmA21pr/gUTBdKQQ1TQ6grf0YP30dVLOPX6y16XenMbK2O0zSHdPuOOCmh2gGkyc1W27NLHFSwKz2ukuRqV3qFSm4D7BMVn6SbiSXYvuOv2VU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789574465; c=relaxed/simple; bh=UeH8IT8dr/3TVi3DglHaZFIOqlvZBpR7RvdSiyHbxgg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dlzn+Cq3ZQa+AypkbOZeTwp4nNS1m0ZouScsJ9L8/UBlgVJ0YWoyz6tXSOXCljnk6P2rAubZSGHSAb1oKdNxiSI7s1wiWx0ZzQZkU7G2TeExvv33rLbkR1ZTpnlYRMuM3Q/6n/pk8JzNs2PC8T4LKNuRfSD/qu7+h2605GDUjiw= 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=YYkfdlft; 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="YYkfdlft" Received: from submission (posteo.de [185.67.36.169]) by mout01.posteo.de (Postfix) with ESMTPS id 025E1240028 for ; Wed, 16 Sep 2026 18:00:47 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=posteo.de; s=1984.8680eb; t=1789574447; bh=OfhCcDimQydckibdghCTJJWOOyfGObrpnuJon29Aw7A=; h=From:Date:Subject:MIME-Version:Content-Type: Content-Transfer-Encoding:Message-Id:To:Cc:Autocrypt:OpenPGP:From; b=YYkfdlft0hBz+D+m3ZRXe2eC/EW8YO1GHlNkfSEjaOkiWKvHLmXCfAqbWdxNHRriW oasAPmYXKkXjbBX//KoutcNrzUy+h8DGgnLYlthBtyEd0JeH5L2aN8couMOdddT/OG oxonl/+ph1UdoSZ5wbz0ili870hp5swSCQYfkG0evexgD4cpB3kgin17wKKzfr5zIi P0lLNYRAd4wNycQmT6s9x8deYIrwndmUKPdOlytDrfLCW0c25zgf2u3B354VD6pnVl a3i2kVVCvA7iaM/L940NPwkOYzZSzY0WFZcYOsgAU88A8A8K8FyofJZql1znRGpK+7 z2RlSJ30COKVg== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4hlNs727Cdz9rxK; Wed, 16 Sep 2026 18:00:43 +0200 (CEST) From: Markus Probst Date: Wed, 16 Sep 2026 16:00:45 +0000 Subject: [PATCH v9 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: <20260916-rtc_s35390a_int1-v9-6-b2567a3e4959@posteo.de> References: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@posteo.de> In-Reply-To: <20260916-rtc_s35390a_int1-v9-0-b2567a3e4959@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=UeH8IT8dr/3TVi3DglHaZFIOqlvZBpR7RvdSiyHbxgg=; b=owEBiQJ2/ZANAwAIATR2H/jnrUPSAcsmYgBqqr0fecYk+1B3lD3RBeXyAiZ31ZaxIfLWZaoTJ PjcAwjGi6OJAk8EAAEIADkWIQSCdBjE9KxY53IwxHM0dh/4561D0gUCaqq9HxsUgAAAAAAEAA5t YW51MiwyLjUrMS4xMiwyLDIACgkQNHYf+OetQ9J3sw/8DXsuT9zEamOZXeF9s+YO7W/7BTPWppD xwP3HetzPqyTrK8SudraRoe8E8qqpeMf0AQqT+0paazq8WJclwJOX/s7JcSc1VyK+vo0SE6Am0X xNBSnUXcjJ2KEGuBzqE9v9S/JvXr3+kexQCDWHZnT+fYl9QC8A1ASuFmvXxowllOfL6ZwROJjEY 2ZE2SXcDIf5/11DowwKmfqqpJHDhsT/1BS+DXukw3Zo6rdjEEpzoIM2hIgXWkBWydtpq4t+Gr2O Wc99pPMBGXNtHGyCmg3J8HpNSI/MCGYyCp7dc06y2TSPDVoEn7vJdkOFPvybz/aZ5hRZMtLMjBn qGUs7M9UYkV5EWc9xp9qrhtIXXb406AVwsNxEjEDUzj1IySm8YeB8rYsh8EPZvfJwv7cKvIbu0l JXAY33OAswForhIQQMuvxIhqRGTeivpExDQH68kQR9xK3WXmLcCbUEdPGcezbDj3v3W4mPiPap7 g1feclPWFLb3ws8qknEy4IkyccM24K/IOci/IGOLk6Eh43/7RH/ihGE09uneEZtMmmUdpXKvlsL /9/LLconOA5/lPD1kGe3dvVqXAaCspFreIYQPQKE2ydtKw1VPrWzNZOkBEk4sDp0AVF1SBPStCH 4vR/DL9mRbyqA1nceEcWhPktY5M1cVFgReH9K4y/FKZ0BBZpUAyA= 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.55.0