1/*
2 * Google Snow board device tree source
3 *
4 * Copyright (c) 2012 Google, Inc
5 *
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License version 2 as
8 * published by the Free Software Foundation.
9 */
10
11#include <dt-bindings/gpio/gpio.h>
12#include <dt-bindings/clock/maxim,max77686.h>
13#include <dt-bindings/interrupt-controller/irq.h>
14#include <dt-bindings/input/input.h>
15#include "exynos5250.dtsi"
16
17/ {
18	aliases {
19		i2c104 = &i2c_104;
20	};
21
22	memory {
23		reg = <0x40000000 0x80000000>;
24	};
25
26	chosen {
27		bootargs = "console=tty1";
28		stdout-path = "serial3:115200n8";
29	};
30
31	gpio-keys {
32		compatible = "gpio-keys";
33		pinctrl-names = "default";
34		pinctrl-0 = <&power_key_irq &lid_irq>;
35
36		power {
37			label = "Power";
38			gpios = <&gpx1 3 GPIO_ACTIVE_LOW>;
39			linux,code = <KEY_POWER>;
40			gpio-key,wakeup;
41		};
42
43		lid-switch {
44			label = "Lid";
45			gpios = <&gpx3 5 GPIO_ACTIVE_LOW>;
46			linux,input-type = <5>; /* EV_SW */
47			linux,code = <0>; /* SW_LID */
48			debounce-interval = <1>;
49			gpio-key,wakeup;
50		};
51	};
52
53	vbat: vbat-fixed-regulator {
54		compatible = "regulator-fixed";
55		regulator-name = "vbat-supply";
56		regulator-boot-on;
57	};
58
59	i2c-arbitrator {
60		compatible = "i2c-arb-gpio-challenge";
61		#address-cells = <1>;
62		#size-cells = <0>;
63
64		i2c-parent = <&{/i2c@12CA0000}>;
65
66		our-claim-gpio = <&gpf0 3 GPIO_ACTIVE_LOW>;
67		their-claim-gpios = <&gpe0 4 GPIO_ACTIVE_LOW>;
68		slew-delay-us = <10>;
69		wait-retry-us = <3000>;
70		wait-free-us = <50000>;
71
72		pinctrl-names = "default";
73		pinctrl-0 = <&arb_our_claim &arb_their_claim>;
74
75		/* Use ID 104 as a hint that we're on physical bus 4 */
76		i2c_104: i2c@0 {
77			reg = <0>;
78			#address-cells = <1>;
79			#size-cells = <0>;
80
81			battery: sbs-battery@b {
82				compatible = "sbs,sbs-battery";
83				reg = <0xb>;
84				sbs,poll-retry-count = <1>;
85			};
86
87			cros_ec: embedded-controller {
88				compatible = "google,cros-ec-i2c";
89				reg = <0x1e>;
90				interrupts = <6 IRQ_TYPE_NONE>;
91				interrupt-parent = <&gpx1>;
92				pinctrl-names = "default";
93				pinctrl-0 = <&ec_irq>;
94				wakeup-source;
95			};
96
97			power-regulator {
98				compatible = "ti,tps65090";
99				reg = <0x48>;
100
101				/*
102				 * Config irq to disable internal pulls
103				 * even though we run in polling mode.
104				 */
105				pinctrl-names = "default";
106				pinctrl-0 = <&tps65090_irq>;
107
108				vsys1-supply = <&vbat>;
109				vsys2-supply = <&vbat>;
110				vsys3-supply = <&vbat>;
111				infet1-supply = <&vbat>;
112				infet2-supply = <&vbat>;
113				infet3-supply = <&vbat>;
114				infet4-supply = <&vbat>;
115				infet5-supply = <&vbat>;
116				infet6-supply = <&vbat>;
117				infet7-supply = <&vbat>;
118				vsys-l1-supply = <&vbat>;
119				vsys-l2-supply = <&vbat>;
120
121				regulators {
122					dcdc1 {
123						ti,enable-ext-control;
124					};
125					dcdc2 {
126						ti,enable-ext-control;
127					};
128					dcdc3 {
129						ti,enable-ext-control;
130					};
131					fet1: fet1 {
132						regulator-name = "vcd_led";
133						ti,overcurrent-wait = <3>;
134					};
135					tps65090_fet2: fet2 {
136						regulator-name = "video_mid";
137						regulator-always-on;
138						ti,overcurrent-wait = <3>;
139					};
140					fet3 {
141						regulator-name = "wwan_r";
142						regulator-always-on;
143						ti,overcurrent-wait = <3>;
144					};
145					fet4 {
146						regulator-name = "sdcard";
147						ti,overcurrent-wait = <3>;
148					};
149					fet5 {
150						regulator-name = "camout";
151						regulator-always-on;
152						ti,overcurrent-wait = <3>;
153					};
154					fet6: fet6 {
155						regulator-name = "lcd_vdd";
156						ti,overcurrent-wait = <3>;
157					};
158					tps65090_fet7: fet7 {
159						regulator-name = "video_mid_1a";
160						regulator-always-on;
161						ti,overcurrent-wait = <3>;
162					};
163					ldo1 {
164					};
165					ldo2 {
166					};
167				};
168
169				charger {
170					compatible = "ti,tps65090-charger";
171				};
172			};
173		};
174	};
175
176	sound {
177		samsung,i2s-controller = <&i2s0>;
178	};
179
180	usb3_vbus_reg: regulator-usb3 {
181		compatible = "regulator-fixed";
182		regulator-name = "P5.0V_USB3CON";
183		regulator-min-microvolt = <5000000>;
184		regulator-max-microvolt = <5000000>;
185		gpio = <&gpx2 7 GPIO_ACTIVE_HIGH>;
186		pinctrl-names = "default";
187		pinctrl-0 = <&usb3_vbus_en>;
188		enable-active-high;
189	};
190
191	fixed-rate-clocks {
192		xxti {
193			compatible = "samsung,clock-xxti";
194			clock-frequency = <24000000>;
195		};
196	};
197
198	backlight: backlight {
199		compatible = "pwm-backlight";
200		pwms = <&pwm 0 1000000 0>;
201		brightness-levels = <0 100 500 1000 1500 2000 2500 2800>;
202		default-brightness-level = <7>;
203		enable-gpios = <&gpx3 0 GPIO_ACTIVE_HIGH>;
204		power-supply = <&fet1>;
205		pinctrl-0 = <&pwm0_out>;
206		pinctrl-names = "default";
207	};
208
209	panel: panel {
210		compatible = "auo,b116xw03";
211		power-supply = <&fet6>;
212		backlight = <&backlight>;
213
214		port {
215			panel_in: endpoint {
216				remote-endpoint = <&bridge_out>;
217			};
218		};
219	};
220
221	mmc3_pwrseq: mmc3_pwrseq {
222		compatible = "mmc-pwrseq-simple";
223		reset-gpios = <&gpx0 2 GPIO_ACTIVE_LOW>, /* WIFI_RSTn */
224			      <&gpx0 1 GPIO_ACTIVE_LOW>; /* WIFI_EN */
225		clocks = <&max77686 MAX77686_CLK_PMIC>;
226		clock-names = "ext_clock";
227	};
228};
229
230&cpu0 {
231	cpu0-supply = <&buck2_reg>;
232};
233
234&dp {
235	status = "okay";
236	pinctrl-names = "default";
237	pinctrl-0 = <&dp_hpd>;
238	samsung,color-space = <0>;
239	samsung,dynamic-range = <0>;
240	samsung,ycbcr-coeff = <0>;
241	samsung,color-depth = <1>;
242	samsung,link-rate = <0x0a>;
243	samsung,lane-count = <2>;
244	samsung,hpd-gpio = <&gpx0 7 GPIO_ACTIVE_HIGH>;
245
246	ports {
247		port@0 {
248			dp_out: endpoint {
249				remote-endpoint = <&bridge_in>;
250			};
251		};
252	};
253};
254
255&ehci {
256	samsung,vbus-gpio = <&gpx1 1 GPIO_ACTIVE_HIGH>;
257};
258
259&fimd {
260	status = "okay";
261	samsung,invert-vclk;
262};
263
264&hdmi {
265	hpd-gpio = <&gpx3 7 GPIO_ACTIVE_HIGH>;
266	pinctrl-names = "default";
267	pinctrl-0 = <&hdmi_hpd_irq>;
268	phy = <&hdmiphy>;
269	ddc = <&i2c_2>;
270	hdmi-en-supply = <&tps65090_fet7>;
271	vdd-supply = <&ldo8_reg>;
272	vdd_osc-supply = <&ldo10_reg>;
273	vdd_pll-supply = <&ldo8_reg>;
274};
275
276&i2c_0 {
277	status = "okay";
278	samsung,i2c-sda-delay = <100>;
279	samsung,i2c-max-bus-freq = <378000>;
280
281	max77686: max77686@09 {
282		compatible = "maxim,max77686";
283		interrupt-parent = <&gpx3>;
284		interrupts = <2 IRQ_TYPE_NONE>;
285		pinctrl-names = "default";
286		pinctrl-0 = <&max77686_irq>;
287		wakeup-source;
288		reg = <0x09>;
289		#clock-cells = <1>;
290
291		voltage-regulators {
292			ldo1_reg: LDO1 {
293				regulator-name = "P1.0V_LDO_OUT1";
294				regulator-min-microvolt = <1000000>;
295				regulator-max-microvolt = <1000000>;
296				regulator-always-on;
297			};
298
299			ldo2_reg: LDO2 {
300				regulator-name = "P1.8V_LDO_OUT2";
301				regulator-min-microvolt = <1800000>;
302				regulator-max-microvolt = <1800000>;
303				regulator-always-on;
304			};
305
306			ldo3_reg: LDO3 {
307				regulator-name = "P1.8V_LDO_OUT3";
308				regulator-min-microvolt = <1800000>;
309				regulator-max-microvolt = <1800000>;
310				regulator-always-on;
311			};
312
313			ldo7_reg: LDO7 {
314				regulator-name = "P1.1V_LDO_OUT7";
315				regulator-min-microvolt = <1100000>;
316				regulator-max-microvolt = <1100000>;
317				regulator-always-on;
318			};
319
320			ldo8_reg: LDO8 {
321				regulator-name = "P1.0V_LDO_OUT8";
322				regulator-min-microvolt = <1000000>;
323				regulator-max-microvolt = <1000000>;
324				regulator-always-on;
325			};
326
327			ldo10_reg: LDO10 {
328				regulator-name = "P1.8V_LDO_OUT10";
329				regulator-min-microvolt = <1800000>;
330				regulator-max-microvolt = <1800000>;
331				regulator-always-on;
332			};
333
334			ldo12_reg: LDO12 {
335				regulator-name = "P3.0V_LDO_OUT12";
336				regulator-min-microvolt = <3000000>;
337				regulator-max-microvolt = <3000000>;
338				regulator-always-on;
339			};
340
341			ldo14_reg: LDO14 {
342				regulator-name = "P1.8V_LDO_OUT14";
343				regulator-min-microvolt = <1800000>;
344				regulator-max-microvolt = <1800000>;
345				regulator-always-on;
346			};
347
348			ldo15_reg: LDO15 {
349				regulator-name = "P1.0V_LDO_OUT15";
350				regulator-min-microvolt = <1000000>;
351				regulator-max-microvolt = <1000000>;
352				regulator-always-on;
353			};
354
355			ldo16_reg: LDO16 {
356				regulator-name = "P1.8V_LDO_OUT16";
357				regulator-min-microvolt = <1800000>;
358				regulator-max-microvolt = <1800000>;
359				regulator-always-on;
360			};
361
362			buck1_reg: BUCK1 {
363				regulator-name = "vdd_mif";
364				regulator-min-microvolt = <950000>;
365				regulator-max-microvolt = <1300000>;
366				regulator-always-on;
367				regulator-boot-on;
368			};
369
370			buck2_reg: BUCK2 {
371				regulator-name = "vdd_arm";
372				regulator-min-microvolt = <850000>;
373				regulator-max-microvolt = <1350000>;
374				regulator-always-on;
375				regulator-boot-on;
376			};
377
378			buck3_reg: BUCK3 {
379				regulator-name = "vdd_int";
380				regulator-min-microvolt = <900000>;
381				regulator-max-microvolt = <1200000>;
382				regulator-always-on;
383				regulator-boot-on;
384			};
385
386			buck4_reg: BUCK4 {
387				regulator-name = "vdd_g3d";
388				regulator-min-microvolt = <850000>;
389				regulator-max-microvolt = <1300000>;
390				regulator-always-on;
391				regulator-boot-on;
392			};
393
394			buck5_reg: BUCK5 {
395				regulator-name = "P1.8V_BUCK_OUT5";
396				regulator-min-microvolt = <1800000>;
397				regulator-max-microvolt = <1800000>;
398				regulator-always-on;
399				regulator-boot-on;
400			};
401
402			buck6_reg: BUCK6 {
403				regulator-name = "P1.35V_BUCK_OUT6";
404				regulator-min-microvolt = <1350000>;
405				regulator-max-microvolt = <1350000>;
406				regulator-always-on;
407			};
408
409			buck7_reg: BUCK7 {
410				regulator-name = "P2.0V_BUCK_OUT7";
411				regulator-min-microvolt = <2000000>;
412				regulator-max-microvolt = <2000000>;
413				regulator-always-on;
414			};
415
416			buck8_reg: BUCK8 {
417				regulator-name = "P2.85V_BUCK_OUT8";
418				regulator-min-microvolt = <2850000>;
419				regulator-max-microvolt = <2850000>;
420				regulator-always-on;
421			};
422		};
423	};
424};
425
426&i2c_1 {
427	status = "okay";
428	samsung,i2c-sda-delay = <100>;
429	samsung,i2c-max-bus-freq = <378000>;
430
431	trackpad {
432		reg = <0x67>;
433		compatible = "cypress,cyapa";
434		interrupts = <2 IRQ_TYPE_NONE>;
435		interrupt-parent = <&gpx1>;
436		wakeup-source;
437	};
438};
439
440/*
441 * Disabled pullups since external part has its own pullups and
442 * double-pulling gets us out of spec in some cases.
443 */
444&i2c2_bus {
445	samsung,pin-pud = <0>;
446};
447
448&i2c_2 {
449	status = "okay";
450	samsung,i2c-sda-delay = <100>;
451	samsung,i2c-max-bus-freq = <66000>;
452
453	hdmiddc@50 {
454		compatible = "samsung,exynos4210-hdmiddc";
455		reg = <0x50>;
456	};
457};
458
459&i2c_3 {
460	status = "okay";
461	samsung,i2c-sda-delay = <100>;
462	samsung,i2c-max-bus-freq = <66000>;
463};
464
465&i2c_4 {
466	status = "okay";
467	samsung,i2c-sda-delay = <100>;
468	samsung,i2c-max-bus-freq = <66000>;
469};
470
471&i2c_5 {
472	status = "okay";
473	samsung,i2c-sda-delay = <100>;
474	samsung,i2c-max-bus-freq = <66000>;
475};
476
477&i2c_7 {
478	status = "okay";
479	samsung,i2c-sda-delay = <100>;
480	samsung,i2c-max-bus-freq = <66000>;
481
482	ptn3460: lvds-bridge@20 {
483		compatible = "nxp,ptn3460";
484		reg = <0x20>;
485		powerdown-gpios = <&gpy2 5 GPIO_ACTIVE_HIGH>;
486		reset-gpios = <&gpx1 5 GPIO_ACTIVE_HIGH>;
487		edid-emulation = <5>;
488
489		ports {
490			port@0 {
491				bridge_out: endpoint {
492					remote-endpoint = <&panel_in>;
493				};
494			};
495
496			port@1 {
497				bridge_in: endpoint {
498					remote-endpoint = <&dp_out>;
499				};
500			};
501		};
502	};
503};
504
505&i2c_8 {
506	status = "okay";
507	samsung,i2c-sda-delay = <100>;
508	samsung,i2c-max-bus-freq = <378000>;
509
510	hdmiphy: hdmiphy@38 {
511		compatible = "samsung,exynos4212-hdmiphy";
512		reg = <0x38>;
513	};
514};
515
516&i2s0 {
517	status = "okay";
518};
519
520&mmc_0 {
521	status = "okay";
522	num-slots = <1>;
523	broken-cd;
524	card-detect-delay = <200>;
525	samsung,dw-mshc-ciu-div = <3>;
526	samsung,dw-mshc-sdr-timing = <2 3>;
527	samsung,dw-mshc-ddr-timing = <1 2>;
528	pinctrl-names = "default";
529	pinctrl-0 = <&sd0_clk &sd0_cmd &sd0_cd &sd0_bus4 &sd0_bus8>;
530	bus-width = <8>;
531	cap-mmc-highspeed;
532};
533
534&mmc_2 {
535	status = "okay";
536	num-slots = <1>;
537	card-detect-delay = <200>;
538	samsung,dw-mshc-ciu-div = <3>;
539	samsung,dw-mshc-sdr-timing = <2 3>;
540	samsung,dw-mshc-ddr-timing = <1 2>;
541	pinctrl-names = "default";
542	pinctrl-0 = <&sd2_clk &sd2_cmd &sd2_cd &sd2_bus4>;
543	bus-width = <4>;
544	wp-gpios = <&gpc2 1 GPIO_ACTIVE_HIGH>;
545	cap-sd-highspeed;
546};
547
548/*
549 * On Snow we've got SIP WiFi and so can keep drive strengths low to
550 * reduce EMI.
551 */
552&mmc_3 {
553	status = "okay";
554	num-slots = <1>;
555	broken-cd;
556	cap-sdio-irq;
557	keep-power-in-suspend;
558	card-detect-delay = <200>;
559	samsung,dw-mshc-ciu-div = <3>;
560	samsung,dw-mshc-sdr-timing = <2 3>;
561	samsung,dw-mshc-ddr-timing = <1 2>;
562	pinctrl-names = "default";
563	pinctrl-0 = <&sd3_clk &sd3_cmd &sd3_bus4 &wifi_en &wifi_rst>;
564	bus-width = <4>;
565	cap-sd-highspeed;
566	mmc-pwrseq = <&mmc3_pwrseq>;
567};
568
569&pinctrl_0 {
570	wifi_en: wifi-en {
571		samsung,pins = "gpx0-1";
572		samsung,pin-function = <1>;
573		samsung,pin-pud = <0>;
574		samsung,pin-drv = <0>;
575	};
576
577	wifi_rst: wifi-rst {
578		samsung,pins = "gpx0-2";
579		samsung,pin-function = <1>;
580		samsung,pin-pud = <0>;
581		samsung,pin-drv = <0>;
582	};
583
584	power_key_irq: power-key-irq {
585		samsung,pins = "gpx1-3";
586		samsung,pin-function = <0xf>;
587		samsung,pin-pud = <0>;
588		samsung,pin-drv = <0>;
589	};
590
591	ec_irq: ec-irq {
592		samsung,pins = "gpx1-6";
593		samsung,pin-function = <0>;
594		samsung,pin-pud = <0>;
595		samsung,pin-drv = <0>;
596	};
597
598	tps65090_irq: tps65090-irq {
599		samsung,pins = "gpx2-6";
600		samsung,pin-function = <0>;
601		samsung,pin-pud = <0>;
602		samsung,pin-drv = <0>;
603	};
604
605	usb3_vbus_en: usb3-vbus-en {
606		samsung,pins = "gpx2-7";
607		samsung,pin-function = <1>;
608		samsung,pin-pud = <0>;
609		samsung,pin-drv = <0>;
610	};
611
612	max77686_irq: max77686-irq {
613		samsung,pins = "gpx3-2";
614		samsung,pin-function = <0>;
615		samsung,pin-pud = <0>;
616		samsung,pin-drv = <0>;
617	};
618
619	lid_irq: lid-irq {
620		samsung,pins = "gpx3-5";
621		samsung,pin-function = <0xf>;
622		samsung,pin-pud = <0>;
623		samsung,pin-drv = <0>;
624	};
625
626	hdmi_hpd_irq: hdmi-hpd-irq {
627		samsung,pins = "gpx3-7";
628		samsung,pin-function = <0>;
629		samsung,pin-pud = <1>;
630		samsung,pin-drv = <0>;
631	};
632};
633
634&pinctrl_1 {
635	arb_their_claim: arb-their-claim {
636		samsung,pins = "gpe0-4";
637		samsung,pin-function = <0>;
638		samsung,pin-pud = <3>;
639		samsung,pin-drv = <0>;
640	};
641
642	arb_our_claim: arb-our-claim {
643		samsung,pins = "gpf0-3";
644		samsung,pin-function = <1>;
645		samsung,pin-pud = <0>;
646		samsung,pin-drv = <0>;
647	};
648};
649
650&rtc {
651	status = "okay";
652	clocks = <&clock CLK_RTC>, <&max77686 MAX77686_CLK_AP>;
653	clock-names = "rtc", "rtc_src";
654};
655
656&sd3_bus4 {
657	samsung,pin-drv = <0>;
658};
659
660&sd3_clk {
661	samsung,pin-drv = <0>;
662};
663
664&sd3_cmd {
665	samsung,pin-pud = <3>;
666	samsung,pin-drv = <0>;
667};
668
669&spi_1 {
670	status = "okay";
671	samsung,spi-src-clk = <0>;
672	num-cs = <1>;
673	cs-gpios = <&gpa2 5 GPIO_ACTIVE_HIGH>;
674};
675
676&usbdrd_dwc3 {
677	dr_mode = "host";
678};
679
680&usbdrd_phy {
681	vbus-supply = <&usb3_vbus_reg>;
682};
683
684#include "cros-ec-keyboard.dtsi"
685