/*
 * Copyright (c) 2019, The Linux Foundation. All rights reserved.
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 and
 * only version 2 as published by the Free Software Foundation.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 */

/dts-v1/;
#include "ipq6018-soc.dtsi"
/ {
	machid = <0x1030000>;
	config_name = "config@db-cp01";

	aliases {
		console = "/serial@78B1000";
		mmc = "/sdhci@7804000";
		pci0 = "/pci@20000000";
		usb0 = "/xhci@8a00000";
		usb1 = "/xhci@7000000";
		i2c1 = "/i2c@78ba000";
	};

	spi {
		status = "ok";

		compatible = "qcom,spi-qup-v2.7.0";
		wr_pipe_0 = <12>;
		rd_pipe_0 = <13>;
		spi_gpio {
			gpio1 {
				gpio = <38>;
				func = <3>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};

			gpio2 {
				gpio = <39>;
				func = <3>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};

			gpio3 {
				gpio = <40>;
				func = <2>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};

			gpio4 {
				gpio = <41>;
				func = <2>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
		};
	};

	nand: nand-controller@79B0000 {
		#address-cells = <1>;
		#size-cells = <0>;
		compatible = "qcom,qpic-nand.1.5.20";
		reg = <0x79B0000 0x10000>;

		nand_gpio {
			gpio1 {
				gpio = <1>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio2 {
				gpio = <3>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio3 {
				gpio = <4>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio4 {
				gpio = <5>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio5 {
				gpio = <6>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio6 {
				gpio = <7>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio7 {
				gpio = <8>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio8 {
				gpio = <10>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio9 {
				gpio = <11>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio10 {
				gpio = <12>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio11 {
				gpio = <13>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio12 {
				gpio = <14>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio13 {
				gpio = <15>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};
			gpio14 {
				gpio = <17>;
				func = <1>;
				pull = <GPIO_PULL_DOWN>;
				drvstr = <GPIO_12MA>;
				oe = <GPIO_OE_DISABLE>;
			};

		};

	};

	ess-switch {
		switch_mac_mode = <PORT_WRAPPER_PSGMII>;
		switch_mac_mode1 = <PORT_WRAPPER_SGMII_PLUS>;
		napa_gpio = <77>;
		napa_gpio_cnt = <1>;
		malibu_gpio = <75>;
		malibu_gpio_cnt = <1>;
		mdc_mdio_gpio = <64 65>;
		port_phyinfo {
			port@0 {
				phy_address = <0>;
				phy_type = <MALIBU_PHY_TYPE>;
			};
			port@1 {
				phy_address = <1>;
				phy_type = <MALIBU_PHY_TYPE>;
			};
			port@2 {
				phy_address = <2>;
				phy_type = <MALIBU_PHY_TYPE>;
			};
			port@3 {
				phy_address = <3>;
				phy_type = <MALIBU_PHY_TYPE>;
			};
			port@4 {
				phy_address = <24>;
				phy_type = <QCA8081_PHY_TYPE>;
			};
		};
	};

};
