/*
 * Device Tree file for Buffalo Linkstation LS-CHLv3
 *
 * Copyright (C) 2016 Ash Hughes <ashley.hughes@blueyonder.co.uk>
 * 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 "orion5x-linkstation.dtsi"
#include "mvebu-linkstation-gpio-simple.dtsi"
#include "mvebu-linkstation-fan.dtsi"
#include <dt-bindings/gpio/gpio.h>

/ {
	model = "Buffalo Linkstation Live v3 (LS-CHL)";
	compatible = "buffalo,lschl", "marvell,orion5x-88f5182", "marvell,orion5x";

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

	gpio_keys {
		func {
			label = "Function Button";
			linux,code = <KEY_OPTION>;
			gpios = <&gpio0 15 GPIO_ACTIVE_LOW>;
		};

		power-on-switch {
			gpios = <&gpio0 8 GPIO_ACTIVE_LOW>;
		};

		power-auto-switch {
			gpios = <&gpio0 10 GPIO_ACTIVE_LOW>;
		};
	};

	gpio_leds {
		pinctrl-0 = <&pmx_led_power &pmx_led_alarm &pmx_led_info &pmx_led_func>;
		blue-power-led {
			gpios = <&gpio0 0 GPIO_ACTIVE_LOW>;
		};

		red-alarm-led {
			gpios = <&gpio0 2 GPIO_ACTIVE_LOW>;
		};

		amber-info-led {
			gpios = <&gpio0 3 GPIO_ACTIVE_LOW>;
		};

		func {
			label = "lschl:func:blue:top";
			gpios = <&gpio0 17 GPIO_ACTIVE_LOW>;
		};
	};

	gpio_fan {
		gpios = <&gpio0 14 GPIO_ACTIVE_LOW
			 &gpio0 16 GPIO_ACTIVE_LOW>;

		alarm-gpios = <&gpio0 6 GPIO_ACTIVE_HIGH>;
	};
};

&pinctrl {
	pmx_led_power: pmx-leds {
		marvell,pins = "mpp0";
		marvell,function = "gpio";
	};

	pmx_power_hdd: pmx-power-hdd {
		marvell,pins = "mpp1";
		marvell,function = "gpio";
	};

	pmx_led_alarm: pmx-leds {
		marvell,pins = "mpp2";
		marvell,function = "gpio";
	};

	pmx_led_info: pmx-leds {
		marvell,pins = "mpp3";
		marvell,function = "gpio";
	};

	pmx_fan_lock: pmx-fan-lock {
		marvell,pins = "mpp6";
		marvell,function = "gpio";
	};

	pmx_power_switch: pmx-power-switch {
		marvell,pins = "mpp8", "mpp10", "mpp15";
		marvell,function = "gpio";
	};

	pmx_power_usb: pmx-power-usb {
		marvell,pins = "mpp9";
		marvell,function = "gpio";
	};

	pmx_fan_high: pmx-fan-high {
		marvell,pins = "mpp14";
		marvell,function = "gpio";
	};

	pmx_fan_low: pmx-fan-low {
		marvell,pins = "mpp16";
		marvell,function = "gpio";
	};

	pmx_led_func: pmx-leds {
		marvell,pins = "mpp17";
		marvell,function = "gpio";
	};

	pmx_sw_init: pmx-sw-init {
		marvell,pins = "mpp7";
		marvell,function = "gpio";
	};
};

&hdd_power {
	gpios = <&gpio0 1 GPIO_ACTIVE_HIGH>;
};

&usb_power {
	gpios = <&gpio0 9 GPIO_ACTIVE_HIGH>;
};

