1*90bbe88eSMax Krummenacher// SPDX-License-Identifier: GPL-2.0-or-later OR MIT 2*90bbe88eSMax Krummenacher/* 3*90bbe88eSMax Krummenacher * Copyright (C) 2025 Toradex 4*90bbe88eSMax Krummenacher * 5*90bbe88eSMax Krummenacher * https://www.toradex.com/computer-on-modules/smarc-arm-family/nxp-imx95 6*90bbe88eSMax Krummenacher * https://www.toradex.com/products/carrier-board/smarc-development-board-kit 7*90bbe88eSMax Krummenacher */ 8*90bbe88eSMax Krummenacher 9*90bbe88eSMax Krummenacher/dts-v1/; 10*90bbe88eSMax Krummenacher 11*90bbe88eSMax Krummenacher#include <dt-bindings/pwm/pwm.h> 12*90bbe88eSMax Krummenacher#include "imx95-toradex-smarc.dtsi" 13*90bbe88eSMax Krummenacher 14*90bbe88eSMax Krummenacher/ { 15*90bbe88eSMax Krummenacher model = "Toradex SMARC iMX95 on Toradex SMARC Development Board"; 16*90bbe88eSMax Krummenacher compatible = "toradex,smarc-imx95-dev", 17*90bbe88eSMax Krummenacher "toradex,smarc-imx95", 18*90bbe88eSMax Krummenacher "fsl,imx95"; 19*90bbe88eSMax Krummenacher 20*90bbe88eSMax Krummenacher reg_carrier_1p8v: regulator-carrier-1p8v { 21*90bbe88eSMax Krummenacher compatible = "regulator-fixed"; 22*90bbe88eSMax Krummenacher regulator-max-microvolt = <1800000>; 23*90bbe88eSMax Krummenacher regulator-min-microvolt = <1800000>; 24*90bbe88eSMax Krummenacher regulator-name = "On-carrier 1V8"; 25*90bbe88eSMax Krummenacher }; 26*90bbe88eSMax Krummenacher 27*90bbe88eSMax Krummenacher sound { 28*90bbe88eSMax Krummenacher compatible = "simple-audio-card"; 29*90bbe88eSMax Krummenacher simple-audio-card,bitclock-master = <&codec_dai>; 30*90bbe88eSMax Krummenacher simple-audio-card,format = "i2s"; 31*90bbe88eSMax Krummenacher simple-audio-card,frame-master = <&codec_dai>; 32*90bbe88eSMax Krummenacher simple-audio-card,mclk-fs = <256>; 33*90bbe88eSMax Krummenacher simple-audio-card,name = "tdx-smarc-wm8904"; 34*90bbe88eSMax Krummenacher simple-audio-card,routing = 35*90bbe88eSMax Krummenacher "Headphone Jack", "HPOUTL", 36*90bbe88eSMax Krummenacher "Headphone Jack", "HPOUTR", 37*90bbe88eSMax Krummenacher "IN2L", "Line In Jack", 38*90bbe88eSMax Krummenacher "IN2R", "Line In Jack", 39*90bbe88eSMax Krummenacher "Microphone Jack", "MICBIAS", 40*90bbe88eSMax Krummenacher "IN1L", "Microphone Jack"; 41*90bbe88eSMax Krummenacher simple-audio-card,widgets = 42*90bbe88eSMax Krummenacher "Microphone", "Microphone Jack", 43*90bbe88eSMax Krummenacher "Headphone", "Headphone Jack", 44*90bbe88eSMax Krummenacher "Line", "Line In Jack"; 45*90bbe88eSMax Krummenacher 46*90bbe88eSMax Krummenacher codec_dai: simple-audio-card,codec { 47*90bbe88eSMax Krummenacher clocks = <&scmi_clk IMX95_CLK_SAI3>; 48*90bbe88eSMax Krummenacher sound-dai = <&wm8904_1a>; 49*90bbe88eSMax Krummenacher }; 50*90bbe88eSMax Krummenacher 51*90bbe88eSMax Krummenacher simple-audio-card,cpu { 52*90bbe88eSMax Krummenacher sound-dai = <&sai3>; 53*90bbe88eSMax Krummenacher }; 54*90bbe88eSMax Krummenacher }; 55*90bbe88eSMax Krummenacher}; 56*90bbe88eSMax Krummenacher 57*90bbe88eSMax Krummenacher/* SMARC GBE0 */ 58*90bbe88eSMax Krummenacher&enetc_port0 { 59*90bbe88eSMax Krummenacher status = "okay"; 60*90bbe88eSMax Krummenacher}; 61*90bbe88eSMax Krummenacher 62*90bbe88eSMax Krummenacher/* SMARC GBE1 */ 63*90bbe88eSMax Krummenacher&enetc_port1 { 64*90bbe88eSMax Krummenacher status = "okay"; 65*90bbe88eSMax Krummenacher}; 66*90bbe88eSMax Krummenacher 67*90bbe88eSMax Krummenacher/* SMARC CAN0 */ 68*90bbe88eSMax Krummenacher&flexcan1 { 69*90bbe88eSMax Krummenacher status = "okay"; 70*90bbe88eSMax Krummenacher}; 71*90bbe88eSMax Krummenacher 72*90bbe88eSMax Krummenacher/* SMARC CAN1 */ 73*90bbe88eSMax Krummenacher&flexcan2 { 74*90bbe88eSMax Krummenacher status = "okay"; 75*90bbe88eSMax Krummenacher}; 76*90bbe88eSMax Krummenacher 77*90bbe88eSMax Krummenacher&gpio2 { 78*90bbe88eSMax Krummenacher pinctrl-names = "default"; 79*90bbe88eSMax Krummenacher pinctrl-0 = <&pinctrl_gpio12>, <&pinctrl_gpio13>; 80*90bbe88eSMax Krummenacher}; 81*90bbe88eSMax Krummenacher 82*90bbe88eSMax Krummenacher&gpio4 { 83*90bbe88eSMax Krummenacher pinctrl-names = "default"; 84*90bbe88eSMax Krummenacher pinctrl-0 = <&pinctrl_gpio10>, <&pinctrl_gpio11>; 85*90bbe88eSMax Krummenacher}; 86*90bbe88eSMax Krummenacher 87*90bbe88eSMax Krummenacher&gpio5 { 88*90bbe88eSMax Krummenacher pinctrl-names = "default"; 89*90bbe88eSMax Krummenacher pinctrl-0 = <&pinctrl_gpio2>, 90*90bbe88eSMax Krummenacher <&pinctrl_gpio3>, 91*90bbe88eSMax Krummenacher <&pinctrl_gpio4>, 92*90bbe88eSMax Krummenacher <&pinctrl_gpio6>, 93*90bbe88eSMax Krummenacher <&pinctrl_gpio8>, 94*90bbe88eSMax Krummenacher <&pinctrl_gpio9>; 95*90bbe88eSMax Krummenacher}; 96*90bbe88eSMax Krummenacher 97*90bbe88eSMax Krummenacher/* SMARC I2C_CAM0 */ 98*90bbe88eSMax Krummenacher&i2c_cam0 { 99*90bbe88eSMax Krummenacher status = "okay"; 100*90bbe88eSMax Krummenacher}; 101*90bbe88eSMax Krummenacher 102*90bbe88eSMax Krummenacher/* SMARC I2C_CAM1 */ 103*90bbe88eSMax Krummenacher&i2c_cam1 { 104*90bbe88eSMax Krummenacher status = "okay"; 105*90bbe88eSMax Krummenacher}; 106*90bbe88eSMax Krummenacher 107*90bbe88eSMax Krummenacher/* SMARC I2C_GP */ 108*90bbe88eSMax Krummenacher&lpi2c2 { 109*90bbe88eSMax Krummenacher status = "okay"; 110*90bbe88eSMax Krummenacher 111*90bbe88eSMax Krummenacher wm8904_1a: audio-codec@1a { 112*90bbe88eSMax Krummenacher compatible = "wlf,wm8904"; 113*90bbe88eSMax Krummenacher reg = <0x1a>; 114*90bbe88eSMax Krummenacher pinctrl-names = "default"; 115*90bbe88eSMax Krummenacher pinctrl-0 = <&pinctrl_sai3>, <&pinctrl_sai3_mclk>; 116*90bbe88eSMax Krummenacher #sound-dai-cells = <0>; 117*90bbe88eSMax Krummenacher clocks = <&scmi_clk IMX95_CLK_SAI3>; 118*90bbe88eSMax Krummenacher clock-names = "mclk"; 119*90bbe88eSMax Krummenacher AVDD-supply = <®_carrier_1p8v>; 120*90bbe88eSMax Krummenacher CPVDD-supply = <®_carrier_1p8v>; 121*90bbe88eSMax Krummenacher DBVDD-supply = <®_carrier_1p8v>; 122*90bbe88eSMax Krummenacher DCVDD-supply = <®_carrier_1p8v>; 123*90bbe88eSMax Krummenacher MICVDD-supply = <®_carrier_1p8v>; 124*90bbe88eSMax Krummenacher }; 125*90bbe88eSMax Krummenacher 126*90bbe88eSMax Krummenacher temperature-sensor@4f { 127*90bbe88eSMax Krummenacher compatible = "ti,tmp1075"; 128*90bbe88eSMax Krummenacher reg = <0x4f>; 129*90bbe88eSMax Krummenacher }; 130*90bbe88eSMax Krummenacher 131*90bbe88eSMax Krummenacher eeprom@57 { 132*90bbe88eSMax Krummenacher compatible = "st,24c02", "atmel,24c02"; 133*90bbe88eSMax Krummenacher reg = <0x57>; 134*90bbe88eSMax Krummenacher pagesize = <16>; 135*90bbe88eSMax Krummenacher }; 136*90bbe88eSMax Krummenacher 137*90bbe88eSMax Krummenacher}; 138*90bbe88eSMax Krummenacher 139*90bbe88eSMax Krummenacher/* SMARC I2C_PM */ 140*90bbe88eSMax Krummenacher&lpi2c3 { 141*90bbe88eSMax Krummenacher clock-frequency = <100000>; 142*90bbe88eSMax Krummenacher status = "okay"; 143*90bbe88eSMax Krummenacher 144*90bbe88eSMax Krummenacher fan_controller: fan@18 { 145*90bbe88eSMax Krummenacher compatible = "ti,amc6821"; 146*90bbe88eSMax Krummenacher reg = <0x18>; 147*90bbe88eSMax Krummenacher #pwm-cells = <2>; 148*90bbe88eSMax Krummenacher 149*90bbe88eSMax Krummenacher fan { 150*90bbe88eSMax Krummenacher cooling-levels = <255>; 151*90bbe88eSMax Krummenacher pwms = <&fan_controller 40000 PWM_POLARITY_INVERTED>; 152*90bbe88eSMax Krummenacher }; 153*90bbe88eSMax Krummenacher }; 154*90bbe88eSMax Krummenacher 155*90bbe88eSMax Krummenacher /* Current measurement into module VCC */ 156*90bbe88eSMax Krummenacher hwmon@40 { 157*90bbe88eSMax Krummenacher compatible = "ti,ina226"; 158*90bbe88eSMax Krummenacher reg = <0x40>; 159*90bbe88eSMax Krummenacher shunt-resistor = <5000>; 160*90bbe88eSMax Krummenacher }; 161*90bbe88eSMax Krummenacher}; 162*90bbe88eSMax Krummenacher 163*90bbe88eSMax Krummenacher/* SMARC I2C_LCD */ 164*90bbe88eSMax Krummenacher&lpi2c5 { 165*90bbe88eSMax Krummenacher status = "okay"; 166*90bbe88eSMax Krummenacher 167*90bbe88eSMax Krummenacher i2c-mux@70 { 168*90bbe88eSMax Krummenacher compatible = "nxp,pca9543"; 169*90bbe88eSMax Krummenacher reg = <0x70>; 170*90bbe88eSMax Krummenacher i2c-mux-idle-disconnect; 171*90bbe88eSMax Krummenacher #address-cells = <1>; 172*90bbe88eSMax Krummenacher #size-cells = <0>; 173*90bbe88eSMax Krummenacher 174*90bbe88eSMax Krummenacher /* I2C on DSI Connector Pins 4/6 */ 175*90bbe88eSMax Krummenacher i2c_dsi_0: i2c@0 { 176*90bbe88eSMax Krummenacher reg = <0>; 177*90bbe88eSMax Krummenacher #address-cells = <1>; 178*90bbe88eSMax Krummenacher #size-cells = <0>; 179*90bbe88eSMax Krummenacher }; 180*90bbe88eSMax Krummenacher 181*90bbe88eSMax Krummenacher /* I2C on DSI Connector Pins 52/54 */ 182*90bbe88eSMax Krummenacher i2c_dsi_1: i2c@1 { 183*90bbe88eSMax Krummenacher reg = <1>; 184*90bbe88eSMax Krummenacher #address-cells = <1>; 185*90bbe88eSMax Krummenacher #size-cells = <0>; 186*90bbe88eSMax Krummenacher }; 187*90bbe88eSMax Krummenacher }; 188*90bbe88eSMax Krummenacher}; 189*90bbe88eSMax Krummenacher 190*90bbe88eSMax Krummenacher/* SMARC SPI0 */ 191*90bbe88eSMax Krummenacher&lpspi6 { 192*90bbe88eSMax Krummenacher status = "okay"; 193*90bbe88eSMax Krummenacher}; 194*90bbe88eSMax Krummenacher 195*90bbe88eSMax Krummenacher/* SMARC SER1, used as the Linux Console */ 196*90bbe88eSMax Krummenacher&lpuart1 { 197*90bbe88eSMax Krummenacher status = "okay"; 198*90bbe88eSMax Krummenacher}; 199*90bbe88eSMax Krummenacher 200*90bbe88eSMax Krummenacher/* SMARC SER0, RS485 */ 201*90bbe88eSMax Krummenacher&lpuart2 { 202*90bbe88eSMax Krummenacher linux,rs485-enabled-at-boot-time; 203*90bbe88eSMax Krummenacher rs485-rts-active-low; 204*90bbe88eSMax Krummenacher rs485-rx-during-tx; 205*90bbe88eSMax Krummenacher status = "okay"; 206*90bbe88eSMax Krummenacher}; 207*90bbe88eSMax Krummenacher 208*90bbe88eSMax Krummenacher/* SMARC SER3, RS232 */ 209*90bbe88eSMax Krummenacher&lpuart3 { 210*90bbe88eSMax Krummenacher status = "okay"; 211*90bbe88eSMax Krummenacher}; 212*90bbe88eSMax Krummenacher 213*90bbe88eSMax Krummenacher/* SMARC MDIO, shared between all ethernet ports */ 214*90bbe88eSMax Krummenacher&netc_emdio { 215*90bbe88eSMax Krummenacher status = "okay"; 216*90bbe88eSMax Krummenacher 217*90bbe88eSMax Krummenacher ethphy3: ethernet-phy@4 { 218*90bbe88eSMax Krummenacher reg = <4>; 219*90bbe88eSMax Krummenacher pinctrl-names = "default"; 220*90bbe88eSMax Krummenacher pinctrl-0 = <&pinctrl_gpio7>; 221*90bbe88eSMax Krummenacher interrupt-parent = <&gpio5>; 222*90bbe88eSMax Krummenacher interrupts = <9 IRQ_TYPE_LEVEL_LOW>; 223*90bbe88eSMax Krummenacher }; 224*90bbe88eSMax Krummenacher}; 225*90bbe88eSMax Krummenacher 226*90bbe88eSMax Krummenacher/* SMARC PCIE_A / M2 Key B */ 227*90bbe88eSMax Krummenacher&pcie0 { 228*90bbe88eSMax Krummenacher status = "okay"; 229*90bbe88eSMax Krummenacher}; 230*90bbe88eSMax Krummenacher 231*90bbe88eSMax Krummenacher/* SMARC PCIE_B / M2 Key E */ 232*90bbe88eSMax Krummenacher&pcie1 { 233*90bbe88eSMax Krummenacher status = "okay"; 234*90bbe88eSMax Krummenacher}; 235*90bbe88eSMax Krummenacher 236*90bbe88eSMax Krummenacher/* SMARC I2S0 */ 237*90bbe88eSMax Krummenacher&sai3 { 238*90bbe88eSMax Krummenacher status = "okay"; 239*90bbe88eSMax Krummenacher}; 240*90bbe88eSMax Krummenacher 241*90bbe88eSMax Krummenacher/* SMARC LCD0_BKLT_PWM */ 242*90bbe88eSMax Krummenacher&tpm3 { 243*90bbe88eSMax Krummenacher status = "okay"; 244*90bbe88eSMax Krummenacher}; 245*90bbe88eSMax Krummenacher 246*90bbe88eSMax Krummenacher/* SMARC LCD1_BKLT_PWM */ 247*90bbe88eSMax Krummenacher&tpm4 { 248*90bbe88eSMax Krummenacher status = "okay"; 249*90bbe88eSMax Krummenacher}; 250*90bbe88eSMax Krummenacher 251*90bbe88eSMax Krummenacher/* SMARC GPIO5 as PWM */ 252*90bbe88eSMax Krummenacher&tpm5 { 253*90bbe88eSMax Krummenacher status = "okay"; 254*90bbe88eSMax Krummenacher}; 255*90bbe88eSMax Krummenacher 256*90bbe88eSMax Krummenacher/* SMARC USB0 */ 257*90bbe88eSMax Krummenacher&usb2 { 258*90bbe88eSMax Krummenacher status = "okay"; 259*90bbe88eSMax Krummenacher}; 260*90bbe88eSMax Krummenacher 261*90bbe88eSMax Krummenacher/* SMARC USB1..4 */ 262*90bbe88eSMax Krummenacher&usb3 { 263*90bbe88eSMax Krummenacher status = "okay"; 264*90bbe88eSMax Krummenacher}; 265*90bbe88eSMax Krummenacher 266*90bbe88eSMax Krummenacher&usb3_dwc3 { 267*90bbe88eSMax Krummenacher status = "okay"; 268*90bbe88eSMax Krummenacher}; 269*90bbe88eSMax Krummenacher 270*90bbe88eSMax Krummenacher&usb3_phy { 271*90bbe88eSMax Krummenacher status = "okay"; 272*90bbe88eSMax Krummenacher}; 273*90bbe88eSMax Krummenacher 274*90bbe88eSMax Krummenacher/* SMARC SDIO */ 275*90bbe88eSMax Krummenacher&usdhc2 { 276*90bbe88eSMax Krummenacher status = "okay"; 277*90bbe88eSMax Krummenacher}; 278