/*
 * Copyright (c) 2021, 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.
 */
#include "ipq5018-mp03.5-c1.dts"
/ {
	model ="QCA, SIROCCO-P0";
	compatible = "qca,ipq5018", "qca,sirocco-p0";
	config_name = "config@sirocco-p0";

        console: serial@78AF000 {
                status = "ok";
                serial_gpio {
                        blsp0_mux_uart_rx {
                                gpio = <20>;
                                func = <0>;
                                pull = <GPIO_PULL_DOWN>;
                                drvstr = <GPIO_8MA>;
                                od_en = <GPIO_OD_DISABLE>;
                        };
                        blsp0_mux_uart_tx {
                                gpio = <21>;
                                func = <0>;
                                pull = <GPIO_PULL_DOWN>;
                                drvstr = <GPIO_8MA>;
                                od_en = <GPIO_OD_DISABLE>;
                        };
                        blsp0_uart_rx {
                                gpio = <28>;
                                func = <3>;
                                pull = <GPIO_NO_PULL>;
                                drvstr = <GPIO_8MA>;
                                od_en = <GPIO_OD_DISABLE>;
                        };
                        blsp0_uart_tx {
                                gpio = <29>;
                                func = <3>;
                                pull = <GPIO_NO_PULL>;
                                drvstr = <GPIO_8MA>;
                                od_en = <GPIO_OD_DISABLE>;
                        };
                };
        };

	xhci@8a00000 {
		compatible = "qca,dwc3-ipq";
		#address-cells = <1>;
		#size-cells = <1>;
		reg = <0x8a00000 0xe000>;
	};

	mmc: sdhci@7804000 {
		compatible = "qcom,sdhci-msm";
		status = "okay";
		mmc_gpio {
			emmc_dat3 {
				gpio = <4>;
				func = <1>;
				pull = <GPIO_NO_PULL>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			emmc_dat2 {
				gpio = <5>;
				func = <1>;
				pull = <GPIO_NO_PULL>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			emmc_dat1 {
				gpio = <6>;
				func = <1>;
				pull = <GPIO_NO_PULL>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			emmc_dat0 {
				gpio = <7>;
				func = <1>;
				pull = <GPIO_NO_PULL>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			emmc_cmd{
				gpio = <8>;
				func = <1>;
				pull = <GPIO_PULL_UP>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
			emmc_clk{
				gpio = <9>;
				func = <1>;
				pull = <GPIO_NO_PULL>;
				od_en = <GPIO_OD_DISABLE>;
				drvstr = <GPIO_8MA>;
			};
		};
	};

	nand: nand-controller@79B0000 {
		status = "disabled";
	};

	boot_mode {
		ngpio = <22>;
		image = "recovery.img";
		gpio {
			gpio = <22>;
			func = <0>;
			pull = <GPIO_NO_PULL>;
			drvstr = <GPIO_8MA>;
		};
	};

	gmac_cfg {
		gmac2_cfg {
			phy_address = <0x0>;
			/delete-property/napa_gpio;
			8033_gpio = <26>;
		};
	};
};
