1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (c) 2022, Collabora Ltd
4 * Author: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
5 */
6
7/dts-v1/;
8#include <dt-bindings/gpio/gpio.h>
9#include "mt6795.dtsi"
10#include "mt6331.dtsi"
11
12/ {
13	model = "Sony Xperia M5";
14	compatible = "sony,xperia-m5", "mediatek,mt6795";
15	chassis-type = "handset";
16
17	aliases {
18		mmc0 = &mmc0;
19		mmc1 = &mmc1;
20		mmc2 = &mmc2;
21		serial0 = &uart0;
22		serial1 = &uart1;
23	};
24
25	backlight_lcd0: backlight {
26		compatible = "led-backlight";
27		leds = <&disp_led_pwm>, <&pmic_bl_led>;
28
29		default-brightness-level = <300>;
30	};
31
32	led-controller-display {
33		compatible = "pwm-leds";
34
35		disp_led_pwm: led-0 {
36			label = "backlight-pwm";
37			pwms = <&pwm0 0 500000>;
38			max-brightness = <1024>;
39		};
40	};
41
42	memory@40000000 {
43		device_type = "memory";
44		reg = <0 0x40000000 0 0x1e800000>;
45	};
46
47	reserved_memory: reserved-memory {
48		#address-cells = <2>;
49		#size-cells = <2>;
50		ranges;
51
52		/* 128 KiB reserved for ARM Trusted Firmware (BL31) */
53		bl31_secmon_reserved: secmon@43000000 {
54			reg = <0 0x43000000 0 0x30000>;
55			no-map;
56		};
57
58		/* preloader and bootloader regions cannot be touched */
59		preloader-region@44800000 {
60			reg = <0 0x44800000 0 0x100000>;
61			no-map;
62		};
63
64		bootloader-region@46000000 {
65			reg = <0 0x46000000 0 0x400000>;
66			no-map;
67		};
68	};
69
70	vreg_disp_avdd: regulator-disp-avdd {
71		compatible = "regulator-fixed";
72		regulator-name = "disp_avdd";
73		regulator-min-microvolt = <5000000>;
74		regulator-max-microvolt = <5000000>;
75		gpio = <&pio 138 GPIO_ACTIVE_HIGH>;
76		enable-active-high;
77	};
78
79	vreg_disp_avee: regulator-disp-avee {
80		compatible = "regulator-fixed";
81		regulator-name = "disp_avee";
82		regulator-min-microvolt = <5000000>;
83		regulator-max-microvolt = <5000000>;
84		gpio = <&pio 139 GPIO_ACTIVE_HIGH>;
85		enable-active-high;
86	};
87
88	vreg_disp_vddh: regulator-disp-vddh {
89		compatible = "regulator-fixed";
90		regulator-name = "disp_vddh";
91		regulator-min-microvolt = <1800000>;
92		regulator-max-microvolt = <1800000>;
93		regulator-always-on;
94		regulator-boot-on;
95	};
96};
97
98&dsi0 {
99	status = "okay";
100	#address-cells = <1>;
101	#size-cells = <0>;
102
103	panel: panel@0 {
104		compatible = "sharp,ls060t1sx01";
105		reg = <0>;
106		avdd-supply = <&vreg_disp_avdd>;
107		avee-supply = <&vreg_disp_avee>;
108		vddi-supply = <&mt6331_vgp3_reg>;
109		vddh-supply = <&vreg_disp_vddh>;
110		reset-gpios = <&pio 106 GPIO_ACTIVE_LOW>;
111		backlight = <&backlight_lcd0>;
112
113		pinctrl-0 = <&disp_rst_pins>;
114		pinctrl-names = "default";
115
116		port {
117			panel_in: endpoint {
118				remote-endpoint = <&dsi0_out>;
119			};
120		};
121	};
122
123	port {
124		dsi0_out: endpoint {
125			remote-endpoint = <&panel_in>;
126		};
127	};
128};
129
130&fhctl {
131	clocks = <&apmixedsys CLK_APMIXED_MAINPLL>, <&apmixedsys CLK_APMIXED_MPLL>,
132		 <&apmixedsys CLK_APMIXED_MSDCPLL>;
133	mediatek,hopping-ssc-percent = <8>, <5>, <8>;
134	status = "okay";
135};
136
137&i2c0 {
138	pinctrl-names = "default";
139	pinctrl-0 = <&i2c0_pins>;
140	status = "okay";
141};
142
143&i2c1 {
144	pinctrl-names = "default";
145	pinctrl-0 = <&i2c1_pins>;
146	status = "okay";
147
148	accelerometer@10 {
149		compatible = "bosch,bma255";
150		reg = <0x10>;
151		pinctrl-names = "default";
152		pinctrl-0 = <&accel_pins>;
153	};
154
155	magnetometer@12 {
156		compatible = "bosch,bmm150";
157		reg = <0x12>;
158	};
159};
160
161&i2c2 {
162	pinctrl-names = "default";
163	pinctrl-0 = <&i2c2_pins>;
164	status = "okay";
165
166	touchscreen@20 {
167		compatible = "syna,rmi4-i2c";
168		reg = <0x20>;
169		#address-cells = <1>;
170		#size-cells = <0>;
171		interrupts-extended = <&pio 6 IRQ_TYPE_EDGE_FALLING>;
172		pinctrl-names = "default";
173		pinctrl-0 = <&ts_pins>;
174		syna,startup-delay-ms = <160>;
175		syna,reset-delay-ms = <90>;
176
177		rmi4-f01@1 {
178			reg = <0x1>;
179			syna,nosleep-mode = <1>;
180		};
181
182		rmi4-f12@12 {
183			reg = <0x12>;
184			syna,sensor-type = <1>;
185		};
186	};
187};
188
189&i2c3 {
190	pinctrl-names = "default";
191	pinctrl-0 = <&i2c3_pins>;
192	status = "okay";
193
194	pn547: nfc@28 {
195		compatible = "nxp,pn544-i2c";
196		reg = <0x28>;
197		interrupts-extended = <&pio 3 IRQ_TYPE_EDGE_RISING>;
198		pinctrl-names = "default";
199		pinctrl-0 = <&nfc_pins>;
200		enable-gpios = <&pio 149 GPIO_ACTIVE_HIGH>;
201		firmware-gpios = <&pio 94 GPIO_ACTIVE_HIGH>;
202	};
203
204	proximity@48 {
205		compatible = "sensortek,stk3310";
206		reg = <0x48>;
207		interrupts-extended = <&pio 8 IRQ_TYPE_EDGE_FALLING>;
208		pinctrl-names = "default";
209		pinctrl-0 = <&proximity_pins>;
210	};
211};
212
213&mmc0 {
214	/* eMMC controller */
215	mediatek,latch-ck = <0x14>; /* hs400 */
216	mediatek,hs200-cmd-int-delay = <1>;
217	mediatek,hs400-cmd-int-delay = <1>;
218	mediatek,hs400-ds-dly3 = <0x1a>;
219	non-removable;
220	pinctrl-names = "default", "state_uhs";
221	pinctrl-0 = <&mmc0_pins_default>;
222	pinctrl-1 = <&mmc0_pins_uhs>;
223	vmmc-supply = <&mt6331_vemc33_reg>;
224	vqmmc-supply = <&mt6331_vio18_reg>;
225	status = "okay";
226};
227
228&mmc1 {
229	/* MicroSD card slot */
230	vmmc-supply = <&mt6331_vmc_reg>;
231	vqmmc-supply = <&mt6331_vmch_reg>;
232	status = "okay";
233};
234
235&mmc2 {
236	/* SDIO WiFi on MMC2 */
237	vmmc-supply = <&mt6331_vmc_reg>;
238	vqmmc-supply = <&mt6331_vmch_reg>;
239	status = "okay";
240};
241
242&mt6331_vgp3_reg {
243	regulator-min-microvolt = <1800000>;
244};
245
246&pio {
247	disp_rst_pins: lcm-pins {
248		pins-rst {
249			pinmux = <PINMUX_GPIO106__FUNC_GPIO106>;
250		};
251	};
252
253	mmc0_pins_default: emmc-sdr-pins {
254		pins-cmd-dat {
255			pinmux = <PINMUX_GPIO154__FUNC_MSDC0_DAT0>,
256				 <PINMUX_GPIO155__FUNC_MSDC0_DAT1>,
257				 <PINMUX_GPIO156__FUNC_MSDC0_DAT2>,
258				 <PINMUX_GPIO157__FUNC_MSDC0_DAT3>,
259				 <PINMUX_GPIO158__FUNC_MSDC0_DAT4>,
260				 <PINMUX_GPIO159__FUNC_MSDC0_DAT5>,
261				 <PINMUX_GPIO160__FUNC_MSDC0_DAT6>,
262				 <PINMUX_GPIO161__FUNC_MSDC0_DAT7>,
263				 <PINMUX_GPIO162__FUNC_MSDC0_CMD>;
264			input-enable;
265			bias-pull-up = <MTK_PUPD_SET_R1R0_01>;
266		};
267
268		pins-clk {
269			pinmux = <PINMUX_GPIO163__FUNC_MSDC0_CLK>;
270			bias-pull-down = <MTK_PUPD_SET_R1R0_10>;
271		};
272
273		pins-rst {
274			pinmux = <PINMUX_GPIO165__FUNC_MSDC0_RSTB>;
275			bias-pull-up = <MTK_PUPD_SET_R1R0_10>;
276		};
277	};
278
279	mmc0_pins_uhs: emmc-uhs-pins {
280		pins-cmd-dat {
281			pinmux = <PINMUX_GPIO154__FUNC_MSDC0_DAT0>,
282				 <PINMUX_GPIO155__FUNC_MSDC0_DAT1>,
283				 <PINMUX_GPIO156__FUNC_MSDC0_DAT2>,
284				 <PINMUX_GPIO157__FUNC_MSDC0_DAT3>,
285				 <PINMUX_GPIO158__FUNC_MSDC0_DAT4>,
286				 <PINMUX_GPIO159__FUNC_MSDC0_DAT5>,
287				 <PINMUX_GPIO160__FUNC_MSDC0_DAT6>,
288				 <PINMUX_GPIO161__FUNC_MSDC0_DAT7>,
289				 <PINMUX_GPIO162__FUNC_MSDC0_CMD>;
290			input-enable;
291			drive-strength = <MTK_DRIVE_6mA>;
292			bias-pull-up = <MTK_PUPD_SET_R1R0_01>;
293		};
294
295		pins-clk {
296			pinmux = <PINMUX_GPIO163__FUNC_MSDC0_CLK>;
297			drive-strength = <MTK_DRIVE_6mA>;
298			bias-pull-down = <MTK_PUPD_SET_R1R0_10>;
299		};
300
301		pins-rst {
302			pinmux = <PINMUX_GPIO165__FUNC_MSDC0_RSTB>;
303			drive-strength = <MTK_DRIVE_6mA>;
304			bias-pull-up = <MTK_PUPD_SET_R1R0_10>;
305		};
306
307		pins-ds {
308			pinmux = <PINMUX_GPIO164__FUNC_MSDC0_DSL>;
309			drive-strength = <MTK_DRIVE_6mA>;
310			bias-pull-down = <MTK_PUPD_SET_R1R0_10>;
311		};
312	};
313
314	nfc_pins: nfc-pins {
315		pins-irq {
316			pinmux = <PINMUX_GPIO3__FUNC_GPIO3>;
317			bias-pull-down;
318			input-enable;
319		};
320
321		pins-fw-ven {
322			pinmux = <PINMUX_GPIO94__FUNC_GPIO94>,
323				 <PINMUX_GPIO149__FUNC_GPIO149>;
324		};
325	};
326
327	ts_pins: touchscreen-pins {
328		pins-irq {
329			pinmux = <PINMUX_GPIO6__FUNC_GPIO6>;
330			bias-pull-up;
331			input-enable;
332		};
333
334		pins-rst {
335			pinmux = <PINMUX_GPIO102__FUNC_GPIO102>;
336			output-high;
337		};
338	};
339
340	proximity_pins: proximity-pins {
341		pins-irq {
342			pinmux = <PINMUX_GPIO8__FUNC_GPIO8>;
343			bias-pull-up;
344			input-enable;
345		};
346	};
347
348	accel_pins: accelerometer-pins {
349		pins-irq {
350			pinmux = <PINMUX_GPIO12__FUNC_GPIO12>;
351			bias-pull-up;
352			input-enable;
353		};
354	};
355
356	i2c0_pins: i2c0-pins {
357		pins-bus {
358			pinmux = <PINMUX_GPIO45__FUNC_SDA0>,
359				 <PINMUX_GPIO46__FUNC_SCL0>;
360			input-enable;
361		};
362	};
363
364	i2c1_pins: i2c1-pins {
365		pins-bus {
366			pinmux = <PINMUX_GPIO125__FUNC_SDA1>,
367				 <PINMUX_GPIO126__FUNC_SCL1>;
368			bias-disable;
369		};
370	};
371
372	i2c2_pins: i2c2-pins {
373		pins-bus {
374			pinmux = <PINMUX_GPIO43__FUNC_SDA2>,
375				 <PINMUX_GPIO44__FUNC_SCL2>;
376			bias-disable;
377		};
378	};
379
380	i2c3_pins: i2c3-pins {
381		pins-bus {
382			pinmux = <PINMUX_GPIO136__FUNC_SDA3>,
383				 <PINMUX_GPIO137__FUNC_SCL3>;
384			bias-disable;
385		};
386	};
387
388	i2c4_pins: i2c4-pins {
389		pins-bus {
390			pinmux = <PINMUX_GPIO100__FUNC_SDA4>,
391				 <PINMUX_GPIO101__FUNC_SCL4>;
392			bias-disable;
393		};
394	};
395
396	uart0_pins: uart0-pins {
397		pins-rx {
398			pinmux = <PINMUX_GPIO113__FUNC_URXD0>;
399			bias-pull-up;
400			input-enable;
401		};
402		pins-tx {
403			pinmux = <PINMUX_GPIO114__FUNC_UTXD0>;
404			output-high;
405		};
406	};
407
408	uart2_pins: uart2-pins {
409		pins-rx {
410			pinmux = <PINMUX_GPIO31__FUNC_URXD2>;
411			bias-pull-up;
412			input-enable;
413		};
414		pins-tx {
415			pinmux = <PINMUX_GPIO32__FUNC_UTXD2>;
416		};
417	};
418};
419
420&pmic {
421	/*
422	 * Smartphones, including the Xperia M5, are equipped with a companion
423	 * MT6332 PMIC: when this is present, the main MT6331 PMIC will fire
424	 * an interrupt on the companion, so we use the MT6332 IRQ GPIO.
425	 */
426	interrupts = <GIC_SPI 160 IRQ_TYPE_LEVEL_HIGH>;
427
428	mt6332-led {
429		compatible = "mediatek,mt6332-led";
430		#address-cells = <1>;
431		#size-cells = <0>;
432
433		pmic_bl_led: led@0 {
434			reg = <0>;
435			label = "backlight-pmic";
436		};
437	};
438};
439
440&pwm0 {
441	status = "okay";
442};
443
444&uart0 {
445	status = "okay";
446
447	pinctrl-names = "default";
448	pinctrl-0 = <&uart0_pins>;
449};
450
451&uart2 {
452	status = "okay";
453
454	pinctrl-names = "default";
455	pinctrl-0 = <&uart2_pins>;
456};
457