1deed69d6SHans de Goede/*
2deed69d6SHans de Goede * Copyright 2015 Hans de Goede <hdegoede@redhat.com>
3deed69d6SHans de Goede *
4deed69d6SHans de Goede * This file is dual-licensed: you can use it either under the terms
5deed69d6SHans de Goede * of the GPL or the X11 license, at your option. Note that this dual
6deed69d6SHans de Goede * licensing only applies to this file, and not this project as a
7deed69d6SHans de Goede * whole.
8deed69d6SHans de Goede *
9deed69d6SHans de Goede *  a) This file is free software; you can redistribute it and/or
10deed69d6SHans de Goede *     modify it under the terms of the GNU General Public License as
11deed69d6SHans de Goede *     published by the Free Software Foundation; either version 2 of the
12deed69d6SHans de Goede *     License, or (at your option) any later version.
13deed69d6SHans de Goede *
14deed69d6SHans de Goede *     This file is distributed in the hope that it will be useful,
15deed69d6SHans de Goede *     but WITHOUT ANY WARRANTY; without even the implied warranty of
16deed69d6SHans de Goede *     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17deed69d6SHans de Goede *     GNU General Public License for more details.
18deed69d6SHans de Goede *
19deed69d6SHans de Goede * Or, alternatively,
20deed69d6SHans de Goede *
21deed69d6SHans de Goede *  b) Permission is hereby granted, free of charge, to any person
22deed69d6SHans de Goede *     obtaining a copy of this software and associated documentation
23deed69d6SHans de Goede *     files (the "Software"), to deal in the Software without
24deed69d6SHans de Goede *     restriction, including without limitation the rights to use,
25deed69d6SHans de Goede *     copy, modify, merge, publish, distribute, sublicense, and/or
26deed69d6SHans de Goede *     sell copies of the Software, and to permit persons to whom the
27deed69d6SHans de Goede *     Software is furnished to do so, subject to the following
28deed69d6SHans de Goede *     conditions:
29deed69d6SHans de Goede *
30deed69d6SHans de Goede *     The above copyright notice and this permission notice shall be
31deed69d6SHans de Goede *     included in all copies or substantial portions of the Software.
32deed69d6SHans de Goede *
33deed69d6SHans de Goede *     THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
34deed69d6SHans de Goede *     EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
35deed69d6SHans de Goede *     OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
36deed69d6SHans de Goede *     NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
37deed69d6SHans de Goede *     HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
38deed69d6SHans de Goede *     WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
39deed69d6SHans de Goede *     FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
40deed69d6SHans de Goede *     OTHER DEALINGS IN THE SOFTWARE.
41deed69d6SHans de Goede */
42deed69d6SHans de Goede
43deed69d6SHans de Goede/dts-v1/;
44deed69d6SHans de Goede#include "sun4i-a10.dtsi"
45deed69d6SHans de Goede#include "sunxi-common-regulators.dtsi"
46deed69d6SHans de Goede#include <dt-bindings/gpio/gpio.h>
47deed69d6SHans de Goede#include <dt-bindings/input/input.h>
48deed69d6SHans de Goede#include <dt-bindings/interrupt-controller/irq.h>
49deed69d6SHans de Goede
50deed69d6SHans de Goede/ {
51deed69d6SHans de Goede	model = "iNet-9F Rev 03";
52deed69d6SHans de Goede	compatible = "inet-tek,inet9f-rev03", "allwinner,sun4i-a10";
53deed69d6SHans de Goede
54deed69d6SHans de Goede	aliases {
55deed69d6SHans de Goede		serial0 = &uart0;
56deed69d6SHans de Goede	};
57deed69d6SHans de Goede
58deed69d6SHans de Goede	chosen {
59deed69d6SHans de Goede		stdout-path = "serial0:115200n8";
60deed69d6SHans de Goede	};
6180e5f83cSHans de Goede
62*3c92cca3SJagan Teki	gpio-keys {
6380e5f83cSHans de Goede		compatible = "gpio-keys-polled";
6480e5f83cSHans de Goede		pinctrl-names = "default";
6580e5f83cSHans de Goede		pinctrl-0 = <&key_pins_inet9f>;
6680e5f83cSHans de Goede		#address-cells = <1>;
6780e5f83cSHans de Goede		#size-cells = <0>;
6880e5f83cSHans de Goede		poll-interval = <20>;
6980e5f83cSHans de Goede
70*3c92cca3SJagan Teki		left-joystick-left {
7180e5f83cSHans de Goede			label = "Left Joystick Left";
7280e5f83cSHans de Goede			linux,code = <ABS_X>;
7380e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
7480e5f83cSHans de Goede			linux,input-value = <0xffffffff>; /* -1 */
7580e5f83cSHans de Goede			gpios = <&pio 0 6 GPIO_ACTIVE_LOW>; /* PA6 */
7680e5f83cSHans de Goede		};
7780e5f83cSHans de Goede
78*3c92cca3SJagan Teki		left-joystick-right {
7980e5f83cSHans de Goede			label = "Left Joystick Right";
8080e5f83cSHans de Goede			linux,code = <ABS_X>;
8180e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
8280e5f83cSHans de Goede			linux,input-value = <1>;
8380e5f83cSHans de Goede			gpios = <&pio 0 5 GPIO_ACTIVE_LOW>; /* PA5 */
8480e5f83cSHans de Goede		};
8580e5f83cSHans de Goede
86*3c92cca3SJagan Teki		left-joystick-up {
8780e5f83cSHans de Goede			label = "Left Joystick Up";
8880e5f83cSHans de Goede			linux,code = <ABS_Y>;
8980e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
9080e5f83cSHans de Goede			linux,input-value = <0xffffffff>; /* -1 */
9180e5f83cSHans de Goede			gpios = <&pio 0 8 GPIO_ACTIVE_LOW>; /* PA8 */
9280e5f83cSHans de Goede		};
9380e5f83cSHans de Goede
94*3c92cca3SJagan Teki		left-joystick-down {
9580e5f83cSHans de Goede			label = "Left Joystick Down";
9680e5f83cSHans de Goede			linux,code = <ABS_Y>;
9780e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
9880e5f83cSHans de Goede			linux,input-value = <1>;
9980e5f83cSHans de Goede			gpios = <&pio 0 9 GPIO_ACTIVE_LOW>; /* PA9 */
10080e5f83cSHans de Goede		};
10180e5f83cSHans de Goede
102*3c92cca3SJagan Teki		right-joystick-left {
10380e5f83cSHans de Goede			label = "Right Joystick Left";
10480e5f83cSHans de Goede			linux,code = <ABS_Z>;
10580e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
10680e5f83cSHans de Goede			linux,input-value = <0xffffffff>; /* -1 */
10780e5f83cSHans de Goede			gpios = <&pio 0 1 GPIO_ACTIVE_LOW>; /* PA1 */
10880e5f83cSHans de Goede		};
10980e5f83cSHans de Goede
110*3c92cca3SJagan Teki		right-joystick-right {
11180e5f83cSHans de Goede			label = "Right Joystick Right";
11280e5f83cSHans de Goede			linux,code = <ABS_Z>;
11380e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
11480e5f83cSHans de Goede			linux,input-value = <1>;
11580e5f83cSHans de Goede			gpios = <&pio 0 0 GPIO_ACTIVE_LOW>; /* PA0 */
11680e5f83cSHans de Goede		};
11780e5f83cSHans de Goede
118*3c92cca3SJagan Teki		right-joystick-up {
11980e5f83cSHans de Goede			label = "Right Joystick Up";
12080e5f83cSHans de Goede			linux,code = <ABS_RZ>;
12180e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
12280e5f83cSHans de Goede			linux,input-value = <0xffffffff>; /* -1 */
12380e5f83cSHans de Goede			gpios = <&pio 0 3 GPIO_ACTIVE_LOW>; /* PA3 */
12480e5f83cSHans de Goede		};
12580e5f83cSHans de Goede
126*3c92cca3SJagan Teki		right-joystick-down {
12780e5f83cSHans de Goede			label = "Right Joystick Down";
12880e5f83cSHans de Goede			linux,code = <ABS_RZ>;
12980e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
13080e5f83cSHans de Goede			linux,input-value = <1>;
13180e5f83cSHans de Goede			gpios = <&pio 0 4 GPIO_ACTIVE_LOW>; /* PA4 */
13280e5f83cSHans de Goede		};
13380e5f83cSHans de Goede
134*3c92cca3SJagan Teki		dpad-left {
13580e5f83cSHans de Goede			label = "DPad Left";
13680e5f83cSHans de Goede			linux,code = <ABS_HAT0X>;
13780e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
13880e5f83cSHans de Goede			linux,input-value = <0xffffffff>; /* -1 */
13980e5f83cSHans de Goede			gpios = <&pio 7 23 GPIO_ACTIVE_LOW>; /* PH23 */
14080e5f83cSHans de Goede		};
14180e5f83cSHans de Goede
142*3c92cca3SJagan Teki		dpad-right {
14380e5f83cSHans de Goede			label = "DPad Right";
14480e5f83cSHans de Goede			linux,code = <ABS_HAT0X>;
14580e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
14680e5f83cSHans de Goede			linux,input-value = <1>;
14780e5f83cSHans de Goede			gpios = <&pio 7 24 GPIO_ACTIVE_LOW>; /* PH24 */
14880e5f83cSHans de Goede		};
14980e5f83cSHans de Goede
150*3c92cca3SJagan Teki		dpad-up {
15180e5f83cSHans de Goede			label = "DPad Up";
15280e5f83cSHans de Goede			linux,code = <ABS_HAT0Y>;
15380e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
15480e5f83cSHans de Goede			linux,input-value = <0xffffffff>; /* -1 */
15580e5f83cSHans de Goede			gpios = <&pio 7 25 GPIO_ACTIVE_LOW>; /* PH25 */
15680e5f83cSHans de Goede		};
15780e5f83cSHans de Goede
158*3c92cca3SJagan Teki		dpad-down {
15980e5f83cSHans de Goede			label = "DPad Down";
16080e5f83cSHans de Goede			linux,code = <ABS_HAT0Y>;
16180e5f83cSHans de Goede			linux,input-type = <EV_ABS>;
16280e5f83cSHans de Goede			linux,input-value = <1>;
16380e5f83cSHans de Goede			gpios = <&pio 7 26 GPIO_ACTIVE_LOW>; /* PH26 */
16480e5f83cSHans de Goede		};
16580e5f83cSHans de Goede
166*3c92cca3SJagan Teki		x {
16780e5f83cSHans de Goede			label = "Button X";
16880e5f83cSHans de Goede			linux,code = <BTN_X>;
16980e5f83cSHans de Goede			gpios = <&pio 0 16 GPIO_ACTIVE_LOW>; /* PA16 */
17080e5f83cSHans de Goede		};
17180e5f83cSHans de Goede
172*3c92cca3SJagan Teki		y {
17380e5f83cSHans de Goede			label = "Button Y";
17480e5f83cSHans de Goede			linux,code = <BTN_Y>;
17580e5f83cSHans de Goede			gpios = <&pio 0 14 GPIO_ACTIVE_LOW>; /* PA14 */
17680e5f83cSHans de Goede		};
17780e5f83cSHans de Goede
178*3c92cca3SJagan Teki		a {
17980e5f83cSHans de Goede			label = "Button A";
18080e5f83cSHans de Goede			linux,code = <BTN_A>;
18180e5f83cSHans de Goede			gpios = <&pio 0 17 GPIO_ACTIVE_LOW>; /* PA17 */
18280e5f83cSHans de Goede		};
18380e5f83cSHans de Goede
184*3c92cca3SJagan Teki		b {
18580e5f83cSHans de Goede			label = "Button B";
18680e5f83cSHans de Goede			linux,code = <BTN_B>;
18780e5f83cSHans de Goede			gpios = <&pio 0 15 GPIO_ACTIVE_LOW>; /* PA15 */
18880e5f83cSHans de Goede		};
18980e5f83cSHans de Goede
190*3c92cca3SJagan Teki		select {
19180e5f83cSHans de Goede			label = "Select Button";
19280e5f83cSHans de Goede			linux,code = <BTN_SELECT>;
19380e5f83cSHans de Goede			gpios = <&pio 0 11 GPIO_ACTIVE_LOW>; /* PA11 */
19480e5f83cSHans de Goede		};
19580e5f83cSHans de Goede
196*3c92cca3SJagan Teki		start {
19780e5f83cSHans de Goede			label = "Start Button";
19880e5f83cSHans de Goede			linux,code = <BTN_START>;
19980e5f83cSHans de Goede			gpios = <&pio 0 12 GPIO_ACTIVE_LOW>; /* PA12 */
20080e5f83cSHans de Goede		};
20180e5f83cSHans de Goede
202*3c92cca3SJagan Teki		top-left {
20380e5f83cSHans de Goede			label = "Top Left Button";
20480e5f83cSHans de Goede			linux,code = <BTN_TL>;
20580e5f83cSHans de Goede			gpios = <&pio 7 22 GPIO_ACTIVE_LOW>; /* PH22 */
20680e5f83cSHans de Goede		};
20780e5f83cSHans de Goede
208*3c92cca3SJagan Teki		top-right {
20980e5f83cSHans de Goede			label = "Top Right Button";
21080e5f83cSHans de Goede			linux,code = <BTN_TR>;
21180e5f83cSHans de Goede			gpios = <&pio 0 13 GPIO_ACTIVE_LOW>; /* PA13 */
21280e5f83cSHans de Goede		};
21380e5f83cSHans de Goede	};
214deed69d6SHans de Goede};
215deed69d6SHans de Goede
216deed69d6SHans de Goede&cpu0 {
217deed69d6SHans de Goede	cpu-supply = <&reg_dcdc2>;
218deed69d6SHans de Goede};
219deed69d6SHans de Goede
220deed69d6SHans de Goede&ehci1 {
221deed69d6SHans de Goede	status = "okay";
222deed69d6SHans de Goede};
223deed69d6SHans de Goede
224deed69d6SHans de Goede&i2c0 {
225deed69d6SHans de Goede	status = "okay";
226deed69d6SHans de Goede
227deed69d6SHans de Goede	axp209: pmic@34 {
228deed69d6SHans de Goede		reg = <0x34>;
229deed69d6SHans de Goede		interrupts = <0>;
230deed69d6SHans de Goede	};
231deed69d6SHans de Goede};
232deed69d6SHans de Goede
233deed69d6SHans de Goede#include "axp209.dtsi"
234deed69d6SHans de Goede
235deed69d6SHans de Goede&i2c1 {
236deed69d6SHans de Goede	status = "okay";
23780e5f83cSHans de Goede
23880e5f83cSHans de Goede	/* Accelerometer */
23980e5f83cSHans de Goede	bma250@18 {
24080e5f83cSHans de Goede		compatible = "bosch,bma250";
24180e5f83cSHans de Goede		reg = <0x18>;
24280e5f83cSHans de Goede		interrupt-parent = <&pio>;
24380e5f83cSHans de Goede		interrupts = <7 0 IRQ_TYPE_EDGE_RISING>; /* PH0 / EINT0 */
24480e5f83cSHans de Goede	};
245deed69d6SHans de Goede};
246deed69d6SHans de Goede
247deed69d6SHans de Goede&i2c2 {
248deed69d6SHans de Goede	status = "okay";
24980e5f83cSHans de Goede
25080e5f83cSHans de Goede	ft5406ee8: touchscreen@38 {
25180e5f83cSHans de Goede		compatible = "edt,edt-ft5406";
25280e5f83cSHans de Goede		reg = <0x38>;
25380e5f83cSHans de Goede		interrupt-parent = <&pio>;
25480e5f83cSHans de Goede		interrupts = <7 21 IRQ_TYPE_EDGE_FALLING>;
25580e5f83cSHans de Goede		touchscreen-size-x = <800>;
25680e5f83cSHans de Goede		touchscreen-size-y = <480>;
25780e5f83cSHans de Goede	};
258deed69d6SHans de Goede};
259deed69d6SHans de Goede
260deed69d6SHans de Goede&lradc {
261deed69d6SHans de Goede	vref-supply = <&reg_ldo2>;
262deed69d6SHans de Goede	status = "okay";
263deed69d6SHans de Goede
264*3c92cca3SJagan Teki	button-200 {
265deed69d6SHans de Goede		label = "Menu";
266deed69d6SHans de Goede		linux,code = <KEY_MENU>;
267deed69d6SHans de Goede		channel = <0>;
268deed69d6SHans de Goede		voltage = <200000>;
269deed69d6SHans de Goede	};
270deed69d6SHans de Goede
271*3c92cca3SJagan Teki	button-600 {
272deed69d6SHans de Goede		label = "Volume Up";
273deed69d6SHans de Goede		linux,code = <KEY_VOLUMEUP>;
274deed69d6SHans de Goede		channel = <0>;
275deed69d6SHans de Goede		voltage = <600000>;
276deed69d6SHans de Goede	};
277deed69d6SHans de Goede
278*3c92cca3SJagan Teki	button-800 {
279deed69d6SHans de Goede		label = "Volume Down";
280deed69d6SHans de Goede		linux,code = <KEY_VOLUMEDOWN>;
281deed69d6SHans de Goede		channel = <0>;
282deed69d6SHans de Goede		voltage = <800000>;
283deed69d6SHans de Goede	};
284deed69d6SHans de Goede
285*3c92cca3SJagan Teki	button-1000 {
286deed69d6SHans de Goede		label = "Home";
287deed69d6SHans de Goede		linux,code = <KEY_HOMEPAGE>;
288deed69d6SHans de Goede		channel = <0>;
289deed69d6SHans de Goede		voltage = <1000000>;
290deed69d6SHans de Goede	};
291deed69d6SHans de Goede
292*3c92cca3SJagan Teki	button-1200 {
293deed69d6SHans de Goede		label = "Esc";
294deed69d6SHans de Goede		linux,code = <KEY_ESC>;
295deed69d6SHans de Goede		channel = <0>;
296deed69d6SHans de Goede		voltage = <1200000>;
297deed69d6SHans de Goede	};
298deed69d6SHans de Goede};
299deed69d6SHans de Goede
300deed69d6SHans de Goede&mmc0 {
301deed69d6SHans de Goede	vmmc-supply = <&reg_vcc3v3>;
302deed69d6SHans de Goede	bus-width = <4>;
303*3c92cca3SJagan Teki	cd-gpios = <&pio 7 1 GPIO_ACTIVE_LOW>; /* PH1 */
304deed69d6SHans de Goede	status = "okay";
305deed69d6SHans de Goede};
306deed69d6SHans de Goede
307deed69d6SHans de Goede&otg_sram {
308deed69d6SHans de Goede	status = "okay";
309deed69d6SHans de Goede};
310deed69d6SHans de Goede
311deed69d6SHans de Goede&pio {
312*3c92cca3SJagan Teki	key_pins_inet9f: key-pins {
313*3c92cca3SJagan Teki		pins = "PA0", "PA1", "PA3", "PA4",
31480e5f83cSHans de Goede		       "PA5", "PA6", "PA8", "PA9",
31580e5f83cSHans de Goede		       "PA11", "PA12", "PA13",
31680e5f83cSHans de Goede		       "PA14", "PA15", "PA16", "PA17",
31780e5f83cSHans de Goede		       "PH22", "PH23", "PH24", "PH25", "PH26";
318*3c92cca3SJagan Teki		function = "gpio_in";
319*3c92cca3SJagan Teki		bias-pull-up;
32080e5f83cSHans de Goede	};
32180e5f83cSHans de Goede
322*3c92cca3SJagan Teki	usb0_id_detect_pin: usb0-id-detect-pin {
323*3c92cca3SJagan Teki		pins = "PH4";
324*3c92cca3SJagan Teki		function = "gpio_in";
325*3c92cca3SJagan Teki		bias-pull-up;
326deed69d6SHans de Goede	};
327deed69d6SHans de Goede
328*3c92cca3SJagan Teki	usb0_vbus_detect_pin: usb0-vbus-detect-pin {
329*3c92cca3SJagan Teki		pins = "PH5";
330*3c92cca3SJagan Teki		function = "gpio_in";
331*3c92cca3SJagan Teki		bias-pull-down;
332deed69d6SHans de Goede	};
333deed69d6SHans de Goede};
334deed69d6SHans de Goede
335deed69d6SHans de Goede&reg_dcdc2 {
336deed69d6SHans de Goede	regulator-always-on;
337deed69d6SHans de Goede	regulator-min-microvolt = <1000000>;
338deed69d6SHans de Goede	regulator-max-microvolt = <1400000>;
339deed69d6SHans de Goede	regulator-name = "vdd-cpu";
340deed69d6SHans de Goede};
341deed69d6SHans de Goede
342deed69d6SHans de Goede&reg_dcdc3 {
343deed69d6SHans de Goede	regulator-always-on;
344deed69d6SHans de Goede	regulator-min-microvolt = <1250000>;
345deed69d6SHans de Goede	regulator-max-microvolt = <1250000>;
346deed69d6SHans de Goede	regulator-name = "vdd-int-dll";
347deed69d6SHans de Goede};
348deed69d6SHans de Goede
349deed69d6SHans de Goede&reg_ldo1 {
350deed69d6SHans de Goede	regulator-name = "vdd-rtc";
351deed69d6SHans de Goede};
352deed69d6SHans de Goede
353deed69d6SHans de Goede&reg_ldo2 {
354deed69d6SHans de Goede	regulator-always-on;
355deed69d6SHans de Goede	regulator-min-microvolt = <3000000>;
356deed69d6SHans de Goede	regulator-max-microvolt = <3000000>;
357deed69d6SHans de Goede	regulator-name = "avcc";
358deed69d6SHans de Goede};
359deed69d6SHans de Goede
360deed69d6SHans de Goede&reg_usb0_vbus {
361deed69d6SHans de Goede	status = "okay";
362deed69d6SHans de Goede};
363deed69d6SHans de Goede
364deed69d6SHans de Goede&reg_usb2_vbus {
365deed69d6SHans de Goede	status = "okay";
366deed69d6SHans de Goede};
367deed69d6SHans de Goede
368deed69d6SHans de Goede&uart0 {
369deed69d6SHans de Goede	pinctrl-names = "default";
370*3c92cca3SJagan Teki	pinctrl-0 = <&uart0_pb_pins>;
371deed69d6SHans de Goede	status = "okay";
372deed69d6SHans de Goede};
373deed69d6SHans de Goede
374deed69d6SHans de Goede&usb_otg {
375deed69d6SHans de Goede	dr_mode = "otg";
376deed69d6SHans de Goede	status = "okay";
377deed69d6SHans de Goede};
378deed69d6SHans de Goede
379deed69d6SHans de Goede&usbphy {
380deed69d6SHans de Goede	pinctrl-names = "default";
381deed69d6SHans de Goede	pinctrl-0 = <&usb0_id_detect_pin>, <&usb0_vbus_detect_pin>;
382deed69d6SHans de Goede	usb0_id_det-gpio = <&pio 7 4 GPIO_ACTIVE_HIGH>; /* PH4 */
383deed69d6SHans de Goede	usb0_vbus_det-gpio = <&pio 7 5 GPIO_ACTIVE_HIGH>; /* PH5 */
384deed69d6SHans de Goede	usb0_vbus-supply = <&reg_usb0_vbus>;
385deed69d6SHans de Goede	usb2_vbus-supply = <&reg_usb2_vbus>;
386deed69d6SHans de Goede	status = "okay";
387deed69d6SHans de Goede};
388