/*
 * Device Tree file for Buffalo Linkstation LS-WVL
 *
 * Copyright (C) 2015, 2016
 * Roger Shimizu <rogershimizu@gmail.com>
 *
 * 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 , 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 "kirkwood-linkstation-6282.dtsi"

/ {
	model = "Buffalo Linkstation LS-WVL";
	compatible = "buffalo,lswvl","marvell,kirkwood-88f6282", "marvell,kirkwood";

	memory { /* 256 MB */
		device_type = "memory";
		reg = <0x00000000 0x10000000>;
	};

	ocp@f1000000 {
		pinctrl: pin-controller@10000 {
			pmx_power_hdd1: pmx-power-hdd1 {
				marvell,pins = "mpp9";
				marvell,function = "gpio";
			};
			pmx_led_hdderr0: pmx-led-hdderr0 {
				marvell,pins = "mpp34";
				marvell,function = "gpio";
			};
			pmx_led_hdderr1: pmx-led-hdderr1 {
				marvell,pins = "mpp35";
				marvell,function = "gpio";
			};
		};

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

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

		red-hdderr0-led {
			label = "linkstation:red:hdderr0";
			gpios = <&gpio1 2 GPIO_ACTIVE_HIGH>;
		};

		red-hdderr1-led {
			label = "linkstation:red:hdderr1";
			gpios = <&gpio1 3 GPIO_ACTIVE_HIGH>;
		};
	};

	regulators {
		pinctrl-0 = <&pmx_power_hdd0 &pmx_power_hdd1 &pmx_usb_vbus>;

		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 9 GPIO_ACTIVE_HIGH>;
		};
	};
};
