/*
 * Copyright (c) 2016-2020, 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.3.dts"
/ {
	model ="QCA, IPQ5018-MP03.3-C2";
	compatible = "qca,ipq5018", "qca,ipq5018-mp03.3-c2";
	machid = <0x8040102>;
	config_name = "config@mp03.3-c2";

	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";
	};
};
