// SPDX-License-Identifier: (GPL-2.0+ OR MIT) /* * at91-sama5d2_icp.dts - Device Tree file for SAMA5D2-ICP board * * Copyright (C) 2019 Microchip Technology Inc. and its subsidiaries * * Author: Radu Pirea & Razvan Stefanescu, * Codrin Ciubotariu <codrin.ciubotariu@microchip.com>, * Cristian Birsan <cristian.birsan@microchip.com> */ /dts-v1/; #include "sama5d2.dtsi" #include "sama5d2-pinfunc.h" #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/input/input.h> #include <dt-bindings/mfd/atmel-flexcom.h> / { model = "Microchip SAMA5D2-ICP"; compatible = "microchip,sama5d2-icp", "atmel,sama5d27", "atmel,sama5d2", "atmel,sama5"; aliases { serial0 = &uart0; /* debug uart0 + mikro BUS 1 */ serial1 = &uart1; /* mikro BUS 3 */ serial3 = &uart3; /* mikro BUS 2 */ serial5 = &uart7; /* flx2 */ i2c0 = &i2c0; i2c1 = &i2c1; }; chosen { stdout-path = "serial0:115200n8"; }; clocks { slow_xtal { clock-frequency = <32768>; }; main_xtal { clock-frequency = <12000000>; }; }; gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_key_gpio_default>; button-1 { label = "USER_PB1"; gpios = <&pioA PIN_PD0 GPIO_ACTIVE_LOW>; linux,code = <KEY_PROG1>; wakeup-source; }; }; leds { compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_led_gpio_default>; status = "okay"; /* conflict with pwm0 */ led-red { label = "red"; gpios = <&pioA PIN_PB0 GPIO_ACTIVE_HIGH>; }; led-green { label = "green"; gpios = <&pioA PIN_PB1 GPIO_ACTIVE_HIGH>; }; led-blue { label = "blue"; gpios = <&pioA PIN_PA31 GPIO_ACTIVE_HIGH>; linux,default-trigger = "heartbeat"; }; }; }; &adc { vddana-supply = <&vdd_io_reg>; vref-supply = <&vdd_io_reg>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_adc_default &pinctrl_adtrg_default>; status = "okay"; }; &can0 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_can0_default>; status = "okay"; }; &can1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_can1_default>; status = "okay"; }; &flx0 { /* mikrobus2 spi */ atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_SPI>; status = "okay"; spi2: spi@400 { dmas = <0>, <0>; cs-gpios = <&pioA PIN_PC0 GPIO_ACTIVE_LOW>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mikrobus2_spi &pinctrl_ksz_spi_cs>; status = "okay"; #address-cells = <1>; #size-cells = <0>; switch0: ksz8563@0 { compatible = "microchip,ksz8563"; reg = <0>; reset-gpios = <&pioA PIN_PD4 GPIO_ACTIVE_LOW>; spi-max-frequency = <500000>; spi-cpha; spi-cpol; ports { #address-cells = <1>; #size-cells = <0>; port@0 { reg = <0>; label = "lan1"; }; port@1 { reg = <1>; label = "lan2"; }; port@2 { reg = <2>; label = "cpu"; ethernet = <&macb0>; phy-mode = "mii"; fixed-link { speed = <100>; full-duplex; }; }; }; }; }; }; &flx2 { atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_USART>; status = "okay"; uart7: serial@200 { pinctrl-0 = <&pinctrl_flx2_default>; pinctrl-names = "default"; atmel,use-dma-rx; atmel,use-dma-tx; status = "okay"; /* Conflict w/ qspi1. */ }; }; &flx3 { /* mikrobus1 spi */ atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_SPI>; status = "okay"; spi5: spi@400 { dmas = <0>, <0>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mikrobus1_spi &pinctrl_mikrobus1_spi_cs>; status = "okay"; }; }; &flx4 { atmel,flexcom-mode = <ATMEL_FLEXCOM_MODE_TWI>; status = "okay"; i2c6: i2c@600 { dmas = <0>, <0>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_flx4_default>; i2c-digital-filter; i2c-digital-filter-width-ns = <35>; status = "okay"; mcp16502@5b { compatible = "microchip,mcp16502"; reg = <0x5b>; status = "okay"; lpm-gpios = <&pioBU 7 GPIO_ACTIVE_LOW>; regulators { vdd_io_reg: VDD_IO { regulator-name = "VDD_IO"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; regulator-always-on; regulator-state-standby { regulator-on-in-suspend; regulator-mode = <4>; }; regulator-state-mem { regulator-off-in-suspend; regulator-mode = <4>; }; }; VDD_DDR { regulator-name = "VDD_DDR"; regulator-min-microvolt = <1350000>; regulator-max-microvolt = <1350000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; regulator-always-on; regulator-state-standby { regulator-on-in-suspend; regulator-mode = <4>; }; regulator-state-mem { regulator-on-in-suspend; regulator-mode = <4>; }; }; VDD_CORE { regulator-name = "VDD_CORE"; regulator-min-microvolt = <1250000>; regulator-max-microvolt = <1250000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; regulator-always-on; regulator-state-standby { regulator-on-in-suspend; regulator-mode = <4>; }; regulator-state-mem { regulator-off-in-suspend; regulator-mode = <4>; }; }; VDD_OTHER { regulator-name = "VDD_OTHER"; regulator-min-microvolt = <600000>; regulator-max-microvolt = <1850000>; regulator-initial-mode = <2>; regulator-allowed-modes = <2>, <4>; regulator-state-standby { regulator-on-in-suspend; regulator-mode = <4>; }; regulator-state-mem { regulator-off-in-suspend; regulator-mode = <4>; }; }; LDO1 { regulator-name = "LDO1"; regulator-min-microvolt = <2500000>; regulator-max-microvolt = <2500000>; regulator-always-on; regulator-state-standby { regulator-on-in-suspend; }; regulator-state-mem { regulator-off-in-suspend; }; }; LDO2 { regulator-name = "LDO2"; regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; regulator-always-on; regulator-state-standby { regulator-on-in-suspend; }; regulator-state-mem { regulator-off-in-suspend; }; }; }; }; }; }; &i2c0 { /* mikrobus i2c */ pinctrl-names = "default", "gpio"; pinctrl-0 = <&pinctrl_mikrobus_i2c>; pinctrl-1 = <&pinctrl_i2c0_gpio>; sda-gpios = <&pioA PIN_PD21 GPIO_ACTIVE_HIGH>; scl-gpios = <&pioA PIN_PD22 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; i2c-digital-filter; i2c-digital-filter-width-ns = <35>; status = "okay"; }; &i2c1 { dmas = <0>, <0>; pinctrl-names = "default", "gpio"; pinctrl-0 = <&pinctrl_i2c1_default>; pinctrl-1 = <&pinctrl_i2c1_gpio>; sda-gpios = <&pioA PIN_PD19 GPIO_ACTIVE_HIGH>; scl-gpios = <&pioA PIN_PD20 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; i2c-digital-filter; i2c-digital-filter-width-ns = <35>; status = "okay"; eeprom@50 { compatible = "atmel,24c02"; reg = <0x50>; pagesize = <16>; status = "okay"; }; eeprom@52 { compatible = "atmel,24c02"; reg = <0x52>; pagesize = <16>; status = "disabled"; }; eeprom@53 { compatible = "atmel,24c02"; reg = <0x53>; pagesize = <16>; status = "disabled"; }; }; &macb0 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_macb0_default &pinctrl_macb0_phy_irq &pinctrl_macb0_rst>; phy-mode = "mii"; status = "okay"; fixed-link { speed = <100>; full-duplex; }; }; &pioA { pinctrl_adc_default: adc_default { pinmux = <PIN_PD24__GPIO>, <PIN_PD25__GPIO>, <PIN_PD26__GPIO>; bias-disable; }; /* * The ADTRG pin can work on any edge type. * In here it's being pulled up, so need to * connect it to ground to get an edge e.g. * Trigger can be configured on falling, rise * or any edge, and the pull-up can be changed * to pull-down or left floating according to * needs. */ pinctrl_adtrg_default: adtrg_default { pinmux = <PIN_PD31__ADTRG>; bias-pull-up; }; pinctrl_flx4_default: flx4_default { pinmux = <PIN_PC28__FLEXCOM4_IO0>, <PIN_PC29__FLEXCOM4_IO1>; bias-disable; }; pinctrl_can0_default: can0_default { pinmux = <PIN_PC10__CANTX0>, <PIN_PC11__CANRX0>; bias-disable; }; pinctrl_can1_default: can1_default { pinmux = <PIN_PC26__CANTX1>, <PIN_PC27__CANRX1>; bias-disable; }; pinctrl_i2c1_default: i2c1_default { pinmux = <PIN_PD19__TWD1>, <PIN_PD20__TWCK1>; bias-disable; }; pinctrl_i2c1_gpio: i2c1_gpio { pinmux = <PIN_PD19__GPIO>, <PIN_PD20__GPIO>; bias-disable; }; pinctrl_key_gpio_default: key_gpio_default { pinmux = <PIN_PD0__GPIO>; bias-pull-up; }; pinctrl_led_gpio_default: led_gpio_default { pinmux = <PIN_PB0__GPIO>, <PIN_PB1__GPIO>, <PIN_PA31__GPIO>; bias-pull-up; }; pinctrl_qspi1_default: qspi1_default { pinmux = <PIN_PA6__QSPI1_SCK>, <PIN_PA7__QSPI1_IO0>, <PIN_PA8__QSPI1_IO1>, <PIN_PA9__QSPI1_IO2>, <PIN_PA10__QSPI1_IO3>, <PIN_PA11__QSPI1_CS>; bias-disable; }; pinctrl_sdmmc0_default: sdmmc0_default { cmd_data { pinmux = <PIN_PA1__SDMMC0_CMD>, <PIN_PA2__SDMMC0_DAT0>, <PIN_PA3__SDMMC0_DAT1>, <PIN_PA4__SDMMC0_DAT2>, <PIN_PA5__SDMMC0_DAT3>; bias-disable; }; ck_cd { pinmux = <PIN_PA0__SDMMC0_CK>, <PIN_PA13__SDMMC0_CD>; bias-disable; }; }; pinctrl_sdmmc1_default: sdmmc1_default { cmd_data { pinmux = <PIN_PA18__SDMMC1_DAT0>, <PIN_PA19__SDMMC1_DAT1>, <PIN_PA20__SDMMC1_DAT2>, <PIN_PA21__SDMMC1_DAT3>; bias-disable; }; ck_cd { pinmux = <PIN_PA22__SDMMC1_CK>, <PIN_PA28__SDMMC1_CMD>; bias-disable; }; }; pinctrl_mikrobus_i2c: mikrobus_i2c { pinmux = <PIN_PD22__TWCK0>, <PIN_PD21__TWD0>; bias-disable; }; pinctrl_i2c0_gpio: i2c0_gpio { pinmux = <PIN_PD21__GPIO>, <PIN_PD22__GPIO>; bias-disable; }; pinctrl_mikrobus1_an: mikrobus1_an { pinmux = <PIN_PD26__GPIO>; bias-disable; }; pinctrl_mikrobus1_rst: mikrobus1_rst { pinmux = <PIN_PC5__GPIO>; bias-disable; }; pinctrl_mikrobus1_spi_cs: mikrobus1_spi_cs { pinmux = <PIN_PC21__FLEXCOM3_IO3>; bias-disable; }; pinctrl_mikrobus1_spi: mikrobus1_spi { pinmux = <PIN_PC20__FLEXCOM3_IO0>, <PIN_PC19__FLEXCOM3_IO1>, <PIN_PC18__FLEXCOM3_IO2>; bias-disable; }; pinctrl_mikrobus1_pwm: mikrobus1_pwm { pinmux = <PIN_PC4__TIOB1>; bias-disable; }; pinctrl_mikrobus1_int: mikrobus1_int { pinmux = <PIN_PC3__GPIO>; bias-disable; }; pinctrl_mikrobus1_uart: mikrobus1_uart { pinmux = <PIN_PB26__URXD0>, <PIN_PB27__UTXD0>; bias-disable; }; pinctrl_mikrobus2_an: mikrobus2_an { pinmux = <PIN_PD25__GPIO>; bias-disable; }; pinctrl_mikrobus2_rst: mikrobus2_rst { pinmux = <PIN_PB24__GPIO>; bias-disable; }; pinctrl_mikrobus2_spi_cs: mikrobus2_spi_cs { pinmux = <PIN_PB31__FLEXCOM0_IO3>; bias-disable; }; pinctrl_mikrobus2_spi: mikrobus2_spi { pinmux = <PIN_PB28__FLEXCOM0_IO0>, <PIN_PB29__FLEXCOM0_IO1>, <PIN_PB30__FLEXCOM0_IO2>; bias-disable; }; pinctrl_ksz_spi_cs: ksz_spi_cs { pinmux = <PIN_PC0__GPIO>; bias-disable; }; pinctrl_mikrobus2_pwm: mikrobus2_pwm { pinmux = <PIN_PB23__TIOB2>; bias-disable; }; pinctrl_mikrobus2_int: mikrobus2_int { pinmux = <PIN_PB22__GPIO>; bias-disable; }; pinctrl_mikrobus2_uart: mikrobus2_uart { pinmux = <PIN_PC12__URXD3>, <PIN_PC13__UTXD3>; bias-disable; }; pinctrl_mikrobus3_an: mikrobus3_an { pinmux = <PIN_PD24__GPIO>; bias-disable; }; pinctrl_mikrobus3_rst: mikrobus3_rst { pinmux = <PIN_PB21__GPIO>; bias-disable; }; pinctrl_mikrobus3_spi_cs: mikrobus3_spi_cs { pinmux = <PIN_PA17__SPI0_NPCS0>; bias-disable; }; pinctrl_mikrobus3_spi: mikrobus3_spi { pinmux = <PIN_PA14__SPI0_SPCK>, <PIN_PA16__SPI0_MISO>, <PIN_PA15__SPI0_MOSI>; bias-disable; }; pinctrl_mikrobus3_pwm: mikrobus3_pwm { pinmux = <PIN_PB20__TIOB3>; bias-disable; }; pinctrl_mikrobus3_int: mikrobus3_int { pinmux = <PIN_PB18__GPIO>; bias-disable; }; pinctrl_mikrobus3_uart: mikrobus3_uart { pinmux = <PIN_PC7__URXD1>, <PIN_PC8__UTXD1>; bias-disable; }; pinctrl_usb_default: usb_default { pinmux = <PIN_PC17__GPIO>; bias-disable; }; pinctrl_usba_vbus: usba_vbus { pinmux = <PIN_PD23__GPIO>; bias-disable; }; pinctrl_pwm0_pwm2_default: pwm0_pwm2_default { pinmux = <PIN_PB5__PWMH2>, <PIN_PB6__PWML2>; bias-pull-up; }; pinctrl_macb0_default: macb0_default { pinmux = <PIN_PD1__GRXCK>, <PIN_PD2__GTXER>, <PIN_PD5__GRX2>, <PIN_PD6__GRX3>, <PIN_PD7__GTX2>, <PIN_PD8__GTX3>, <PIN_PD9__GTXCK>, <PIN_PD10__GTXEN>, <PIN_PD11__GRXDV>, <PIN_PD12__GRXER>, <PIN_PD13__GRX0>, <PIN_PD14__GRX1>, <PIN_PD15__GTX0>, <PIN_PD16__GTX1>, <PIN_PD17__GMDC>, <PIN_PD18__GMDIO>; bias-disable; }; pinctrl_macb0_phy_irq: macb0_phy_irq { pinmux = <PIN_PD3__GPIO>; bias-disable; }; pinctrl_macb0_rst: macb0_sw_rst { pinmux = <PIN_PD4__GPIO>; bias-disable; }; pinctrl_flx2_default: flx2_default { pinmux = <PIN_PA6__FLEXCOM2_IO0>, <PIN_PA7__FLEXCOM2_IO1>, <PIN_PA9__FLEXCOM2_IO3>, <PIN_PA10__FLEXCOM2_IO4>; bias-disable; }; }; &pwm0 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_pwm0_pwm2_default>; status = "disabled"; /* conflict with leds, HSIC */ }; &qspi1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_qspi1_default>; status = "disabled"; /* Conflict with wilc_pwrseq, flx2 */ flash@0 { #address-cells = <1>; #size-cells = <1>; compatible = "jedec,spi-nor"; reg = <0>; spi-max-frequency = <104000000>; spi-cs-setup-ns = <7>; spi-tx-bus-width = <4>; spi-rx-bus-width = <4>; m25p,fast-read; at91bootstrap@0 { label = "qspi: at91bootstrap"; reg = <0x00000000 0x00040000>; }; bootloader@40000 { label = "qspi: bootloader"; reg = <0x00040000 0x000c0000>; }; bootloaderenvred@100000 { label = "qspi: bootloader env redundant"; reg = <0x00100000 0x00040000>; }; bootloaderenv@140000 { label = "qspi: bootloader env"; reg = <0x00140000 0x00040000>; }; dtb@180000 { label = "qspi: device tree"; reg = <0x00180000 0x00080000>; }; kernel@200000 { label = "qspi: kernel"; reg = <0x00200000 0x00600000>; }; }; }; &sdmmc0 { no-1-8-v; bus-width = <4>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_sdmmc0_default>; status = "okay"; }; &shutdown_controller { debounce-delay-us = <976>; atmel,wakeup-rtc-timer; input@0 { reg = <0>; }; }; &spi0 { /* mikrobus3 spi */ pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mikrobus3_spi &pinctrl_mikrobus3_spi_cs>; status = "okay"; }; &tcb0 { timer0: timer@0 { compatible = "atmel,tcb-timer"; reg = <0>; }; timer1: timer@1 { compatible = "atmel,tcb-timer"; reg = <1>; }; }; &uart0 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mikrobus1_uart>; atmel,use-dma-rx; atmel,use-dma-tx; status = "okay"; }; &uart1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mikrobus3_uart>; atmel,use-dma-rx; atmel,use-dma-tx; status = "okay"; }; &uart3 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_mikrobus2_uart>; atmel,use-dma-rx; atmel,use-dma-tx; status = "okay"; }; &usb0 { atmel,vbus-gpio = <&pioA PIN_PD23 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usba_vbus>; status = "okay"; }; &usb1 { num-ports = <3>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_usb_default>; status = "okay"; }; &usb2 { phy_type = "hsic"; status = "okay"; }; &watchdog { status = "okay"; };