// SPDX-License-Identifier: GPL-2.0-or-later OR MIT /* * Copyright (c) Toradex * * Common dtsi for Verdin iMX95 SoM on Ivy carrier board * * https://www.toradex.com/computer-on-modules/verdin-arm-family/nxp-imx95 * https://www.toradex.com/products/carrier-board/ivy-carrier-board */ #include #include #include / { aliases { eeprom1 = &carrier_eeprom; }; 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>; }; 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>; }; 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>; }; 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>; }; /* 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>; }; /* 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>; }; /* Ivy Power Supply Input Voltage */ ivy-1v8-voltage { compatible = "voltage-divider"; /* Verdin ADC_4 */ io-channels = <&adc1 3>; full-ohms = <39000>; /* 12k + 27k */ output-ohms = <27000>; }; ivy-3v3-voltage { compatible = "voltage-divider"; /* Verdin ADC_3 */ io-channels = <&adc1 2>; full-ohms = <54000>; /* 27k + 27k */ output-ohms = <27000>; }; ivy-5v-voltage { compatible = "voltage-divider"; /* Verdin ADC_2 */ io-channels = <&adc1 1>; full-ohms = <39000>; /* 27k + 12k */ output-ohms = <12000>; }; ivy-input-voltage { compatible = "voltage-divider"; /* Verdin ADC_1 */ io-channels = <&adc1 0>; full-ohms = <204700>; /* 200k + 4.7k */ output-ohms = <4700>; }; 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 = <&gpio2 16 GPIO_ACTIVE_HIGH>; }; /* D7 Green - SODIMM 32 - LEDs.GPIO2 */ led-1 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <1>; gpios = <&gpio2 26 GPIO_ACTIVE_HIGH>; }; /* D7 Red - SODIMM 34 - LEDs.GPIO3 */ led-2 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <1>; gpios = <&gpio2 21 GPIO_ACTIVE_HIGH>; }; /* D8 Blue - SODIMM 36 - LEDs.GPIO4 */ led-3 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <2>; gpios = <&gpio2 20 GPIO_ACTIVE_HIGH>; }; /* D8 Green - SODIMM 54 - LEDs.GPIO5 */ led-4 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <2>; gpios = <&gpio5 10 GPIO_ACTIVE_HIGH>; }; /* D8 Red - SODIMM 44 - LEDs.GPIO6 */ led-5 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <2>; gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>; }; /* D9 Blue - SODIMM 46 - LEDs.GPIO7 */ led-6 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <3>; gpios = <&gpio5 4 GPIO_ACTIVE_HIGH>; }; /* D9 Red - SODIMM 48 - LEDs.GPIO8 */ led-7 { color = ; default-state = "off"; function = LED_FUNCTION_STATUS; function-enumerator = <3>; gpios = <&gpio5 7 GPIO_ACTIVE_HIGH>; }; }; /* 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 = <&gpio4 28 GPIO_ACTIVE_HIGH>; }; /* 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 = <&gpio3 27 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"; }; /* 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>; }; /* 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>; }; }; /* Verdin ADC_1, ADC_2, ADC_3 and ADC_4 */ &adc1 { status = "okay"; }; /* Verdin ETH_1 (On-module PHY) */ &enetc_port0 { status = "okay"; }; /* Verdin ETH_2_RGMII */ &enetc_port1 { phy-handle = <ðphy2>; phy-mode = "rgmii-id"; status = "okay"; }; /* Verdin CAN_1 */ &flexcan1 { status = "okay"; }; /* Verdin CAN_2 */ &flexcan2 { status = "okay"; }; &gpio1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_ctrl_sleep_moci>; gpio-line-names = ""; }; &gpio2 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_gpio2>, <&pinctrl_gpio3>; gpio-line-names = "", /* 0 */ "", "", "", "", "", "", "", "", "", "", /* 10 */ "", "", "", "", "", "", "", "GPIO2", /* Verdin GPIO_2 - SODIMM 208 */ "", "", /* 20 */ "", "", "", "GPIO3", /* Verdin GPIO_3 - SODIMM 210 */ "", "", "", "", "", "", /* 30 */ ""; }; &gpio3 { gpio-line-names = ""; }; &gpio4 { gpio-line-names = ""; }; &gpio5 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_qspi1_cs2_gpio>, <&pinctrl_qspi1_dqs_gpio>, <&pinctrl_qspi1_io0_gpio>, <&pinctrl_qspi1_io1_gpio>, <&pinctrl_qspi1_io2_gpio>, <&pinctrl_qspi1_io3_gpio>; gpio-line-names = "DIGI_1", /* SODIMM 56 */ "DIGI_2", /* SODIMM 58 */ "REL1", /* SODIMM 60 */ "REL2", /* SODIMM 62 */ "", "", "", "", "REL4", /* SODIMM 66 */ "", "", /* 10 */ "REL3", /* SODIMM 64 */ "", "", "", "", "", ""; }; /* Verdin I2C_1 */ &lpi2c4 { status = "okay"; temperature-sensor@4f { compatible = "ti,tmp1075"; reg = <0x4f>; }; carrier_eeprom: eeprom@57 { compatible = "st,24c02", "atmel,24c02"; reg = <0x57>; pagesize = <16>; }; }; /* Verdin I2C_4_CSI */ &lpi2c5 { status = "okay"; ivy_adc1: adc@40 { compatible = "ti,ads1119"; reg = <0x40>; interrupt-parent = <&som_gpio_expander>; interrupts = <0 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>; interrupt-parent = <&som_gpio_expander>; 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 SPI_1 */ &lpspi6 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_lpspi6>, <&pinctrl_spi1_cs>, <&pinctrl_gpio1>, <&pinctrl_gpio4>; cs-gpios = <&gpio4 29 GPIO_ACTIVE_LOW>, <&som_gpio_expander 13 GPIO_ACTIVE_LOW>, <&gpio2 0 GPIO_ACTIVE_LOW>, <&gpio5 12 GPIO_ACTIVE_LOW>; tpm@2 { compatible = "infineon,slb9670", "tcg,tpm_tis-spi"; reg = <2>; spi-max-frequency = <18500000>; }; fram@3 { compatible = "fujitsu,mb85rs256", "atmel,at25"; reg = <3>; address-width = <16>; size = <32768>; spi-max-frequency = <33000000>; pagesize = <1>; }; }; /* Verdin UART_3, used as the Linux console */ &lpuart1 { status = "okay"; }; /* Verdin UART_1 */ &lpuart7 { status = "okay"; }; /* Verdin UART_2, through RS485 transceiver */ &lpuart8 { rs485-rx-during-tx; linux,rs485-enabled-at-boot-time; status = "okay"; }; &netc_emdio { ethphy2: ethernet-phy@2 { reg = <2>; pinctrl-names = "default"; pinctrl-0 = <&pinctrl_eth2_rgmii_int>; interrupt-parent = <&gpio1>; interrupts = <12 IRQ_TYPE_LEVEL_LOW>; ti,rx-internal-delay = ; ti,tx-internal-delay = ; }; }; /* Verdin PCIE_1 */ &pcie0 { status = "okay"; }; &som_gpio_expander { gpio-line-names = ""; }; /* Verdin USB_1 */ &usb2 { status = "okay"; }; /* Verdin USB_2 */ &usb3 { fsl,permanently-attached; status = "okay"; }; &usb3_phy { status = "okay"; }; /* Verdin SD_1 */ &usdhc2 { status = "okay"; }; &scmi_iomuxc { pinctrl_ivy_leds: ivyledsgrp { fsl,pins = , /* SODIMM 30 */ , /* SODIMM 32 */ , /* SODIMM 34 */ , /* SODIMM 36 */ , /* SODIMM 44 */ , /* SODIMM 46 */ , /* SODIMM 48 */ ; /* SODIMM 54 */ }; };