From 53dea223b73922e385ecf11883e5327a4f328eae Mon Sep 17 00:00:00 2001
From: Peter Johanson <peter@peterjohanson.com>
Date: Sat, 14 Jan 2023 12:01:33 -0500
Subject: [PATCH] feat(shields): Add splitkb.com Kyria Rev3.

---
 app/boards/shields/kyria/Kconfig.defconfig    |  2 +-
 app/boards/shields/kyria/Kconfig.shield       |  8 ++++
 app/boards/shields/kyria/kyria_rev3.conf      | 10 +++++
 app/boards/shields/kyria/kyria_rev3.dtsi      | 41 +++++++++++++++++++
 app/boards/shields/kyria/kyria_rev3.keymap    | 38 +++++++++++++++++
 app/boards/shields/kyria/kyria_rev3.zmk.yml   | 15 +++++++
 .../shields/kyria/kyria_rev3_left.overlay     | 29 +++++++++++++
 .../shields/kyria/kyria_rev3_right.overlay    | 33 +++++++++++++++
 8 files changed, 175 insertions(+), 1 deletion(-)
 create mode 100644 app/boards/shields/kyria/kyria_rev3.conf
 create mode 100644 app/boards/shields/kyria/kyria_rev3.dtsi
 create mode 100644 app/boards/shields/kyria/kyria_rev3.keymap
 create mode 100644 app/boards/shields/kyria/kyria_rev3.zmk.yml
 create mode 100644 app/boards/shields/kyria/kyria_rev3_left.overlay
 create mode 100644 app/boards/shields/kyria/kyria_rev3_right.overlay

diff --git a/app/boards/shields/kyria/Kconfig.defconfig b/app/boards/shields/kyria/Kconfig.defconfig
index cdb57b6b..53b441cb 100644
--- a/app/boards/shields/kyria/Kconfig.defconfig
+++ b/app/boards/shields/kyria/Kconfig.defconfig
@@ -1,5 +1,5 @@
 
-if SHIELD_KYRIA_LEFT || SHIELD_KYRIA_REV2_LEFT
+if SHIELD_KYRIA_LEFT || SHIELD_KYRIA_REV2_LEFT || SHIELD_KYRIA_REV3_LEFT
 
 config ZMK_KEYBOARD_NAME
 	default "Kyria"
diff --git a/app/boards/shields/kyria/Kconfig.shield b/app/boards/shields/kyria/Kconfig.shield
index 6304f5d5..52df9378 100644
--- a/app/boards/shields/kyria/Kconfig.shield
+++ b/app/boards/shields/kyria/Kconfig.shield
@@ -19,3 +19,11 @@ config SHIELD_KYRIA_REV2_LEFT
 config SHIELD_KYRIA_REV2_RIGHT
 	def_bool $(shields_list_contains,kyria_rev2_right)
 	select SHIELD_KYRIA
+
+config SHIELD_KYRIA_REV3_LEFT
+	def_bool $(shields_list_contains,kyria_rev3_left)
+	select SHIELD_KYRIA
+
+config SHIELD_KYRIA_REV3_RIGHT
+	def_bool $(shields_list_contains,kyria_rev3_right)
+	select SHIELD_KYRIA
diff --git a/app/boards/shields/kyria/kyria_rev3.conf b/app/boards/shields/kyria/kyria_rev3.conf
new file mode 100644
index 00000000..7a0b5b6c
--- /dev/null
+++ b/app/boards/shields/kyria/kyria_rev3.conf
@@ -0,0 +1,10 @@
+# Uncomment these two line to add support for encoders to your firmware
+# CONFIG_EC11=y
+# CONFIG_EC11_TRIGGER_GLOBAL_THREAD=y
+
+# Uncomment the following line to enable the Kyria OLED Display
+# CONFIG_ZMK_DISPLAY=y
+
+# Uncomment the following lines to enable RGB underglow
+# CONFIG_ZMK_RGB_UNDERGLOW=y
+# CONFIG_WS2812_STRIP=y
diff --git a/app/boards/shields/kyria/kyria_rev3.dtsi b/app/boards/shields/kyria/kyria_rev3.dtsi
new file mode 100644
index 00000000..4a500006
--- /dev/null
+++ b/app/boards/shields/kyria/kyria_rev3.dtsi
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2022 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "kyria_common.dtsi"
+
+/ {
+	chosen {
+		zmk,matrix_transform = &default_transform;
+	};
+
+	default_transform: keymap_transform_0 {
+		compatible = "zmk,matrix-transform";
+		columns = <14>;
+		rows = <4>;
+		// | MX6  | MX5  | MX4  | MX3  | MX2  | MX1  |                               | MX1  | MX2  | MX3  | MX4  | MX5  | MX6  |
+		// | MX12 | MX11 | MX10 | MX9  | MX8  | MX7  |                               | MX7  | MX8  | MX9  | MX10 | MX11 | MX12 |
+		// | MX20 | MX19 | MX18 | MX17 | MX16 | MX15 | MX14 | MX13 |   | MX13 | MX14 | MX15 | MX16 | MX17 | MX18 | MX19 | MX20 |
+		//                    | MX25 | MX24 | MX23 | MX22 | MX21 |       | MX21 | MX22 | MX23 | MX24 | MX25 |
+		map = <
+		RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4) RC(0,5)                                  RC(0,8) RC(0,9) RC(0,10) RC(0,11) RC(0,12) RC(0,13)
+		RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5)                                  RC(1,8) RC(1,9) RC(1,10) RC(1,11) RC(1,12) RC(1,13)
+		RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5) RC(3,3) RC(2,6) RC(2,7) RC(3,10) RC(2,8) RC(2,9) RC(2,10) RC(2,11) RC(2,12) RC(2,13)
+		RC(3,2) RC(3,4) RC(3,5) RC(3,1) RC(3,6) RC(3,7) RC(3,12) RC(3,8) RC(3,9) RC(3,11)
+		>;
+	};
+};
+
+&left_encoder {
+	resolution = <2>;
+	a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
+	b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
+};
+
+&right_encoder {
+	resolution = <2>;
+	a-gpios = <&pro_micro 20 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
+	b-gpios = <&pro_micro 21 (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
+};
diff --git a/app/boards/shields/kyria/kyria_rev3.keymap b/app/boards/shields/kyria/kyria_rev3.keymap
new file mode 100644
index 00000000..fff2e051
--- /dev/null
+++ b/app/boards/shields/kyria/kyria_rev3.keymap
@@ -0,0 +1,38 @@
+/*
+ * Copyright (c) 2023 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include <behaviors.dtsi>
+#include <dt-bindings/zmk/keys.h>
+
+/* Uncomment this block if using RGB
+&led_strip {
+	chain-length = <6>;
+	// chain-length = <31>; // Uncomment if using both per-key and underglow LEDs
+	// chain-length = <25>; // Uncomment if using only per-key LEDs.
+};
+ */
+
+/ {
+	keymap {
+		compatible = "zmk,keymap";
+
+		default_layer {
+			// ---------------------------------------------------------------------------------------------------------------------------------
+			// |  ESC  |  Q  |  W  |  E   |  R   |  T   |                                          |  Y   |  U    |  I    |  O   |   P   |   \  |
+			// |  TAB  |  A  |  S  |  D   |  F   |  G   |                                          |  H   |  J    |  K    |  L   |   ;   |   '  |
+			// | SHIFT |  Z  |  X  |  C   |  V   |  B   | L SHIFT | L SHIFT |  | L SHIFT | L SHIFT |  N   |  M    |  ,    |  .   |   /   | CTRL |
+			//                     | GUI  | DEL  | RET  |  SPACE  |   ESC   |  |   RET   |  SPACE  | TAB  | BSPC  | R-ALT |
+			bindings = <
+			&kp ESC   &kp Q &kp W &kp E &kp R &kp T                                                &kp Y &kp U  &kp I     &kp O   &kp P    &kp BSLH
+			&kp TAB   &kp A &kp S &kp D &kp F &kp G                                                &kp H &kp J  &kp K     &kp L   &kp SEMI &kp SQT
+			&kp LSHFT &kp Z &kp X &kp C &kp V &kp B &kp LSHFT &kp LSHFT        &kp LSHFT &kp LSHFT &kp N &kp M  &kp COMMA &kp DOT &kp FSLH &kp RCTRL
+			&kp LGUI &kp DEL &kp RET &kp SPACE &kp ESC        &kp RET  &kp SPACE  &kp TAB &kp BSPC &kp RALT
+			>;
+
+			sensor-bindings = <&inc_dec_kp C_VOL_UP C_VOL_DN &inc_dec_kp PG_UP PG_DN>;
+		};
+	};
+};
diff --git a/app/boards/shields/kyria/kyria_rev3.zmk.yml b/app/boards/shields/kyria/kyria_rev3.zmk.yml
new file mode 100644
index 00000000..bf84c82c
--- /dev/null
+++ b/app/boards/shields/kyria/kyria_rev3.zmk.yml
@@ -0,0 +1,15 @@
+file_format: "1"
+id: kyria_rev3
+name: Kyria Rev3
+type: shield
+url: https://splitkb.com/products/kyria-pcb-kit
+requires: [pro_micro]
+exposes: [i2c_oled]
+features:
+  - keys
+  - display
+  - encoder
+  - underglow
+siblings:
+  - kyria_rev3_left
+  - kyria_rev3_right
diff --git a/app/boards/shields/kyria/kyria_rev3_left.overlay b/app/boards/shields/kyria/kyria_rev3_left.overlay
new file mode 100644
index 00000000..d00b9e4a
--- /dev/null
+++ b/app/boards/shields/kyria/kyria_rev3_left.overlay
@@ -0,0 +1,29 @@
+/*
+ * Copyright (c) 2023 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "kyria_rev3.dtsi"
+
+&kscan0 {
+	row-gpios
+	= <&pro_micro 4 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+	, <&pro_micro 5 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+	, <&pro_micro 6 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+	, <&pro_micro 7 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+	;
+	col-gpios
+	= <&pro_micro 10 GPIO_ACTIVE_HIGH>
+	, <&pro_micro 16 GPIO_ACTIVE_HIGH>
+	, <&pro_micro 14 GPIO_ACTIVE_HIGH>
+	, <&pro_micro 15 GPIO_ACTIVE_HIGH>
+	, <&pro_micro 18 GPIO_ACTIVE_HIGH>
+	, <&pro_micro 19 GPIO_ACTIVE_HIGH>
+	, <&pro_micro 8 GPIO_ACTIVE_HIGH>
+	;
+};
+
+&left_encoder {
+	status = "okay";
+};
diff --git a/app/boards/shields/kyria/kyria_rev3_right.overlay b/app/boards/shields/kyria/kyria_rev3_right.overlay
new file mode 100644
index 00000000..ee69730c
--- /dev/null
+++ b/app/boards/shields/kyria/kyria_rev3_right.overlay
@@ -0,0 +1,33 @@
+/*
+ * Copyright (c) 2023 The ZMK Contributors
+ *
+ * SPDX-License-Identifier: MIT
+ */
+
+#include "kyria_rev3.dtsi"
+
+&default_transform {
+	col-offset = <7>;
+};
+
+&kscan0 {
+	row-gpios
+	= <&pro_micro 19 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+	, <&pro_micro 18 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+	, <&pro_micro 15 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+	, <&pro_micro 14 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)>
+	;
+	col-gpios
+	= <&pro_micro 16 GPIO_ACTIVE_HIGH>
+	, <&pro_micro 4  GPIO_ACTIVE_HIGH>
+	, <&pro_micro 5  GPIO_ACTIVE_HIGH>
+	, <&pro_micro 6  GPIO_ACTIVE_HIGH>
+	, <&pro_micro 7  GPIO_ACTIVE_HIGH>
+	, <&pro_micro 8  GPIO_ACTIVE_HIGH>
+	, <&pro_micro 10 GPIO_ACTIVE_HIGH>
+	;
+};
+
+&right_encoder {
+	status = "okay";
+};