/*
*
* Copyright (c) 2023 The ZMK Contributors
* SPDX-License-Identifier: MIT
*
*/

/dts-v1/;
#include <nordic/nrf52840_qiaa.dtsi>

#include <dt-bindings/led/led.h>
#include <dt-bindings/zmk/matrix_transform.h>

#include "adv360pro-layouts.dtsi"
#include "adv360pro-pinctrl.dtsi"

&physical_layout0 {
    transform = <&matrix_transform0>;
};

/ {
    model = "Adv360 Pro";
    compatible = "kinesis,adv360pro";

    chosen {
        zephyr,code-partition = &code_partition;
        zephyr,sram = &sram0;
        zephyr,flash = &flash0;
        zmk,backlight = &backlight;
        zmk,battery = &vbatt;
        zmk,physical-layout = &physical_layout0;
        zmk,kscan = &kscan0;
        zmk,underglow = &led_strip;
    };

    matrix_transform0: keymap_transform_0 {
        compatible = "zmk,matrix-transform";
        columns = <20>;
        rows = <5>;


        map = <
            RC(4,0) RC(4,1) RC(4,2) RC(4,3) RC(4,4) RC(4,5)  RC(4,6)                                                                        RC(4,13) RC(4,14) RC(4,15) RC(4,16) RC(4,17) RC(4,18) RC(4,19)
            RC(3,0) RC(3,1) RC(3,2) RC(3,3) RC(3,4) RC(3,5)  RC(3,6)                                                                        RC(3,13) RC(3,14) RC(3,15) RC(3,16) RC(3,17) RC(3,18) RC(3,19)
            RC(2,0) RC(2,1) RC(2,2) RC(2,3) RC(2,4) RC(2,5)  RC(2,6)           RC(2,8)  RC(2,9)            RC(2,10) RC(2,11)                RC(2,13) RC(2,14) RC(2,15) RC(2,16) RC(2,17) RC(2,18) RC(2,19)
            RC(1,0) RC(1,1) RC(1,2) RC(1,3) RC(1,4) RC(1,5)                             RC(1,9)            RC(1,10)                                  RC(1,14) RC(1,15) RC(1,16) RC(1,17) RC(1,18) RC(1,19)
            RC(0,0) RC(0,1) RC(0,2) RC(0,3) RC(0,4)                     RC(0,7) RC(0,8) RC(0,9)            RC(0,10) RC(0,11) RC(0,12)                         RC(0,15) RC(0,16) RC(0,17) RC(0,18) RC(0,19)

        >;
    };

    // Node name must match original "EXT_POWER" label to preserve user settings.
    EXT_POWER {
        compatible = "zmk,ext-power-generic";
        control-gpios = <&gpio0 13 GPIO_ACTIVE_HIGH>;
    };

    vbatt: vbatt {
        compatible = "zmk,battery-voltage-divider";
        io-channels = <&adc 2>;
        output-ohms = <100000>;
        full-ohms = <(100000 + 100000)>;
    };

    backlight: pwmleds {
        compatible = "pwm-leds";
        pwm_led_0 {
            pwms = <&pwm0 0 10000 PWM_POLARITY_NORMAL>;
        };
    };

};

&pwm0 {
    status = "okay";
    pinctrl-0 = <&pwm0_default>;
    pinctrl-1 = <&pwm0_sleep>;
    pinctrl-names = "default", "sleep";
};

&adc {
    status = "okay";
};

&gpiote {
    status = "okay";
};

&gpio0 {
    status = "okay";
};

&gpio1 {
    status = "okay";
};

zephyr_udc0: &usbd {
    status = "okay";
};

&flash0 {
    /*
     * For more information, see:
     * http://docs.zephyrproject.org/latest/devices/dts/flash_partitions.html
     */
    partitions {
        compatible = "fixed-partitions";
        #address-cells = <1>;
        #size-cells = <1>;

        sd_partition: partition@0 {
            reg = <0x00000000 0x00026000>;
        };
        code_partition: partition@26000 {
            reg = <0x00026000 0x000c6000>;
        };

        /*
         * The flash starting at 0x000ec000 and ending at
         * 0x000f3fff is reserved for use by the application.
         */

        /*
         * Storage partition will be used by FCB/LittleFS/NVS
         * if enabled.
         */
        storage_partition: partition@ec000 {
            reg = <0x000ec000 0x00008000>;
        };

        boot_partition: partition@f4000 {
            reg = <0x000f4000 0x0000c000>;
        };
    };
};

&spi3 {
    compatible = "nordic,nrf-spim";
    status = "okay";
    pinctrl-0 = <&spi3_default>;
    pinctrl-1 = <&spi3_sleep>;
    pinctrl-names = "default", "sleep";

    led_strip: ws2812@0 {
        compatible = "worldsemi,ws2812-spi";

        /* SPI */
        reg = <0>;
        spi-max-frequency = <4000000>;

        /* WS2812 */
        chain-length = <3>; /* number of LEDs */
        spi-one-frame = <0x70>;
        spi-zero-frame = <0x40>;

        color-mapping = <LED_COLOR_ID_GREEN
                        LED_COLOR_ID_RED
                        LED_COLOR_ID_BLUE>;
    };
};
