// SPDX-License-Identifier: GPL-2.0
//
// Copyright (C) 2014 Freescale Semiconductor, Inc.

/dts-v1/;

#include "imx6sx.dtsi"

/ {
	model = "Freescale i.MX6 SoloX Sabre Auto Board";
	compatible = "fsl,imx6sx-sabreauto", "fsl,imx6sx";

	memory@80000000 {
		device_type = "memory";
		reg = <0x80000000 0x80000000>;
	};

	leds {
		compatible = "gpio-leds";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_led>;

		led-user {
			label = "debug";
			gpios = <&gpio1 24 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
		};
	};

	vcc_sd3: regulator-vcc-sd3 {
		compatible = "regulator-fixed";
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_vcc_sd3>;
		regulator-name = "VCC_SD3";
		regulator-min-microvolt = <3000000>;
		regulator-max-microvolt = <3000000>;
		gpio = <&gpio2 11 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	reg_can_wake: regulator-can-wake {
		compatible = "regulator-fixed";
		regulator-name = "can-wake";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&max7310_b 7 GPIO_ACTIVE_HIGH>;
		enable-active-high;
	};

	reg_can_en: regulator-can-en {
		compatible = "regulator-fixed";
		regulator-name = "can-en";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&max7310_b 5 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		vin-supply = <&reg_can_wake>;
	};

	reg_can_stby: regulator-can-stby {
		compatible = "regulator-fixed";
		regulator-name = "can-stby";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		gpio = <&max7310_b 4 GPIO_ACTIVE_HIGH>;
		enable-active-high;
		vin-supply = <&reg_can_en>;
	};

	reg_cs42888: cs42888_supply {
		compatible = "regulator-fixed";
		regulator-name = "cs42888_supply";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
	};

	sound-cs42888 {
		compatible = "fsl,imx6-sabreauto-cs42888",
			     "fsl,imx-audio-cs42888";
		model = "imx-cs42888";
		audio-cpu = <&esai>;
		audio-asrc = <&asrc>;
		audio-codec = <&cs42888>;
		audio-routing =
			"Line Out Jack", "AOUT1L",
			"Line Out Jack", "AOUT1R",
			"Line Out Jack", "AOUT2L",
			"Line Out Jack", "AOUT2R",
			"Line Out Jack", "AOUT3L",
			"Line Out Jack", "AOUT3R",
			"Line Out Jack", "AOUT4L",
			"Line Out Jack", "AOUT4R",
			"AIN1L", "Line In Jack",
			"AIN1R", "Line In Jack",
			"AIN2L", "Line In Jack",
			"AIN2R", "Line In Jack";
	};

	spdif_in: spdif-in {
		compatible = "linux,spdif-dir";
		#sound-dai-cells = <0>;
	};

	sound-spdif {
		compatible = "fsl,imx-audio-spdif";
		model = "imx-spdif";
		audio-cpu = <&spdif>;
		audio-codec = <&spdif_in>;
	};
};

&anaclk2 {
	clock-frequency = <24576000>;
};

&clks {
	assigned-clocks = <&clks IMX6SX_PLL4_BYPASS_SRC>,
			  <&clks IMX6SX_PLL4_BYPASS>,
			  <&clks IMX6SX_CLK_PLL4_POST_DIV>;
	assigned-clock-parents = <&clks IMX6SX_CLK_LVDS2_IN>,
				 <&clks IMX6SX_PLL4_BYPASS_SRC>;
	assigned-clock-rates = <0>, <0>, <24576000>;
};

&esai {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_esai>;
	assigned-clocks = <&clks IMX6SX_CLK_ESAI_SEL>,
			<&clks IMX6SX_CLK_ESAI_EXTAL>;
	assigned-clock-parents = <&clks IMX6SX_CLK_PLL4_AUDIO_DIV>;
	assigned-clock-rates = <0>, <24576000>;
	status = "okay";
};

&fec1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_enet1>;
	phy-mode = "rgmii-id";
	phy-handle = <&ethphy1>;
	fsl,magic-packet;
	status = "okay";

	mdio {
		#address-cells = <1>;
		#size-cells = <0>;

		ethphy0: ethernet-phy@0 {
			compatible = "ethernet-phy-ieee802.3-c22";
			reg = <0>;
		};

		ethphy1: ethernet-phy@1 {
			compatible = "ethernet-phy-ieee802.3-c22";
			reg = <1>;
		};
	};
};

&fec2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_enet2>;
	phy-mode = "rgmii-id";
	phy-handle = <&ethphy0>;
	fsl,magic-packet;
	status = "okay";
};

&flexcan1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_flexcan1>;
	xceiver-supply = <&reg_can_stby>;
	status = "okay";
};

&flexcan2 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_flexcan2>;
	xceiver-supply = <&reg_can_stby>;
	status = "okay";
};

&uart1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_uart1>;
	status = "okay";
};

&usdhc3 {
	pinctrl-names = "default", "state_100mhz", "state_200mhz";
	pinctrl-0 = <&pinctrl_usdhc3>;
	pinctrl-1 = <&pinctrl_usdhc3_100mhz>;
	pinctrl-2 = <&pinctrl_usdhc3_200mhz>;
	bus-width = <8>;
	cd-gpios = <&gpio7 10 GPIO_ACTIVE_LOW>;
	wp-gpios = <&gpio3 19 GPIO_ACTIVE_HIGH>;
	keep-power-in-suspend;
	wakeup-source;
	vmmc-supply = <&vcc_sd3>;
	status = "okay";
};

&usdhc4 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_usdhc4>;
	bus-width = <8>;
	cd-gpios = <&gpio7 11 GPIO_ACTIVE_LOW>;
	no-1-8-v;
	keep-power-in-suspend;
	wakeup-source;
	status = "okay";
};

&iomuxc {
	pinctrl_egalax_int: egalax-intgrp {
		fsl,pins = <
			MX6SX_PAD_SD4_RESET_B__GPIO6_IO_22      0x10b0
		>;
	};

	pinctrl_enet1: enet1grp {
		fsl,pins = <
			MX6SX_PAD_ENET1_MDIO__ENET1_MDIO        0xa0b1
			MX6SX_PAD_ENET1_MDC__ENET1_MDC          0xa0b1
			MX6SX_PAD_RGMII1_TXC__ENET1_RGMII_TXC   0xa0b9
			MX6SX_PAD_RGMII1_TD0__ENET1_TX_DATA_0   0xa0b1
			MX6SX_PAD_RGMII1_TD1__ENET1_TX_DATA_1   0xa0b1
			MX6SX_PAD_RGMII1_TD2__ENET1_TX_DATA_2   0xa0b1
			MX6SX_PAD_RGMII1_TD3__ENET1_TX_DATA_3   0xa0b1
			MX6SX_PAD_RGMII1_TX_CTL__ENET1_TX_EN    0xa0b1
			MX6SX_PAD_RGMII1_RXC__ENET1_RX_CLK      0x3081
			MX6SX_PAD_RGMII1_RD0__ENET1_RX_DATA_0   0x3081
			MX6SX_PAD_RGMII1_RD1__ENET1_RX_DATA_1   0x3081
			MX6SX_PAD_RGMII1_RD2__ENET1_RX_DATA_2   0x3081
			MX6SX_PAD_RGMII1_RD3__ENET1_RX_DATA_3   0x3081
			MX6SX_PAD_RGMII1_RX_CTL__ENET1_RX_EN    0x3081
		>;
	};

	pinctrl_enet2: enet2grp {
		fsl,pins = <
			MX6SX_PAD_RGMII2_TXC__ENET2_RGMII_TXC   0xa0b9
			MX6SX_PAD_RGMII2_TD0__ENET2_TX_DATA_0   0xa0b1
			MX6SX_PAD_RGMII2_TD1__ENET2_TX_DATA_1   0xa0b1
			MX6SX_PAD_RGMII2_TD2__ENET2_TX_DATA_2   0xa0b1
			MX6SX_PAD_RGMII2_TD3__ENET2_TX_DATA_3   0xa0b1
			MX6SX_PAD_RGMII2_TX_CTL__ENET2_TX_EN    0xa0b1
			MX6SX_PAD_RGMII2_RXC__ENET2_RX_CLK      0x3081
			MX6SX_PAD_RGMII2_RD0__ENET2_RX_DATA_0   0x3081
			MX6SX_PAD_RGMII2_RD1__ENET2_RX_DATA_1   0x3081
			MX6SX_PAD_RGMII2_RD2__ENET2_RX_DATA_2   0x3081
			MX6SX_PAD_RGMII2_RD3__ENET2_RX_DATA_3   0x3081
			MX6SX_PAD_RGMII2_RX_CTL__ENET2_RX_EN    0x3081
		>;
	};

	pinctrl_esai: esaigrp {
		fsl,pins = <
			MX6SX_PAD_CSI_DATA00__ESAI_TX_CLK   0x1b030
			MX6SX_PAD_CSI_DATA01__ESAI_TX_FS    0x1b030
			MX6SX_PAD_CSI_HSYNC__ESAI_TX0       0x1b030
			MX6SX_PAD_CSI_DATA04__ESAI_TX1      0x1b030
			MX6SX_PAD_CSI_DATA06__ESAI_TX2_RX3  0x1b030
			MX6SX_PAD_CSI_DATA07__ESAI_TX3_RX2  0x1b030
			MX6SX_PAD_CSI_DATA02__ESAI_RX_CLK   0x1b030
			MX6SX_PAD_CSI_DATA03__ESAI_RX_FS    0x1b030
			MX6SX_PAD_CSI_VSYNC__ESAI_TX5_RX0   0x1b030
			MX6SX_PAD_CSI_DATA05__ESAI_TX4_RX1  0x1b030
		>;
	};

	pinctrl_flexcan1: flexcan1grp {
		fsl,pins = <
			MX6SX_PAD_QSPI1B_DQS__CAN1_TX   0x1b020
			MX6SX_PAD_QSPI1A_SS1_B__CAN1_RX	0x1b020
		>;
	};

	pinctrl_flexcan2: flexcan2grp {
		fsl,pins = <
			MX6SX_PAD_QSPI1B_SS1_B__CAN2_RX 0x1b020
			MX6SX_PAD_QSPI1A_DQS__CAN2_TX	0x1b020
		>;
	};

	pinctrl_i2c2: i2c2grp {
		fsl,pins = <
			MX6SX_PAD_GPIO1_IO03__I2C2_SDA          0x4001b8b1
			MX6SX_PAD_GPIO1_IO02__I2C2_SCL          0x4001b8b1
		>;
	};

	pinctrl_i2c3: i2c3grp {
		fsl,pins = <
			MX6SX_PAD_KEY_ROW4__I2C3_SDA            0x4001b8b1
			MX6SX_PAD_KEY_COL4__I2C3_SCL            0x4001b8b1
		>;
	};

	pinctrl_led: ledgrp {
		fsl,pins = <
			MX6SX_PAD_CSI_PIXCLK__GPIO1_IO_24 0x17059
		>;
	};

	pinctrl_spdif: spdifgrp {
		fsl,pins = <
			MX6SX_PAD_ENET2_COL__SPDIF_IN           0x1b0b0
		>;
	};

	pinctrl_uart1: uart1grp {
		fsl,pins = <
			MX6SX_PAD_GPIO1_IO04__UART1_DCE_TX		0x1b0b1
			MX6SX_PAD_GPIO1_IO05__UART1_DCE_RX		0x1b0b1
		>;
	};

	pinctrl_usdhc3: usdhc3grp {
		fsl,pins = <
			MX6SX_PAD_SD3_CMD__USDHC3_CMD		0x17059
			MX6SX_PAD_SD3_CLK__USDHC3_CLK		0x10059
			MX6SX_PAD_SD3_DATA0__USDHC3_DATA0	0x17059
			MX6SX_PAD_SD3_DATA1__USDHC3_DATA1	0x17059
			MX6SX_PAD_SD3_DATA2__USDHC3_DATA2	0x17059
			MX6SX_PAD_SD3_DATA3__USDHC3_DATA3	0x17059
			MX6SX_PAD_SD3_DATA4__USDHC3_DATA4	0x17059
			MX6SX_PAD_SD3_DATA5__USDHC3_DATA5	0x17059
			MX6SX_PAD_SD3_DATA6__USDHC3_DATA6	0x17059
			MX6SX_PAD_SD3_DATA7__USDHC3_DATA7	0x17059
			MX6SX_PAD_KEY_COL0__GPIO2_IO_10		0x17059 /* CD */
			MX6SX_PAD_KEY_ROW0__GPIO2_IO_15		0x17059 /* WP */
		>;
	};

	pinctrl_usdhc3_100mhz: usdhc3grp-100mhz {
		fsl,pins = <
			MX6SX_PAD_SD3_CMD__USDHC3_CMD		0x170b9
			MX6SX_PAD_SD3_CLK__USDHC3_CLK		0x100b9
			MX6SX_PAD_SD3_DATA0__USDHC3_DATA0	0x170b9
			MX6SX_PAD_SD3_DATA1__USDHC3_DATA1	0x170b9
			MX6SX_PAD_SD3_DATA2__USDHC3_DATA2	0x170b9
			MX6SX_PAD_SD3_DATA3__USDHC3_DATA3	0x170b9
			MX6SX_PAD_SD3_DATA4__USDHC3_DATA4	0x170b9
			MX6SX_PAD_SD3_DATA5__USDHC3_DATA5	0x170b9
			MX6SX_PAD_SD3_DATA6__USDHC3_DATA6	0x170b9
			MX6SX_PAD_SD3_DATA7__USDHC3_DATA7	0x170b9
		>;
	};

	pinctrl_usdhc3_200mhz: usdhc3grp-200mhz {
		fsl,pins = <
			MX6SX_PAD_SD3_CMD__USDHC3_CMD		0x170f9
			MX6SX_PAD_SD3_CLK__USDHC3_CLK		0x100f9
			MX6SX_PAD_SD3_DATA0__USDHC3_DATA0	0x170f9
			MX6SX_PAD_SD3_DATA1__USDHC3_DATA1	0x170f9
			MX6SX_PAD_SD3_DATA2__USDHC3_DATA2	0x170f9
			MX6SX_PAD_SD3_DATA3__USDHC3_DATA3	0x170f9
			MX6SX_PAD_SD3_DATA4__USDHC3_DATA4	0x170f9
			MX6SX_PAD_SD3_DATA5__USDHC3_DATA5	0x170f9
			MX6SX_PAD_SD3_DATA6__USDHC3_DATA6	0x170f9
			MX6SX_PAD_SD3_DATA7__USDHC3_DATA7	0x170f9
		>;
	};

	pinctrl_usdhc4: usdhc4grp {
		fsl,pins = <
			MX6SX_PAD_SD4_CMD__USDHC4_CMD		0x17059
			MX6SX_PAD_SD4_CLK__USDHC4_CLK		0x10059
			MX6SX_PAD_SD4_DATA0__USDHC4_DATA0	0x17059
			MX6SX_PAD_SD4_DATA1__USDHC4_DATA1	0x17059
			MX6SX_PAD_SD4_DATA2__USDHC4_DATA2	0x17059
			MX6SX_PAD_SD4_DATA3__USDHC4_DATA3	0x17059
			MX6SX_PAD_SD4_DATA7__GPIO6_IO_21	0x17059 /* CD */
			MX6SX_PAD_SD4_DATA6__GPIO6_IO_20	0x17059 /* WP */
		>;
	};

	pinctrl_vcc_sd3: vccsd3grp {
		fsl,pins = <
			MX6SX_PAD_KEY_COL1__GPIO2_IO_11		0x17059
		>;
	};

	pinctrl_wdog: wdoggrp {
		fsl,pins = <
			MX6SX_PAD_GPIO1_IO13__WDOG1_WDOG_ANY	0x30b0
		>;
	};
};

&i2c2 {
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c2>;
	status = "okay";

	cs42888: cs42888@48 {
		compatible = "cirrus,cs42888";
		reg = <0x48>;
		clocks = <&anaclk2 0>;
		clock-names = "mclk";
		VA-supply = <&reg_cs42888>;
		VD-supply = <&reg_cs42888>;
		VLS-supply = <&reg_cs42888>;
		VLC-supply = <&reg_cs42888>;
	};

	touchscreen@4 {
		compatible = "eeti,egalax_ts";
		reg = <0x04>;
		pinctrl-names = "default";
		pinctrl-0 = <&pinctrl_egalax_int>;
		interrupt-parent = <&gpio6>;
		interrupts = <22 IRQ_TYPE_EDGE_FALLING>;
		wakeup-gpios = <&gpio6 22 GPIO_ACTIVE_HIGH>;
	};

	pfuze100: pmic@8 {
		compatible = "fsl,pfuze100";
		reg = <0x08>;

		regulators {
			sw1a_reg: sw1ab {
				regulator-min-microvolt = <300000>;
				regulator-max-microvolt = <1875000>;
				regulator-boot-on;
				regulator-always-on;
				regulator-ramp-delay = <6250>;
			};

			sw1c_reg: sw1c {
				regulator-min-microvolt = <300000>;
				regulator-max-microvolt = <1875000>;
				regulator-boot-on;
				regulator-always-on;
				regulator-ramp-delay = <6250>;
			};

			sw2_reg: sw2 {
				regulator-min-microvolt = <800000>;
				regulator-max-microvolt = <3300000>;
				regulator-boot-on;
				regulator-always-on;
			};

			sw3a_reg: sw3a {
				regulator-min-microvolt = <400000>;
				regulator-max-microvolt = <1975000>;
				regulator-boot-on;
				regulator-always-on;
			};

			sw3b_reg: sw3b {
				regulator-min-microvolt = <400000>;
				regulator-max-microvolt = <1975000>;
				regulator-boot-on;
				regulator-always-on;
			};

			sw4_reg: sw4 {
				regulator-min-microvolt = <800000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
			};

			swbst_reg: swbst {
				regulator-min-microvolt = <5000000>;
				regulator-max-microvolt = <5150000>;
			};

			snvs_reg: vsnvs {
				regulator-min-microvolt = <1000000>;
				regulator-max-microvolt = <3000000>;
				regulator-boot-on;
				regulator-always-on;
			};

			vref_reg: vrefddr {
				regulator-boot-on;
				regulator-always-on;
			};

			vgen1_reg: vgen1 {
				regulator-min-microvolt = <800000>;
				regulator-max-microvolt = <1550000>;
				regulator-always-on;
			};

			vgen2_reg: vgen2 {
				regulator-min-microvolt = <800000>;
				regulator-max-microvolt = <1550000>;
			};

			vgen3_reg: vgen3 {
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
			};

			vgen4_reg: vgen4 {
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
			};

			vgen5_reg: vgen5 {
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
			};

			vgen6_reg: vgen6 {
				regulator-min-microvolt = <1800000>;
				regulator-max-microvolt = <3300000>;
				regulator-always-on;
			};
		};
	};

	max7322: gpio@68 {
		compatible = "maxim,max7322";
		reg = <0x68>;
		gpio-controller;
		#gpio-cells = <2>;
	};
};

&i2c3 {
	clock-frequency = <100000>;
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_i2c3>;
	status = "okay";

	max7310_a: gpio@30 {
		compatible = "maxim,max7310";
		reg = <0x30>;
		gpio-controller;
		#gpio-cells = <2>;
	};

	max7310_b: gpio@32 {
		compatible = "maxim,max7310";
		reg = <0x32>;
		gpio-controller;
		#gpio-cells = <2>;
	};
};

&spdif {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_spdif>;
	assigned-clocks = <&clks IMX6SX_CLK_SPDIF_PODF>;
	assigned-clock-rates = <24576000>;
	status = "okay";
};

&wdog1 {
	pinctrl-names = "default";
	pinctrl-0 = <&pinctrl_wdog>;
	fsl,ext-reset-output;
};
