// SPDX-License-Identifier: GPL-2.0-or-later OR MIT /* * Copyright 2024 Toradex * * Common dtsi for Verdin IMX8MP SoM on Ivy carrier board * * https://www.toradex.com/computer-on-modules/verdin-arm-family/nxp-imx-8m-plus * https://www.toradex.com/products/carrier-board/ivy-carrier-board */ #include #include #include / { /* AIN1 Voltage w/o AIN1_MODE gpio control */ ain1_voltage_unmanaged: voltage-divider-ain1 { compatible = "voltage-divider"; #io-channel-cells = <1>; io-channels = <&ivy_adc1 0>; full-ohms = <19>; output-ohms = <1>; }; /* AIN1 Current w/o AIN1_MODE gpio control */ ain1_current_unmanaged: current-sense-shunt-ain1 { compatible = "current-sense-shunt"; #io-channel-cells = <0>; io-channels = <&ivy_adc1 1>; shunt-resistor-micro-ohms = <100000000>; }; /* AIN1_MODE - SODIMM 216 */ ain1_mode_mux_ctrl: mux-controller-0 { compatible = "gpio-mux"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio5>; #mux-control-cells = <0>; mux-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>; }; ain1-voltage { compatible = "io-channel-mux"; channels = "ain1_voltage", ""; io-channels = <&ain1_voltage_unmanaged 0>; io-channel-names = "parent"; mux-controls = <&ain1_mode_mux_ctrl>; settle-time-us = <1000>; }; ain1-current { compatible = "io-channel-mux"; channels = "", "ain1_current"; io-channels = <&ain1_current_unmanaged>; io-channel-names = "parent"; mux-controls = <&ain1_mode_mux_ctrl>; settle-time-us = <1000>; }; /* AIN2 Voltage w/o AIN2_MODE gpio control */ ain2_voltage_unmanaged: voltage-divider-ain2 { compatible = "voltage-divider"; #io-channel-cells = <1>; io-channels = <&ivy_adc2 0>; full-ohms = <19>; output-ohms = <1>; }; /* AIN2 Current w/o AIN2_MODE gpio control */ ain2_current_unmanaged: current-sense-shunt-ain2 { compatible = "current-sense-shunt"; #io-channel-cells = <0>; io-channels = <&ivy_adc2 1>; shunt-resistor-micro-ohms = <100000000>; }; /* AIN2_MODE - SODIMM 218 */ ain2_mode_mux_ctrl: mux-controller-1 { compatible = "gpio-mux"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio6>; #mux-control-cells = <0>; mux-gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>; }; ain2-voltage { compatible = "io-channel-mux"; channels = "ain2_voltage", ""; io-channels = <&ain2_voltage_unmanaged 0>; io-channel-names = "parent"; mux-controls = <&ain2_mode_mux_ctrl>; settle-time-us = <1000>; }; ain2-current { compatible = "io-channel-mux"; channels = "", "ain2_current"; io-channels = <&ain2_current_unmanaged>; io-channel-names = "parent"; mux-controls = <&ain2_mode_mux_ctrl>; settle-time-us = <1000>; }; leds { compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_ivy_leds>; /* D7 Blue - SODIMM 30 - LEDs.GPIO1 */ led-0 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <1>; gpios = <&gpio3 25 GPIO_ACTIVE_HIGH>; }; /* D7 Green - SODIMM 32 - LEDs.GPIO2 */ led-1 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <1>; gpios = <&gpio3 22 GPIO_ACTIVE_HIGH>; }; /* D7 Red - SODIMM 34 - LEDs.GPIO3 */ led-2 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <1>; gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>; }; /* D8 Blue - SODIMM 36 - LEDs.GPIO4 */ led-3 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <2>; gpios = <&gpio4 2 GPIO_ACTIVE_HIGH>; }; /* D8 Green - SODIMM 54 - LEDs.GPIO5 */ led-4 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <2>; gpios = <&gpio3 1 GPIO_ACTIVE_HIGH>; }; /* D8 Red - SODIMM 44 - LEDs.GPIO6 */ led-5 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <2>; gpios = <&gpio4 31 GPIO_ACTIVE_HIGH>; }; /* D9 Blue - SODIMM 46 - LEDs.GPIO7 */ led-6 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <3>; gpios = <&gpio5 01 GPIO_ACTIVE_HIGH>; }; /* D9 Red - SODIMM 48 - LEDs.GPIO8 */ led-7 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <3>; gpios = <&gpio4 30 GPIO_ACTIVE_HIGH>; }; }; reg_3v2_ain1: regulator-3v2-ain1 { compatible = "regulator-fixed"; regulator-max-microvolt = <3200000>; regulator-min-microvolt = <3200000>; regulator-name = "+3V2_AIN1"; }; reg_3v2_ain2: regulator-3v2-ain2 { compatible = "regulator-fixed"; regulator-max-microvolt = <3200000>; regulator-min-microvolt = <3200000>; regulator-name = "+3V2_AIN2"; }; /* Ivy Power Supply Input Voltage */ ivy-input-voltage { compatible = "voltage-divider"; /* Verdin ADC_1 */ io-channels = <&verdin_som_adc 7>; full-ohms = <204700>; /* 200k + 4.7k */ output-ohms = <4700>; }; ivy-5v-voltage { compatible = "voltage-divider"; /* Verdin ADC_2 */ io-channels = <&verdin_som_adc 6>; full-ohms = <39000>; /* 27k + 12k */ output-ohms = <12000>; }; ivy-3v3-voltage { compatible = "voltage-divider"; /* Verdin ADC_3 */ io-channels = <&verdin_som_adc 5>; full-ohms = <54000>; /* 27k + 27k */ output-ohms = <27000>; }; ivy-1v8-voltage { compatible = "voltage-divider"; /* Verdin ADC_4 */ io-channels = <&verdin_som_adc 4>; full-ohms = <39000>; /* 12k + 27k */ output-ohms = <27000>; }; }; /* Verdin SPI_1 */ &ecspi1 { pinctrl-0 = <&pinctrl_ecspi1>, <&pinctrl_gpio1>, <&pinctrl_gpio4>; cs-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>, <&gpio1 0 GPIO_ACTIVE_LOW>, <&gpio1 6 GPIO_ACTIVE_LOW>; status = "okay"; tpm@1 { compatible = "infineon,slb9670", "tcg,tpm_tis-spi"; reg = <1>; spi-max-frequency = <18500000>; }; fram@2 { compatible = "fujitsu,mb85rs256", "atmel,at25"; reg = <2>; address-width = <16>; size = <32768>; spi-max-frequency = <33000000>; pagesize = <1>; }; }; /* EEPROM on Ivy */ &eeprom_carrier_board { status = "okay"; }; /* Verdin ETH_1 */ &eqos { status = "okay"; }; /* Verdin ETH_2 */ &fec { phy-handle = <ðphy2>; phy-mode = "rgmii-id"; status = "okay"; }; &verdin_eth2_mdio { ethphy2: ethernet-phy@2 { reg = <2>; interrupt-parent = <&gpio4>; interrupts = <18 IRQ_TYPE_LEVEL_LOW>; ti,rx-internal-delay = ; ti,tx-internal-delay = ; }; }; /* Verdin CAN_1 */ &flexcan1 { status = "okay"; }; /* Verdin CAN_2 */ &flexcan2 { status = "okay"; }; &gpio1 { gpio-line-names = "", /* 0 */ "GPIO2", /* Verdin GPIO_2 - SODIMM 208 */ "", "", "", "GPIO3", /* Verdin GPIO_3 - SODIMM 210 */ "", "", "", "", "", "", /* 10 */ "", "", "", "", "", "", "", "", "", "", /* 20 */ "", "", "", "", "", "", "", "", ""; }; &gpio3 { gpio-line-names = "", /* 0 */ "", "", "", "", "", "DIG_1", /* SODIMM 56 */ "DIG_2", /* SODIMM 58 */ "REL1", /* SODIMM 60 */ "REL2", /* SODIMM 62 */ "", /* 10 */ "", "", "", "REL4", /* SODIMM 66 */ "", "REL3", /* SODIMM 64 */ "", "", "", "", /* 20 */ "", "", "", "", "", "", "", "", ""; }; /* Temperature sensor on Ivy */ &hwmon_temp { compatible = "ti,tmp1075"; status = "okay"; }; /* Verdin I2C_4 CSI */ &i2c3 { status = "okay"; ivy_adc1: adc@40 { compatible = "ti,ads1119"; reg = <0x40>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio7>; interrupt-parent = <&gpio4>; interrupts = <3 IRQ_TYPE_EDGE_FALLING>; avdd-supply = <®_3v2_ain1>; dvdd-supply = <®_3v2_ain1>; vref-supply = <®_3v2_ain1>; #address-cells = <1>; #io-channel-cells = <1>; #size-cells = <0>; /* AIN1 0-33V Voltage Input */ channel@0 { reg = <0>; diff-channels = <0 1>; }; /* AIN1 0-20mA Current Input */ channel@1 { reg = <1>; diff-channels = <2 3>; }; }; ivy_adc2: adc@41 { compatible = "ti,ads1119"; reg = <0x41>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio8>; interrupt-parent = <&gpio4>; interrupts = <1 IRQ_TYPE_EDGE_FALLING>; avdd-supply = <®_3v2_ain2>; dvdd-supply = <®_3v2_ain2>; vref-supply = <®_3v2_ain2>; #address-cells = <1>; #io-channel-cells = <1>; #size-cells = <0>; /* AIN2 0-33V Voltage Input */ channel@0 { reg = <0>; diff-channels = <0 1>; }; /* AIN2 0-20mA Current Input */ channel@1 { reg = <1>; diff-channels = <2 3>; }; }; }; /* Verdin I2C_1 */ &i2c4 { status = "okay"; }; /* Verdin PCIE_1 */ &pcie { status = "okay"; }; &pcie_phy { status = "okay"; }; /* Verdin UART_1 */ &uart1 { status = "okay"; }; /* Verdin UART_2 */ &uart2 { linux,rs485-enabled-at-boot-time; rs485-rx-during-tx; status = "okay"; }; /* Verdin UART_3 */ &uart3 { status = "okay"; }; /* Verdin USB_1 */ &usb3_0 { status = "okay"; }; &usb3_phy0 { status = "okay"; }; /* Verdin USB_2 */ &usb3_1 { status = "okay"; }; &usb3_phy1 { status = "okay"; }; /* Verdin SD_1 */ &usdhc2 { status = "okay"; }; &iomuxc { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio2>, <&pinctrl_gpio3>, <&pinctrl_ivy_dig_inputs>, <&pinctrl_ivy_relays>; pinctrl_ivy_dig_inputs: ivydiginputsgrp { fsl,pins = , /* SODIMM 56 */ ; /* SODIMM 58 */ }; pinctrl_ivy_leds: ivyledsgrp { fsl,pins = , /* SODIMM 30 */ , /* SODIMM 32 */ , /* SODIMM 34 */ , /* SODIMM 36 */ , /* SODIMM 44 */ , /* SODIMM 46 */ , /* SODIMM 48 */ ; /* SODIMM 54 */ }; pinctrl_ivy_relays: ivyrelaysgrp { fsl,pins = , /* SODIMM 60 */ , /* SODIMM 62 */ , /* SODIMM 64 */ ; /* SODIMM 66 */ }; };