// SPDX-License-Identifier: GPL-2.0-or-later
/*
 * Copyright (C) 2015-2017 I2SE GmbH <info@i2se.com>
 * Copyright (C) 2016 Michael Heimpold <mhei@heimpold.de>
 */

/dts-v1/;
#include <dt-bindings/interrupt-controller/irq.h>
#include <dt-bindings/gpio/gpio.h>
#include "imx28.dtsi"

/ {
	model = "I2SE Duckbill 2 SPI";
	compatible = "i2se,duckbill-2-spi", "i2se,duckbill-2", "fsl,imx28";

	aliases {
		ethernet1 = &qca7000;
	};

	memory@40000000 {
		device_type = "memory";
		reg = <0x40000000 0x08000000>;
	};

	apb@80000000 {
		apbh@80000000 {
			ssp0: spi@80010000 {
				compatible = "fsl,imx28-mmc";
				pinctrl-names = "default";
				pinctrl-0 = <&mmc0_8bit_pins_a
					&mmc0_cd_cfg &mmc0_sck_cfg>;
				bus-width = <8>;
				vmmc-supply = <&reg_3p3v>;
				status = "okay";
				non-removable;
			};

			ssp2: spi@80014000 {
				compatible = "fsl,imx28-spi";
				pinctrl-names = "default";
				pinctrl-0 = <&spi2_pins_a>;
				status = "okay";

				qca7000: ethernet@0 {
					reg = <0>;
					compatible = "qca,qca7000";
					pinctrl-names = "default";
					pinctrl-0 = <&qca7000_pins>;
					interrupt-parent = <&gpio3>;
					interrupts = <3 IRQ_TYPE_EDGE_RISING>;
					spi-cpha;
					spi-cpol;
					spi-max-frequency = <8000000>;
				};
			};

			pinctrl@80018000 {
				pinctrl-names = "default";
				pinctrl-0 = <&hog_pins_a>;

				hog_pins_a: hog@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_LCD_D17__GPIO_1_17    /* Revision detection */
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};

				mac0_phy_reset_pin: mac0-phy-reset@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_GPMI_ALE__GPIO_0_26    /* PHY Reset */
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};

				mac0_phy_int_pin: mac0-phy-int@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_GPMI_D07__GPIO_0_7    /* PHY Interrupt */
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};

				led_pins: led@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_SAIF0_MCLK__GPIO_3_20
						MX28_PAD_SAIF0_LRCLK__GPIO_3_21
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};

				qca7000_pins: qca7000@0 {
					reg = <0>;
					fsl,pinmux-ids = <
						MX28_PAD_AUART0_RTS__GPIO_3_3    /* Interrupt */
						MX28_PAD_LCD_D13__GPIO_1_13      /* QCA7K reset */
						MX28_PAD_LCD_D14__GPIO_1_14      /* GPIO 0 */
						MX28_PAD_LCD_D15__GPIO_1_15      /* GPIO 1 */
						MX28_PAD_LCD_D18__GPIO_1_18      /* GPIO 2 */
						MX28_PAD_LCD_D21__GPIO_1_21      /* GPIO 3 */
					>;
					fsl,drive-strength = <MXS_DRIVE_4mA>;
					fsl,voltage = <MXS_VOLTAGE_HIGH>;
					fsl,pull-up = <MXS_PULL_DISABLE>;
				};
			};
		};

		apbx@80040000 {
			lradc@80050000 {
				status = "okay";
			};

			duart: serial@80074000 {
				pinctrl-names = "default";
				pinctrl-0 = <&duart_pins_a>;
				status = "okay";
			};

			usbphy0: usbphy@8007c000 {
				status = "okay";
			};
		};
	};

	ahb@80080000 {
		usb0: usb@80080000 {
			status = "okay";
			dr_mode = "peripheral";
		};

		mac0: ethernet@800f0000 {
			phy-mode = "rmii";
			pinctrl-names = "default";
			pinctrl-0 = <&mac0_pins_a>, <&mac0_phy_reset_pin>;
			phy-supply = <&reg_3p3v>;
			phy-reset-gpios = <&gpio0 26 GPIO_ACTIVE_LOW>;
			phy-reset-duration = <25>;
			phy-handle = <&ethphy>;
			status = "okay";

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

				ethphy: ethernet-phy@0 {
					compatible = "ethernet-phy-ieee802.3-c22";
					reg = <0>;
					pinctrl-names = "default";
					pinctrl-0 = <&mac0_phy_int_pin>;
					interrupt-parent = <&gpio0>;
					interrupts = <7 IRQ_TYPE_EDGE_FALLING>;
					max-speed = <100>;
				};
			};
		};
	};

	reg_3p3v: regulator-3p3v {
		compatible = "regulator-fixed";
		regulator-name = "3P3V";
		regulator-min-microvolt = <3300000>;
		regulator-max-microvolt = <3300000>;
		regulator-always-on;
	};

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

		status-red {
			label = "duckbill:red:status";
			gpios = <&gpio3 21 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "default-on";
		};

		status-green {
			label = "duckbill:green:status";
			gpios = <&gpio3 20 GPIO_ACTIVE_HIGH>;
			linux,default-trigger = "heartbeat";
		};
	};
};
