[PATCH v2 1/5] dt-bindings: rtc: Add pinctrl for S35390A

Markus Probst <[email protected]> Sat, 01 Aug 2026 18:43:00 +0000
Newsgroups org.kernel.vger.linux-rtc,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-devicetree,org.kernel.vger.linux-kernel
Message-ID <[email protected]>
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 <[email protected]>
---
 .../devicetree/bindings/rtc/sii,s35390a.yaml       | 119 +++++++++++++++++++++
 .../devicetree/bindings/rtc/trivial-rtc.yaml       |   3 -
 MAINTAINERS                                        |   1 +
 include/dt-bindings/rtc/s35390a.h                  |  23 ++++
 4 files changed, 143 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/rtc/sii,s35390a.yaml b/Documentation/devicetree/bindings/rtc/sii,s35390a.yaml
new file mode 100644
index 000000000000..78a049576d5e
--- /dev/null
+++ b/Documentation/devicetree/bindings/rtc/sii,s35390a.yaml
@@ -0,0 +1,119 @@
+# 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:
+  - Alexandre Belloni <[email protected]>
+
+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 pins.
+
+  wakeup-parent: true
+
+  wakeup-source: true
+
+required:
+  - compatible
+  - reg
+
+patternProperties:
+  "^pins":
+    type: object
+    patternProperties:
+      "-pins$":
+        type: object
+        properties:
+          pins:
+            $ref: /schemas/pinctrl/pinmux-node.yaml#/properties/pins
+
+          sii,mode:
+            $ref: /schemas/types.yaml#/definitions/uint32
+            description: |
+              Modes for the specific pin:
+              - S35390A_MODE_IGNORE: Preserve the previous state.
+              - S35390A_MODE_DISABLE: Disable all interrupts.
+              - S35390A_MODE_WAKEUP: Used for waking up the system.
+              - S35390A_MODE_ALARM: Userspace defined alarm.
+              - S35390A_MODE_FREQ: Periodical at configurable frequency.
+              - S35390A_MODE_PMIN1: Minute periodical output with 50% duty.
+              - S35390A_MODE_PMIN2: Minute periodical output L for 7.81 ms.
+                                    Can only be used with pin INT1.
+              - S35390A_MODE_32768KHZ: Raw 32.768 kHz output.
+                                       Can only be used with pin INT1.
+            minimum: 0
+            maximum: 7
+
+          sii,frequency:
+            $ref: /schemas/types.yaml#/definitions/uint32
+            description: Frequency in Hz to be used with mode S35390A_MODE_FREQ.
+            minimum: 1
+            maximum: 31
+
+        required:
+          - sii,mode
+
+        if:
+          properties:
+            sii,mode:
+              const: 4
+        then:
+          required:
+            - sii,frequency
+        else:
+          properties:
+            sii,frequency: false
+
+        additionalProperties: false
+
+    additionalProperties: false
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/rtc/s35390a.h>
+
+    i2c {
+        #address-cells = <1>;
+        #size-cells = <0>;
+
+        rtc: rtc@30 {
+            compatible = "sii,s35390a";
+            reg = <0x30>;
+            pinctrl-0 = <&rtc_pins_default>;
+            pinctrl-names = "default";
+
+            wakeup-parent = <&int>;
+
+            rtc_pins_default: pins {
+              int1-pins {
+                pins = S35390A_PIN_INT1;
+                sii,mode = <S35390A_MODE_WAKEUP>;
+              };
+              int2-pins {
+                pins = S35390A_PIN_INT2;
+                sii,mode = <S35390A_MODE_DISABLE>;
+              };
+            };
+        };
+    };
diff --git a/Documentation/devicetree/bindings/rtc/trivial-rtc.yaml b/Documentation/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
 
 additionalProperties: false
-
 ...
diff --git a/MAINTAINERS b/MAINTAINERS
index 716acfc3d7c1..c85be1eefdb1 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -22696,6 +22696,7 @@ T:	git git://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git
 F:	Documentation/admin-guide/rtc.rst
 F:	Documentation/devicetree/bindings/rtc/
 F:	drivers/rtc/
+F:	include/dt-bindings/rtc/
 F:	include/linux/rtc.h
 F:	include/linux/rtc/
 F:	include/uapi/linux/rtc.h
diff --git a/include/dt-bindings/rtc/s35390a.h b/include/dt-bindings/rtc/s35390a.h
new file mode 100644
index 000000000000..dcd0ca15f9e9
--- /dev/null
+++ b/include/dt-bindings/rtc/s35390a.h
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) */
+
+#ifndef __DT_BINDINGS_RTC_S35390A_H
+#define __DT_BINDINGS_RTC_S35390A_H
+
+#define S35390A_MODE_IGNORE		0x0
+#define S35390A_MODE_DISABLE		0x1
+#define S35390A_MODE_WAKEUP		0x2
+#define S35390A_MODE_ALARM		0x3
+#define S35390A_MODE_FREQ		0x4
+#define S35390A_MODE_PMIN1		0x5
+#define S35390A_MODE_PMIN2		0x6
+#define S35390A_MODE_32768KHZ		0x7
+
+#define S35390A_MODE_INT1_MAX		0x7
+#define S35390A_MODE_INT2_MAX		0x5
+
+#define S35390A_FREQ_MASK		0x1F
+
+#define S35390A_PIN_INT1		"int1"
+#define S35390A_PIN_INT2		"int2"
+
+#endif /* __DT_BINDINGS_RTC_S35390A_H */

-- 
2.54.0