/*
 * 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", "jedec,spi-nor";
				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>;
	};
};
