]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
arm64: dts: renesas: r9a09g047e57-smarc: Add gpio keys
authorBiju Das <biju.das.jz@bp.renesas.com>
Wed, 2 Jul 2025 09:27:53 +0000 (10:27 +0100)
committerGeert Uytterhoeven <geert+renesas@glider.be>
Tue, 8 Jul 2025 09:46:36 +0000 (11:46 +0200)
RZ/G3E SMARC EVK  has 3 user buttons called USER_SW1, USER_SW2 and
USER_SW3 and SLEEP button with NMI support. Add a DT node in device tree
to instantiate the gpio-keys driver for these buttons.

The system can enter into STR state by pressing the sleep button and
wakeup from STR is done by pressing power button. The USER_SW{1,2,3}
configured as wakeup-source, so it can wakeup the system during s2idle.

Signed-off-by: Biju Das <biju.das.jz@bp.renesas.com>
Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>
Link: https://lore.kernel.org/20250702092755.70847-1-biju.das.jz@bp.renesas.com
Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be>
arch/arm64/boot/dts/renesas/r9a09g047e57-smarc.dts
arch/arm64/boot/dts/renesas/renesas-smarc2.dtsi

index 2454a9743df2557a479e07087bb503ce872cf66d..1e67f0a2a945c929da51b09c2c7c4862b950bc03 100644 (file)
@@ -8,6 +8,7 @@
 /dts-v1/;
 
 /* Switch selection settings */
+#define SW_LCD_EN              0
 #define SW_GPIO8_CAN0_STB      0
 #define SW_GPIO9_CAN1_STB      0
 #define SW_LCD_EN              0
 #define SW_SD0_DEV_SEL         0
 #define SW_SDIO_M2E            0
 
+#define PMOD_GPIO4             0
+#define PMOD_GPIO6             0
+#define PMOD_GPIO7             0
+
+#define KEY_1_GPIO             RZG3E_GPIO(3, 1)
+#define KEY_2_GPIO             RZG3E_GPIO(8, 4)
+#define KEY_3_GPIO             RZG3E_GPIO(8, 5)
+
 #include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
 #include <dt-bindings/pinctrl/renesas,r9a09g047-pinctrl.h>
 #include "r9a09g047e57.dtsi"
 #include "rzg3e-smarc-som.dtsi"
        pinctrl-names = "default";
 };
 
+&keys {
+       key-sleep {
+               pinctrl-0 = <&nmi_pins>;
+               pinctrl-names = "default";
+
+               interrupts-extended = <&icu 0 IRQ_TYPE_EDGE_FALLING>;
+               linux,code = <KEY_SLEEP>;
+               label = "SLEEP";
+               debounce-interval = <20>;
+       };
+#if PMOD_GPIO4
+       /delete-node/ key-1;
+#endif
+
+#if SW_LCD_EN || PMOD_GPIO6
+       /delete-node/ key-2;
+#endif
+
+#if SW_LCD_EN || PMOD_GPIO7
+       /delete-node/ key-3;
+#endif
+};
+
 &pinctrl {
        canfd_pins: canfd {
                can1_pins: can1 {
                         <RZG3E_PORT_PINMUX(D, 5, 4)>; /* SDA0 */
        };
 
+       nmi_pins: nmi {
+               pinmux = <RZG3E_PORT_PINMUX(S, 0, 0)>; /* NMI */
+       };
+
        scif_pins: scif {
                pins = "SCIF_TXD", "SCIF_RXD";
                renesas,output-impedance = <1>;
index 3cac292f20b36aacb755e6a87b84d36b4a48a933..58561da3007a45cea4ff9ef86a70db28c71565df 100644 (file)
@@ -23,6 +23,9 @@
  * SW_GPIO9_CAN1_STB:
  *     0 - Connect to GPIO9 PMOD (default)
  *     1 - Connect to CAN1 transceiver STB pin
+ *
+ * GPIO keys are enabled by default. Use PMOD_GPIO macros to disable them
+ * if needed.
  */
 
 / {
                max-bitrate = <8000000>;
                status = "disabled";
        };
+
+       keys: keys {
+               compatible = "gpio-keys";
+
+               key-1 {
+                       interrupts-extended = <&pinctrl KEY_1_GPIO IRQ_TYPE_EDGE_FALLING>;
+                       linux,code = <KEY_1>;
+                       label = "USER_SW1";
+                       wakeup-source;
+                       debounce-interval = <20>;
+               };
+
+               key-2 {
+                       interrupts-extended = <&pinctrl KEY_2_GPIO IRQ_TYPE_EDGE_FALLING>;
+                       linux,code = <KEY_2>;
+                       label = "USER_SW2";
+                       wakeup-source;
+                       debounce-interval = <20>;
+               };
+
+               key-3 {
+                       interrupts-extended = <&pinctrl KEY_3_GPIO IRQ_TYPE_EDGE_FALLING>;
+                       linux,code = <KEY_3>;
+                       label = "USER_SW3";
+                       wakeup-source;
+                       debounce-interval = <20>;
+               };
+       };
 };
 
 &canfd {