/* * Copyright (c) 2022 The ZMK Contributors * * SPDX-License-Identifier: MIT */ #include #include &arduino_i2c { status = "okay"; }; &arduino_spi { status = "okay"; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; label = "RGB"; /* SPI */ reg = <0>; /* ignored, but necessary for SPI bindings */ spi-max-frequency = <4000000>; /* WS2812 */ chain-length = <7>; /* 4 underglow + 3 per-key LEDs */ spi-one-frame = <0x70>; spi-zero-frame = <0x40>; color-mapping = ; }; }; / { chosen { zmk,kscan = &kscan_matrix_comp; zmk,backlight = &backlight; zmk,underglow = &led_strip; zmk,matrix-transform = &matrix_transform; }; // Commented out until we add more powerful power domain support // external_power { // compatible = "zmk,ext-power-generic"; // label = "EXT_POWER"; // init-delay-ms = <200>; // control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; // }; rgb_power { compatible = "zmk,ext-power-generic"; label = "EXT_POWER"; // label = "RGB_POWER"; init-delay-ms = <200>; control-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; }; backlight: gpioleds { compatible = "gpio-leds"; label = "Backlight LEDs"; gpio_led_0 { gpios = <&arduino_header 12 GPIO_ACTIVE_HIGH>; label = "Backlight LED 0"; }; }; matrix_transform: matrix_transform { compatible = "zmk,matrix-transform"; rows = <3>; columns = <4>; map = < RC(0,0) RC(0,1) RC(1,0) RC(1,1) RC(2,0) RC(2,1) RC(2,2) >; }; direct_matrix_transform: direct_matrix_transform { compatible = "zmk,matrix-transform"; rows = <3>; columns = <4>; map = < RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(1,0) RC(1,1) RC(1,2) >; }; kscan_matrix_comp: kscan_matrix_comp { compatible = "zmk,kscan-composite"; rows = <1>; columns = <7>; label = "KSCAN_MATRIX_COMP"; matrix { kscan = <&kscan_matrix>; }; toggle { kscan = <&kscan_sp3t_toggle>; row-offset = <2>; }; }; kscan_direct_comp: kscan_direct_comp { compatible = "zmk,kscan-composite"; label = "KSCAN_DIRECT_COMP"; status = "disabled"; matrix { kscan = <&kscan_direct>; }; toggle { kscan = <&kscan_sp3t_toggle>; row-offset = <1>; }; }; kscan_matrix: kscan_matrix { compatible = "zmk,kscan-gpio-matrix"; label = "KSCAN_MATRIX"; diode-direction = "col2row"; col-gpios = <&arduino_header 10 GPIO_ACTIVE_HIGH> , <&arduino_header 9 GPIO_ACTIVE_HIGH> ; row-gpios = <&arduino_header 13 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> , <&arduino_header 11 (GPIO_ACTIVE_HIGH | GPIO_PULL_DOWN)> ; }; kscan_direct: kscan_direct { compatible = "zmk,kscan-gpio-direct"; status = "disabled"; label = "KSCAN_DIRECT"; input-gpios = <&arduino_header 10 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&arduino_header 9 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&arduino_header 13 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&arduino_header 11 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> ; }; kscan_sp3t_toggle: kscan_sp3t_toggle { compatible = "zmk,kscan-gpio-direct"; toggle-mode; label = "KSCAN_TOGGLE"; input-gpios = <&arduino_header 4 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&arduino_header 3 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> , <&arduino_header 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)> ; }; encoder: encoder { label = "ENCODER"; resolution = <4>; compatible = "alps,ec11"; a-gpios = <&arduino_header 14 GPIO_PULL_UP>; b-gpios = <&arduino_header 15 GPIO_PULL_UP>; }; sensors { compatible = "zmk,keymap-sensors"; sensors = <&encoder>; }; };