1// SPDX-License-Identifier: BSD-3-Clause
2/*
3 * Copyright (c) 2020, Xilin Wu <strongtz@yeah.net>
4 * Copyright (c) 2022, Molly Sophia <mollysophia379@gmail.com>
5 */
6
7/dts-v1/;
8
9#include <dt-bindings/gpio/gpio.h>
10#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
11#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
12#include <dt-bindings/input/linux-event-codes.h>
13#include <dt-bindings/sound/qcom,q6afe.h>
14#include <dt-bindings/sound/qcom,q6asm.h>
15#include "sdm845.dtsi"
16#include "pm8998.dtsi"
17#include "pmi8998.dtsi"
18#include "pm8005.dtsi"
19
20/*
21 * Delete following upstream (sdm845.dtsi) reserved
22 * memory mappings which are different in this device.
23 */
24/delete-node/ &rmtfs_mem;
25/delete-node/ &adsp_mem;
26/delete-node/ &wlan_msa_mem;
27/delete-node/ &mpss_region;
28/delete-node/ &venus_mem;
29/delete-node/ &cdsp_mem;
30/delete-node/ &mba_region;
31/delete-node/ &slpi_mem;
32/delete-node/ &spss_mem;
33
34/ {
35	model = "Xiaomi Mi MIX 2S";
36	compatible = "xiaomi,polaris", "qcom,sdm845";
37	chassis-type = "handset";
38
39	/* required for bootloader to select correct board */
40	qcom,msm-id = <0x141 0x20001>;
41	qcom,board-id = <0x2a 0x0>;
42
43	aliases {
44		serial0 = &uart9;
45		serial1 = &uart6;
46	};
47
48	gpio-keys {
49		compatible = "gpio-keys";
50		autorepeat;
51
52		pinctrl-names = "default";
53		pinctrl-0 = <&volume_up_gpio>;
54
55		key-vol-up {
56			label = "Volume Up";
57			linux,code = <KEY_VOLUMEUP>;
58			gpios = <&pm8998_gpios 6 GPIO_ACTIVE_LOW>;
59			debounce-interval = <15>;
60		};
61	};
62
63	reserved-memory {
64		adsp_mem: memory@8c500000 {
65			reg = <0 0x8c500000 0 0x1e00000>;
66			no-map;
67		};
68
69		wlan_msa_mem: memory@8e300000 {
70			reg = <0 0x8e300000 0 0x100000>;
71			no-map;
72		};
73
74		mpss_region: memory@8e400000 {
75			reg = <0 0x8e400000 0 0x7800000>;
76			no-map;
77		};
78
79		venus_mem: memory@95c00000 {
80			reg = <0 0x95c00000 0 0x500000>;
81			no-map;
82		};
83
84		cdsp_mem: memory@96100000 {
85			reg = <0 0x96100000 0 0x800000>;
86			no-map;
87		};
88
89		mba_region: memory@96900000 {
90			reg = <0 0x96900000 0 0x200000>;
91			no-map;
92		};
93
94		slpi_mem: memory@96b00000 {
95			reg = <0 0x96b00000 0 0x1400000>;
96			no-map;
97		};
98
99		spss_mem: memory@97f00000 {
100			reg = <0 0x97f00000 0 0x100000>;
101			no-map;
102		};
103
104		rmtfs_mem: memory@f6301000 {
105			compatible = "qcom,rmtfs-mem";
106			reg = <0 0xf6301000 0 0x200000>;
107			no-map;
108
109			qcom,client-id = <1>;
110			qcom,vmid = <15>;
111		};
112	};
113
114	battery: battery {
115		compatible = "simple-battery";
116
117		charge-full-design-microamp-hours = <3400000>;
118		voltage-min-design-microvolt = <3400000>;
119		voltage-max-design-microvolt = <4400000>;
120	};
121
122	vreg_tp_vddio: vreg-tp-vddio {
123		compatible = "regulator-fixed";
124		regulator-name = "vreg_tp_vddio";
125
126		regulator-min-microvolt = <1800000>;
127		regulator-max-microvolt = <1800000>;
128
129		gpio = <&tlmm 23 GPIO_ACTIVE_HIGH>;
130		regulator-always-on;
131		regulator-boot-on;
132		enable-active-high;
133	};
134
135	vreg_s4a_1p8: vreg-s4a-1p8 {
136		compatible = "regulator-fixed";
137		regulator-name = "vreg_s4a_1p8";
138
139		regulator-min-microvolt = <1800000>;
140		regulator-max-microvolt = <1800000>;
141		regulator-always-on;
142	};
143};
144
145&apps_rsc {
146	pm8998-rpmh-regulators {
147		compatible = "qcom,pm8998-rpmh-regulators";
148		qcom,pmic-id = "a";
149
150		vreg_s2a_1p1: smps2 {
151			regulator-min-microvolt = <1100000>;
152			regulator-max-microvolt = <1100000>;
153		};
154
155		vreg_s3a_1p35: smps3 {
156			regulator-min-microvolt = <1352000>;
157			regulator-max-microvolt = <1352000>;
158		};
159
160		vreg_s5a_2p04: smps5 {
161			regulator-min-microvolt = <1904000>;
162			regulator-max-microvolt = <2040000>;
163		};
164
165		vreg_s7a_1p025: smps7 {
166			regulator-min-microvolt = <900000>;
167			regulator-max-microvolt = <1028000>;
168		};
169
170		vdda_mipi_dsi0_pll:
171		vdda_ufs1_core:
172		vreg_l1a_0p875: ldo1 {
173			regulator-min-microvolt = <880000>;
174			regulator-max-microvolt = <880000>;
175			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
176		};
177
178		vreg_l2a_1p2: ldo2 {
179			regulator-min-microvolt = <1200000>;
180			regulator-max-microvolt = <1200000>;
181			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
182			regulator-always-on;
183		};
184
185		vreg_l3a_1p0: ldo3 {
186			regulator-min-microvolt = <1000000>;
187			regulator-max-microvolt = <1000000>;
188			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
189		};
190
191		vreg_l5a_0p8: ldo5 {
192			regulator-min-microvolt = <800000>;
193			regulator-max-microvolt = <800000>;
194			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
195		};
196
197		vreg_l6a_1p8: ldo6 {
198			regulator-min-microvolt = <1856000>;
199			regulator-max-microvolt = <1856000>;
200			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
201		};
202
203		vreg_l7a_1p8: ldo7 {
204			regulator-min-microvolt = <1800000>;
205			regulator-max-microvolt = <1800000>;
206			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
207		};
208
209		vreg_l8a_1p2: ldo8 {
210			regulator-min-microvolt = <1200000>;
211			regulator-max-microvolt = <1248000>;
212			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
213		};
214
215		vreg_l9a_1p8: ldo9 {
216			regulator-min-microvolt = <1704000>;
217			regulator-max-microvolt = <2928000>;
218			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
219		};
220
221		vreg_l10a_2p95: ldo10 {
222			regulator-min-microvolt = <1704000>;
223			regulator-max-microvolt = <2928000>;
224			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
225		};
226
227		vreg_l11a_1p05: ldo11 {
228			regulator-min-microvolt = <1000000>;
229			regulator-max-microvolt = <1048000>;
230			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
231		};
232
233		vreg_l12a_1p8: ldo12 {
234			regulator-min-microvolt = <1800000>;
235			regulator-max-microvolt = <1800000>;
236			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
237		};
238
239		vreg_l13a_2p95: ldo13 {
240			regulator-min-microvolt = <1800000>;
241			regulator-max-microvolt = <2960000>;
242			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
243		};
244
245		vreg_l14a_1p8: ldo14 {
246			regulator-min-microvolt = <1800000>;
247			regulator-max-microvolt = <1880000>;
248			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
249			regulator-always-on;
250		};
251
252		vreg_l15a_1p8: ldo15 {
253			regulator-min-microvolt = <1800000>;
254			regulator-max-microvolt = <1800000>;
255			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
256		};
257
258		vreg_l16a_2p7: ldo16 {
259			regulator-min-microvolt = <2704000>;
260			regulator-max-microvolt = <2704000>;
261			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
262		};
263
264		vreg_l17a_1p3: ldo17 {
265			regulator-min-microvolt = <1304000>;
266			regulator-max-microvolt = <1304000>;
267			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
268			regulator-always-on;
269		};
270
271		vreg_l18a_2p9: ldo18 {
272			regulator-min-microvolt = <2704000>;
273			regulator-max-microvolt = <2960000>;
274			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
275		};
276
277		vreg_l19a_3p1: ldo19 {
278			regulator-min-microvolt = <2856000>;
279			regulator-max-microvolt = <3104000>;
280			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
281		};
282
283		vreg_l20a_2p95: ldo20 {
284			regulator-min-microvolt = <2704000>;
285			regulator-max-microvolt = <2960000>;
286			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
287		};
288
289		vreg_l21a_2p95: ldo21 {
290			regulator-min-microvolt = <2704000>;
291			regulator-max-microvolt = <2960000>;
292			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
293		};
294
295		vreg_l22a_3p3: ldo22 {
296			regulator-min-microvolt = <2864000>;
297			regulator-max-microvolt = <3312000>;
298			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
299		};
300
301		vreg_l23a_3p3: ldo23 {
302			regulator-min-microvolt = <3000000>;
303			regulator-max-microvolt = <3312000>;
304			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
305		};
306
307		vreg_l24a_3p075: ldo24 {
308			regulator-min-microvolt = <3088000>;
309			regulator-max-microvolt = <3088000>;
310			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
311		};
312
313		vreg_l25a_3p3: ldo25 {
314			regulator-min-microvolt = <3000000>;
315			regulator-max-microvolt = <3312000>;
316			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
317			regulator-always-on;
318		};
319
320		vdda_mipi_dsi0_1p2:
321		vdda_ufs1_1p2:
322		vreg_l26a_1p2: ldo26 {
323			regulator-min-microvolt = <1200000>;
324			regulator-max-microvolt = <1200000>;
325			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
326		};
327
328		vreg_l28a_3p0: ldo28 {
329			regulator-min-microvolt = <2856000>;
330			regulator-max-microvolt = <3008000>;
331			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
332			regulator-always-on;
333		};
334
335		vreg_lvs1a_1p8: lvs1 {
336			regulator-min-microvolt = <1800000>;
337			regulator-max-microvolt = <1800000>;
338		};
339
340		vreg_lvs2a_1p8: lvs2 {
341			regulator-min-microvolt = <1800000>;
342			regulator-max-microvolt = <1800000>;
343		};
344	};
345
346	pmi8998-rpmh-regulators {
347		compatible = "qcom,pmi8998-rpmh-regulators";
348		qcom,pmic-id = "b";
349
350		vreg_bob: bob {
351			regulator-min-microvolt = <3312000>;
352			regulator-max-microvolt = <3600000>;
353			regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
354			regulator-allow-bypass;
355		};
356	};
357
358	pm8005-rpmh-regulators {
359		compatible = "qcom,pm8005-rpmh-regulators";
360		qcom,pmic-id = "c";
361
362		vreg_smp3c_0p6: smps3 {
363			regulator-min-microvolt = <600000>;
364			regulator-max-microvolt = <600000>;
365			regulator-always-on;
366		};
367	};
368};
369
370&cdsp_pas {
371	firmware-name = "qcom/sdm845/polaris/cdsp.mbn";
372	status = "okay";
373};
374
375&dsi0 {
376	vdda-supply = <&vdda_mipi_dsi0_1p2>;
377	status = "okay";
378
379	display_panel: panel@0 {
380		compatible = "jdi,fhd-nt35596s";
381		#address-cells = <1>;
382		#size-cells = <0>;
383		reg = <0>;
384
385		reset-gpios = <&tlmm 6 GPIO_ACTIVE_LOW>;
386		vddio-supply = <&vreg_l14a_1p8>;
387		backlight = <&pmi8998_wled>;
388		vddpos-supply = <&lab>;
389		vddneg-supply = <&ibb>;
390
391		pinctrl-names = "default", "sleep";
392		pinctrl-0 = <&sde_dsi_active>;
393		pinctrl-1 = <&sde_dsi_suspend>;
394
395		port {
396			panel_in: endpoint {
397				remote-endpoint = <&dsi0_out>;
398			};
399		};
400	};
401};
402
403&dsi0_out {
404	remote-endpoint = <&panel_in>;
405	data-lanes = <0 1 2 3>;
406};
407
408&dsi0_phy {
409	vdds-supply = <&vdda_mipi_dsi0_pll>;
410	status = "okay";
411};
412
413&gcc {
414	protected-clocks = <GCC_QSPI_CORE_CLK>,
415				<GCC_QSPI_CORE_CLK_SRC>,
416				<GCC_QSPI_CNOC_PERIPH_AHB_CLK>,
417				<GCC_LPASS_Q6_AXI_CLK>,
418				<GCC_LPASS_SWAY_CLK>;
419};
420
421&gmu {
422	status = "okay";
423};
424
425&gpi_dma0 {
426	status = "okay";
427};
428
429&gpi_dma1 {
430	status = "okay";
431};
432
433&gpu {
434	status = "okay";
435
436	zap-shader {
437		memory-region = <&gpu_mem>;
438		firmware-name = "qcom/sdm845/polaris/a630_zap.mbn";
439	};
440};
441
442&ibb {
443	regulator-min-microvolt = <4600000>;
444	regulator-max-microvolt = <6000000>;
445	regulator-over-current-protection;
446	regulator-pull-down;
447	regulator-soft-start;
448	qcom,discharge-resistor-kohms = <300>;
449};
450
451&ipa {
452	memory-region = <&ipa_fw_mem>;
453	firmware-name = "qcom/sdm845/polaris/ipa_fws.mbn";
454	status = "okay";
455};
456
457&i2c14 {
458	clock-frequency = <400000>;
459	status = "okay";
460
461	touchscreen@20 {
462		compatible = "syna,rmi4-i2c";
463		reg = <0x20>;
464		#address-cells = <1>;
465		#size-cells = <0>;
466		interrupts-extended = <&tlmm 125 0x2008>;
467
468		pinctrl-names = "default", "sleep";
469		pinctrl-0 = <&ts_int_default &ts_reset_default>;
470		pinctrl-1 = <&ts_int_sleep &ts_reset_sleep>;
471
472		vdd-supply = <&vreg_l28a_3p0>;
473		vio-supply = <&vreg_tp_vddio>;
474
475		syna,startup-delay-ms = <0xc8>;
476		syna,reset-delay-ms = <0xc8>;
477
478		rmi4-f01@1 {
479			syna,nosleep-mode = <0x1>;
480			reg = <0x1>;
481		};
482
483		rmi4-f12@12 {
484			syna,rezero-wait-ms = <0xc8>;
485			syna,clip-x-high = <0x438>;
486			syna,clip-y-high = <0x870>;
487			syna,sensor-type = <0x1>;
488			syna,clip-x-low = <0x0>;
489			syna,clip-y-low = <0x0>;
490		};
491	};
492};
493
494&lab {
495	regulator-min-microvolt = <4600000>;
496	regulator-max-microvolt = <6000000>;
497	regulator-soft-start;
498	regulator-pull-down;
499};
500
501&mdss {
502	status = "okay";
503};
504
505&mss_pil {
506	firmware-name = "qcom/sdm845/polaris/mba.mbn", "qcom/sdm845/polaris/modem.mbn";
507	status = "okay";
508};
509
510&pmi8998_wled {
511	qcom,current-limit-microamp = <20000>;
512	qcom,current-boost-limit = <970>;
513	qcom,ovp-millivolt = <19600>;
514	qcom,switching-freq = <600>;
515	qcom,num-strings = <4>;
516	qcom,cabc;
517
518	status = "okay";
519};
520
521&pm8998_gpios {
522	volume_up_gpio: pm8998-gpio6-state {
523		pinconf {
524			qcom,drive-strength = <PMIC_GPIO_STRENGTH_NO>;
525			function = "normal";
526			pins = "gpio6";
527			input-enable;
528			bias-pull-up;
529		};
530	};
531};
532
533&pm8998_resin {
534	linux,code = <KEY_VOLUMEDOWN>;
535	status = "okay";
536};
537
538&q6afedai {
539	dai@22 {
540		reg = <QUATERNARY_MI2S_RX>;
541		qcom,sd-lines = <0>;
542	};
543};
544
545&q6asmdai {
546	dai@0 {
547		reg = <0>;
548	};
549
550	dai@1 {
551		reg = <1>;
552	};
553
554	dai@2 {
555		reg = <2>;
556	};
557};
558
559&qupv3_id_0 {
560	status = "okay";
561};
562
563&qupv3_id_1 {
564	status = "okay";
565};
566
567&qup_i2c14_default {
568	drive-strength = <2>;
569	bias-disable;
570};
571
572&tlmm {
573	gpio-reserved-ranges = <0 4>, <81 4>;
574
575	ts_reset_default: ts-reset-default-state {
576		pins = "gpio99";
577		function = "gpio";
578		drive-strength = <16>;
579		output-high;
580	};
581
582	ts_int_default: ts-int-default-state {
583		pins = "gpio125";
584		function = "gpio";
585		bias-pull-down;
586		drive-strength = <16>;
587		input-enable;
588	};
589
590	ts_reset_sleep: ts-reset-sleep-state {
591		pins = "gpio99";
592		function = "gpio";
593		bias-disable;
594		drive-strength = <2>;
595	};
596
597	ts_int_sleep: ts-int-sleep-state {
598		pins = "gpio125";
599		function = "gpio";
600		bias-pull-down;
601		drive-strength = <2>;
602		input-enable;
603	};
604
605	sde_dsi_active: sde-dsi-active-state {
606		pins = "gpio6", "gpio10";
607		function = "gpio";
608		drive-strength = <8>;
609		bias-disable;
610	};
611
612	sde_dsi_suspend: sde-dsi-suspend-state {
613		pins = "gpio6", "gpio10";
614		function = "gpio";
615		drive-strength = <2>;
616		bias-pull-down;
617	};
618
619	wcd_intr_default: wcd-intr-default-state {
620		pins = "gpio54";
621		function = "gpio";
622		input-enable;
623		bias-pull-down;
624		drive-strength = <2>;
625	};
626};
627
628&uart6 {
629	status = "okay";
630
631	pinctrl-0 = <&qup_uart6_4pin>;
632
633	bluetooth {
634		compatible = "qcom,wcn3990-bt";
635
636		/* This path is relative to the qca/ subdir under lib/firmware. */
637		firmware-name = "polaris/crnv21.bin";
638
639		vddio-supply = <&vreg_s4a_1p8>;
640		vddxo-supply = <&vreg_l7a_1p8>;
641		vddrf-supply = <&vreg_l17a_1p3>;
642		vddch0-supply = <&vreg_l25a_3p3>;
643		max-speed = <3200000>;
644	};
645};
646
647&usb_1 {
648	/* We'll use this as USB 2.0 only */
649	qcom,select-utmi-as-pipe-clk;
650	status = "okay";
651};
652
653&usb_1_dwc3 {
654	dr_mode = "peripheral";
655
656	/* Fastest mode for USB 2 */
657	maximum-speed = "high-speed";
658
659	/* Remove USB3 phy */
660	phys = <&usb_1_hsphy>;
661	phy-names = "usb2-phy";
662};
663
664&usb_1_hsphy {
665	vdda-phy-dpdm-supply = <&vreg_l24a_3p075>;
666	vdda-pll-supply = <&vreg_l12a_1p8>;
667	vdd-supply = <&vreg_l1a_0p875>;
668
669	qcom,preemphasis-width = <QUSB2_V2_PREEMPHASIS_WIDTH_HALF_BIT>;
670	qcom,preemphasis-level = <QUSB2_V2_PREEMPHASIS_5_PERCENT>;
671	qcom,hstx-trim-value = <QUSB2_V2_HSTX_TRIM_21_6_MA>;
672	qcom,imp-res-offset-value = <8>;
673
674	status = "okay";
675};
676
677&usb_1_qmpphy {
678	vdda-pll-supply = <&vreg_l1a_0p875>;
679	vdda-phy-supply = <&vreg_l26a_1p2>;
680	status = "okay";
681};
682
683&ufs_mem_hc {
684	reset-gpios = <&tlmm 150 GPIO_ACTIVE_LOW>;
685	vcc-supply = <&vreg_l20a_2p95>;
686	vcc-max-microamp = <800000>;
687	status = "okay";
688};
689
690&ufs_mem_phy {
691	vdda-phy-supply = <&vdda_ufs1_core>;
692	vdda-pll-supply = <&vdda_ufs1_1p2>;
693	status = "okay";
694};
695
696&venus {
697	firmware-name = "qcom/sdm845/polaris/venus.mbn";
698	status = "okay";
699};
700
701&wcd9340 {
702	pinctrl-0 = <&wcd_intr_default>;
703	pinctrl-names = "default";
704	clock-names = "extclk";
705	clocks = <&rpmhcc RPMH_LN_BB_CLK2>;
706	reset-gpios = <&tlmm 64 GPIO_ACTIVE_HIGH>;
707	vdd-buck-sido-supply = <&vreg_s4a_1p8>;
708	vdd-buck-supply = <&vreg_s4a_1p8>;
709	vdd-tx-supply = <&vreg_s4a_1p8>;
710	vdd-rx-supply = <&vreg_s4a_1p8>;
711	vdd-io-supply = <&vreg_s4a_1p8>;
712
713	qcom,micbias1-microvolt = <2700000>;
714	qcom,micbias2-microvolt = <1800000>;
715	qcom,micbias3-microvolt = <2700000>;
716	qcom,micbias4-microvolt = <2700000>;
717};
718
719&wifi {
720	vdd-0.8-cx-mx-supply = <&vreg_l5a_0p8>;
721	vdd-1.8-xo-supply = <&vreg_l7a_1p8>;
722	vdd-1.3-rfa-supply = <&vreg_l17a_1p3>;
723	vdd-3.3-ch0-supply = <&vreg_l25a_3p3>;
724	vdd-3.3-ch1-supply = <&vreg_l23a_3p3>;
725
726	qcom,snoc-host-cap-skip-quirk;
727	status = "okay";
728};
729