/*
 * Device Tree file for HP t5325 Thin Client"
 *
 * Copyright (C) 2014
 *
 * Thomas Petazzoni <thomas.petazzoni@free-electrons.com>
 * Andrew Lunn <andrew@lunn.ch>
 *
 * This file is licensed under the terms of the GNU General Public
 * License version 2.  This program is licensed "as is" without any
 * warranty of any kind, whether express or implied.
*/

/dts-v1/;

#include "kirkwood.dtsi"
#include "kirkwood-6281.dtsi"

/ {
	model = "HP t5325 Thin Client";
	compatible = "hp,t5325", "marvell,kirkwood-88f6281", "marvell,kirkwood";

	memory {
		device_type = "memory";
		reg = <0x00000000 0x20000000>;
	};

	chosen {
		bootargs = "console=ttyS0,115200n8";
		stdout-path = &uart0;
	};

	mbus {
		pcie-controller {
			status = "okay";

			pcie@1,0 {
				status = "okay";
			};
		};
	};

	ocp@f1000000 {
		pinctrl: pin-controller@10000 {
			pinctrl-0 = <&pmx_i2s &pmx_sysrst>;
			pinctrl-names = "default";

			pmx_button_power: pmx-button_power {
				marvell,pins = "mpp45";
				marvell,function = "gpio";
			};

			pmx_power_off: pmx-power-off {
				marvell,pins = "mpp48";
				marvell,function = "gpio";
			};

			pmx_led: pmx-led {
				marvell,pins = "mpp21";
				marvell,function = "gpio";
			};

			pmx_usb_sata_power_enable: pmx-usb-sata-power-enable {
				marvell,pins = "mpp44";
				marvell,function = "gpio";
			};

			pmx_spi: pmx-spi {
				marvell,pins = "mpp1", "mpp2", "mpp3", "mpp7";
				marvell,function = "spi";
			};

			pmx_sysrst: pmx-sysrst {
				marvell,pins = "mpp6";
				marvell,function = "sysrst";
			};

			pmx_i2s: pmx-i2s {
				marvell,pins = "mpp39", "mpp40", "mpp41", "mpp42",
					       "mpp43";
				marvell,function = "audio";
			};
		};

		spi@10600 {
			status = "okay";

			flash@0 {
				#address-cells = <1>;
				#size-cells = <1>;
				compatible = "st,m25p80";
				spi-max-frequency = <86000000>;
				reg = <0>;
				mode = <0>;

				partition@0 {
					reg = <0x0 0x80000>;
					label = "u-boot";
				};

				partition@1 {
					reg = <0x80000 0x40000>;
					label = "SSD firmware";
				};

				partition@2 {
					reg = <0xc0000 0x10000>;
					label = "u-boot env";
				};

				partition@3 {
					reg = <0xd0000 0x10000>;
					label = "permanent u-boot env";
				};

				partition@4 {
					reg = <0xd0000 0x10000>;
					label = "permanent u-boot env";
				};
			};
		};

		i2c@11000 {
			status = "okay";

			alc5621: alc5621@1a {
				compatible = "realtek,alc5621";
				reg = <0x1a>;
				#sound-dai-cells = <0>;
				add-ctrl = <0x3700>;
				jack-det-ctrl = <0x4810>;
			};
		};

		serial@12000 {
			status = "okay";
		};

		sata@80000 {
			status = "okay";
			nr-ports = <2>;
		};

		audio: audio-controller@a0000 {
			status = "okay";
		};
	};

	regulators {
		compatible = "simple-bus";
		#address-cells = <1>;
		#size-cells = <0>;
		pinctrl-0 = <&pmx_usb_sata_power_enable>;
		pinctrl-names = "default";

		usb_power: regulator@1 {
			compatible = "regulator-fixed";
			reg = <1>;
			regulator-name = "USB-SATA Power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			enable-active-high;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&gpio1 12 GPIO_ACTIVE_HIGH>;
		};
	};

	gpio_keys {
		compatible = "gpio-keys";
		#address-cells = <1>;
		#size-cells = <0>;
		pinctrl-0 = <&pmx_button_power>;
		pinctrl-names = "default";

		button@1 {
			label = "Power Button";
			linux,code = <KEY_POWER>;
			gpios = <&gpio1 13 GPIO_ACTIVE_HIGH>;
		};
	};

	gpio_poweroff {
		compatible = "gpio-poweroff";
		pinctrl-0 = <&pmx_power_off>;
		pinctrl-names = "default";
		gpios = <&gpio1 17 GPIO_ACTIVE_HIGH>;
	};

	sound {
		compatible = "simple-audio-card";
		simple-audio-card,format = "i2s";
		simple-audio-card,routing =
			"Headphone Jack", "HPL",
			"Headphone Jack", "HPR",
			"Speaker", "SPKOUT",
			"Speaker", "SPKOUTN",
			"MIC1", "Mic Jack",
			"MIC2", "Mic Jack";
		simple-audio-card,widgets =
			"Headphone", "Headphone Jack",
			"Speaker", "Speaker",
			"Microphone", "Mic Jack";

		simple-audio-card,mclk-fs = <256>;

		simple-audio-card,cpu {
			sound-dai = <&audio>;
		};

		simple-audio-card,codec {
			sound-dai = <&alc5621>;
		};
	};
};

&mdio {
	status = "okay";

	ethphy0: ethernet-phy {
		device_type = "ethernet-phy";
		reg = <8>;
	};
};

&eth0 {
	status = "okay";
	ethernet0-port@0 {
		phy-handle = <&ethphy0>;
	};
};
