162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Copyright (C) 2021 DH electronics GmbH
462306a36Sopenharmony_ci */
562306a36Sopenharmony_ci
662306a36Sopenharmony_ci/ {
762306a36Sopenharmony_ci	chosen {
862306a36Sopenharmony_ci		stdout-path = "serial0:115200n8";
962306a36Sopenharmony_ci	};
1062306a36Sopenharmony_ci};
1162306a36Sopenharmony_ci
1262306a36Sopenharmony_ci/*
1362306a36Sopenharmony_ci * Special SoM hardware required which uses the pins from micro SD card. The
1462306a36Sopenharmony_ci * pins SD3_DAT0 and SD3_DAT1 are muxed as can2 Tx and Rx. The signals for can2
1562306a36Sopenharmony_ci * Tx and Rx are routed to the DHCOM UART1 rts/cts pins. Therefore the micro SD
1662306a36Sopenharmony_ci * card must be disabled and the uart1 rts/cts must be output on other DHCOM
1762306a36Sopenharmony_ci * pins, see uart1 and usdhc3 node below.
1862306a36Sopenharmony_ci */
1962306a36Sopenharmony_ci&can2 {
2062306a36Sopenharmony_ci	status = "okay";
2162306a36Sopenharmony_ci};
2262306a36Sopenharmony_ci
2362306a36Sopenharmony_ci&gpio1 {
2462306a36Sopenharmony_ci	/*
2562306a36Sopenharmony_ci	 * NOTE: On DRC02, the RS485_RX_En is controlled by a separate
2662306a36Sopenharmony_ci	 * GPIO line, however the i.MX6 UART driver assumes RX happens
2762306a36Sopenharmony_ci	 * during TX anyway and that it only controls drive enable DE
2862306a36Sopenharmony_ci	 * line. Hence, the RX is always enabled here.
2962306a36Sopenharmony_ci	 */
3062306a36Sopenharmony_ci	rs485-rx-en-hog {
3162306a36Sopenharmony_ci		gpio-hog;
3262306a36Sopenharmony_ci		gpios = <18 0>; /* GPIO Q */
3362306a36Sopenharmony_ci		line-name = "rs485-rx-en";
3462306a36Sopenharmony_ci		output-low;
3562306a36Sopenharmony_ci	};
3662306a36Sopenharmony_ci};
3762306a36Sopenharmony_ci
3862306a36Sopenharmony_ci&gpio3 {
3962306a36Sopenharmony_ci	gpio-line-names =
4062306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
4162306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
4262306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
4362306a36Sopenharmony_ci		"", "", "", "DRC02-In1", "", "", "", "";
4462306a36Sopenharmony_ci};
4562306a36Sopenharmony_ci
4662306a36Sopenharmony_ci&gpio4 {
4762306a36Sopenharmony_ci	gpio-line-names =
4862306a36Sopenharmony_ci		"", "", "", "", "", "DHCOM-E", "DRC02-In2", "DHCOM-H",
4962306a36Sopenharmony_ci		"DHCOM-I", "DRC02-HW0", "", "", "", "", "", "",
5062306a36Sopenharmony_ci		"", "", "", "", "DRC02-Out1", "", "", "",
5162306a36Sopenharmony_ci		"", "", "", "", "", "", "", "";
5262306a36Sopenharmony_ci};
5362306a36Sopenharmony_ci
5462306a36Sopenharmony_ci&gpio6 {
5562306a36Sopenharmony_ci	gpio-line-names =
5662306a36Sopenharmony_ci		"", "", "", "DRC02-Out2", "", "", "SOM-HW1", "",
5762306a36Sopenharmony_ci		"", "", "", "", "", "", "DRC02-HW2", "DRC02-HW1",
5862306a36Sopenharmony_ci		"", "", "", "", "", "", "", "",
5962306a36Sopenharmony_ci		"", "", "", "", "", "", "", "";
6062306a36Sopenharmony_ci};
6162306a36Sopenharmony_ci
6262306a36Sopenharmony_ci&i2c1 {
6362306a36Sopenharmony_ci	eeprom@50 {
6462306a36Sopenharmony_ci		compatible = "atmel,24c04";
6562306a36Sopenharmony_ci		reg = <0x50>;
6662306a36Sopenharmony_ci		pagesize = <16>;
6762306a36Sopenharmony_ci	};
6862306a36Sopenharmony_ci};
6962306a36Sopenharmony_ci
7062306a36Sopenharmony_ci&uart1 {
7162306a36Sopenharmony_ci	/*
7262306a36Sopenharmony_ci	 * Due to the use of can2 the signals for can2 Tx and Rx are routed to
7362306a36Sopenharmony_ci	 * DHCOM UART1 rts/cts pins. Therefore this UART have to use DHCOM GPIOs
7462306a36Sopenharmony_ci	 * for rts/cts. So configure DHCOM GPIO I as rts and GPIO M as cts.
7562306a36Sopenharmony_ci	 */
7662306a36Sopenharmony_ci	/delete-property/ uart-has-rtscts;
7762306a36Sopenharmony_ci	cts-gpios = <&gpio7 0 GPIO_ACTIVE_HIGH>; /* GPIO M */
7862306a36Sopenharmony_ci	pinctrl-0 = <&pinctrl_uart1 &pinctrl_dhcom_i &pinctrl_dhcom_m>;
7962306a36Sopenharmony_ci	pinctrl-names = "default";
8062306a36Sopenharmony_ci	rts-gpios = <&gpio4 8 GPIO_ACTIVE_HIGH>; /* GPIO I */
8162306a36Sopenharmony_ci};
8262306a36Sopenharmony_ci
8362306a36Sopenharmony_ci&uart5 {
8462306a36Sopenharmony_ci	/*
8562306a36Sopenharmony_ci	 * On DRC02 this UART is used as RS485 interface and RS485_TX_En is
8662306a36Sopenharmony_ci	 * controlled by DHCOM GPIO P. So remove rts/cts pins and the property
8762306a36Sopenharmony_ci	 * uart-has-rtscts from this UART and add the DHCOM GPIO P pin via
8862306a36Sopenharmony_ci	 * rts-gpios. The RS485_RX_En is controlled by DHCOM GPIO Q, see gpio1
8962306a36Sopenharmony_ci	 * node above.
9062306a36Sopenharmony_ci	 */
9162306a36Sopenharmony_ci	/delete-property/ uart-has-rtscts;
9262306a36Sopenharmony_ci	linux,rs485-enabled-at-boot-time;
9362306a36Sopenharmony_ci	pinctrl-0 = <&pinctrl_uart5_core &pinctrl_dhcom_p &pinctrl_dhcom_q>;
9462306a36Sopenharmony_ci	pinctrl-names = "default";
9562306a36Sopenharmony_ci	rts-gpios = <&gpio7 13 GPIO_ACTIVE_HIGH>; /* GPIO P */
9662306a36Sopenharmony_ci};
9762306a36Sopenharmony_ci
9862306a36Sopenharmony_ci&usbh1 {
9962306a36Sopenharmony_ci	disable-over-current;
10062306a36Sopenharmony_ci};
10162306a36Sopenharmony_ci
10262306a36Sopenharmony_ci&usdhc2 { /* SD card */
10362306a36Sopenharmony_ci	status = "okay";
10462306a36Sopenharmony_ci};
10562306a36Sopenharmony_ci
10662306a36Sopenharmony_ci&usdhc3 {
10762306a36Sopenharmony_ci	/*
10862306a36Sopenharmony_ci	 * Due to the use of can2 the micro SD card on module have to be
10962306a36Sopenharmony_ci	 * disabled, because the pins SD3_DAT0 and SD3_DAT1 are muxed as
11062306a36Sopenharmony_ci	 * can2 Tx and Rx.
11162306a36Sopenharmony_ci	 */
11262306a36Sopenharmony_ci	status = "disabled";
11362306a36Sopenharmony_ci};
11462306a36Sopenharmony_ci
11562306a36Sopenharmony_ci&iomuxc {
11662306a36Sopenharmony_ci	pinctrl-0 = <
11762306a36Sopenharmony_ci			/*
11862306a36Sopenharmony_ci			 * The following DHCOM GPIOs are used on this board.
11962306a36Sopenharmony_ci			 * Therefore, they have been removed from the list below.
12062306a36Sopenharmony_ci			 * I: uart1 rts
12162306a36Sopenharmony_ci			 * M: uart1 cts
12262306a36Sopenharmony_ci			 * P: uart5 rs485-tx-en
12362306a36Sopenharmony_ci			 * Q: uart5 rs485-rx-en
12462306a36Sopenharmony_ci			 */
12562306a36Sopenharmony_ci			&pinctrl_hog_base
12662306a36Sopenharmony_ci			&pinctrl_dhcom_a &pinctrl_dhcom_b &pinctrl_dhcom_c
12762306a36Sopenharmony_ci			&pinctrl_dhcom_d &pinctrl_dhcom_e &pinctrl_dhcom_f
12862306a36Sopenharmony_ci			&pinctrl_dhcom_g &pinctrl_dhcom_h
12962306a36Sopenharmony_ci			&pinctrl_dhcom_j &pinctrl_dhcom_k &pinctrl_dhcom_l
13062306a36Sopenharmony_ci			&pinctrl_dhcom_n &pinctrl_dhcom_o
13162306a36Sopenharmony_ci			&pinctrl_dhcom_r
13262306a36Sopenharmony_ci			&pinctrl_dhcom_s &pinctrl_dhcom_t &pinctrl_dhcom_u
13362306a36Sopenharmony_ci			&pinctrl_dhcom_v &pinctrl_dhcom_w &pinctrl_dhcom_int
13462306a36Sopenharmony_ci		>;
13562306a36Sopenharmony_ci	pinctrl-names = "default";
13662306a36Sopenharmony_ci
13762306a36Sopenharmony_ci	pinctrl_uart5_core: uart5-core-grp {
13862306a36Sopenharmony_ci		fsl,pins = <
13962306a36Sopenharmony_ci			MX6QDL_PAD_CSI0_DAT14__UART5_TX_DATA	0x1b0b1
14062306a36Sopenharmony_ci			MX6QDL_PAD_CSI0_DAT15__UART5_RX_DATA	0x1b0b1
14162306a36Sopenharmony_ci		>;
14262306a36Sopenharmony_ci	};
14362306a36Sopenharmony_ci};
144