/*
 * Google Snow board device tree source
 *
 * Copyright (c) 2012 Google, Inc
 *
 * 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"
#include "exynos5250-cros-common.dtsi"

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

	aliases {
		i2c104 = &i2c_104;
	};

	pinctrl@11400000 {
		sd3_clk: sd3-clk {
			samsung,pin-drv = <0>;
		};

		sd3_cmd: sd3-cmd {
			samsung,pin-pud = <3>;
			samsung,pin-drv = <0>;
		};

		sd3_bus4: sd3-bus-width4 {
			samsung,pin-drv = <0>;
		};
	};

	gpio-keys {
		compatible = "gpio-keys";

		lid-switch {
			label = "Lid";
			gpios = <&gpx3 5 1>;
			linux,input-type = <5>; /* EV_SW */
			linux,code = <0>; /* SW_LID */
			debounce-interval = <1>;
			gpio-key,wakeup;
		};
	};

	i2c-arbitrator {
		compatible = "i2c-arb-gpio-challenge";
		#address-cells = <1>;
		#size-cells = <0>;

		i2c-parent = <&{/i2c@12CA0000}>;

		our-claim-gpio = <&gpf0 3 1>;
		their-claim-gpios = <&gpe0 4 1>;
		slew-delay-us = <10>;
		wait-retry-us = <3000>;
		wait-free-us = <50000>;

		/* Use ID 104 as a hint that we're on physical bus 4 */
		i2c_104: i2c@0 {
			reg = <0>;
			#address-cells = <1>;
			#size-cells = <0>;

			battery: sbs-battery@b {
				compatible = "sbs,sbs-battery";
				reg = <0xb>;
				sbs,poll-retry-count = <1>;
			};

			ec: embedded-controller {
				compatible = "google,cros-ec-i2c";
				reg = <0x1e>;
				interrupts = <6 0>;
				interrupt-parent = <&gpx1>;
				wakeup-source;

				keyboard-controller {
				        compatible = "google,cros-ec-keyb";
				        keypad,num-rows = <8>;
				        keypad,num-columns = <13>;
				        google,needs-ghost-filter;
					linux,keymap = <0x0001007d	/* L_META */
							0x0002003b	/* F1 */
							0x00030030	/* B */
							0x00040044	/* F10 */
							0x00060031	/* N */
							0x0008000d	/* = */
							0x000a0064	/* R_ALT */

							0x01010001	/* ESC */
							0x0102003e	/* F4 */
							0x01030022	/* G */
							0x01040041	/* F7 */
							0x01060023	/* H */
							0x01080028	/* ' */
							0x01090043	/* F9 */
							0x010b000e	/* BKSPACE */

							0x0200001d	/* L_CTRL */
							0x0201000f	/* TAB */
							0x0202003d	/* F3 */
							0x02030014	/* T */
							0x02040040	/* F6 */
							0x0205001b	/* ] */
							0x02060015	/* Y */
							0x02070056	/* 102ND */
							0x0208001a	/* [ */
							0x02090042	/* F8 */

							0x03010029	/* GRAVE */
							0x0302003c	/* F2 */
							0x03030006	/* 5 */
							0x0304003f	/* F5 */
							0x03060007	/* 6 */
							0x0308000c	/* - */
							0x030b002b	/* \ */

							0x04000061	/* R_CTRL */
							0x0401001e	/* A */
							0x04020020	/* D */
							0x04030021	/* F */
							0x0404001f	/* S */
							0x04050025	/* K */
							0x04060024	/* J */
							0x04080027	/* ; */
							0x04090026	/* L */
							0x040a002b	/* \ */
							0x040b001c	/* ENTER */

							0x0501002c	/* Z */
							0x0502002e	/* C */
							0x0503002f	/* V */
							0x0504002d	/* X */
							0x05050033	/* , */
							0x05060032	/* M */
							0x0507002a	/* L_SHIFT */
							0x05080035	/* / */
							0x05090034	/* . */
							0x050B0039	/* SPACE */

							0x06010002	/* 1 */
							0x06020004	/* 3 */
							0x06030005	/* 4 */
							0x06040003	/* 2 */
							0x06050009	/* 8 */
							0x06060008	/* 7 */
							0x0608000b	/* 0 */
							0x0609000a	/* 9 */
							0x060a0038	/* L_ALT */
							0x060b006c	/* DOWN */
							0x060c006a	/* RIGHT */

							0x07010010	/* Q */
							0x07020012	/* E */
							0x07030013	/* R */
							0x07040011	/* W */
							0x07050017	/* I */
							0x07060016	/* U */
							0x07070036	/* R_SHIFT */
							0x07080019	/* P */
							0x07090018	/* O */
							0x070b0067	/* UP */
							0x070c0069>;	/* LEFT */
				};
			};
		};
	};

	mmc@12200000 {
		status = "okay";
	};

	mmc@12220000 {
		status = "okay";
	};

	/*
	 * On Snow we've got SIP WiFi and so can keep drive strengths low to
	 * reduce EMI.
	 */
	mmc@12230000 {
		status = "okay";
		slot@0 {
			pinctrl-names = "default";
			pinctrl-0 = <&sd3_clk &sd3_cmd &sd3_bus4>;
		};
	};

	usb@12110000 {
		samsung,vbus-gpio = <&gpx1 1 0>;
	};

	fixed-rate-clocks {
		xxti {
			compatible = "samsung,clock-xxti";
			clock-frequency = <24000000>;
		};
	};
};
