/*
 * Device tree file for Phytec PCM-947 carrier board
 * Copyright (C) 2017 PHYTEC Messtechnik GmbH
 * Author: Wadim Egorov <w.egorov@phytec.de>
 *
 * This file is dual-licensed: you can use it either under the terms
 * of the GPL or the X11 license, at your option. Note that this dual
 * licensing only applies to this file, and not this project as a
 * whole.
 *
 *  a) This file is free software; you can redistribute it and/or
 *     modify it under the terms of the GNU General Public License as
 *     published by the Free Software Foundation; either version 2 of the
 *     License, or (at your option) any later version.
 *
 *     This file 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.
 *
 * Or, alternatively,
 *
 *  b) Permission is hereby granted, free of charge, to any person
 *     obtaining a copy of this software and associated documentation
 *     files (the "Software"), to deal in the Software without
 *     restriction, including without limitation the rights to use,
 *     copy, modify, merge, publish, distribute, sublicense, and/or
 *     sell copies of the Software, and to permit persons to whom the
 *     Software is furnished to do so, subject to the following
 *     conditions:
 *
 *     The above copyright notice and this permission notice shall be
 *     included in all copies or substantial portions of the Software.
 *
 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
 *     OTHER DEALINGS IN THE SOFTWARE.
 */

/dts-v1/;

#include <dt-bindings/input/input.h>
#include "rk3288-phycore-som.dtsi"

/ {
	model = "Phytec RK3288 PCM-947";
	compatible = "phytec,rk3288-pcm-947", "phytec,rk3288-phycore-som", "rockchip,rk3288";

	chosen {
		stdout-path = &uart2;
	};

	config {
		u-boot,dm-pre-reloc;
		u-boot,boot0 = &emmc;
	};

	user_buttons: user-buttons {
		compatible = "gpio-keys";
		pinctrl-names = "default";
		pinctrl-0 = <&user_button_pins>;

		button@0 {
			label = "home";
			linux,code = <KEY_HOME>;
			gpios = <&gpio8 0 GPIO_ACTIVE_HIGH>;
			wakeup-source;
		};

		button@1 {
			label = "menu";
			linux,code = <KEY_MENU>;
			gpios = <&gpio8 3 GPIO_ACTIVE_HIGH>;
			wakeup-source;
		};
	};

	vcc_host0_5v: usb-host0-regulator {
		compatible = "regulator-fixed";
		gpio = <&gpio2 13 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&host0_vbus_drv>;
		regulator-name = "vcc_host0_5v";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
		vin-supply = <&vdd_in_otg_out>;
	};

	vcc_host1_5v: usb-host1-regulator {
		compatible = "regulator-fixed";
		gpio = <&gpio2 0 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&host1_vbus_drv>;
		regulator-name = "vcc_host1_5v";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
		vin-supply = <&vdd_in_otg_out>;
	};

	vcc_otg_5v: usb-otg-regulator {
		compatible = "regulator-fixed";
		gpio = <&gpio2 12 GPIO_ACTIVE_HIGH>;
		pinctrl-names = "default";
		pinctrl-0 = <&otg_vbus_drv>;
		regulator-name = "vcc_otg_5v";
		regulator-min-microvolt = <5000000>;
		regulator-max-microvolt = <5000000>;
		regulator-always-on;
		vin-supply = <&vdd_in_otg_out>;
	};
};

&dmc {
	rockchip,num-channels = <2>;
	rockchip,pctl-timing = <0x29a 0xc8 0x1f8 0x42 0x4e 0x4 0xea 0xa
		0x5 0x0 0xa 0x7 0x19 0x24 0xa 0x7
		0x5 0xa 0x5 0x200 0x5 0x10 0x40 0x0
		0x1 0x7 0x7 0x4 0xc 0x43 0x100 0x0
		0x5 0x0>;
	rockchip,phy-timing = <0x48f9aab4 0xea0910 0x1002c200
		0xa60 0x40 0x10 0x0>;
	rockchip,sdram-channel = /bits/ 8 <0x1 0xa 0x3 0x2 0x1 0x0 0xe 0xe>;
	rockchip,sdram-params = <0x30B25564 0x627 3 666000000 3 5 1>;
};

&gmac {
	status = "okay";
};

&hdmi {
	status = "okay";
};

&i2c1 {
	status = "okay";

	touchscreen@44 {
		compatible = "st,stmpe811";
		reg = <0x44>;
	};

	adc@64 {
		compatible = "maxim,max1037";
		reg = <0x64>;
	};

	i2c_rtc: rtc@68 {
		compatible = "rv4162";
		reg = <0x68>;
		pinctrl-names = "default";
		pinctrl-0 = <&i2c_rtc_int>;
		interrupt-parent = <&gpio5>;
		interrupts = <10 0>;
	};
};

&i2c3 {
	status = "okay";

	i2c_eeprom_cb: eeprom@51 {
		compatible = "atmel,24c32";
		reg = <0x51>;
		pagesize = <32>;
	};
};

&i2c4 {
	status = "okay";
};

&i2c5 {
	status = "okay";
};

&pinctrl {
	u-boot,dm-pre-reloc;

	pcfg_pull_up_drv_12ma: pcfg-pull-up-drv-12ma {
		bias-pull-up;
		drive-strength = <12>;
	};

	buttons {
		user_button_pins: user-button-pins {
			/* button 1 */
			rockchip,pins = <8 3 RK_FUNC_GPIO &pcfg_pull_up>,
			/* button 2 */
					<8 0 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

	rv4162 {
		i2c_rtc_int: i2c-rtc-int {
			rockchip,pins = <5 10 RK_FUNC_GPIO &pcfg_pull_up>;
		};
	};

	sdmmc {
		/*
		 * Default drive strength isn't enough to achieve even
		 * high-speed mode on pcm-947 board so bump up to 12 mA.
		 */
		sdmmc_bus4: sdmmc-bus4 {
			rockchip,pins = <6 16 RK_FUNC_1 &pcfg_pull_up_drv_12ma>,
					<6 17 RK_FUNC_1 &pcfg_pull_up_drv_12ma>,
					<6 18 RK_FUNC_1 &pcfg_pull_up_drv_12ma>,
					<6 19 RK_FUNC_1 &pcfg_pull_up_drv_12ma>;
		};

		sdmmc_clk: sdmmc-clk {
			rockchip,pins = <6 20 RK_FUNC_1 &pcfg_pull_none_12ma>;
		};

		sdmmc_cmd: sdmmc-cmd {
			rockchip,pins = <6 21 RK_FUNC_1 &pcfg_pull_up_drv_12ma>;
		};

		sdmmc_pwr: sdmmc-pwr {
			rockchip,pins = <7 11 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	touchscreen {
		ts_irq_pin: ts-irq-pin {
			rockchip,pins = <5 15 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	usb_host {
		host0_vbus_drv: host0-vbus-drv {
			rockchip,pins = <2 13 RK_FUNC_GPIO &pcfg_pull_none>;
		};

		host1_vbus_drv: host1-vbus-drv {
			rockchip,pins = <2 0 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};

	usb_otg {
		otg_vbus_drv: otg-vbus-drv {
			rockchip,pins = <2 12 RK_FUNC_GPIO &pcfg_pull_none>;
		};
	};
};

&sdmmc {
	u-boot,dm-pre-reloc;

	bus-width = <4>;
	cap-mmc-highspeed;
	cap-sd-highspeed;
	card-detect-delay = <200>;
	disable-wp;
	num-slots = <1>;
	pinctrl-names = "default";
	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
	vmmc-supply = <&vdd_io_sd>;
	vqmmc-supply = <&vdd_io_sd>;
	status = "okay";
};

&uart0 {
	pinctrl-names = "default";
	pinctrl-0 = <&uart0_xfer &uart0_cts &uart0_rts>;
	status = "okay";
};

&uart2 {
	u-boot,dm-pre-reloc;
	status = "okay";
};

&usbphy {
	status = "okay";
};

&usb_host0_ehci {
	status = "okay";
};

&usb_host1 {
	status = "okay";
};

&usb_otg {
	status = "okay";
};
