diff --git a/keyboards/yandrstudio/ommk/k66_4k/config.h b/keyboards/yandrstudio/ommk/k66_4k/config.h
new file mode 100644
index 000000000000..0e8bb2b832a8
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/config.h
@@ -0,0 +1,104 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+/* USB Device descriptor parameter */
+#define VENDOR_ID 0xAA96
+#define PRODUCT_ID 0xA001
+#define DEVICE_VER 0x0001
+#define MANUFACTURER "Kaze"
+// #define PRODUCT "Enter65"
+// #define PRODUCT "PTG65A"
+#define PRODUCT "K66"
+
+/* key matrix size */
+#define MATRIX_ROWS 4
+#define MATRIX_COLS 1
+/* COL2ROW or ROW2COL */
+#define DIODE_DIRECTION COL2ROW
+
+#define MATRIX_COL_PINS { A0 }
+#define MATRIX_ROW_PINS { A15, B4, B5, B6 }
+
+#define TAP_HOLD_CAPS_DELAY 250
+
+/* RGB Matrix */
+#ifdef RGB_MATRIX_ENABLE
+
+# define WS2812_DI_PIN B3
+# define RGB_MATRIX_LED_COUNT (101)
+
+# define RGB_MATRIX_MAXIMUM_BRIGHTNESS 180
+# define RGBLIGHT_VAL_STEP 5
+
+# define RGB_MATRIX_CENTER { 112, 32 }
+# define RGB_MATRIX_KEYPRESSES
+# define RGB_MATRIX_FRAMEBUFFER_EFFECTS
+# define RGBLIGHT_ANIMATIONS
+
+# define ENABLE_RGB_MATRIX_ALPHAS_MODS
+# define ENABLE_RGB_MATRIX_GRADIENT_UP_DOWN
+# define ENABLE_RGB_MATRIX_GRADIENT_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_BREATHING
+# define ENABLE_RGB_MATRIX_BAND_SAT
+# define ENABLE_RGB_MATRIX_BAND_VAL
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_SAT
+# define ENABLE_RGB_MATRIX_BAND_PINWHEEL_VAL
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_SAT
+# define ENABLE_RGB_MATRIX_BAND_SPIRAL_VAL
+# define ENABLE_RGB_MATRIX_CYCLE_ALL
+# define ENABLE_RGB_MATRIX_CYCLE_LEFT_RIGHT
+# define ENABLE_RGB_MATRIX_CYCLE_UP_DOWN
+# define ENABLE_RGB_MATRIX_RAINBOW_MOVING_CHEVRON
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN
+# define ENABLE_RGB_MATRIX_CYCLE_OUT_IN_DUAL
+# define ENABLE_RGB_MATRIX_CYCLE_PINWHEEL
+# define ENABLE_RGB_MATRIX_CYCLE_SPIRAL
+# define ENABLE_RGB_MATRIX_DUAL_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_BEACON
+# define ENABLE_RGB_MATRIX_RAINBOW_PINWHEELS
+# define ENABLE_RGB_MATRIX_RAINDROPS
+# define ENABLE_RGB_MATRIX_JELLYBEAN_RAINDROPS
+# define ENABLE_RGB_MATRIX_HUE_BREATHING
+# define ENABLE_RGB_MATRIX_HUE_PENDULUM
+# define ENABLE_RGB_MATRIX_HUE_WAVE
+# define ENABLE_RGB_MATRIX_PIXEL_RAIN
+# define ENABLE_RGB_MATRIX_PIXEL_FLOW
+// # define ENABLE_RGB_MATRIX_PIXEL_FRACTAL
+// enabled only if RGB_MATRIX_FRAMEBUFFER_EFFECTS is defined
+// # define ENABLE_RGB_MATRIX_TYPING_HEATMAP
+// # define ENABLE_RGB_MATRIX_DIGITAL_RAIN
+// enabled only of RGB_MATRIX_KEYPRESSES or RGB_MATRIX_KEYRELEASES is defined
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_SIMPLE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_WIDE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTIWIDE
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_CROSS
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTICROSS
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_NEXUS
+// # define ENABLE_RGB_MATRIX_SOLID_REACTIVE_MULTINEXUS
+// # define ENABLE_RGB_MATRIX_SPLASH
+// # define ENABLE_RGB_MATRIX_MULTISPLASH
+// # define ENABLE_RGB_MATRIX_SOLID_SPLASH
+// # define ENABLE_RGB_MATRIX_SOLID_MULTISPLASH
+
+# define RGB_MATRIX_LAYERS
+# define RGB_MATRIX_LAYER_BLINK
+# define RGB_MATRIX_LAYERS_OVERRIDE_RGB_OFF
+# define RGB_MATRIX_LAYERS_RETAIN_VAL
+# define RGB_MATRIX_MAX_LAYERS 1
+
+#endif
diff --git a/keyboards/yandrstudio/ommk/k66_4k/f103/board.h b/keyboards/yandrstudio/ommk/k66_4k/f103/board.h
new file mode 100644
index 000000000000..c9998809509e
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/f103/board.h
@@ -0,0 +1,30 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include_next "board.h"
+
+
+#undef STM32_HSECLK
+#define STM32_HSECLK 16000000
+
+#undef VAL_GPIOCCRH
+#define VAL_GPIOCCRH 0x88888888
+
+#undef VAL_GPIOBCRH
+#define VAL_GPIOBCRH 0x88888888
+
+#define BOARD_YANDR_BIU_F103
diff --git a/keyboards/yandrstudio/ommk/k66_4k/f103/config.h b/keyboards/yandrstudio/ommk/k66_4k/f103/config.h
new file mode 100644
index 000000000000..5f55b1bc8da6
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/f103/config.h
@@ -0,0 +1,22 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+/* RGB Matrix */
+# define WS2812_PWM_DRIVER PWMD2
+# define WS2812_PWM_CHANNEL 2
+# define WS2812_DMA_STREAM STM32_DMA1_STREAM2
+# define WS2812_DMA_CHANNEL 2
diff --git a/keyboards/yandrstudio/ommk/k66_4k/f103/halconf.h b/keyboards/yandrstudio/ommk/k66_4k/f103/halconf.h
new file mode 100644
index 000000000000..1f5f3e7009cd
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/f103/halconf.h
@@ -0,0 +1,23 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+
+#pragma once
+#include_next
+
+#undef HAL_USE_PWM
+#define HAL_USE_PWM TRUE
+
diff --git a/keyboards/yandrstudio/ommk/k66_4k/f103/mcuconf.h b/keyboards/yandrstudio/ommk/k66_4k/f103/mcuconf.h
new file mode 100644
index 000000000000..e9060cb33830
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/f103/mcuconf.h
@@ -0,0 +1,25 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#pragma once
+
+#include_next
+
+#undef STM32_PWM_USE_TIM2
+#define STM32_PWM_USE_TIM2 TRUE
+
+#undef STM32_PLLXTPRE
+#define STM32_PLLXTPRE STM32_PLLXTPRE_DIV2
diff --git a/keyboards/yandrstudio/ommk/k66_4k/f103/rules.mk b/keyboards/yandrstudio/ommk/k66_4k/f103/rules.mk
new file mode 100644
index 000000000000..85b5f8566f26
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/f103/rules.mk
@@ -0,0 +1,15 @@
+# MCU name
+MCU = STM32F103
+
+# Bootloader selection
+# BOOTLOADER = stm32duino
+
+MCU_LDSCRIPT = STM32F103x8_uf2boot
+BOARD = STM32_F103_STM32DUINO
+BOOTLOADER = uf2boot
+FIRMWARE_FORMAT = uf2
+
+# Wildcard to allow APM32 MCU
+DFU_SUFFIX_ARGS = -p FFFF -v FFFF
+
+WS2812_DRIVER = pwm
diff --git a/keyboards/yandrstudio/ommk/k66_4k/k66_4k.c b/keyboards/yandrstudio/ommk/k66_4k/k66_4k.c
new file mode 100644
index 000000000000..22afc7cff1bc
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/k66_4k.c
@@ -0,0 +1,68 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#include "k66_4k.h"
+
+
+led_config_t g_led_config = {
+ {
+ {NO_LED},
+ {NO_LED},
+ {NO_LED},
+ {NO_LED}
+ },
+ {
+ // LED Index to Physical Position
+ {0,64},{16,64},{32,64},{48,64}, {80,64}, {112,64}, {144,64},{160,64}, {192,64},{208,64},{224,64},
+ {224,48},{208,48},{192,48}, {160,48},{144,48},{128,48},{112,48},{96,48},{80,48},{64,48},{48,48},{32,48},{16,48},{0,48},
+ {0,32},{16,32},{32,32},{48,32},{64,32},{80,32},{96,32},{112,32},{128,32},{144,32},{160,32},{176,32}, {208,32},{224,32},
+ {224,16},{208,16},{192,16},{176,16},{160,16},{144,16},{128,16},{112,16},{96,16},{80,16},{64,16},{48,16},{32,16},{16,16},{0,16},
+ {0,0},{16,0},{32,0},{48,0},{64,0},{80,0},{96,0},{112,0},{128,0},{144,0},{160,0},{176,0},{192,0},{208,0},{224,0},
+
+ {208,32},{224,32},
+ {224,16},{208,16},{192,16},{176,16},{160,16},{144,16},{128,16},{112,16},{96,16},{80,16},{64,16},{48,16},{32,16},{16,16},{0,16},
+ {0,0},{16,0},{32,0},{48,0},{64,0},{80,0},{96,0},{112,0},{128,0},{144,0},{160,0},{176,0},{192,0},{208,0},{224,0}
+ },
+ {
+ // LED Index to Flag
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,
+ 4
+ }
+};
+
+
+bool rgb_matrix_indicators_advanced_kb(uint8_t led_min, uint8_t led_max) {
+ if (!rgb_matrix_indicators_advanced_user(led_min, led_max)) {
+ return false;
+ }
+ return true;
+}
+
+void keyboard_post_init_kb(void) {
+ rgb_matrix_reload_from_eeprom();
+}
+
+void board_init(void) {
+ AFIO->MAPR |= AFIO_MAPR_TIM2_REMAP_PARTIALREMAP1;
+}
diff --git a/keyboards/yandrstudio/ommk/k66_4k/k66_4k.h b/keyboards/yandrstudio/ommk/k66_4k/k66_4k.h
new file mode 100644
index 000000000000..2c0fbc9490cb
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/k66_4k.h
@@ -0,0 +1,41 @@
+/* Copyright 2022 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+#pragma once
+
+#include "quantum.h"
+
+#define LAYOUT( \
+ K000, \
+ K003, K002, K001 \
+) { \
+ { K000 }, \
+ { K001 }, \
+ { K002 }, \
+ { K003 } \
+}
+enum keyboard_keycodes {
+ LOCK_GUI = QK_KB,
+ TOG_MACOS_KEYMAP_MAC,
+ KC_MISSION_CONTROL_MAC,
+ KC_LAUNCHPAD_MAC
+};
+
+#define MKC_LG LOCK_GUI
+#define MKC_MACOS TOG_MACOS_KEYMAP_MAC
+#define MKC_MCTL KC_MISSION_CONTROL_MAC
+#define MKC_LPAD KC_LAUNCHPAD_MAC
+
+extern bool yr_factory_test;
diff --git a/keyboards/yandrstudio/ommk/k66_4k/matrix.c b/keyboards/yandrstudio/ommk/k66_4k/matrix.c
new file mode 100644
index 000000000000..89c386735ab4
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/matrix.c
@@ -0,0 +1,211 @@
+/* Copyright 2021 JasonRen(biu)
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see .
+ */
+
+#include
+#include
+#include "util.h"
+#include "matrix.h"
+#include "quantum.h"
+
+#ifdef DIRECT_PINS
+static pin_t direct_pins[MATRIX_ROWS][MATRIX_COLS] = DIRECT_PINS;
+#elif (DIODE_DIRECTION == ROW2COL) || (DIODE_DIRECTION == COL2ROW)
+static const pin_t row_pins[MATRIX_ROWS] = MATRIX_ROW_PINS;
+static const pin_t col_pins[MATRIX_COLS] = MATRIX_COL_PINS;
+#endif
+
+
+static inline void setPinOutput_writeLow(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON {
+ setPinOutput(pin);
+ writePinLow(pin);
+ }
+}
+
+static inline void setPinInputHigh_atomic(pin_t pin) {
+ ATOMIC_BLOCK_FORCEON { setPinInputHigh(pin); }
+}
+
+// matrix code
+
+#ifdef DIRECT_PINS
+
+static void init_pins(void) {
+ for (int row = 0; row < MATRIX_ROWS; row++) {
+ for (int col = 0; col < MATRIX_COLS; col++) {
+ pin_t pin = direct_pins[row][col];
+ if (pin != NO_PIN) {
+ setPinInputHigh(pin);
+ }
+ }
+ }
+}
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+ // Start with a clear matrix row
+ matrix_row_t current_row_value = 0;
+
+ for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+ pin_t pin = direct_pins[current_row][col_index];
+ if (pin != NO_PIN) {
+ current_row_value |= readPin(pin) ? 0 : (MATRIX_ROW_SHIFTER << col_index);
+ }
+ }
+
+ // If the row has changed, store the row and return the changed flag.
+ if (current_matrix[current_row] != current_row_value) {
+ current_matrix[current_row] = current_row_value;
+ return true;
+ }
+ return false;
+}
+
+#elif defined(DIODE_DIRECTION)
+# if (DIODE_DIRECTION == COL2ROW)
+
+static void select_col(uint8_t col) { writePinHigh(col_pins[col]); }
+
+static void unselect_col(uint8_t col) { writePinLow(col_pins[col]); }
+
+static void unselect_rows(void) {
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinInputLow(row_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_rows();
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinOutput(col_pins[x]);
+ writePinLow(col_pins[x]);
+ }
+}
+static bool read_rows_on_col(matrix_row_t current_matrix[], uint8_t current_col) {
+ bool matrix_changed = false;
+
+ // Select col
+ select_col(current_col);
+ matrix_output_select_delay();
+
+ // For each row...
+ for (uint8_t row_index = 0; row_index < MATRIX_ROWS; row_index++) {
+ // Store last value of row prior to reading
+ matrix_row_t last_row_value = current_matrix[row_index];
+ matrix_row_t current_row_value = last_row_value;
+
+ // Check row pin state
+ if (readPin(row_pins[row_index]) == 1) {
+ // Pin HI, set col bit
+ current_row_value |= (MATRIX_ROW_SHIFTER << current_col);
+ } else {
+ // Pin LO, clear col bit
+ current_row_value &= ~(MATRIX_ROW_SHIFTER << current_col);
+ }
+
+ // Determine if the matrix changed state
+ if ((last_row_value != current_row_value)) {
+ matrix_changed = true;
+ current_matrix[row_index] = current_row_value;
+ }
+ }
+
+ // Unselect col
+ unselect_col(current_col);
+ matrix_output_unselect_delay(current_col, matrix_changed); // wait for all Row signals to go HIGH
+
+
+ return matrix_changed;
+}
+
+# elif (DIODE_DIRECTION == ROW2COL)
+
+static void select_row(uint8_t row) { writePinHigh(row_pins[row]); }
+
+static void unselect_row(uint8_t row) { writePinLow(row_pins[row]); }
+
+static void unselect_cols(void) {
+ for (uint8_t x = 0; x < MATRIX_COLS; x++) {
+ setPinInputLow(col_pins[x]);
+ }
+}
+
+static void init_pins(void) {
+ unselect_cols();
+ for (uint8_t x = 0; x < MATRIX_ROWS; x++) {
+ setPinOutput(row_pins[x]);
+ writePinLow(row_pins[x]);
+ }
+}
+
+
+static bool read_cols_on_row(matrix_row_t current_matrix[], uint8_t current_row) {
+ // Start with a clear matrix row
+ matrix_row_t current_row_value = 0;
+
+ // Select row
+ select_row(current_row);
+ matrix_output_select_delay();
+
+ // For each col...
+ for (uint8_t col_index = 0; col_index < MATRIX_COLS; col_index++) {
+ // Select the col pin to read (active low)
+ uint8_t pin_state = readPin(col_pins[col_index]);
+
+ // Populate the matrix row with the state of the col pin
+ current_row_value |= pin_state ? (MATRIX_ROW_SHIFTER << col_index) : 0;
+ }
+
+ // Unselect row
+ unselect_row(current_row);
+ matrix_output_unselect_delay(current_row, current_row_value != 1); // wait for all Col signals to go HIGH
+
+
+ // If the row has changed, store the row and return the changed flag.
+ if (current_matrix[current_row] != current_row_value) {
+ current_matrix[current_row] = current_row_value;
+ return true;
+ }
+ return false;
+}
+
+# else
+# error DIODE_DIRECTION must be one of COL2ROW or ROW2COL!
+# endif
+#else
+# error DIODE_DIRECTION is not defined!
+#endif
+
+void matrix_init_custom(void) {
+ // initialize key pins
+ init_pins();
+}
+extern bool force_change_matrix;
+uint8_t matrix_scan_custom(matrix_row_t current_matrix[]) {
+ bool changed = false;
+
+#if defined(DIRECT_PINS) || (DIODE_DIRECTION == COL2ROW)
+ // Set col, read rows
+ for (uint8_t current_col = 0; current_col < MATRIX_COLS; current_col++) {
+ changed |= read_rows_on_col(current_matrix, current_col);
+ }
+#elif (DIODE_DIRECTION == ROW2COL)
+ // Set row, read cols
+ for (uint8_t current_row = 0; current_row < MATRIX_ROWS; current_row++) {
+ changed |= read_cols_on_row(current_matrix, current_row);
+ }
+#endif
+ return (uint8_t)changed;
+}
diff --git a/keyboards/yandrstudio/ommk/k66_4k/readme.md b/keyboards/yandrstudio/ommk/k66_4k/readme.md
new file mode 100644
index 000000000000..ff344a3c752c
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/readme.md
@@ -0,0 +1 @@
+make yandrstudio/ommk/k66_4k/f103:via
diff --git a/keyboards/yandrstudio/ommk/k66_4k/rules.mk b/keyboards/yandrstudio/ommk/k66_4k/rules.mk
new file mode 100644
index 000000000000..c2bc2e70a2d5
--- /dev/null
+++ b/keyboards/yandrstudio/ommk/k66_4k/rules.mk
@@ -0,0 +1,20 @@
+# Build Options
+# change yes to no to disable
+#
+BOOTMAGIC_ENABLE = yes # Virtual DIP switch configuration
+KEYBOARD_SHARED_EP = no # Free up some extra endpoints - needed if console+mouse+extra
+MOUSEKEY_ENABLE = yes # Mouse keys
+EXTRAKEY_ENABLE = yes # Audio control and System control
+CONSOLE_ENABLE = no # Console for debug
+COMMAND_ENABLE = no # Commands for debug and configuration
+# if this doesn't work, see here: https://github.com/tmk/tmk_keyboard/wiki/FAQ#nkro-doesnt-work
+NKRO_ENABLE = yes # USB Nkey Rollover
+
+
+RGB_MATRIX_ENABLE = yes
+RGB_MATRIX_DRIVER = ws2812
+
+CUSTOM_MATRIX = lite # for using the A9 pin as matrix io
+QUANTUM_SRC += matrix.c
+
+NO_USB_STARTUP_CHECK = yes