/*
 * 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@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 0x309 0>; /* X11 */
	};

	xhci@12000000 {
		samsung,vbus-gpio = <&gpio 0x317 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>;
	};

};
