1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 2023 Andreas Kemnade
4 */
5/dts-v1/;
6
7#include <dt-bindings/leds/common.h>
8#include <dt-bindings/input/input.h>
9#include "omap4460.dtsi"
10
11/ {
12	model = "Epson Moverio BT-200";
13	compatible = "epson,embt2ws", "ti,omap4460", "ti,omap4";
14
15	memory@80000000 {
16		device_type = "memory";
17		reg = <0x80000000 0x40000000>; /* 1024M */
18	};
19
20	backlight-left {
21		compatible = "pwm-backlight";
22		pwms = <&twl_pwm 1 7812500>;
23		power-supply = <&unknown_supply>;
24	};
25
26	backlight-right {
27		compatible = "pwm-backlight";
28		pwms = <&twl_pwm 0 7812500>;
29		power-supply = <&unknown_supply>;
30	};
31
32	chosen {
33		stdout-path = &uart3;
34	};
35
36	gpio-keys {
37		compatible = "gpio-keys";
38		pinctrl-names = "default";
39		pinctrl-0 = <&gpio_keys_pins>;
40
41		key-lock {
42			label = "Lock";
43			gpios = <&gpio2 3 GPIO_ACTIVE_LOW>;
44			linux,code = <SW_ROTATE_LOCK>; /* SW_TOUCHPAD_LOCK */
45			linux,input-type = <EV_SW>;
46		};
47	};
48
49	unknown_supply: unknown-supply {
50		compatible = "regulator-fixed";
51		regulator-name = "unknown";
52	};
53
54	wl12xx_pwrseq: wl12xx-pwrseq {
55		compatible = "mmc-pwrseq-simple";
56		clocks = <&twl 1>;
57		clock-names = "ext_clock";
58	};
59
60       /* regulator for wl12xx on sdio2 */
61	wl12xx_vmmc: wl12xx-vmmc {
62		pinctrl-names = "default";
63		pinctrl-0 = <&wl12xx_gpio>;
64		compatible = "regulator-fixed";
65		regulator-name = "vwl1271";
66		regulator-min-microvolt = <1800000>;
67		regulator-max-microvolt = <1800000>;
68		gpio = <&gpio1 24 GPIO_ACTIVE_HIGH>;
69		startup-delay-us = <70000>;
70		enable-active-high;
71	};
72};
73
74&i2c1 {
75	pinctrl-names = "default";
76	pinctrl-0 = <&i2c1_pins>;
77
78	clock-frequency = <400000>;
79
80	twl: pmic@48 {
81		compatible = "ti,twl6032";
82		reg = <0x48>;
83		#clock-cells = <1>;
84		/* IRQ# = 7 */
85		interrupts = <GIC_SPI 7 IRQ_TYPE_LEVEL_HIGH>; /* IRQ_SYS_1N cascaded to gic */
86		interrupt-controller;
87		#interrupt-cells = <1>;
88		system-power-controller;
89
90		rtc {
91			compatible = "ti,twl4030-rtc";
92			interrupts = <11>;
93		};
94
95		ldo2: regulator-ldo2 {
96			compatible = "ti,twl6032-ldo2";
97			regulator-min-microvolt = <1000000>;
98			regulator-max-microvolt = <3000000>;
99		};
100
101		ldo4: regulator-ldo4 {
102			compatible = "ti,twl6032-ldo4";
103			regulator-min-microvolt = <1200000>;
104			regulator-max-microvolt = <2800000>;
105		};
106
107		ldo3: regulator-ldo3 {
108			compatible = "ti,twl6032-ldo3";
109			regulator-min-microvolt = <1000000>;
110			regulator-max-microvolt = <3000000>;
111		};
112
113		ldo5: regulator-ldo5 {
114			compatible = "ti,twl6032-ldo5";
115			regulator-min-microvolt = <1200000>;
116			regulator-max-microvolt = <3000000>;
117			ti,retain-on-reset;
118		};
119
120		ldo1: regulator-ldo1 {
121			compatible = "ti,twl6032-ldo1";
122			regulator-min-microvolt = <1800000>;
123			regulator-max-microvolt = <2500000>;
124		};
125
126		ldo7: regulator-ldo7 {
127			compatible = "ti,twl6032-ldo7";
128			regulator-min-microvolt = <1200000>;
129			regulator-max-microvolt = <2900000>;
130		};
131
132		ldoln: regulator-ldoln {
133			compatible = "ti,twl6032-ldoln";
134			regulator-always-on;
135		};
136
137		ldo6: regulator-ldo6 {
138			compatible = "ti,twl6032-ldo6";
139			regulator-always-on;
140		};
141
142		ldousb: regulator-ldousb {
143			compatible = "ti,twl6032-ldousb";
144			regulator-always-on;
145		};
146
147		vio: regulator-vio {
148			compatible = "ti,twl6032-vio";
149			regulator-always-on;
150		};
151
152		twl_usb_comparator: usb-comparator {
153			compatible = "ti,twl6030-usb";
154			interrupts = <4>, <10>;
155		};
156
157		twl_pwm: pwm {
158			/* provides two PWMs (id 0, 1 for PWM1 and PWM2) */
159			compatible = "ti,twl6030-pwm";
160			#pwm-cells = <2>;
161		};
162
163		twl_pwmled: pwmled {
164			/* provides one PWM (id 0 for Charging indicator LED) */
165			compatible = "ti,twl6030-pwmled";
166			#pwm-cells = <2>;
167		};
168
169		gpadc {
170			compatible = "ti,twl6032-gpadc";
171			interrupts = <3>;
172			#io-channel-cells = <1>;
173		};
174
175	};
176};
177
178#include "twl6030_omap4.dtsi"
179
180&twl_usb_comparator {
181	usb-supply = <&ldousb>;
182};
183
184
185&i2c2 {
186	pinctrl-names = "default";
187	pinctrl-0 = <&i2c2_pins>;
188
189	clock-frequency = <200000>;
190
191	/* at head/glasses */
192	mpu9150h: imu@68 {
193		compatible = "invensense,mpu9150";
194		reg = <0x68>;
195
196		pinctrl-names = "default";
197		pinctrl-0 = <&mpu9150h_pins>;
198		interrupt-parent = <&gpio2>;
199		interrupt = <19 IRQ_TYPE_LEVEL_HIGH>;
200	};
201};
202
203&i2c3 {
204	pinctrl-names = "default";
205	pinctrl-0 = <&i2c3_pins>;
206
207	clock-frequency = <100000>;
208
209	led-controller@66 {
210		compatible = "rohm,bd2606mvv";
211		reg = <0x66>;
212
213		#address-cells = <1>;
214		#size-cells = <0>;
215
216		led@0 {
217			reg = <0>;
218			color = <LED_COLOR_ID_GREEN>;
219			function = LED_FUNCTION_STATUS;
220		};
221
222		led@2 {
223			reg = <2>;
224			color = <LED_COLOR_ID_BLUE>;
225			function = LED_FUNCTION_STATUS;
226		};
227
228		led@4 {
229			reg = <4>;
230			color = <LED_COLOR_ID_RED>;
231			function = LED_FUNCTION_STATUS;
232		};
233	};
234};
235
236&i2c4 {
237	pinctrl-names = "default";
238	pinctrl-0 = <&i2c4_pins>;
239
240	clock-frequency = <360000>;
241
242	/* TODO: KXTI9 at 0xf */
243
244	tlv320aic3x: codec@18 {
245		compatible = "ti,tlv320aic3x";
246		reg = <0x18>;
247		pinctrl-names = "default";
248		pinctrl-0 = <&tlv320aic3x_pins>;
249		#sound-dai-cells = <0>;
250
251		reset-gpios = <&gpio2 23 GPIO_ACTIVE_LOW>;
252	};
253
254	mpu9150: imu@68 {
255		compatible = "invensense,mpu9150";
256		reg = <0x68>;
257
258		pinctrl-names = "default";
259		pinctrl-0 = <&mpu9150_pins>;
260		interrupt-parent = <&gpio2>;
261		interrupt = <7 IRQ_TYPE_LEVEL_HIGH>;
262		invensense,level-shifter;
263	};
264};
265
266&keypad {
267	pinctrl-names = "default";
268	pinctrl-0 = <&keypad_pins>;
269	keypad,num-rows = <2>;
270	keypad,num-columns = <3>;
271	linux,keymap = <MATRIX_KEY(0, 0, KEY_MENU)
272			MATRIX_KEY(0, 1, KEY_HOME)
273			MATRIX_KEY(0, 2, KEY_BACK)
274			MATRIX_KEY(1, 0, KEY_ESC)
275			MATRIX_KEY(1, 1, KEY_VOLUMEDOWN)
276			MATRIX_KEY(1, 2, KEY_VOLUMEUP)>;
277	linux,input-no-autorepeat;
278};
279
280&mcbsp2 {
281	#sound-dai-cells = <0>;
282	pinctrl-names = "default";
283	pinctrl-0 = <&mcbsp2_pins>;
284	status = "okay";
285};
286
287
288&mmc1 {
289	/* sdcard */
290	vmmc-supply = <&ldo5>;
291	broken-cd;
292	bus-width = <4>;
293};
294
295&mmc2 {
296	/* emmc */
297	vmmc-supply = <&ldo2>;
298	bus-width = <8>;
299};
300
301&mmc3 {
302	pinctrl-names = "default";
303	pinctrl-0 = <&wl12xx_pins>;
304	vmmc-supply = <&wl12xx_vmmc>;
305	mmc-pwrseq = <&wl12xx_pwrseq>;
306	interrupts-extended = <&wakeupgen GIC_SPI 94 IRQ_TYPE_LEVEL_HIGH
307			       &omap4_pmx_core 0x12e>;
308	non-removable;
309	bus-width = <4>;
310	cap-power-off-card;
311
312	#address-cells = <1>;
313	#size-cells = <0>;
314	wlcore: wlcore@2 {
315		compatible = "ti,wl1283";
316		reg = <2>;
317		interrupts-extended = <&gpio1 23 IRQ_TYPE_LEVEL_HIGH>;
318		interrupt-names = "irq";
319		ref-clock-frequency = <26000000>;
320		tcxo-clock-frequency = <26000000>;
321	};
322};
323
324&mmc4 {
325	status = "disabled";
326};
327
328&mmc5 {
329	status = "disabled";
330};
331
332&omap4_pmx_core {
333	bt_pins: pinmux-bt-pins {
334		pinctrl-single,pins = <
335			OMAP4_IOPAD(0x1ca, PIN_OUTPUT | MUX_MODE3) /* gpio25 */
336		>;
337	};
338
339	gpio_keys_pins: pinmux-gpio-key-pins {
340		pinctrl-single,pins = <
341			OMAP4_IOPAD(0x56, PIN_INPUT_PULLUP | MUX_MODE3) /* gpio35 */
342		>;
343	};
344
345	i2c1_pins: pinmux-i2c1-pins {
346		pinctrl-single,pins = <
347			   OMAP4_IOPAD(0x122, PIN_INPUT_PULLUP | MUX_MODE0)	/* i2c1_scl */
348			   OMAP4_IOPAD(0x124, PIN_INPUT_PULLUP | MUX_MODE0)	/* i2c1_sda */
349		>;
350	};
351
352	i2c2_pins: pinmux-i2c2-pins {
353		pinctrl-single,pins = <
354			OMAP4_IOPAD(0x126, PIN_INPUT | MUX_MODE0)	/* i2c2_scl */
355			OMAP4_IOPAD(0x128, PIN_INPUT | MUX_MODE0)	/* i2c2_sda */
356		>;
357	};
358
359	i2c3_pins: pinmux-i2c3-pins {
360		pinctrl-single,pins = <
361			OMAP4_IOPAD(0x12a, PIN_INPUT | MUX_MODE0)	/* i2c3_scl */
362			OMAP4_IOPAD(0x12c, PIN_INPUT | MUX_MODE0)	/* i2c3_sda */
363		>;
364	};
365
366	i2c4_pins: pinmux-i2c4-pins {
367		pinctrl-single,pins = <
368			OMAP4_IOPAD(0x12e, PIN_INPUT | MUX_MODE0)	/* i2c4_scl */
369			OMAP4_IOPAD(0x130, PIN_INPUT | MUX_MODE0)	/* i2c4_sda */
370		>;
371	};
372
373	keypad_pins: pinmux-keypad-pins {
374		pinctrl-single,pins = <
375			/* kpd_row0 */
376			OMAP4_IOPAD(0x0050, PIN_INPUT_PULLUP | MUX_MODE1)
377			/* kpd_row1 */
378			OMAP4_IOPAD(0x0052, PIN_INPUT_PULLUP | MUX_MODE1)
379			/* kpd_row2 */
380			OMAP4_IOPAD(0x0054, PIN_INPUT_PULLUP | MUX_MODE1)
381			/* kpd_col0 */
382			OMAP4_IOPAD(0x0058, PIN_OUTPUT | MUX_MODE1)
383			/* kpd_col1 */
384			OMAP4_IOPAD(0x005a, PIN_OUTPUT | MUX_MODE1)
385			/* kpd_col2 */
386			OMAP4_IOPAD(0x005c, PIN_OUTPUT | MUX_MODE1)
387		>;
388	};
389
390	mcbsp2_pins: pinmux-mcbsp2-pins {
391		pinctrl-single,pins = <
392			OMAP4_IOPAD(0x0f6, PIN_INPUT | MUX_MODE0)       /* abe_mcbsp2_clkx */
393			OMAP4_IOPAD(0x0f8, PIN_INPUT | MUX_MODE0)       /* abe_mcbsp2_dr */
394			OMAP4_IOPAD(0x0fa, PIN_OUTPUT | MUX_MODE0)      /* abe_mcbsp2_dx */
395			OMAP4_IOPAD(0x0fc, PIN_INPUT | MUX_MODE0)       /* abe_mcbsp2_fsx */
396		>;
397	};
398
399	mpu9150_pins: pinmux-mpu9150-pins {
400		pinctrl-single,pins = <
401			OMAP4_IOPAD(0x5e, PIN_INPUT_PULLUP | MUX_MODE3)
402		>;
403	};
404
405	mpu9150h_pins: pinmux-mpu9150h-pins {
406		pinctrl-single,pins = <
407			OMAP4_IOPAD(0x76, PIN_INPUT_PULLUP | MUX_MODE3)
408		>;
409	};
410
411	tlv320aic3x_pins: pinmux-tlv320aic3x-pins {
412		pinctrl-single,pins = <
413			OMAP4_IOPAD(0x7e, PIN_OUTPUT | MUX_MODE3)
414		>;
415	};
416
417	uart2_pins: pinmux-uart2-pins {
418		pinctrl-single,pins = <
419			OMAP4_IOPAD(0x118, PIN_INPUT_PULLUP | MUX_MODE0) /* uart2_cts.uart2_cts */
420			OMAP4_IOPAD(0x11a, PIN_OUTPUT | MUX_MODE0)	 /* uart2_rts.uart2_rts */
421			OMAP4_IOPAD(0x11c, PIN_INPUT_PULLUP | MUX_MODE0) /* uart2_rx.uart2_rx */
422			OMAP4_IOPAD(0x11e, PIN_OUTPUT | MUX_MODE0)	 /* uart2_tx.uart2_tx */
423		>;
424	};
425
426	uart3_pins: pinmux-uart3-pins {
427		pinctrl-single,pins = <
428			OMAP4_IOPAD(0x144, PIN_INPUT | MUX_MODE0)  /* uart3_rx_irrx */
429			OMAP4_IOPAD(0x146, PIN_OUTPUT | MUX_MODE0) /* uart3_tx_irtx */
430		>;
431	};
432
433	usb_otg_hs_pins: pinmux-usb-otg-hs-pins {
434		 pinctrl-single,pins = <
435			 OMAP4_IOPAD(0x194, PIN_OUTPUT_PULLDOWN | MUX_MODE0) /* usba0_otg_ce */
436			 OMAP4_IOPAD(0x196, PIN_INPUT | MUX_MODE0)	     /* usba0_otg_dp */
437			 OMAP4_IOPAD(0x198, PIN_INPUT | MUX_MODE0)	     /* usba0_otg_dm */
438		 >;
439	};
440
441	wl12xx_pins: pinmux-wl12xx-pins {
442		pinctrl-single,pins = <
443			OMAP4_IOPAD(0x1c6, PIN_INPUT | MUX_MODE3) /* gpio_23 / IRQ */
444			OMAP4_IOPAD(0x16c, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_dat2 */
445			OMAP4_IOPAD(0x16e, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_dat1 */
446			OMAP4_IOPAD(0x170, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_dat0 */
447			OMAP4_IOPAD(0x172, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_dat3 */
448			OMAP4_IOPAD(0x174, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_cmd */
449			OMAP4_IOPAD(0x176, PIN_INPUT_PULLUP | MUX_MODE2) /* sdmmc3_clk */
450		>;
451	};
452
453	wl12xx_gpio: pinmux-wl12xx-gpio-pins {
454		pinctrl-single,pins = <
455			OMAP4_IOPAD(0x1c8, PIN_OUTPUT | MUX_MODE3)  /* gpio_24 / WLAN_EN */
456		>;
457	};
458};
459
460&uart2 {
461	pinctrl-names = "default";
462	pinctrl-0 = <&uart2_pins &bt_pins>;
463	interrupts-extended = <&wakeupgen GIC_SPI 73 IRQ_TYPE_LEVEL_HIGH
464			       &omap4_pmx_core OMAP4_UART2_RX>;
465
466	bluetooth-gnss {
467		compatible = "ti,wl1283-st";
468		enable-gpios = <&gpio1 25 GPIO_ACTIVE_HIGH>;	/* GPIO_25 */
469		clocks = <&twl 1>;
470		clock-names = "ext_clock";
471	};
472};
473
474&uart3 {
475	pinctrl-names = "default";
476	pinctrl-0 = <&uart3_pins>;
477	interrupts-extended = <&wakeupgen GIC_SPI 74 IRQ_TYPE_LEVEL_HIGH
478			       &omap4_pmx_core OMAP4_UART3_RX>;
479};
480
481&usb_otg_hs {
482	pinctrl-names = "default";
483	pinctrl-0 = <&usb_otg_hs_pins>;
484
485	interface-type = <1>;
486	mode = <3>;
487	power = <50>;
488};
489
490&usbhshost {
491	status = "disabled";
492};
493