1// SPDX-License-Identifier: GPL-2.0
2/dts-v1/;
3
4#include "jz4740.dtsi"
5
6#include <dt-bindings/gpio/gpio.h>
7#include <dt-bindings/iio/adc/ingenic,adc.h>
8#include <dt-bindings/clock/ingenic,tcu.h>
9#include <dt-bindings/input/input.h>
10
11#define KEY_QI_QI	KEY_F13
12#define KEY_QI_UPRED	KEY_RIGHTALT
13#define KEY_QI_VOLUP	KEY_VOLUMEUP
14#define KEY_QI_VOLDOWN	KEY_VOLUMEDOWN
15#define KEY_QI_FN	KEY_LEFTCTRL
16
17/ {
18	compatible = "qi,lb60", "ingenic,jz4740";
19	model = "Ben Nanonote";
20
21	memory {
22		device_type = "memory";
23		reg = <0x0 0x2000000>;
24	};
25
26	chosen {
27		stdout-path = &uart0;
28	};
29
30	vcc: regulator-0 {
31		compatible = "regulator-fixed";
32		regulator-name = "vcc";
33
34		regulator-min-microvolt = <3300000>;
35		regulator-max-microvolt = <3300000>;
36		regulator-always-on;
37	};
38
39	mmc_power: regulator-1 {
40		compatible = "regulator-fixed";
41		regulator-name = "mmc_vcc";
42		gpio = <&gpd 2 0>;
43
44		regulator-min-microvolt = <3300000>;
45		regulator-max-microvolt = <3300000>;
46	};
47
48	amp_supply: regulator-2 {
49		compatible = "regulator-fixed";
50		regulator-name = "amp_supply";
51		gpio = <&gpd 4 0>;
52		enable-active-high;
53
54		regulator-min-microvolt = <3300000>;
55		regulator-max-microvolt = <3300000>;
56	};
57
58	amp: analog-amplifier {
59		compatible = "simple-audio-amplifier";
60		enable-gpios = <&gpb 29 GPIO_ACTIVE_HIGH>;
61		VCC-supply = <&amp_supply>;
62	};
63
64	sound {
65		compatible = "simple-audio-card";
66
67		simple-audio-card,name = "QI LB60";
68		simple-audio-card,format = "i2s";
69
70		simple-audio-card,widgets =
71			"Speaker", "Speaker",
72			"Microphone", "Mic";
73		simple-audio-card,routing =
74			"MIC", "Mic",
75			"Speaker", "OUTL",
76			"Speaker", "OUTR",
77			"INL", "LOUT",
78			"INR", "ROUT";
79
80		simple-audio-card,aux-devs = <&amp>;
81
82		simple-audio-card,bitclock-master = <&dai_codec>;
83		simple-audio-card,frame-master = <&dai_codec>;
84
85		dai_cpu: simple-audio-card,cpu {
86			sound-dai = <&aic>;
87		};
88
89		dai_codec: simple-audio-card,codec {
90			sound-dai = <&codec>;
91		};
92	};
93
94	keys {
95		compatible = "gpio-keys";
96
97		key {
98			label = "Power";
99			wakeup-source;
100			linux,code = <KEY_POWER>;
101			gpios = <&gpd 29 GPIO_ACTIVE_LOW>;
102		};
103	};
104
105	keyboard {
106		compatible = "gpio-matrix-keypad";
107
108		col-scan-delay-us = <10>;
109		debounce-delay-ms = <10>;
110		wakeup-source;
111
112		row-gpios = <&gpd 18 0>, <&gpd 19 0>, <&gpd 20 0>, <&gpd 21 0>,
113			    <&gpd 22 0>, <&gpd 23 0>, <&gpd 24 0>, <&gpd 26 0>;
114		col-gpios = <&gpc 10 0>, <&gpc 11 0>, <&gpc 12 0>, <&gpc 13 0>,
115			    <&gpc 14 0>, <&gpc 15 0>, <&gpc 16 0>, <&gpc 17 0>;
116		gpio-activelow;
117
118		linux,keymap =
119			<MATRIX_KEY(0, 0, KEY_F1)>,	/* S2 */
120			<MATRIX_KEY(0, 1, KEY_F2)>,	/* S3 */
121			<MATRIX_KEY(0, 2, KEY_F3)>,	/* S4 */
122			<MATRIX_KEY(0, 3, KEY_F4)>,	/* S5 */
123			<MATRIX_KEY(0, 4, KEY_F5)>,	/* S6 */
124			<MATRIX_KEY(0, 5, KEY_F6)>,	/* S7 */
125			<MATRIX_KEY(0, 6, KEY_F7)>,	/* S8 */
126
127			<MATRIX_KEY(1, 0, KEY_Q)>,	/* S10 */
128			<MATRIX_KEY(1, 1, KEY_W)>,	/* S11 */
129			<MATRIX_KEY(1, 2, KEY_E)>,	/* S12 */
130			<MATRIX_KEY(1, 3, KEY_R)>,	/* S13 */
131			<MATRIX_KEY(1, 4, KEY_T)>,	/* S14 */
132			<MATRIX_KEY(1, 5, KEY_Y)>,	/* S15 */
133			<MATRIX_KEY(1, 6, KEY_U)>,	/* S16 */
134			<MATRIX_KEY(1, 7, KEY_I)>,	/* S17 */
135			<MATRIX_KEY(2, 0, KEY_A)>,	/* S18 */
136			<MATRIX_KEY(2, 1, KEY_S)>,	/* S19 */
137			<MATRIX_KEY(2, 2, KEY_D)>,	/* S20 */
138			<MATRIX_KEY(2, 3, KEY_F)>,	/* S21 */
139			<MATRIX_KEY(2, 4, KEY_G)>,	/* S22 */
140			<MATRIX_KEY(2, 5, KEY_H)>,	/* S23 */
141			<MATRIX_KEY(2, 6, KEY_J)>,	/* S24 */
142			<MATRIX_KEY(2, 7, KEY_K)>,	/* S25 */
143			<MATRIX_KEY(3, 0, KEY_ESC)>,	/* S26 */
144			<MATRIX_KEY(3, 1, KEY_Z)>,	/* S27 */
145			<MATRIX_KEY(3, 2, KEY_X)>,	/* S28 */
146			<MATRIX_KEY(3, 3, KEY_C)>,	/* S29 */
147			<MATRIX_KEY(3, 4, KEY_V)>,	/* S30 */
148			<MATRIX_KEY(3, 5, KEY_B)>,	/* S31 */
149			<MATRIX_KEY(3, 6, KEY_N)>,	/* S32 */
150			<MATRIX_KEY(3, 7, KEY_M)>,	/* S33 */
151			<MATRIX_KEY(4, 0, KEY_TAB)>,	/* S34 */
152			<MATRIX_KEY(4, 1, KEY_CAPSLOCK)>,	/* S35 */
153			<MATRIX_KEY(4, 2, KEY_BACKSLASH)>,	/* S36 */
154			<MATRIX_KEY(4, 3, KEY_APOSTROPHE)>,	/* S37 */
155			<MATRIX_KEY(4, 4, KEY_COMMA)>,	/* S38 */
156			<MATRIX_KEY(4, 5, KEY_DOT)>,	/* S39 */
157			<MATRIX_KEY(4, 6, KEY_SLASH)>,	/* S40 */
158			<MATRIX_KEY(4, 7, KEY_UP)>,	/* S41 */
159			<MATRIX_KEY(5, 0, KEY_O)>,	/* S42 */
160			<MATRIX_KEY(5, 1, KEY_L)>,	/* S43 */
161			<MATRIX_KEY(5, 2, KEY_EQUAL)>,	/* S44 */
162			<MATRIX_KEY(5, 3, KEY_QI_UPRED)>,	/* S45 */
163			<MATRIX_KEY(5, 4, KEY_SPACE)>,	/* S46 */
164			<MATRIX_KEY(5, 5, KEY_QI_QI)>,	/* S47 */
165			<MATRIX_KEY(5, 6, KEY_RIGHTCTRL)>,	/* S48 */
166			<MATRIX_KEY(5, 7, KEY_LEFT)>,	/* S49 */
167			<MATRIX_KEY(6, 0, KEY_F8)>,	/* S50 */
168			<MATRIX_KEY(6, 1, KEY_P)>,	/* S51 */
169			<MATRIX_KEY(6, 2, KEY_BACKSPACE)>,/* S52 */
170			<MATRIX_KEY(6, 3, KEY_ENTER)>,	/* S53 */
171			<MATRIX_KEY(6, 4, KEY_QI_VOLUP)>,	/* S54 */
172			<MATRIX_KEY(6, 5, KEY_QI_VOLDOWN)>,	/* S55 */
173			<MATRIX_KEY(6, 6, KEY_DOWN)>,	/* S56 */
174			<MATRIX_KEY(6, 7, KEY_RIGHT)>,	/* S57 */
175
176			<MATRIX_KEY(7, 0, KEY_LEFTSHIFT)>,	/* S58 */
177			<MATRIX_KEY(7, 1, KEY_LEFTALT)>, /* S59 */
178			<MATRIX_KEY(7, 2, KEY_QI_FN)>;	/* S60 */
179	};
180
181	spi {
182		compatible = "spi-gpio";
183		#address-cells = <1>;
184		#size-cells = <0>;
185
186		sck-gpios = <&gpc 23 GPIO_ACTIVE_HIGH>;
187		mosi-gpios = <&gpc 22 GPIO_ACTIVE_HIGH>;
188		cs-gpios = <&gpc 21 GPIO_ACTIVE_LOW>;
189		num-chipselects = <1>;
190	};
191
192	usb_charger: charger {
193		compatible = "gpio-charger";
194		charger-type = "usb-sdp";
195		gpios = <&gpd 28 GPIO_ACTIVE_LOW>;
196		status-gpios = <&gpc 27 GPIO_ACTIVE_LOW>;
197	};
198
199	simple_battery: battery {
200		compatible = "simple-battery";
201		voltage-min-design-microvolt = <3600000>;
202		voltage-max-design-microvolt = <4200000>;
203	};
204
205	pmu {
206		compatible = "ingenic,jz4740-battery";
207		io-channels = <&adc INGENIC_ADC_BATTERY>;
208		io-channel-names = "battery";
209		power-supplies = <&usb_charger>;
210		monitored-battery = <&simple_battery>;
211	};
212
213	hwmon {
214		compatible = "iio-hwmon";
215		io-channels = <&adc INGENIC_ADC_AUX>;
216	};
217
218	panel: panel {
219		compatible = "giantplus,gpm940b0";
220
221		power-supply = <&vcc>;
222
223		port {
224			panel_input: endpoint {
225				remote-endpoint = <&panel_output>;
226			};
227		};
228	};
229
230	usb_phy: usb-phy {
231		compatible = "usb-nop-xceiv";
232		#phy-cells = <0>;
233
234		vcc-supply = <&vcc>;
235	};
236};
237
238&ext {
239	clock-frequency = <12000000>;
240};
241
242&rtc_dev {
243	system-power-controller;
244};
245
246&uart0 {
247	pinctrl-names = "default";
248	pinctrl-0 = <&pins_uart0>;
249};
250
251&uart1 {
252	status = "disabled";
253};
254
255&nemc {
256	nandc: nand-controller@1 {
257		compatible = "ingenic,jz4740-nand";
258		reg = <1 0 0x4000000>;
259
260		#address-cells = <1>;
261		#size-cells = <0>;
262
263		ecc-engine = <&ecc>;
264
265		pinctrl-names = "default";
266		pinctrl-0 = <&pins_nemc>;
267
268		rb-gpios = <&gpc 30 GPIO_ACTIVE_HIGH>;
269
270		nand@1 {
271			reg = <1>;
272
273			nand-ecc-step-size = <512>;
274			nand-ecc-strength = <4>;
275			nand-ecc-mode = "hw";
276			nand-is-boot-medium;
277			nand-on-flash-bbt;
278
279			partitions {
280				compatible = "fixed-partitions";
281				#address-cells = <1>;
282				#size-cells = <1>;
283
284				partition@0 {
285					label = "boot";
286					reg = <0x0 0x400000>;
287				};
288
289				partition@400000 {
290					label = "kernel";
291					reg = <0x400000 0x400000>;
292				};
293
294				partition@800000 {
295					label = "rootfs";
296					reg = <0x800000 0x0>;
297				};
298			};
299		};
300	};
301};
302
303&lcd {
304	pinctrl-names = "default";
305	pinctrl-0 = <&pins_lcd>;
306
307	port {
308		panel_output: endpoint {
309			remote-endpoint = <&panel_input>;
310		};
311	};
312};
313
314&udc {
315	phys = <&usb_phy>;
316};
317
318&pinctrl {
319	pins_lcd: lcd {
320		function = "lcd";
321		groups = "lcd-8bit";
322	};
323
324	pins_nemc: nemc {
325		function = "nand";
326		groups = "nand-fre-fwe", "nand-cs1";
327	};
328
329	pins_uart0: uart0 {
330		function = "uart0";
331		groups = "uart0-data";
332		bias-disable;
333	};
334
335	pins_mmc: mmc {
336		mmc {
337			function = "mmc";
338			groups = "mmc-1bit", "mmc-4bit";
339			bias-disable;
340		};
341
342		mmc-gpios {
343			pins = "PD0", "PD2";
344			bias-disable;
345		};
346	};
347};
348
349&mmc {
350	bus-width = <4>;
351	max-frequency = <24000000>;
352	cd-gpios = <&gpd 0 GPIO_ACTIVE_HIGH>;
353	vmmc-supply = <&mmc_power>;
354
355	pinctrl-names = "default";
356	pinctrl-0 = <&pins_mmc>;
357};
358
359&tcu {
360	/* 750 kHz for the system timer and clocksource */
361	assigned-clocks = <&tcu TCU_CLK_TIMER0>, <&tcu TCU_CLK_TIMER1>;
362	assigned-clock-rates = <750000>, <750000>;
363};
364