/*
 * Device Tree file for Buffalo Linkstation LS-CHLv3
 *
 * Copyright (C) 2016 Ash Hughes <ashley.hughes@blueyonder.co.uk>
 * Copyright (C) 2015-2017
 * 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 "AS IS", 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 LiveV3 (LS-CHL)";
	compatible = "buffalo,lschl", "marvell,orion5x-88f5182", "marvell,orion5x";

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

	gpio_keys {
		func-button {
			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-led {
			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>;
};

