/*
 * Device Tree file for Buffalo Linkstation LS-WXL/WSXL
 *
 * Copyright (C) 2015, rogershimizu@gmail.com
 *
 * This program 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.
 */

/dts-v1/;

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

/ {
	model = "Buffalo Linkstation LS-WXL/WSXL";
	compatible = "buffalo,lswxl", "marvell,kirkwood-88f6281", "marvell,kirkwood";

	memory { /* 128 MB */
		device_type = "memory";
		reg = <0x00000000 0x8000000>;
	};

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

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

	ocp@f1000000 {
		pinctrl: pin-controller@10000 {
			pmx_power_hdd0: pmx-power-hdd0 {
				marvell,pins = "mpp28";
				marvell,function = "gpio";
			};
			pmx_power_hdd1: pmx-power-hdd1 {
				marvell,pins = "mpp29";
				marvell,function = "gpio";
			};
			pmx_usb_vbus: pmx-usb-vbus {
				marvell,pins = "mpp37";
				marvell,function = "gpio";
			};
			pmx_fan_high: pmx-fan-high {
				marvell,pins = "mpp47";
				marvell,function = "gpio";
			};
			pmx_fan_low: pmx-fan-low {
				marvell,pins = "mpp48";
				marvell,function = "gpio";
			};
			pmx_led_hdderr0: pmx-led-hdderr0 {
				marvell,pins = "mpp8";
				marvell,function = "gpio";
			};
			pmx_led_hdderr1: pmx-led-hdderr1 {
				marvell,pins = "mpp46";
				marvell,function = "gpio";
			};
			pmx_led_alarm: pmx-led-alarm {
				marvell,pins = "mpp49";
				marvell,function = "gpio";
			};
			pmx_led_function_red: pmx-led-function-red {
				marvell,pins = "mpp34";
				marvell,function = "gpio";
			};
			pmx_led_function_blue: pmx-led-function-blue {
				marvell,pins = "mpp36";
				marvell,function = "gpio";
			};
			pmx_led_info: pmx-led-info {
				marvell,pins = "mpp38";
				marvell,function = "gpio";
			};
			pmx_led_power: pmx-led-power {
				marvell,pins = "mpp39";
				marvell,function = "gpio";
			};
			pmx_fan_lock: pmx-fan-lock {
				marvell,pins = "mpp40";
				marvell,function = "gpio";
			};
			pmx_button_function: pmx-button-function {
				marvell,pins = "mpp41";
				marvell,function = "gpio";
			};
			pmx_power_switch: pmx-power-switch {
				marvell,pins = "mpp42";
				marvell,function = "gpio";
			};
			pmx_power_auto_switch: pmx-power-auto-switch {
				marvell,pins = "mpp43";
				marvell,function = "gpio";
			};
		};

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

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

		spi@10600 {
			status = "okay";

			m25p40@0 {
				#address-cells = <1>;
				#size-cells = <1>;
				compatible = "st,m25p40", "jedec,spi-nor";
				reg = <0>;
				spi-max-frequency = <25000000>;
				mode = <0>;

				partition@0 {
					reg = <0x0 0x60000>;
					label = "uboot";
					read-only;
				};

				partition@60000 {
					reg = <0x60000 0x10000>;
					label = "dtb";
					read-only;
				};

				partition@70000 {
					reg = <0x70000 0x10000>;
					label = "uboot_env";
				};
			};
		};
	};

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

		button@1 {
			label = "Function Button";
			linux,code = <KEY_OPTION>;
			gpios = <&gpio1 41 GPIO_ACTIVE_LOW>;
		};

		button@2 {
			label = "Power-on Switch";
			linux,code = <KEY_RESERVED>;
			linux,input-type = <5>;
			gpios = <&gpio1 42 GPIO_ACTIVE_LOW>;
		};

		button@3 {
			label = "Power-auto Switch";
			linux,code = <KEY_ESC>;
			linux,input-type = <5>;
			gpios = <&gpio1 43 GPIO_ACTIVE_LOW>;
		};
	};

	gpio_leds {
		compatible = "gpio-leds";
		pinctrl-0 = <&pmx_led_function_red &pmx_led_alarm
			     &pmx_led_info &pmx_led_power
			     &pmx_led_function_blue
			     &pmx_led_hdderr0
			     &pmx_led_hdderr1>;
		pinctrl-names = "default";

		led@1 {
			label = "lswxl:blue:func";
			gpios = <&gpio1 36 GPIO_ACTIVE_LOW>;
		};

		led@2 {
			label = "lswxl:red:alarm";
			gpios = <&gpio1 49 GPIO_ACTIVE_LOW>;
		};

		led@3 {
			label = "lswxl:amber:info";
			gpios = <&gpio1 6 GPIO_ACTIVE_LOW>;
		};

		led@4 {
			label = "lswxl:blue:power";
			gpios = <&gpio1 8 GPIO_ACTIVE_LOW>;
		};

		led@5 {
			label = "lswxl:red:func";
			gpios = <&gpio1 5 GPIO_ACTIVE_LOW>;
			default-state = "keep";
		};

		led@6 {
			label = "lswxl:red:hdderr0";
			gpios = <&gpio1 2 GPIO_ACTIVE_LOW>;
		};

		led@7 {
			label = "lswxl:red:hdderr1";
			gpios = <&gpio1 3 GPIO_ACTIVE_LOW>;
		};
	};

	gpio_fan {
		compatible = "gpio-fan";
		pinctrl-0 = <&pmx_fan_low &pmx_fan_high &pmx_fan_lock>;
		pinctrl-names = "default";

		gpios = <&gpio0 47 GPIO_ACTIVE_LOW
			 &gpio0 48 GPIO_ACTIVE_LOW>;

		gpio-fan,speed-map = <0 3
				1500 2
				3250 1
				5000 0>;

		alarm-gpios = <&gpio1 49 GPIO_ACTIVE_HIGH>;
	};

	restart_poweroff {
		compatible = "restart-poweroff";
	};

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

		usb_power: regulator@1 {
			compatible = "regulator-fixed";
			reg = <1>;
			regulator-name = "USB Power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			enable-active-high;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&gpio0 37 GPIO_ACTIVE_HIGH>;
		};
		hdd_power0: regulator@2 {
			compatible = "regulator-fixed";
			reg = <2>;
			regulator-name = "HDD0 Power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			enable-active-high;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&gpio0 28 GPIO_ACTIVE_HIGH>;
		};
		hdd_power1: regulator@3 {
			compatible = "regulator-fixed";
			reg = <3>;
			regulator-name = "HDD1 Power";
			regulator-min-microvolt = <5000000>;
			regulator-max-microvolt = <5000000>;
			enable-active-high;
			regulator-always-on;
			regulator-boot-on;
			gpio = <&gpio0 29 GPIO_ACTIVE_HIGH>;
		};
	};
};

&mdio {
	status = "okay";

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

&eth1 {
	status = "okay";

	ethernet1-port@0 {
		phy-handle = <&ethphy1>;
	};
};
