1*6e085e64SLukas Schmid// SPDX-License-Identifier: (GPL-2.0+ OR MIT) 2*6e085e64SLukas Schmid/* 3*6e085e64SLukas Schmid * Copyright (C) 2025 Lukas Schmid <lukas.schmid@netcube.li> 4*6e085e64SLukas Schmid */ 5*6e085e64SLukas Schmid 6*6e085e64SLukas Schmid/dts-v1/; 7*6e085e64SLukas Schmid#include "sun8i-v3s.dtsi" 8*6e085e64SLukas Schmid 9*6e085e64SLukas Schmid#include <dt-bindings/input/input.h> 10*6e085e64SLukas Schmid#include <dt-bindings/leds/common.h> 11*6e085e64SLukas Schmid#include <dt-bindings/gpio/gpio.h> 12*6e085e64SLukas Schmid 13*6e085e64SLukas Schmid/{ 14*6e085e64SLukas Schmid model = "NetCube Systems Kumquat"; 15*6e085e64SLukas Schmid compatible = "netcube,kumquat", "allwinner,sun8i-v3s"; 16*6e085e64SLukas Schmid 17*6e085e64SLukas Schmid aliases { 18*6e085e64SLukas Schmid serial0 = &uart0; 19*6e085e64SLukas Schmid ethernet0 = &emac; 20*6e085e64SLukas Schmid rtc0 = &ds3232; 21*6e085e64SLukas Schmid rtc1 = &rtc; /* not battery backed */ 22*6e085e64SLukas Schmid }; 23*6e085e64SLukas Schmid 24*6e085e64SLukas Schmid chosen { 25*6e085e64SLukas Schmid stdout-path = "serial0:115200n8"; 26*6e085e64SLukas Schmid }; 27*6e085e64SLukas Schmid 28*6e085e64SLukas Schmid /* 40 MHz Crystal Oscillator on PCB */ 29*6e085e64SLukas Schmid clk_can0: clock-can0 { 30*6e085e64SLukas Schmid compatible = "fixed-clock"; 31*6e085e64SLukas Schmid #clock-cells = <0>; 32*6e085e64SLukas Schmid clock-frequency = <40000000>; 33*6e085e64SLukas Schmid }; 34*6e085e64SLukas Schmid 35*6e085e64SLukas Schmid gpio-keys { 36*6e085e64SLukas Schmid compatible = "gpio-keys"; 37*6e085e64SLukas Schmid autorepeat; 38*6e085e64SLukas Schmid 39*6e085e64SLukas Schmid key-user { 40*6e085e64SLukas Schmid label = "GPIO Key User"; 41*6e085e64SLukas Schmid linux,code = <KEY_PROG1>; 42*6e085e64SLukas Schmid gpios = <&pio 1 2 (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>; /* PB2 */ 43*6e085e64SLukas Schmid }; 44*6e085e64SLukas Schmid }; 45*6e085e64SLukas Schmid 46*6e085e64SLukas Schmid leds { 47*6e085e64SLukas Schmid compatible = "gpio-leds"; 48*6e085e64SLukas Schmid 49*6e085e64SLukas Schmid led-heartbeat { 50*6e085e64SLukas Schmid gpios = <&pio 4 4 GPIO_ACTIVE_HIGH>; /* PE4 */ 51*6e085e64SLukas Schmid linux,default-trigger = "heartbeat"; 52*6e085e64SLukas Schmid color = <LED_COLOR_ID_GREEN>; 53*6e085e64SLukas Schmid function = LED_FUNCTION_HEARTBEAT; 54*6e085e64SLukas Schmid }; 55*6e085e64SLukas Schmid 56*6e085e64SLukas Schmid led-mmc0-act { 57*6e085e64SLukas Schmid gpios = <&pio 5 6 GPIO_ACTIVE_HIGH>; /* PF6 */ 58*6e085e64SLukas Schmid linux,default-trigger = "mmc0"; 59*6e085e64SLukas Schmid color = <LED_COLOR_ID_GREEN>; 60*6e085e64SLukas Schmid function = LED_FUNCTION_DISK; 61*6e085e64SLukas Schmid }; 62*6e085e64SLukas Schmid }; 63*6e085e64SLukas Schmid 64*6e085e64SLukas Schmid /* EA3036C Switching 3 Channel Regulator - Channel 2 */ 65*6e085e64SLukas Schmid reg_vcc3v3: regulator-3v3 { 66*6e085e64SLukas Schmid compatible = "regulator-fixed"; 67*6e085e64SLukas Schmid regulator-name = "vcc3v3"; 68*6e085e64SLukas Schmid regulator-min-microvolt = <3300000>; 69*6e085e64SLukas Schmid regulator-max-microvolt = <3300000>; 70*6e085e64SLukas Schmid vin-supply = <®_vcc5v0>; 71*6e085e64SLukas Schmid }; 72*6e085e64SLukas Schmid 73*6e085e64SLukas Schmid /* K7805-1000R3 Switching Regulator supplied from main 12/24V terminal block */ 74*6e085e64SLukas Schmid reg_vcc5v0: regulator-5v0 { 75*6e085e64SLukas Schmid compatible = "regulator-fixed"; 76*6e085e64SLukas Schmid regulator-name = "vcc5v0"; 77*6e085e64SLukas Schmid regulator-min-microvolt = <5000000>; 78*6e085e64SLukas Schmid regulator-max-microvolt = <5000000>; 79*6e085e64SLukas Schmid }; 80*6e085e64SLukas Schmid}; 81*6e085e64SLukas Schmid 82*6e085e64SLukas Schmid&codec { 83*6e085e64SLukas Schmid allwinner,audio-routing = 84*6e085e64SLukas Schmid "Headphone", "HP", 85*6e085e64SLukas Schmid "Headphone", "HPCOM", 86*6e085e64SLukas Schmid "MIC1", "Mic", 87*6e085e64SLukas Schmid "Mic", "HBIAS"; 88*6e085e64SLukas Schmid status = "okay"; 89*6e085e64SLukas Schmid}; 90*6e085e64SLukas Schmid 91*6e085e64SLukas Schmid&ehci { 92*6e085e64SLukas Schmid status = "okay"; 93*6e085e64SLukas Schmid}; 94*6e085e64SLukas Schmid 95*6e085e64SLukas Schmid&emac { 96*6e085e64SLukas Schmid allwinner,leds-active-low; 97*6e085e64SLukas Schmid nvmem-cells = <ð0_macaddress>; 98*6e085e64SLukas Schmid nvmem-cell-names = "mac-address"; 99*6e085e64SLukas Schmid status = "okay"; 100*6e085e64SLukas Schmid}; 101*6e085e64SLukas Schmid 102*6e085e64SLukas Schmid&i2c0 { 103*6e085e64SLukas Schmid status = "okay"; 104*6e085e64SLukas Schmid 105*6e085e64SLukas Schmid eeprom0: eeprom@50 { 106*6e085e64SLukas Schmid compatible = "atmel,24c02"; /* actually it's a 24AA02E48 */ 107*6e085e64SLukas Schmid reg = <0x50>; 108*6e085e64SLukas Schmid pagesize = <16>; 109*6e085e64SLukas Schmid read-only; 110*6e085e64SLukas Schmid vcc-supply = <®_vcc3v3>; 111*6e085e64SLukas Schmid 112*6e085e64SLukas Schmid #address-cells = <1>; 113*6e085e64SLukas Schmid #size-cells = <1>; 114*6e085e64SLukas Schmid 115*6e085e64SLukas Schmid eth0_macaddress: macaddress@fa { 116*6e085e64SLukas Schmid reg = <0xfa 0x06>; 117*6e085e64SLukas Schmid }; 118*6e085e64SLukas Schmid }; 119*6e085e64SLukas Schmid 120*6e085e64SLukas Schmid tusb320: typec@60 { 121*6e085e64SLukas Schmid compatible = "ti,tusb320"; 122*6e085e64SLukas Schmid reg = <0x60>; 123*6e085e64SLukas Schmid interrupts-extended = <&pio 1 5 IRQ_TYPE_LEVEL_LOW>; /* PB5 */ 124*6e085e64SLukas Schmid }; 125*6e085e64SLukas Schmid 126*6e085e64SLukas Schmid ds3232: rtc@68 { 127*6e085e64SLukas Schmid compatible = "dallas,ds3232"; 128*6e085e64SLukas Schmid reg = <0x68>; 129*6e085e64SLukas Schmid }; 130*6e085e64SLukas Schmid}; 131*6e085e64SLukas Schmid 132*6e085e64SLukas Schmid/* Exposed as the Flash/SD Header on the board */ 133*6e085e64SLukas Schmid&mmc0 { 134*6e085e64SLukas Schmid vmmc-supply = <®_vcc3v3>; 135*6e085e64SLukas Schmid bus-width = <4>; 136*6e085e64SLukas Schmid broken-cd; 137*6e085e64SLukas Schmid status = "okay"; 138*6e085e64SLukas Schmid}; 139*6e085e64SLukas Schmid 140*6e085e64SLukas Schmid/* Connected to the on-board ESP32 */ 141*6e085e64SLukas Schmid&mmc1 { 142*6e085e64SLukas Schmid vmmc-supply = <®_vcc3v3>; 143*6e085e64SLukas Schmid bus-width = <4>; 144*6e085e64SLukas Schmid broken-cd; 145*6e085e64SLukas Schmid status = "okay"; 146*6e085e64SLukas Schmid}; 147*6e085e64SLukas Schmid 148*6e085e64SLukas Schmid&ohci { 149*6e085e64SLukas Schmid status = "okay"; 150*6e085e64SLukas Schmid}; 151*6e085e64SLukas Schmid 152*6e085e64SLukas Schmid/* Disable external 32k osc as it is broken on current revision */ 153*6e085e64SLukas Schmid&osc32k { 154*6e085e64SLukas Schmid status = "disabled"; 155*6e085e64SLukas Schmid}; 156*6e085e64SLukas Schmid 157*6e085e64SLukas Schmid&pio { 158*6e085e64SLukas Schmid vcc-pb-supply = <®_vcc3v3>; 159*6e085e64SLukas Schmid vcc-pc-supply = <®_vcc3v3>; 160*6e085e64SLukas Schmid vcc-pe-supply = <®_vcc3v3>; 161*6e085e64SLukas Schmid vcc-pf-supply = <®_vcc3v3>; 162*6e085e64SLukas Schmid vcc-pg-supply = <®_vcc3v3>; 163*6e085e64SLukas Schmid 164*6e085e64SLukas Schmid gpio-line-names = "", "", "", "", // PA 165*6e085e64SLukas Schmid "", "", "", "", 166*6e085e64SLukas Schmid "", "", "", "", 167*6e085e64SLukas Schmid "", "", "", "", 168*6e085e64SLukas Schmid "", "", "", "", 169*6e085e64SLukas Schmid "", "", "", "", 170*6e085e64SLukas Schmid "", "", "", "", 171*6e085e64SLukas Schmid "", "", "", "", 172*6e085e64SLukas Schmid "CAN_nCS", "CAN_nINT", "USER_SW", "PB3", // PB 173*6e085e64SLukas Schmid "USB_ID", "USBC_nINT", "I2C0_SCL", "I2C0_SDA", 174*6e085e64SLukas Schmid "UART0_TX", "UART0_RX", "", "", 175*6e085e64SLukas Schmid "", "", "", "", 176*6e085e64SLukas Schmid "", "", "", "", 177*6e085e64SLukas Schmid "", "", "", "", 178*6e085e64SLukas Schmid "", "", "", "", 179*6e085e64SLukas Schmid "", "", "", "", 180*6e085e64SLukas Schmid "SPI_MISO", "SPI_SCK", "FLASH_nCS", "SPI_MOSI", // PC 181*6e085e64SLukas Schmid "", "", "", "", 182*6e085e64SLukas Schmid "", "", "", "", 183*6e085e64SLukas Schmid "", "", "", "", 184*6e085e64SLukas Schmid "", "", "", "", 185*6e085e64SLukas Schmid "", "", "", "", 186*6e085e64SLukas Schmid "", "", "", "", 187*6e085e64SLukas Schmid "", "", "", "", 188*6e085e64SLukas Schmid "", "", "", "", // PD 189*6e085e64SLukas Schmid "", "", "", "", 190*6e085e64SLukas Schmid "", "", "", "", 191*6e085e64SLukas Schmid "", "", "", "", 192*6e085e64SLukas Schmid "", "", "", "", 193*6e085e64SLukas Schmid "", "", "", "", 194*6e085e64SLukas Schmid "", "", "", "", 195*6e085e64SLukas Schmid "", "", "", "", 196*6e085e64SLukas Schmid "Q12", "Q11", "Q10", "Q9", // PE 197*6e085e64SLukas Schmid "LED_SYS0", "I1", "Q1", "Q2", 198*6e085e64SLukas Schmid "I2", "I3", "Q3", "Q4", 199*6e085e64SLukas Schmid "I4", "I5", "Q5", "Q6", 200*6e085e64SLukas Schmid "I6", "I7", "Q7", "Q8", 201*6e085e64SLukas Schmid "I8", "UART1_TXD", "UART1_RXD", "ESP_nRST", 202*6e085e64SLukas Schmid "ESP_nBOOT", "", "", "", 203*6e085e64SLukas Schmid "", "", "", "", 204*6e085e64SLukas Schmid "SD_D1", "SD_D0", "SD_CLK", "SD_CMD", // PF 205*6e085e64SLukas Schmid "SD_D3", "SD_D2", "LED_SYS1", "", 206*6e085e64SLukas Schmid "", "", "", "", 207*6e085e64SLukas Schmid "", "", "", "", 208*6e085e64SLukas Schmid "", "", "", "", 209*6e085e64SLukas Schmid "", "", "", "", 210*6e085e64SLukas Schmid "", "", "", "", 211*6e085e64SLukas Schmid "", "", "", "", 212*6e085e64SLukas Schmid "ESP_CLK", "ESP_CMD", "ESP_D0", "ESP_D1", // PG 213*6e085e64SLukas Schmid "ESP_D2", "ESP_D3", "", "", 214*6e085e64SLukas Schmid "", "", "", "", 215*6e085e64SLukas Schmid "", "", "", "", 216*6e085e64SLukas Schmid "", "", "", "", 217*6e085e64SLukas Schmid "", "", "", "", 218*6e085e64SLukas Schmid "", "", "", "", 219*6e085e64SLukas Schmid "", "", "", ""; 220*6e085e64SLukas Schmid}; 221*6e085e64SLukas Schmid 222*6e085e64SLukas Schmid/* Disable external 32k osc as it is broken on current revision */ 223*6e085e64SLukas Schmid&rtc { 224*6e085e64SLukas Schmid /delete-property/ clocks; 225*6e085e64SLukas Schmid}; 226*6e085e64SLukas Schmid 227*6e085e64SLukas Schmid/* Exposed as a USB-C connector with USB-Serial converter */ 228*6e085e64SLukas Schmid&uart0 { 229*6e085e64SLukas Schmid pinctrl-0 = <&uart0_pb_pins>; 230*6e085e64SLukas Schmid pinctrl-names = "default"; 231*6e085e64SLukas Schmid status = "okay"; 232*6e085e64SLukas Schmid}; 233*6e085e64SLukas Schmid 234*6e085e64SLukas Schmid/* Connected to the Bootloader/Console of the ESP32 */ 235*6e085e64SLukas Schmid&uart1 { 236*6e085e64SLukas Schmid pinctrl-0 = <&uart1_pe_pins>; 237*6e085e64SLukas Schmid pinctrl-names = "default"; 238*6e085e64SLukas Schmid status = "okay"; 239*6e085e64SLukas Schmid}; 240*6e085e64SLukas Schmid 241*6e085e64SLukas Schmid&usb_otg { 242*6e085e64SLukas Schmid extcon = <&tusb320 0>; 243*6e085e64SLukas Schmid dr_mode = "otg"; 244*6e085e64SLukas Schmid status = "okay"; 245*6e085e64SLukas Schmid}; 246*6e085e64SLukas Schmid 247*6e085e64SLukas Schmid&usbphy { 248*6e085e64SLukas Schmid usb0_id_det-gpios = <&pio 1 4 GPIO_ACTIVE_HIGH>; /* PB4 */ 249*6e085e64SLukas Schmid status = "okay"; 250*6e085e64SLukas Schmid}; 251*6e085e64SLukas Schmid 252*6e085e64SLukas Schmid&spi0 { 253*6e085e64SLukas Schmid #address-cells = <1>; 254*6e085e64SLukas Schmid #size-cells = <0>; 255*6e085e64SLukas Schmid cs-gpios = <0>, <&pio 1 0 GPIO_ACTIVE_LOW>; /* PB0 */ 256*6e085e64SLukas Schmid status = "okay"; 257*6e085e64SLukas Schmid 258*6e085e64SLukas Schmid flash@0 { 259*6e085e64SLukas Schmid compatible = "jedec,spi-nor"; 260*6e085e64SLukas Schmid reg = <0>; 261*6e085e64SLukas Schmid #address-cells = <1>; 262*6e085e64SLukas Schmid #size-cells = <1>; 263*6e085e64SLukas Schmid label = "firmware"; 264*6e085e64SLukas Schmid spi-max-frequency = <40000000>; 265*6e085e64SLukas Schmid }; 266*6e085e64SLukas Schmid 267*6e085e64SLukas Schmid can@1 { 268*6e085e64SLukas Schmid compatible = "microchip,mcp2518fd"; 269*6e085e64SLukas Schmid reg = <1>; 270*6e085e64SLukas Schmid clocks = <&clk_can0>; 271*6e085e64SLukas Schmid interrupts-extended = <&pio 1 1 IRQ_TYPE_LEVEL_LOW>; /* PB1 */ 272*6e085e64SLukas Schmid spi-max-frequency = <20000000>; 273*6e085e64SLukas Schmid vdd-supply = <®_vcc3v3>; 274*6e085e64SLukas Schmid xceiver-supply = <®_vcc3v3>; 275*6e085e64SLukas Schmid }; 276*6e085e64SLukas Schmid}; 277