/*
 * Hardkernel Odroid XU3 board device tree source
 *
 * Copyright (c) 2014 Collabora Ltd.
 * Copyright (c) 2013 Samsung Electronics Co., Ltd.
 *		http://www.samsung.com
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU General Public License version 2 as
 * published by the Free Software Foundation.
*/

/dts-v1/;
#include "exynos5422-odroidxu3-common.dtsi"
#include "exynos5422-odroidxu3-audio.dtsi"

/ {
	model = "Hardkernel Odroid XU3";
	compatible = "hardkernel,odroid-xu3", "samsung,exynos5800", "samsung,exynos5";

	pwmleds {
		compatible = "pwm-leds";

		greenled {
			label = "green:mmc0";
			pwms = <&pwm 1 2000000 0>;
			pwm-names = "pwm1";
			/*
			 * Green LED is much brighter than the others
			 * so limit its max brightness
			 */
			max_brightness = <127>;
			linux,default-trigger = "mmc0";
		};

		blueled {
			label = "blue:heartbeat";
			pwms = <&pwm 2 2000000 0>;
			pwm-names = "pwm2";
			max_brightness = <255>;
			linux,default-trigger = "heartbeat";
		};
	};

	gpioleds {
		compatible = "gpio-leds";
		redled {
			label = "red:microSD";
			gpios = <&gpx2 3 GPIO_ACTIVE_HIGH>;
			default-state = "off";
			linux,default-trigger = "mmc1";
		};
	};
};

&i2c_0 {
	status = "okay";

	/* A15 cluster: VDD_ARM */
	ina231@40 {
		compatible = "ti,ina231";
		reg = <0x40>;
		shunt-resistor = <10000>;
	};

	/* memory: VDD_MEM */
	ina231@41 {
		compatible = "ti,ina231";
		reg = <0x41>;
		shunt-resistor = <10000>;
	};

	/* GPU: VDD_G3D */
	ina231@44 {
		compatible = "ti,ina231";
		reg = <0x44>;
		shunt-resistor = <10000>;
	};

	/* A7 cluster: VDD_KFC */
	ina231@45 {
		compatible = "ti,ina231";
		reg = <0x45>;
		shunt-resistor = <10000>;
	};
};

&pwm {
	/*
	 * PWM 0 -- fan
	 * PWM 1 -- Green LED
	 * PWM 2 -- Blue LED
	 * PWM 3 -- on MIPI connector for backlight
	 */
	pinctrl-0 = <&pwm0_out &pwm1_out &pwm2_out &pwm3_out>;
	pinctrl-names = "default";
	status = "okay";
};

&usbdrd_dwc3_1 {
	dr_mode = "peripheral";
};
