/*
 * 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", "samsung,exynos5";

	aliases {
		i2c104 = &i2c_104;
	};

	rtc@101E0000 {
		status = "okay";
	};

	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>;
		};
	};
};
