/*
 * Copyright (c) 2022, 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, BREZZA-P0";
	compatible = "qca,ipq5018", "qca,brezza-p0";
	config_name = "config@brezza-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 = <46>;
		};
	};
};
