1/*
2 * Copyright (c) 2014, 2015 Andy Yan <andy.yan@rock-chips.com>
3 *
4 * This file is dual-licensed: you can use it either under the terms
5 * of the GPL or the X11 license, at your option. Note that this dual
6 * licensing only applies to this file, and not this project as a
7 * whole.
8 *
9 *  a) This file is free software; you can redistribute it and/or
10 *     modify it under the terms of the GNU General Public License as
11 *     published by the Free Software Foundation; either version 2 of the
12 *     License, or (at your option) any later version.
13 *
14 *     This file is distributed in the hope that it will be useful,
15 *     but WITHOUT ANY WARRANTY; without even the implied warranty of
16 *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 *     GNU General Public License for more details.
18 *
19 *  Or, alternatively,
20 *
21 *  b) Permission is hereby granted, free of charge, to any person
22 *     obtaining a copy of this software and associated documentation
23 *     files (the "Software"), to deal in the Software without
24 *     restriction, including without limitation the rights to use,
25 *     copy, modify, merge, publish, distribute, sublicense, and/or
26 *     sell copies of the Software, and to permit persons to whom the
27 *     Software is furnished to do so, subject to the following
28 *     conditions:
29 *
30 *     The above copyright notice and this permission notice shall be
31 *     included in all copies or substantial portions of the Software.
32 *
33 *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34 *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35 *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36 *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37 *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
38 *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39 *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40 *     OTHER DEALINGS IN THE SOFTWARE.
41 */
42
43/dts-v1/;
44
45#include "rk3288.dtsi"
46
47/ {
48	model = "PopMetal-RK3288";
49	compatible = "chipspark,popmetal-rk3288", "rockchip,rk3288";
50
51	memory{
52		reg = <0 0x80000000>;
53	};
54
55	ext_gmac: external-gmac-clock {
56		compatible = "fixed-clock";
57		clock-frequency = <125000000>;
58		clock-output-names = "ext_gmac";
59		#clock-cells = <0>;
60	};
61
62	gpio-keys {
63		compatible = "gpio-keys";
64		#address-cells = <1>;
65		#size-cells = <0>;
66		autorepeat;
67
68		pinctrl-names = "default";
69		pinctrl-0 = <&pwrbtn>;
70
71		button@0 {
72			gpios = <&gpio0 5 GPIO_ACTIVE_LOW>;
73			linux,code = <116>;
74			label = "GPIO Key Power";
75			linux,input-type = <1>;
76			gpio-key,wakeup = <1>;
77			debounce-interval = <100>;
78		};
79	};
80
81	ir: ir-receiver {
82		compatible = "gpio-ir-receiver";
83		gpios = <&gpio0 6 GPIO_ACTIVE_LOW>;
84		pinctrl-names = "default";
85		pinctrl-0 = <&ir_int>;
86	};
87
88	vcc_sys: vsys-regulator {
89		compatible = "regulator-fixed";
90		regulator-name = "vcc_sys";
91		regulator-min-microvolt = <5000000>;
92		regulator-max-microvolt = <5000000>;
93		regulator-always-on;
94		regulator-boot-on;
95	};
96};
97
98&cpu0 {
99	cpu0-supply = <&vdd_cpu>;
100};
101
102&emmc {
103	broken-cd;
104	bus-width = <8>;
105	cap-mmc-highspeed;
106	disable-wp;
107	non-removable;
108	num-slots = <1>;
109	pinctrl-names = "default";
110	pinctrl-0 = <&emmc_clk &emmc_cmd &emmc_pwr &emmc_bus8>;
111	status = "okay";
112};
113
114&sdmmc {
115	bus-width = <4>;
116	cap-mmc-highspeed;
117	cap-sd-highspeed;
118	card-detect-delay = <200>;
119	disable-wp;                     /* wp not hooked up */
120	num-slots = <1>;
121	pinctrl-names = "default";
122	pinctrl-0 = <&sdmmc_clk &sdmmc_cmd &sdmmc_cd &sdmmc_bus4>;
123	status = "okay";
124};
125
126&gmac {
127	phy-supply = <&vcc_lan>;
128	phy-mode = "rgmii";
129	clock_in_out = "input";
130	snps,reset-gpio = <&gpio4 7 0>;
131	snps,reset-active-low;
132	snps,reset-delays-us = <0 10000 1000000>;
133	assigned-clocks = <&cru SCLK_MAC>;
134	assigned-clock-parents = <&ext_gmac>;
135	pinctrl-names = "default";
136	pinctrl-0 = <&rgmii_pins>;
137	tx_delay = <0x30>;
138	rx_delay = <0x10>;
139	status = "ok";
140};
141
142&hdmi {
143	ddc-i2c-bus = <&i2c5>;
144	status = "okay";
145};
146
147&i2c0 {
148	status = "okay";
149	clock-frequency = <400000>;
150
151	rk808: pmic@1b {
152		compatible = "rockchip,rk808";
153		reg = <0x1b>;
154		interrupt-parent = <&gpio0>;
155		interrupts = <4 IRQ_TYPE_LEVEL_LOW>;
156		pinctrl-names = "default";
157		pinctrl-0 = <&pmic_int &global_pwroff>;
158		rockchip,system-power-controller;
159		wakeup-source;
160		#clock-cells = <1>;
161		clock-output-names = "xin32k", "rk808-clkout2";
162
163		vcc1-supply = <&vcc_sys>;
164		vcc2-supply = <&vcc_sys>;
165		vcc3-supply = <&vcc_sys>;
166		vcc4-supply = <&vcc_sys>;
167		vcc6-supply = <&vcc_sys>;
168		vcc7-supply = <&vcc_sys>;
169		vcc8-supply = <&vcc_18>;
170		vcc9-supply = <&vcc_io>;
171		vcc10-supply = <&vcc_io>;
172		vcc11-supply = <&vcc_sys>;
173		vcc12-supply = <&vcc_io>;
174		vddio-supply = <&vcc_io>;
175
176		regulators {
177			vdd_cpu: DCDC_REG1 {
178				regulator-always-on;
179				regulator-boot-on;
180				regulator-min-microvolt = <750000>;
181				regulator-max-microvolt = <1350000>;
182				regulator-name = "vdd_arm";
183				regulator-state-mem {
184					regulator-off-in-suspend;
185				};
186			};
187
188			vdd_gpu: DCDC_REG2 {
189				regulator-always-on;
190				regulator-boot-on;
191				regulator-min-microvolt = <850000>;
192				regulator-max-microvolt = <1250000>;
193				regulator-name = "vdd_gpu";
194				regulator-state-mem {
195					regulator-on-in-suspend;
196					regulator-suspend-microvolt = <1000000>;
197				};
198			};
199
200			vcc_ddr: DCDC_REG3 {
201				regulator-always-on;
202				regulator-boot-on;
203				regulator-name = "vcc_ddr";
204				regulator-state-mem {
205					regulator-on-in-suspend;
206				};
207			};
208
209			vcc_io: DCDC_REG4 {
210				regulator-always-on;
211				regulator-boot-on;
212				regulator-min-microvolt = <3300000>;
213				regulator-max-microvolt = <3300000>;
214				regulator-name = "vcc_io";
215				regulator-state-mem {
216					regulator-on-in-suspend;
217					regulator-suspend-microvolt = <3300000>;
218				};
219			};
220
221			vcc_lan: LDO_REG1 {
222				regulator-always-on;
223				regulator-boot-on;
224				regulator-min-microvolt = <3300000>;
225				regulator-max-microvolt = <3300000>;
226				regulator-name = "vcc_lan";
227				regulator-state-mem {
228					regulator-on-in-suspend;
229					regulator-suspend-microvolt = <3300000>;
230				};
231			};
232
233			vccio_sd: LDO_REG2 {
234				regulator-always-on;
235				regulator-boot-on;
236				regulator-min-microvolt = <3300000>;
237				regulator-max-microvolt = <3300000>;
238				regulator-name = "vccio_sd";
239				regulator-state-mem {
240					regulator-off-in-suspend;
241				};
242			};
243
244			vdd_10: LDO_REG3 {
245				regulator-always-on;
246				regulator-boot-on;
247				regulator-min-microvolt = <1000000>;
248				regulator-max-microvolt = <1000000>;
249				regulator-name = "vdd_10";
250				regulator-state-mem {
251					regulator-on-in-suspend;
252					regulator-suspend-microvolt = <1000000>;
253				};
254			};
255
256			vcc18_lcd: LDO_REG4 {
257				regulator-always-on;
258				regulator-boot-on;
259				regulator-min-microvolt = <1800000>;
260				regulator-max-microvolt = <1800000>;
261				regulator-name = "vcc18_lcd";
262				regulator-state-mem {
263					regulator-on-in-suspend;
264					regulator-suspend-microvolt = <1800000>;
265				};
266			};
267
268			ldo5: LDO_REG5 {
269				regulator-always-on;
270				regulator-min-microvolt = <1800000>;
271				regulator-max-microvolt = <3300000>;
272				regulator-name = "ldo5";
273			};
274
275			vdd10_lcd: LDO_REG6 {
276				regulator-always-on;
277				regulator-boot-on;
278				regulator-min-microvolt = <1000000>;
279				regulator-max-microvolt = <1000000>;
280				regulator-name = "vdd10_lcd";
281				regulator-state-mem {
282					regulator-on-in-suspend;
283					regulator-suspend-microvolt = <1000000>;
284				};
285			};
286
287			vcc_18: LDO_REG7 {
288				regulator-always-on;
289				regulator-boot-on;
290				regulator-min-microvolt = <1800000>;
291				regulator-max-microvolt = <1800000>;
292				regulator-name = "vcc_18";
293				regulator-state-mem {
294					regulator-on-in-suspend;
295					regulator-suspend-microvolt = <1800000>;
296				};
297			};
298
299			vcca_codec: LDO_REG8 {
300				regulator-always-on;
301				regulator-boot-on;
302				regulator-min-microvolt = <3300000>;
303				regulator-max-microvolt = <3300000>;
304				regulator-name = "vcca_codec";
305				regulator-state-mem {
306					regulator-on-in-suspend;
307					regulator-suspend-microvolt = <3300000>;
308				};
309			};
310
311			vcc_wl: SWITCH_REG1 {
312				regulator-always-on;
313				regulator-boot-on;
314				regulator-name = "vcc_wl";
315				regulator-state-mem {
316					regulator-on-in-suspend;
317				};
318			};
319
320			vcc_lcd: SWITCH_REG2 {
321				regulator-always-on;
322				regulator-boot-on;
323				regulator-name = "vcc_lcd";
324				regulator-state-mem {
325					regulator-on-in-suspend;
326				};
327			};
328		};
329	};
330};
331
332&i2c1 {
333	status = "okay";
334	clock-frequency = <400000>;
335
336	ak8963: ak8963@0d {
337		compatible = "asahi-kasei,ak8975";
338		reg = <0x0d>;
339		interrupt-parent = <&gpio8>;
340		interrupts = <1 IRQ_TYPE_EDGE_RISING>;
341		pinctrl-names = "default";
342		pinctrl-0 = <&comp_int>;
343	};
344
345	l3g4200d: l3g4200d@68 {
346		compatible = "st,l3g4200d-gyro";
347		st,drdy-int-pin = <2>;
348		reg = <0x6b>;
349	};
350
351	mma8452: mma8452@1d {
352		compatible = "fsl,mma8452";
353		reg = <0x1d>;
354		interrupt-parent = <&gpio8>;
355		interrupts = <0 IRQ_TYPE_EDGE_RISING>;
356		pinctrl-names = "default";
357		pinctrl-0 = <&gsensor_int>;
358	};
359};
360
361&i2c2 {
362	status = "okay";
363};
364
365&i2c3 {
366	status = "okay";
367};
368
369&i2c4 {
370	status = "okay";
371};
372
373&i2c5 {
374	status = "okay";
375};
376
377&pinctrl {
378	ak8963 {
379		comp_int: comp-int {
380			rockchip,pins = <8 1 RK_FUNC_GPIO &pcfg_pull_up>;
381		};
382	};
383
384	buttons {
385		pwrbtn: pwrbtn {
386			rockchip,pins = <0 5 RK_FUNC_GPIO &pcfg_pull_up>;
387		};
388	};
389
390	ir {
391		ir_int: ir-int {
392			rockchip,pins = <0 6 RK_FUNC_GPIO &pcfg_pull_up>;
393		};
394	};
395
396	mma8452 {
397		gsensor_int: gsensor-int {
398			rockchip,pins = <8 0 RK_FUNC_GPIO &pcfg_pull_up>;
399		};
400	};
401
402	pmic {
403		pmic_int: pmic-int {
404			rockchip,pins = <RK_GPIO0 4 RK_FUNC_GPIO &pcfg_pull_up>;
405		};
406	};
407};
408
409&vopb {
410	status = "okay";
411};
412
413&vopb_mmu {
414	status = "okay";
415};
416
417&vopl {
418	status = "okay";
419};
420
421&vopl_mmu {
422	status = "okay";
423};
424
425&uart0 {
426	status = "okay";
427};
428
429&uart1 {
430	status = "okay";
431};
432
433&uart2 {
434	status = "okay";
435};
436
437&uart3 {
438	status = "okay";
439};
440
441&uart4 {
442	status = "okay";
443};
444
445&usbphy {
446	status = "okay";
447};
448