1// SPDX-License-Identifier: GPL-2.0-or-later OR MIT 2/* 3 * Copyright 2024 Toradex 4 * 5 * Common dtsi for Verdin IMX8MP SoM on Ivy carrier board 6 * 7 * https://www.toradex.com/computer-on-modules/verdin-arm-family/nxp-imx-8m-plus 8 * https://www.toradex.com/products/carrier-board/ivy-carrier-board 9 */ 10 11#include <dt-bindings/mux/mux.h> 12#include <dt-bindings/leds/common.h> 13#include <dt-bindings/net/ti-dp83867.h> 14 15/ { 16 /* AIN1 Voltage w/o AIN1_MODE gpio control */ 17 ain1_voltage_unmanaged: voltage-divider-ain1 { 18 compatible = "voltage-divider"; 19 #io-channel-cells = <1>; 20 io-channels = <&ivy_adc1 0>; 21 full-ohms = <19>; 22 output-ohms = <1>; 23 }; 24 25 /* AIN1 Current w/o AIN1_MODE gpio control */ 26 ain1_current_unmanaged: current-sense-shunt-ain1 { 27 compatible = "current-sense-shunt"; 28 #io-channel-cells = <0>; 29 io-channels = <&ivy_adc1 1>; 30 shunt-resistor-micro-ohms = <100000000>; 31 }; 32 33 /* AIN1_MODE - SODIMM 216 */ 34 ain1_mode_mux_ctrl: mux-controller-0 { 35 compatible = "gpio-mux"; 36 pinctrl-names = "default"; 37 pinctrl-0 = <&pinctrl_gpio5>; 38 #mux-control-cells = <0>; 39 mux-gpios = <&gpio1 7 GPIO_ACTIVE_HIGH>; 40 }; 41 42 ain1-voltage { 43 compatible = "io-channel-mux"; 44 channels = "ain1_voltage", ""; 45 io-channels = <&ain1_voltage_unmanaged 0>; 46 io-channel-names = "parent"; 47 mux-controls = <&ain1_mode_mux_ctrl>; 48 settle-time-us = <1000>; 49 }; 50 51 ain1-current { 52 compatible = "io-channel-mux"; 53 channels = "", "ain1_current"; 54 io-channels = <&ain1_current_unmanaged>; 55 io-channel-names = "parent"; 56 mux-controls = <&ain1_mode_mux_ctrl>; 57 settle-time-us = <1000>; 58 }; 59 60 /* AIN2 Voltage w/o AIN2_MODE gpio control */ 61 ain2_voltage_unmanaged: voltage-divider-ain2 { 62 compatible = "voltage-divider"; 63 #io-channel-cells = <1>; 64 io-channels = <&ivy_adc2 0>; 65 full-ohms = <19>; 66 output-ohms = <1>; 67 }; 68 69 /* AIN2 Current w/o AIN2_MODE gpio control */ 70 ain2_current_unmanaged: current-sense-shunt-ain2 { 71 compatible = "current-sense-shunt"; 72 #io-channel-cells = <0>; 73 io-channels = <&ivy_adc2 1>; 74 shunt-resistor-micro-ohms = <100000000>; 75 }; 76 77 /* AIN2_MODE - SODIMM 218 */ 78 ain2_mode_mux_ctrl: mux-controller-1 { 79 compatible = "gpio-mux"; 80 pinctrl-names = "default"; 81 pinctrl-0 = <&pinctrl_gpio6>; 82 #mux-control-cells = <0>; 83 mux-gpios = <&gpio1 8 GPIO_ACTIVE_HIGH>; 84 }; 85 86 ain2-voltage { 87 compatible = "io-channel-mux"; 88 channels = "ain2_voltage", ""; 89 io-channels = <&ain2_voltage_unmanaged 0>; 90 io-channel-names = "parent"; 91 mux-controls = <&ain2_mode_mux_ctrl>; 92 settle-time-us = <1000>; 93 }; 94 95 ain2-current { 96 compatible = "io-channel-mux"; 97 channels = "", "ain2_current"; 98 io-channels = <&ain2_current_unmanaged>; 99 io-channel-names = "parent"; 100 mux-controls = <&ain2_mode_mux_ctrl>; 101 settle-time-us = <1000>; 102 }; 103 104 leds { 105 compatible = "gpio-leds"; 106 pinctrl-names = "default"; 107 pinctrl-0 = <&pinctrl_ivy_leds>; 108 109 /* D7 Blue - SODIMM 30 - LEDs.GPIO1 */ 110 led-0 { 111 color = <LED_COLOR_ID_BLUE>; 112 default-state = "off"; 113 function = LED_FUNCTION_STATUS; 114 function-enumerator = <1>; 115 gpios = <&gpio3 25 GPIO_ACTIVE_HIGH>; 116 }; 117 118 /* D7 Green - SODIMM 32 - LEDs.GPIO2 */ 119 led-1 { 120 color = <LED_COLOR_ID_GREEN>; 121 default-state = "off"; 122 function = LED_FUNCTION_STATUS; 123 function-enumerator = <1>; 124 gpios = <&gpio3 22 GPIO_ACTIVE_HIGH>; 125 }; 126 127 /* D7 Red - SODIMM 34 - LEDs.GPIO3 */ 128 led-2 { 129 color = <LED_COLOR_ID_RED>; 130 default-state = "off"; 131 function = LED_FUNCTION_STATUS; 132 function-enumerator = <1>; 133 gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>; 134 }; 135 136 /* D8 Blue - SODIMM 36 - LEDs.GPIO4 */ 137 led-3 { 138 color = <LED_COLOR_ID_BLUE>; 139 default-state = "off"; 140 function = LED_FUNCTION_STATUS; 141 function-enumerator = <2>; 142 gpios = <&gpio4 2 GPIO_ACTIVE_HIGH>; 143 }; 144 145 /* D8 Green - SODIMM 54 - LEDs.GPIO5 */ 146 led-4 { 147 color = <LED_COLOR_ID_GREEN>; 148 default-state = "off"; 149 function = LED_FUNCTION_STATUS; 150 function-enumerator = <2>; 151 gpios = <&gpio3 1 GPIO_ACTIVE_HIGH>; 152 }; 153 154 /* D8 Red - SODIMM 44 - LEDs.GPIO6 */ 155 led-5 { 156 color = <LED_COLOR_ID_RED>; 157 default-state = "off"; 158 function = LED_FUNCTION_STATUS; 159 function-enumerator = <2>; 160 gpios = <&gpio4 31 GPIO_ACTIVE_HIGH>; 161 }; 162 163 /* D9 Blue - SODIMM 46 - LEDs.GPIO7 */ 164 led-6 { 165 color = <LED_COLOR_ID_BLUE>; 166 default-state = "off"; 167 function = LED_FUNCTION_STATUS; 168 function-enumerator = <3>; 169 gpios = <&gpio5 01 GPIO_ACTIVE_HIGH>; 170 }; 171 172 /* D9 Red - SODIMM 48 - LEDs.GPIO8 */ 173 led-7 { 174 color = <LED_COLOR_ID_RED>; 175 default-state = "off"; 176 function = LED_FUNCTION_STATUS; 177 function-enumerator = <3>; 178 gpios = <&gpio4 30 GPIO_ACTIVE_HIGH>; 179 }; 180 }; 181 182 reg_3v2_ain1: regulator-3v2-ain1 { 183 compatible = "regulator-fixed"; 184 regulator-max-microvolt = <3200000>; 185 regulator-min-microvolt = <3200000>; 186 regulator-name = "+3V2_AIN1"; 187 }; 188 189 reg_3v2_ain2: regulator-3v2-ain2 { 190 compatible = "regulator-fixed"; 191 regulator-max-microvolt = <3200000>; 192 regulator-min-microvolt = <3200000>; 193 regulator-name = "+3V2_AIN2"; 194 }; 195 196 /* Ivy Power Supply Input Voltage */ 197 ivy-input-voltage { 198 compatible = "voltage-divider"; 199 /* Verdin ADC_1 */ 200 io-channels = <&verdin_som_adc 7>; 201 full-ohms = <204700>; /* 200k + 4.7k */ 202 output-ohms = <4700>; 203 }; 204 205 ivy-5v-voltage { 206 compatible = "voltage-divider"; 207 /* Verdin ADC_2 */ 208 io-channels = <&verdin_som_adc 6>; 209 full-ohms = <39000>; /* 27k + 12k */ 210 output-ohms = <12000>; 211 }; 212 213 ivy-3v3-voltage { 214 compatible = "voltage-divider"; 215 /* Verdin ADC_3 */ 216 io-channels = <&verdin_som_adc 5>; 217 full-ohms = <54000>; /* 27k + 27k */ 218 output-ohms = <27000>; 219 }; 220 221 ivy-1v8-voltage { 222 compatible = "voltage-divider"; 223 /* Verdin ADC_4 */ 224 io-channels = <&verdin_som_adc 4>; 225 full-ohms = <39000>; /* 12k + 27k */ 226 output-ohms = <27000>; 227 }; 228}; 229 230/* Verdin SPI_1 */ 231&ecspi1 { 232 pinctrl-0 = <&pinctrl_ecspi1>, 233 <&pinctrl_gpio1>, 234 <&pinctrl_gpio4>; 235 cs-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>, 236 <&gpio1 0 GPIO_ACTIVE_LOW>, 237 <&gpio1 6 GPIO_ACTIVE_LOW>; 238 status = "okay"; 239 240 tpm@1 { 241 compatible = "infineon,slb9670", "tcg,tpm_tis-spi"; 242 reg = <1>; 243 spi-max-frequency = <18500000>; 244 }; 245 246 fram@2 { 247 compatible = "fujitsu,mb85rs256", "atmel,at25"; 248 reg = <2>; 249 address-width = <16>; 250 size = <32768>; 251 spi-max-frequency = <33000000>; 252 pagesize = <1>; 253 }; 254}; 255 256/* EEPROM on Ivy */ 257&eeprom_carrier_board { 258 status = "okay"; 259}; 260 261/* Verdin ETH_1 */ 262&eqos { 263 status = "okay"; 264}; 265 266/* Verdin ETH_2 */ 267&fec { 268 phy-handle = <ðphy2>; 269 phy-mode = "rgmii-id"; 270 status = "okay"; 271}; 272 273&verdin_eth2_mdio { 274 ethphy2: ethernet-phy@2 { 275 reg = <2>; 276 interrupt-parent = <&gpio4>; 277 interrupts = <18 IRQ_TYPE_LEVEL_LOW>; 278 ti,rx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>; 279 ti,tx-internal-delay = <DP83867_RGMIIDCTL_2_00_NS>; 280 }; 281}; 282 283/* Verdin CAN_1 */ 284&flexcan1 { 285 status = "okay"; 286}; 287 288/* Verdin CAN_2 */ 289&flexcan2 { 290 status = "okay"; 291}; 292 293&gpio1 { 294 gpio-line-names = 295 "", /* 0 */ 296 "GPIO2", /* Verdin GPIO_2 - SODIMM 208 */ 297 "", 298 "", 299 "", 300 "GPIO3", /* Verdin GPIO_3 - SODIMM 210 */ 301 "", 302 "", 303 "", 304 "", 305 "", 306 "", /* 10 */ 307 "", 308 "", 309 "", 310 "", 311 "", 312 "", 313 "", 314 "", 315 "", 316 "", /* 20 */ 317 "", 318 "", 319 "", 320 "", 321 "", 322 "", 323 "", 324 "", 325 ""; 326}; 327 328&gpio3 { 329 gpio-line-names = 330 "", /* 0 */ 331 "", 332 "", 333 "", 334 "", 335 "", 336 "DIG_1", /* SODIMM 56 */ 337 "DIG_2", /* SODIMM 58 */ 338 "REL1", /* SODIMM 60 */ 339 "REL2", /* SODIMM 62 */ 340 "", /* 10 */ 341 "", 342 "", 343 "", 344 "REL4", /* SODIMM 66 */ 345 "", 346 "REL3", /* SODIMM 64 */ 347 "", 348 "", 349 "", 350 "", /* 20 */ 351 "", 352 "", 353 "", 354 "", 355 "", 356 "", 357 "", 358 "", 359 ""; 360}; 361 362/* Temperature sensor on Ivy */ 363&hwmon_temp { 364 compatible = "ti,tmp1075"; 365 status = "okay"; 366}; 367 368/* Verdin I2C_4 CSI */ 369&i2c3 { 370 status = "okay"; 371 372 ivy_adc1: adc@40 { 373 compatible = "ti,ads1119"; 374 reg = <0x40>; 375 pinctrl-names = "default"; 376 pinctrl-0 = <&pinctrl_gpio7>; 377 interrupt-parent = <&gpio4>; 378 interrupts = <3 IRQ_TYPE_EDGE_FALLING>; 379 avdd-supply = <®_3v2_ain1>; 380 dvdd-supply = <®_3v2_ain1>; 381 vref-supply = <®_3v2_ain1>; 382 #address-cells = <1>; 383 #io-channel-cells = <1>; 384 #size-cells = <0>; 385 386 /* AIN1 0-33V Voltage Input */ 387 channel@0 { 388 reg = <0>; 389 diff-channels = <0 1>; 390 }; 391 392 /* AIN1 0-20mA Current Input */ 393 channel@1 { 394 reg = <1>; 395 diff-channels = <2 3>; 396 }; 397 }; 398 399 ivy_adc2: adc@41 { 400 compatible = "ti,ads1119"; 401 reg = <0x41>; 402 pinctrl-names = "default"; 403 pinctrl-0 = <&pinctrl_gpio8>; 404 interrupt-parent = <&gpio4>; 405 interrupts = <1 IRQ_TYPE_EDGE_FALLING>; 406 avdd-supply = <®_3v2_ain2>; 407 dvdd-supply = <®_3v2_ain2>; 408 vref-supply = <®_3v2_ain2>; 409 #address-cells = <1>; 410 #io-channel-cells = <1>; 411 #size-cells = <0>; 412 413 /* AIN2 0-33V Voltage Input */ 414 channel@0 { 415 reg = <0>; 416 diff-channels = <0 1>; 417 }; 418 419 /* AIN2 0-20mA Current Input */ 420 channel@1 { 421 reg = <1>; 422 diff-channels = <2 3>; 423 }; 424 }; 425}; 426 427/* Verdin I2C_1 */ 428&i2c4 { 429 status = "okay"; 430}; 431 432/* Verdin PCIE_1 */ 433&pcie { 434 status = "okay"; 435}; 436 437&pcie_phy { 438 status = "okay"; 439}; 440 441/* Verdin UART_1 */ 442&uart1 { 443 status = "okay"; 444}; 445 446/* Verdin UART_2 */ 447&uart2 { 448 linux,rs485-enabled-at-boot-time; 449 rs485-rx-during-tx; 450 status = "okay"; 451}; 452 453/* Verdin UART_3 */ 454&uart3 { 455 status = "okay"; 456}; 457 458/* Verdin USB_1 */ 459&usb3_0 { 460 status = "okay"; 461}; 462 463&usb3_phy0 { 464 status = "okay"; 465}; 466 467/* Verdin USB_2 */ 468&usb3_1 { 469 status = "okay"; 470}; 471 472&usb3_phy1 { 473 status = "okay"; 474}; 475 476/* Verdin SD_1 */ 477&usdhc2 { 478 status = "okay"; 479}; 480 481&iomuxc { 482 483 pinctrl-names = "default"; 484 pinctrl-0 = <&pinctrl_gpio2>, <&pinctrl_gpio3>, 485 <&pinctrl_ivy_dig_inputs>, <&pinctrl_ivy_relays>; 486 487 pinctrl_ivy_dig_inputs: ivydiginputsgrp { 488 fsl,pins = 489 <MX8MP_IOMUXC_NAND_DATA00__GPIO3_IO06 0x96>, /* SODIMM 56 */ 490 <MX8MP_IOMUXC_NAND_DATA01__GPIO3_IO07 0x96>; /* SODIMM 58 */ 491 }; 492 493 pinctrl_ivy_leds: ivyledsgrp { 494 fsl,pins = 495 <MX8MP_IOMUXC_SAI5_MCLK__GPIO3_IO25 0x16>, /* SODIMM 30 */ 496 <MX8MP_IOMUXC_SAI5_RXD1__GPIO3_IO22 0x16>, /* SODIMM 32 */ 497 <MX8MP_IOMUXC_SAI5_RXFS__GPIO3_IO19 0x16>, /* SODIMM 34 */ 498 <MX8MP_IOMUXC_SAI1_RXD0__GPIO4_IO02 0x16>, /* SODIMM 36 */ 499 <MX8MP_IOMUXC_SAI3_TXFS__GPIO4_IO31 0x16>, /* SODIMM 44 */ 500 <MX8MP_IOMUXC_SAI3_TXD__GPIO5_IO01 0x16>, /* SODIMM 46 */ 501 <MX8MP_IOMUXC_SAI3_RXD__GPIO4_IO30 0x16>, /* SODIMM 48 */ 502 <MX8MP_IOMUXC_NAND_CE0_B__GPIO3_IO01 0x16>; /* SODIMM 54 */ 503 }; 504 505 pinctrl_ivy_relays: ivyrelaysgrp { 506 fsl,pins = 507 <MX8MP_IOMUXC_NAND_DATA02__GPIO3_IO08 0x16>, /* SODIMM 60 */ 508 <MX8MP_IOMUXC_NAND_DATA03__GPIO3_IO09 0x16>, /* SODIMM 62 */ 509 <MX8MP_IOMUXC_NAND_READY_B__GPIO3_IO16 0x16>, /* SODIMM 64 */ 510 <MX8MP_IOMUXC_NAND_DQS__GPIO3_IO14 0x16>; /* SODIMM 66 */ 511 }; 512}; 513