/*
 * SAMSUNG Snow board device tree source
 *
 * Copyright (c) 2012 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 "exynos5250.dtsi"

/ {
	model = "Google Snow";
	compatible = "google,snow", "samsung,exynos5250";

	aliases {
		i2c0 = "/i2c@12c60000";
		i2c1 = "/i2c@12c70000";
		i2c2 = "/i2c@12c80000";
		i2c3 = "/i2c@12c90000";
		i2c4 = "/i2c@12ca0000";
		i2c5 = "/i2c@12cb0000";
		i2c6 = "/i2c@12cc0000";
		i2c7 = "/i2c@12cd0000";
		spi0 = "/spi@12d20000";
		spi1 = "/spi@12d30000";
		spi2 = "/spi@12d40000";
		spi3 = "/spi@131a0000";
		spi4 = "/spi@131b0000";
		mmc0 = "/mmc@12200000";
		mmc1 = "/mmc@12210000";
		mmc2 = "/mmc@12220000";
		mmc3 = "/mmc@12230000";
		serial0 = "/serial@12C30000";
		console = "/serial@12C30000";
		i2s = "/sound@3830000";
	};

	i2c4: i2c@12ca0000 {
		cros-ec@1e {
			reg = <0x1e>;
			compatible = "google,cros-ec";
			i2c-max-frequency = <100000>;
			ec-interrupt = <&gpio 182 1>;
		};

		power-regulator@48 {
			compatible = "ti,tps65090";
			reg = <0x48>;
		};
	};

	spi@12d30000 {
		spi-max-frequency = <50000000>;
		firmware_storage_spi: flash@0 {
			compatible = "spi-flash";
			reg = <0>;
		};
	};

	spi@131b0000 {
		spi-max-frequency = <1000000>;
		spi-deactivate-delay = <100>;
		cros-ec@0 {
			reg = <0>;
			compatible = "google,cros-ec";
			spi-max-frequency = <5000000>;
			ec-interrupt = <&gpio 182 1>;
			optimise-flash-write;
			status = "disabled";
		};
	};

	sound@3830000 {
		samsung,codec-type = "max98095";
		codec-enable-gpio = <&gpio 0xb7 0>;
	};

	sound@12d60000 {
		status = "disabled";
	};

	i2c@12cd0000 {
		soundcodec@22 {
			reg = <0x22>;
			compatible = "maxim,max98095-codec";
		};

		ptn3460-bridge@20 {
			compatible = "nxp,ptn3460";
			reg = <0x20>;
			/*
			 * TODO(sjg@chromium.org): Use GPIOs here
			 * powerdown-gpio = <&gpy2 5 0>;
			 * reset-gpio = <&gpx1 5 0>;
			 * edid-emulation = <5>;
			 * pinctrl-names = "default";
			 * pinctrl-0 = <&ptn3460_gpios>;
			 */
		};
	};

	i2c@12c60000 {
		pmic@9 {
			reg = <0x9>;
			compatible = "maxim,max77686_pmic";
		};
	};

	mmc@12200000 {
		samsung,bus-width = <8>;
		samsung,timing = <1 3 3>;
		samsung,removable = <0>;
	};

	mmc@12210000 {
		status = "disabled";
	};

	mmc@12220000 {
		samsung,bus-width = <4>;
		samsung,timing = <1 2 3>;
		samsung,removable = <1>;
	};

	mmc@12230000 {
		status = "disabled";
	};

	ehci@12110000 {
		samsung,vbus-gpio = <&gpio 0xb1 0>; /* X11 */
	};

	xhci@12000000 {
		samsung,vbus-gpio = <&gpio 0xbf 0>; /* X27 */
	};

	tmu@10060000 {
		samsung,min-temp	= <25>;
		samsung,max-temp	= <125>;
		samsung,start-warning	= <95>;
		samsung,start-tripping	= <105>;
		samsung,hw-tripping	= <110>;
		samsung,efuse-min-value	= <40>;
		samsung,efuse-value	= <55>;
		samsung,efuse-max-value	= <100>;
		samsung,slope		= <274761730>;
		samsung,dc-value	= <25>;
	};

	cros-ec-keyb {
		compatible = "google,cros-ec-keyb";
		google,key-rows = <8>;
		google,key-columns = <13>;
		google,repeat-delay-ms = <240>;
		google,repeat-rate-ms = <30>;
		google,ghost-filter;
		/*
		 * Keymap entries take the form of 0xRRCCKKKK where
		 * RR=Row CC=Column KKKK=Key Code
		 * The values below are for a US keyboard layout and
		 * are taken from the Linux driver. Note that the
		 * 102ND key is not used for US keyboards.
		 */
		linux,keymap = <
			/* CAPSLCK F1         B          F10     */
			0x0001003a 0x0002003b 0x00030030 0x00040044
			/* N       =          R_ALT      ESC     */
			0x00060031 0x0008000d 0x000a0064 0x01010001
			/* F4      G          F7         H       */
			0x0102003e 0x01030022 0x01040041 0x01060023
			/* '       F9         BKSPACE    L_CTRL  */
			0x01080028 0x01090043 0x010b000e 0x0200001d
			/* TAB     F3         T          F6      */
			0x0201000f 0x0202003d 0x02030014 0x02040040
			/* ]       Y          102ND      [       */
			0x0205001b 0x02060015 0x02070056 0x0208001a
			/* F8      GRAVE      F2         5       */
			0x02090042 0x03010029 0x0302003c 0x03030006
			/* F5      6          -          \       */
			0x0304003f 0x03060007 0x0308000c 0x030b002b
			/* R_CTRL  A          D          F       */
			0x04000061 0x0401001e 0x04020020 0x04030021
			/* S       K          J          ;       */
			0x0404001f 0x04050025 0x04060024 0x04080027
			/* L       ENTER      Z          C       */
			0x04090026 0x040b001c 0x0501002c 0x0502002e
			/* V       X          ,          M       */
			0x0503002f 0x0504002d 0x05050033 0x05060032
			/* L_SHIFT /          .          SPACE   */
			0x0507002a 0x05080035 0x05090034 0x050B0039
			/* 1       3          4          2       */
			0x06010002 0x06020004 0x06030005 0x06040003
			/* 8       7          0          9       */
			0x06050009 0x06060008 0x0608000b 0x0609000a
			/* L_ALT   DOWN       RIGHT      Q       */
			0x060a0038 0x060b006c 0x060c006a 0x07010010
			/* E       R          W          I       */
			0x07020012 0x07030013 0x07040011 0x07050017
			/* U       R_SHIFT    P          O       */
			0x07060016 0x07070036 0x07080019 0x07090018
			/* UP      LEFT    */
			0x070b0067 0x070c0069>;
	};

	fimd@14400000 {
		samsung,vl-freq = <60>;
		samsung,vl-col = <1366>;
		samsung,vl-row = <768>;
		samsung,vl-width = <1366>;
		samsung,vl-height = <768>;

		samsung,vl-clkp;
		samsung,vl-dp;
		samsung,vl-hsp;
		samsung,vl-vsp;

		samsung,vl-bpix = <4>;

		samsung,vl-hspw = <32>;
		samsung,vl-hbpd = <80>;
		samsung,vl-hfpd = <48>;
		samsung,vl-vspw = <5>;
		samsung,vl-vbpd = <14>;
		samsung,vl-vfpd = <3>;
		samsung,vl-cmd-allow-len = <0xf>;

		samsung,winid = <0>;
		samsung,interface-mode = <1>;
		samsung,dp-enabled = <1>;
		samsung,dual-lcd-enabled = <0>;
	};

	dp@145b0000 {
		samsung,lt-status = <0>;

		samsung,master-mode = <0>;
		samsung,bist-mode = <0>;
		samsung,bist-pattern = <0>;
		samsung,h-sync-polarity = <0>;
		samsung,v-sync-polarity = <0>;
		samsung,interlaced = <0>;
		samsung,color-space = <0>;
		samsung,dynamic-range = <0>;
		samsung,ycbcr-coeff = <0>;
		samsung,color-depth = <1>;
	};

};
