// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
 * Copyright 2014-2022 Toradex
 * Copyright 2012 Freescale Semiconductor, Inc.
 * Copyright 2011 Linaro Ltd.
 */

/dts-v1/;

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/interrupt-controller/irq.h>
#include "imx6q.dtsi"
#include "imx6qdl-apalis.dtsi"

/ {
	model = "Toradex Apalis iMX6Q/D Module on Ixora Carrier Board V1.2";
	compatible = "toradex,apalis_imx6q-ixora-v1.2", "toradex,apalis_imx6q",
		     "fsl,imx6q";

	aliases {
		i2c0 = &i2c1;
		i2c1 = &i2c3;
		i2c2 = &i2c2;
		rtc0 = &rtc_i2c;
		rtc1 = &snvs_rtc;
	};

	chosen {
		stdout-path = "serial0:115200n8";
	};

	leds {
		compatible = "gpio-leds";

		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_leds_ixora>;

		led4-green {
			gpios = <&gpio1 14 GPIO_ACTIVE_HIGH>;
			label = "LED_4_GREEN";
		};

		led4-red {
			gpios = <&gpio1 12 GPIO_ACTIVE_HIGH>;
			label = "LED_4_RED";
		};

		led5-green {
			gpios = <&gpio2 1 GPIO_ACTIVE_HIGH>;
			label = "LED_5_GREEN";
		};

		led5-red {
			gpios = <&gpio2 2 GPIO_ACTIVE_HIGH>;
			label = "LED_5_RED";
		};
	};

	reg_3v3_vmmc: regulator-3v3-vmmc {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio2 0 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_enable_3v3_vmmc>;
		regulator-max-microvolt = <3300000>;
		regulator-min-microvolt = <3300000>;
		regulator-name = "3v3_vmmc";
		startup-delay-us = <100>;
	};

	reg_can1_supply: regulator-can1-supply {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio2 3 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_enable_can1_power>;
		regulator-name = "can1_supply";
	};

	reg_can2_supply: regulator-can2-supply {
		compatible = "regulator-fixed";
		enable-active-high;
		gpio = <&gpio3 15 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_enable_can2_power>;
		regulator-name = "can2_supply";
	};
};

&can1 {
	xceiver-supply = <&reg_can1_supply>;
	status = "okay";
};

&can2 {
	xceiver-supply = <&reg_can2_supply>;
	status = "okay";
};

&gpio1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart24_forceoff>;

	/*
	 * uart-2-4-on-x21-enable-hog enables the UART transceiver for Apalis
	 * UART2 and UART3. If one wants to disable the transceiver force
	 * the GPIO to output-low, if one wants to control the transceiver
	 * from user space delete the hog node.
	 */
	uart-2-4-on-x21-enable-hog {
		gpio-hog;
		gpios = <11 GPIO_ACTIVE_HIGH>; /* MXM3 180 */
		output-high;
	};
};

/* I2C1_SDA/SCL on MXM3 209/211 (e.g. RTC on carrier board) */
&i2c1 {
	status = "okay";

	/* M41T0M6 real time clock on carrier board */
	rtc_i2c: rtc@68 {
		compatible = "st,m41t0";
		reg = <0x68>;
	};

	eeprom: eeprom@50 {
		compatible = "atmel,24c02";
		reg = <0x50>;
		pagesize = <16>;
	};
};

/*
 * I2C3_SDA/SCL (CAM) on MXM3 pin 201/203 (e.g. camera sensor on carrier
 * board)
 */
&i2c3 {
	status = "okay";
};

&pcie {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_reset_moci>;
	/* active-high meaning opposite of regular PERST# active-low polarity */
	reset-gpio = <&gpio1 28 GPIO_ACTIVE_HIGH>;
	reset-gpio-active-high;
	status = "okay";
};

&pwm1 {
	status = "okay";
};

&pwm2 {
	status = "okay";
};

&pwm3 {
	status = "okay";
};

&pwm4 {
	status = "okay";
};

&reg_usb_host_vbus {
	status = "okay";
};

&reg_usb_otg_vbus {
	status = "okay";
};

&sata {
	status = "okay";
};

&sound_spdif {
	status = "okay";
};

&spdif {
	status = "okay";
};

&uart1 {
	status = "okay";
};

&uart2 {
	status = "okay";
};

&uart4 {
	status = "okay";
};

&uart5 {
	status = "okay";
};

&usbh1 {
	vbus-supply = <&reg_usb_host_vbus>;
	status = "okay";
};

&usbotg {
	vbus-supply = <&reg_usb_otg_vbus>;
	status = "okay";
};

/* MMC1 */
&usdhc1 {
	pinctrl-names = "default", "sleep";
	pinctrl-0 = <&pinctrl_usdhc1_4bit &pinctrl_mmc_cd>;
	pinctrl-1 = <&pinctrl_usdhc1_4bit_sleep &pinctrl_mmc_cd_sleep>;
	bus-width = <4>;
	cap-power-off-card;
	vmmc-supply = <&reg_3v3_vmmc>;
	status = "okay";
};

&iomuxc {
	pinctrl_enable_3v3_vmmc: enable3v3vmmcgrp {
		fsl,pins = <
			MX6QDL_PAD_NANDF_D0__GPIO2_IO00 0x1b0b0
		>;
	};

	pinctrl_enable_can1_power: enablecan1powergrp {
		fsl,pins = <
			MX6QDL_PAD_NANDF_D3__GPIO2_IO03 0x1b0b0
		>;
	};

	pinctrl_enable_can2_power: enablecan2powergrp {
		fsl,pins = <
			MX6QDL_PAD_EIM_DA15__GPIO3_IO15 0x1b0b0
		>;
	};

	pinctrl_uart24_forceoff: uart24forceoffgrp {
		fsl,pins = <
			MX6QDL_PAD_SD2_CMD__GPIO1_IO11 0x1b0b0
		>;
	};

	pinctrl_leds_ixora: ledsixoragrp {
		fsl,pins = <
			MX6QDL_PAD_SD2_DAT1__GPIO1_IO14 0x1b0b0
			MX6QDL_PAD_SD2_DAT3__GPIO1_IO12 0x1b0b0
			MX6QDL_PAD_NANDF_D1__GPIO2_IO01 0x1b0b0
			MX6QDL_PAD_NANDF_D2__GPIO2_IO02 0x1b0b0
		>;
	};

	pinctrl_mmc_cd_sleep: mmccdslpgrp {
		fsl,pins = <
			 /* MMC1 CD */
			MX6QDL_PAD_DI0_PIN4__GPIO4_IO20 0x0
		>;
	};

	pinctrl_usdhc1_4bit_sleep: usdhc1-4bitslpgrp {
		fsl,pins = <
			MX6QDL_PAD_SD1_CMD__SD1_CMD     0x3000
			MX6QDL_PAD_SD1_CLK__SD1_CLK     0x3000
			MX6QDL_PAD_SD1_DAT0__SD1_DATA0  0x3000
			MX6QDL_PAD_SD1_DAT1__SD1_DATA1  0x3000
			MX6QDL_PAD_SD1_DAT2__SD1_DATA2  0x3000
			MX6QDL_PAD_SD1_DAT3__SD1_DATA3  0x3000
		>;
	};
};
