The Maivin board is an AI vision starter kit sold by Au-Zone Technologies, developed in collaboration with Toradex and Vision Components. It is based on a Toradex Verdin i.MX8MP SoM. Add a device tree that covers the base set the peripherals found on the board: - Ethernet - USB - SD card slot - CAN and serial ports (RS232 and RS485) - DACs, EEPROMs, temperature sensor - PCI M.2 and CSI regulators An additional pinctrl group is included for the M.2 modem, but hasn't been tested due to lack of compatible hardware. Signed-off-by: Laurent Pinchart <laurent.pinchart@xxxxxxxxxxxxxxxx> --- arch/arm64/boot/dts/freescale/Makefile | 1 + .../boot/dts/freescale/imx8mp-maivin.dts | 236 ++++++++++++++++++ 2 files changed, 237 insertions(+) create mode 100644 arch/arm64/boot/dts/freescale/imx8mp-maivin.dts diff --git a/arch/arm64/boot/dts/freescale/Makefile b/arch/arm64/boot/dts/freescale/Makefile index 045250d0a040..03af8c242649 100644 --- a/arch/arm64/boot/dts/freescale/Makefile +++ b/arch/arm64/boot/dts/freescale/Makefile @@ -165,6 +165,7 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mp-dhcom-pdk2.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mp-dhcom-pdk3.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mp-evk.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mp-icore-mx8mp-edimm2.2.dtb +dtb-$(CONFIG_ARCH_MXC) += imx8mp-maivin.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mp-msc-sm2s-ep1.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mp-phyboard-pollux-rdk.dtb dtb-$(CONFIG_ARCH_MXC) += imx8mp-skov-revb-hdmi.dtb diff --git a/arch/arm64/boot/dts/freescale/imx8mp-maivin.dts b/arch/arm64/boot/dts/freescale/imx8mp-maivin.dts new file mode 100644 index 000000000000..2d1c8e782465 --- /dev/null +++ b/arch/arm64/boot/dts/freescale/imx8mp-maivin.dts @@ -0,0 +1,236 @@ +// SPDX-License-Identifier: GPL-2.0+ OR MIT +/* + * Copyright 2021 Au-Zone Technologies + * Copyright 2024 Ideas on Board + */ + +/dts-v1/; + +#include <dt-bindings/gpio/gpio.h> +#include <dt-bindings/input/linux-event-codes.h> +#include <dt-bindings/leds/common.h> + +#include "imx8mp-verdin.dtsi" +#include "imx8mp-verdin-nonwifi.dtsi" + +/ { + model = "Au-Zone Maivin AI Vision Starter Kit"; + compatible = "au-zone,maivin-starter-kit", + "toradex,verdin-imx8mp-nonwifi", + "toradex,verdin-imx8mp", + "fsl,imx8mp"; + + gpio-keys { + compatible = "gpio-keys"; + pinctrl-0 = <&pinctrl_sw1>; + + button-0 { + label = "SW1"; + linux,code = <BTN_MISC>; + interrupts-extended = <&gpio3 16 IRQ_TYPE_LEVEL_LOW>; + }; + }; + + leds { + compatible = "gpio-leds"; + pinctrl-0 = <&pinctrl_led>; + + led-0 { + color = <LED_COLOR_ID_BLUE>; + function = LED_FUNCTION_STATUS; + linux,default-trigger = "heartbeat"; + gpios = <&gpio3 14 GPIO_ACTIVE_HIGH>; + }; + }; + + csi_3v3: regulator-csi-3v3 { + compatible = "regulator-fixed"; + regulator-name = "CSI_3V3"; + pinctrl-0 = <&pinctrl_csi_3v3>; + gpio = <&gpio3 7 GPIO_ACTIVE_HIGH>; + enable-active-high; + startup-delay-us = <50000>; /* TODO: Determine the right value */ + }; + + m2_3v3: regulator-m2-3v3 { + compatible = "regulator-fixed"; + regulator-name = "M2_3V3"; + regulator-max-microvolt = <3300000>; + regulator-min-microvolt = <3300000>; + pinctrl-0 = <&pinctrl_m2_3v3>; + gpio = <&gpio3 1 GPIO_ACTIVE_HIGH>; + enable-active-high; + }; + + /* Carrier Board Supply 3V3_SW */ + reg_3v3: regulator-3v3-sw { + compatible = "regulator-fixed"; + regulator-max-microvolt = <3300000>; + regulator-min-microvolt = <3300000>; + regulator-name = "3V3_SW"; + }; +}; + +&eqos { + status = "okay"; +}; + +/* Verdin CAN_1 */ +&flexcan1 { + status = "okay"; +}; + +/* Verdin CAN_2 */ +&flexcan2 { + status = "okay"; +}; + +/* Verdin I2C_2_DSI */ +&i2c2 { + status = "okay"; + + clock-frequency = <400000>; + scl-gpios = <&gpio5 16 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + sda-gpios = <&gpio5 17 (GPIO_ACTIVE_HIGH | GPIO_OPEN_DRAIN)>; + + dac@d { + compatible = "ti,dac081c081"; + reg = <0x0d>; + vref-supply = <&csi_3v3>; + }; +}; + +/* Verdin I2C_4_CSI */ +&i2c3 { + status = "okay"; + + dac@d { + compatible = "ti,dac081c081"; + reg = <0x0d>; + vref-supply = <&csi_3v3>; + }; +}; + +/* Verdin I2C_1 */ +&i2c4 { + status = "okay"; + + temp-sensor@4b { + compatible = "ti,tmp102"; + reg = <0x4b>; + }; + + /* EEPROM on the rear connector interface */ + eeprom@54 { + compatible = "st,24c02", "atmel,24c02"; + pagesize = <16>; + reg = <0x54>; + }; +}; + +/* EEPROM on the carrier board */ +&eeprom_carrier_board { + status = "okay"; +}; + +&iomuxc { + pinctrl_csi_3v3: csi-3v3-grp { + fsl,pins = < + MX8MP_IOMUXC_NAND_DATA01__GPIO3_IO07 0x184 /* SODIMM 58 */ + >; + }; + + gpio7grp { + fsl,pins = < + MX8MP_IOMUXC_SAI1_RXD1__GPIO4_IO03 0x82 /* SODIMM 220 */ + >; + }; + + gpio8grp { + fsl,pins = < + MX8MP_IOMUXC_SAI1_RXC__GPIO4_IO01 0x82 /* SODIMM 222 */ + >; + }; + + pinctrl_led: ledgrp { + fsl,pins = < + MX8MP_IOMUXC_NAND_DQS__GPIO3_IO14 0x82 /* SODIMM 66 */ + >; + }; + + /* M.2 power off and reset */ + pinctrl_m2: m2grp { + fsl,pins = < + MX8MP_IOMUXC_NAND_DATA00__GPIO3_IO06 0x82 /* SODIMM 56 */ + MX8MP_IOMUXC_NAND_DATA03__GPIO3_IO09 0x82 /* SODIMM 62 */ + >; + }; + + pinctrl_m2_3v3: m2-3v3-grp { + fsl,pins = < + MX8MP_IOMUXC_NAND_CE0_B__GPIO3_IO01 0x82 /* SODIMM 54 */ + >; + }; + + pinctrl_sw1: sw1grp { + fsl,pins = < + /* + * SW1 shortens the pin to ground when pressed, enable + * the internal pull-up. + */ + MX8MP_IOMUXC_NAND_READY_B__GPIO3_IO16 0x1c0 /* SODIMM 64 */ + >; + }; +}; + +®_usdhc2_vmmc { + vin-supply = <®_3v3>; +}; + +/* Verdin UART_1 */ +/* Enabling RS-485 operation */ +&uart1 { + fsl,uart-has-rtscts; + linux,rs485-enabled-at-boot-time; +}; + +/* Verdin UART_2, for M.2 card slot */ +&uart2 { + status = "okay"; +}; + +/* Verdin UART_3, used as the Linux Console */ +&uart3 { + status = "okay"; +}; + +/* Verdin USB_1, USB recovery */ +&usb3_phy0 { + status = "okay"; +}; + +&usb3_0 { + status = "okay"; +}; + +&usb_dwc3_0 { + status = "okay"; +}; + +/* Verdin USB_2, for M.2 card slot */ +&usb3_phy1 { + status = "okay"; +}; + +&usb3_1 { + status = "okay"; +}; + +&usb_dwc3_1 { + status = "okay"; +}; + +/* Verdin SD_1, for SD card slot */ +&usdhc2 { + status = "okay"; +}; -- Regards, Laurent Pinchart