| // SPDX-License-Identifier: (GPL-2.0+ OR MIT) |
| /* |
| * Copyright (C) 2024 Marek Vasut <marex@denx.de> |
| * |
| * DHCOM iMX8MP variant: |
| * DHCM-iMX8ML8-C160-R204-F1638-SPI16-E2-CAN2-RTC-I-01D2 |
| * DHCOM PCB number: 660-100 or newer |
| * DRC02 PCB number: 568-100 or newer |
| */ |
| |
| /dts-v1/; |
| |
| #include <dt-bindings/leds/common.h> |
| #include <dt-bindings/phy/phy-imx8-pcie.h> |
| #include "imx8mp-dhcom-som.dtsi" |
| |
| / { |
| model = "DH electronics i.MX8M Plus DHCOM on DRC02"; |
| compatible = "dh,imx8mp-dhcom-drc02", "dh,imx8mp-dhcom-som", |
| "fsl,imx8mp"; |
| |
| chosen { |
| stdout-path = &uart1; |
| }; |
| }; |
| |
| &eqos { /* First ethernet */ |
| pinctrl-0 = <&pinctrl_eqos_rmii>; |
| phy-handle = <ðphy0f>; |
| phy-mode = "rmii"; |
| |
| assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_266M>, |
| <&clk IMX8MP_SYS_PLL2_100M>, |
| <&clk IMX8MP_SYS_PLL2_50M>; |
| assigned-clock-rates = <0>, <100000000>, <50000000>; |
| }; |
| |
| ðphy0g { /* Micrel KSZ9131RNXI */ |
| status = "disabled"; |
| }; |
| |
| ðphy0f { /* SMSC LAN8740Ai */ |
| status = "okay"; |
| }; |
| |
| &fec { /* Second ethernet */ |
| pinctrl-0 = <&pinctrl_fec_rmii>; |
| phy-handle = <ðphy1f>; |
| phy-mode = "rmii"; |
| status = "okay"; |
| |
| assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_266M>, |
| <&clk IMX8MP_SYS_PLL2_100M>, |
| <&clk IMX8MP_SYS_PLL2_50M>, |
| <&clk IMX8MP_SYS_PLL2_50M>; |
| assigned-clock-rates = <0>, <100000000>, <50000000>, <0>; |
| }; |
| |
| ðphy1f { /* SMSC LAN8740Ai */ |
| status = "okay"; |
| }; |
| |
| &flexcan1 { |
| status = "okay"; |
| }; |
| |
| &flexcan2 { |
| status = "okay"; |
| }; |
| |
| &gpio1 { |
| gpio-line-names = |
| "DRC02-In1", "", "", "", "", "DHCOM-I", "DRC02-HW2", "DRC02-HW0", |
| "DHCOM-B", "DHCOM-A", "", "DHCOM-H", "", "", "", "", |
| "", "", "", "", "", "", "", "", |
| "", "", "", "", "", "", "", ""; |
| |
| /* |
| * NOTE: On DRC02, the RS485_RX_En is controlled by a separate |
| * GPIO line, however the i.MX8 UART driver assumes RX happens |
| * during TX anyway and that it only controls drive enable DE |
| * line. Hence, the RX is always enabled here. |
| */ |
| rs485-rx-en-hog { |
| gpio-hog; |
| gpios = <13 0>; /* GPIO Q */ |
| line-name = "rs485-rx-en"; |
| output-low; |
| }; |
| }; |
| |
| &gpio2 { |
| gpio-line-names = |
| "", "", "", "", "", "", "", "", |
| "DHCOM-O", "DHCOM-N", "", "SOM-HW1", "", "", "", "", |
| "", "", "", "", "DRC02-In2", "", "", "", |
| "", "", "", "", "", "", "", ""; |
| }; |
| |
| &gpio3 { |
| gpio-line-names = |
| "", "", "", "", "", "", "", "", |
| "", "", "", "", "", "", "SOM-HW0", "", |
| "", "", "", "", "", "", "SOM-MEM0", "SOM-MEM1", |
| "SOM-MEM2", "SOM-HW2", "", "", "", "", "", ""; |
| }; |
| |
| &gpio4 { |
| gpio-line-names = |
| "", "", "", "", "", "", "", "", |
| "", "", "", "", "", "", "", "", |
| "", "", "", "SOM-HW1", "", "", "", "", |
| "", "", "", "DRC02-Out2", "", "", "", ""; |
| }; |
| |
| &gpio5 { |
| gpio-line-names = |
| "", "", "DHCOM-C", "", "", "", "", "", |
| "", "", "", "", "", "", "", "", |
| "", "", "", "", "", "", "DHCOM-E", "DRC02-Out1", |
| "", "", "", "", "", "", "", ""; |
| }; |
| |
| &i2c3 { |
| /* Resistive touch controller not populated on this one SoM variant. */ |
| touchscreen@49 { |
| status = "disabled"; |
| }; |
| }; |
| |
| &pcie_phy { |
| status = "disabled"; |
| }; |
| |
| &pcie { |
| status = "disabled"; |
| }; |
| |
| /* Console UART */ |
| &pinctrl_uart1 { |
| fsl,pins = < |
| /* No pull-ups on DRC02, enable in-SoC pull-ups */ |
| MX8MP_IOMUXC_SAI2_RXC__UART1_DCE_RX 0x149 |
| MX8MP_IOMUXC_SAI2_RXFS__UART1_DCE_TX 0x149 |
| >; |
| }; |
| |
| &pinctrl_uart3 { |
| fsl,pins = < |
| /* No pull-ups on DRC02, enable in-SoC pull-ups */ |
| MX8MP_IOMUXC_ECSPI1_SCLK__UART3_DCE_RX 0x149 |
| MX8MP_IOMUXC_ECSPI1_MOSI__UART3_DCE_TX 0x149 |
| >; |
| }; |
| |
| &uart1 { |
| /* |
| * Due to the use of CAN2 the signals for CAN2 Tx and Rx are routed to |
| * DHCOM UART1 RTS/CTS pins. Therefore this UART have to use DHCOM GPIOs |
| * for RTS/CTS. So configure DHCOM GPIO I as RTS and GPIO M as CTS. |
| */ |
| /delete-property/ uart-has-rtscts; |
| cts-gpios = <&gpio5 5 GPIO_ACTIVE_HIGH>; /* GPIO M */ |
| pinctrl-0 = <&pinctrl_uart1 &pinctrl_dhcom_i &pinctrl_dhcom_m>; |
| pinctrl-names = "default"; |
| rts-gpios = <&gpio1 5 GPIO_ACTIVE_HIGH>; /* GPIO I */ |
| }; |
| |
| &uart3 { |
| /* |
| * On DRC02 this UART is used as RS485 interface and RS485_TX_En is |
| * controlled by DHCOM GPIO P. So remove RTS/CTS pins and the property |
| * uart-has-rtscts from this UART and add the DHCOM GPIO P pin via |
| * rts-gpios. The RS485_RX_En is controlled by DHCOM GPIO Q, see gpio1 |
| * node above. |
| */ |
| /delete-property/ uart-has-rtscts; |
| linux,rs485-enabled-at-boot-time; |
| pinctrl-0 = <&pinctrl_uart3 &pinctrl_dhcom_p &pinctrl_dhcom_q>; |
| pinctrl-names = "default"; |
| rts-gpios = <&gpio2 10 GPIO_ACTIVE_HIGH>; /* GPIO P */ |
| }; |
| |
| /* No WiFi/BT chipset on this SoM variant. */ |
| &uart2 { |
| bluetooth { |
| status = "disabled"; |
| }; |
| }; |
| |
| /* USB_OTG port is not routed out on DRC02. */ |
| &usb3_0 { |
| status = "disabled"; |
| }; |
| |
| &usb_dwc3_0 { |
| status = "disabled"; |
| }; |
| |
| /* USB_HOST port has USB Hub connected to it, PWR/OC pins are unused */ |
| &usb3_1 { |
| fsl,disable-port-power-control; |
| fsl,permanently-attached; |
| }; |
| |
| &usb_dwc3_1 { |
| dr_mode = "host"; |
| maximum-speed = "high-speed"; |
| }; |
| |
| /* No WiFi/BT chipset on this SoM variant. */ |
| &usdhc1 { |
| status = "disabled"; |
| }; |
| |
| &iomuxc { |
| /* |
| * GPIO I is connected to UART1_RTS |
| * GPIO M is connected to UART1_CTS |
| * GPIO P is connected to RS485_TX_En |
| * GPIO Q is connected to RS485_RX_En |
| */ |
| pinctrl-0 = <&pinctrl_hog_base |
| &pinctrl_dhcom_a &pinctrl_dhcom_b &pinctrl_dhcom_c |
| &pinctrl_dhcom_d &pinctrl_dhcom_e &pinctrl_dhcom_f |
| &pinctrl_dhcom_g &pinctrl_dhcom_h &pinctrl_dhcom_j |
| &pinctrl_dhcom_k &pinctrl_dhcom_l &pinctrl_dhcom_n |
| &pinctrl_dhcom_o &pinctrl_dhcom_r &pinctrl_dhcom_s |
| &pinctrl_dhcom_int>; |
| }; |