/* * Copyright (c) 2022 The ZMK Contributors * * SPDX-License-Identifier: MIT */ #include #include &arduino_i2c { status = "okay"; }; nice_view_spi: &arduino_spi { status = "okay"; cs-gpios = <&arduino_header 16 GPIO_ACTIVE_HIGH>; // Needed so the nice_view shield will enhance the existing node which falls *first* // on the bus, properly picking up the first `cs-gpios` specifier. ls0xx@0 { reg = <0>; power-domain = <&core_power_domain>; zephyr,pm-device-runtime-auto; }; led_strip: ws2812@0 { compatible = "worldsemi,ws2812-spi"; power-domain = <&rgb_power>; zephyr,pm-device-runtime-auto; /* 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,backlight = &backlight; zmk,underglow = &led_strip; zephyr,display = &oled; zmk,display-default-power-domain = &core_power_domain; }; core_power_domain: core_power_domain { // The "power-domain" compatible is needed for any PDs used for that have dynamic deps, // e.g. for displays or RGB not assigned to the PD in the devicetree statically. compatible = "power-domain-gpio", "power-domain"; startup-delay-us = <2000>; off-on-delay-us = <2000>; enable-gpios = <&arduino_header 0 GPIO_ACTIVE_LOW>; zephyr,pm-device-runtime-auto; }; rgb_power: rgb_power { compatible = "power-domain-gpio"; startup-delay-us = <200>; off-on-delay-us = <2000>; enable-gpios = <&arduino_header 1 GPIO_ACTIVE_LOW>; power-domain = <&core_power_domain>; zephyr,pm-device-runtime-auto; }; backlight: gpioleds { compatible = "gpio-leds"; gpio_led_0 { gpios = <&arduino_header 12 GPIO_ACTIVE_HIGH>; }; }; 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) >; }; 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) >; }; kscan_matrix: kscan_matrix { compatible = "zmk,kscan-gpio-matrix"; wakeup-source; 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"; wakeup-source; 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; input-gpios = <&arduino_header 4 GPIO_ACTIVE_LOW> , <&arduino_header 3 GPIO_ACTIVE_LOW> , <&arduino_header 2 GPIO_ACTIVE_LOW> ; }; encoder: encoder { steps = <80>; compatible = "alps,ec11"; a-gpios = <&arduino_header 15 GPIO_PULL_UP>; b-gpios = <&arduino_header 14 GPIO_PULL_UP>; }; };