/*
 * 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/ "cros5250-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 = <0x0001003a	/* CAPSLK */
							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 */
							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 */
				};
			};
		};
	};

	/*
	 * On Snow we've got SIP WiFi and so can keep drive strengths low to
	 * reduce EMI.
	 */
	dwmmc3@12230000 {
		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>;
		};
	};
};
