1// SPDX-License-Identifier: BSD-3-Clause
2/*
3 * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
4 */
5
6#include <dt-bindings/input/input.h>
7#include <dt-bindings/pinctrl/qcom,pmic-gpio.h>
8#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
9#include "sdm845.dtsi"
10#include "pm8005.dtsi"
11#include "pm8998.dtsi"
12#include "pmi8998.dtsi"
13
14/ {
15	qcom,msm-id = <321 0x20001>; /* SDM845 v2.1 */
16	qcom,board-id = <8 0>;
17
18	gpio-keys {
19		compatible = "gpio-keys";
20
21		pinctrl-0 = <&focus_n &snapshot_n &vol_down_n &vol_up_n>;
22		pinctrl-names = "default";
23
24		key-camera-focus {
25			label = "Camera Focus";
26			gpios = <&pm8998_gpios 2 GPIO_ACTIVE_LOW>;
27			linux,code = <KEY_CAMERA_FOCUS>;
28			debounce-interval = <15>;
29			linux,can-disable;
30			wakeup-source;
31		};
32
33		key-camera-snapshot {
34			label = "Camera Snapshot";
35			gpios = <&pm8998_gpios 7 GPIO_ACTIVE_LOW>;
36			linux,code = <KEY_CAMERA>;
37			debounce-interval = <15>;
38			linux,can-disable;
39			wakeup-source;
40		};
41
42		key-volume-down {
43			label = "Volume Down";
44			gpios = <&pm8998_gpios 5 GPIO_ACTIVE_LOW>;
45			linux,code = <KEY_VOLUMEDOWN>;
46			debounce-interval = <15>;
47			linux,can-disable;
48			wakeup-source;
49		};
50
51		key-volume-up {
52			label = "Volume Up";
53			gpios = <&pm8998_gpios 6 GPIO_ACTIVE_LOW>;
54			linux,code = <KEY_VOLUMEUP>;
55			debounce-interval = <15>;
56			linux,can-disable;
57			wakeup-source;
58		};
59	};
60
61	vph_pwr: vph-pwr-regulator {
62		compatible = "regulator-fixed";
63		regulator-name = "vph_pwr";
64		regulator-min-microvolt = <3700000>;
65		regulator-max-microvolt = <3700000>;
66	};
67
68	vreg_s4a_1p8: pm8998-smps4 {
69		compatible = "regulator-fixed";
70		regulator-name = "vreg_s4a_1p8";
71
72		regulator-min-microvolt = <1800000>;
73		regulator-max-microvolt = <1800000>;
74
75		regulator-always-on;
76		regulator-boot-on;
77
78		vin-supply = <&vph_pwr>;
79	};
80
81	reserved-memory {
82		/* SONY was cool and didn't diverge from MTP this time, yay! */
83		cont_splash_mem: memory@9d400000 {
84			reg = <0x0 0x9d400000 0x0 0x2400000>;
85			no-map;
86		};
87
88		ramoops@ffc00000 {
89			compatible = "ramoops";
90			reg = <0x0 0xffc00000 0x0 0x100000>;
91			record-size = <0x10000>;
92			console-size = <0x60000>;
93			ftrace-size = <0x10000>;
94			pmsg-size = <0x20000>;
95			ecc-size = <16>;
96			no-map;
97		};
98	};
99};
100
101&apps_rsc {
102	regulators-0 {
103		compatible = "qcom,pm8998-rpmh-regulators";
104		qcom,pmic-id = "a";
105
106		vdd-s1-supply = <&vph_pwr>;
107		vdd-s2-supply = <&vph_pwr>;
108		vdd-s3-supply = <&vph_pwr>;
109		vdd-s4-supply = <&vph_pwr>;
110		vdd-s5-supply = <&vph_pwr>;
111		vdd-s6-supply = <&vph_pwr>;
112		vdd-s7-supply = <&vph_pwr>;
113		vdd-s8-supply = <&vph_pwr>;
114		vdd-s9-supply = <&vph_pwr>;
115		vdd-s10-supply = <&vph_pwr>;
116		vdd-s11-supply = <&vph_pwr>;
117		vdd-s12-supply = <&vph_pwr>;
118		vdd-s13-supply = <&vph_pwr>;
119		vdd-l1-l27-supply = <&vreg_s7a_0p9>;
120		vdd-l2-l8-l17-supply = <&vreg_s3a_1p3>;
121		vdd-l3-l11-supply = <&vreg_s7a_0p9>;
122		vdd-l4-l5-supply = <&vreg_s7a_0p9>;
123		vdd-l6-supply = <&vph_pwr>;
124		vdd-l7-l12-l14-l15-supply = <&vreg_s5a_1p9>;
125		vdd-l9-supply = <&vreg_s5a_1p9>;
126		vdd-l10-l23-l25-supply = <&src_vreg_bob>;
127		vdd-l13-l19-l21-supply = <&src_vreg_bob>;
128		vdd-l16-l28-supply = <&src_vreg_bob>;
129		vdd-l18-l22-supply = <&src_vreg_bob>;
130		vdd-l20-l24-supply = <&src_vreg_bob>;
131		vdd-l26-supply = <&vreg_s3a_1p3>;
132		vin-lvs-1-2-supply = <&vreg_s4a_1p8>;
133
134		vreg_s2a_1p1: smps2 {
135			regulator-min-microvolt = <1100000>;
136			regulator-max-microvolt = <1100000>;
137		};
138
139		vreg_s3a_1p3: smps3 {
140			regulator-min-microvolt = <1352000>;
141			regulator-max-microvolt = <1352000>;
142		};
143
144		vreg_s5a_1p9: smps5 {
145			regulator-min-microvolt = <1904000>;
146			regulator-max-microvolt = <2040000>;
147		};
148
149		vreg_s7a_0p9: smps7 {
150			regulator-min-microvolt = <900000>;
151			regulator-max-microvolt = <1028000>;
152		};
153
154		vreg_l1a_0p9: ldo1 {
155			regulator-min-microvolt = <880000>;
156			regulator-max-microvolt = <880000>;
157			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
158		};
159
160		vreg_l2a_1p2: ldo2 {
161			regulator-min-microvolt = <1200000>;
162			regulator-max-microvolt = <1200000>;
163			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
164			regulator-always-on;
165		};
166
167		vreg_l3a_1p0: ldo3 {
168			regulator-min-microvolt = <1000000>;
169			regulator-max-microvolt = <1000000>;
170			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
171		};
172
173		vreg_l5a_0p8: ldo5 {
174			regulator-min-microvolt = <800000>;
175			regulator-max-microvolt = <800000>;
176			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
177		};
178
179		vreg_l6a_1p8: ldo6 {
180			regulator-min-microvolt = <1856000>;
181			regulator-max-microvolt = <1856000>;
182			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
183		};
184
185		vreg_l7a_1p8: ldo7 {
186			regulator-min-microvolt = <1800000>;
187			regulator-max-microvolt = <1800000>;
188			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
189		};
190
191		vreg_l8a_1p2: ldo8 {
192			regulator-min-microvolt = <1200000>;
193			regulator-max-microvolt = <1248000>;
194			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
195		};
196
197		vreg_l9a_1p7: ldo9 {
198			regulator-min-microvolt = <1704000>;
199			regulator-max-microvolt = <2928000>;
200			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
201		};
202
203		vreg_l10a_1p7: ldo10 {
204			regulator-min-microvolt = <1704000>;
205			regulator-max-microvolt = <2928000>;
206			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
207		};
208
209		vreg_l11a_1p0: ldo11 {
210			regulator-min-microvolt = <1000000>;
211			regulator-max-microvolt = <1048000>;
212			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
213		};
214
215		vreg_l12a_1p8: ldo12 {
216			regulator-min-microvolt = <1800000>;
217			regulator-max-microvolt = <1800000>;
218			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
219		};
220
221		vreg_l13a_1p8: ldo13 {
222			regulator-min-microvolt = <1800000>;
223			regulator-max-microvolt = <2960000>;
224			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
225		};
226
227		vreg_l14a_1p8: ldo14 {
228			regulator-min-microvolt = <1800000>;
229			regulator-max-microvolt = <1800000>;
230			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
231			regulator-system-load = <62000>;
232		};
233
234		vreg_l15a_1p8: ldo15 {
235			regulator-min-microvolt = <1800000>;
236			regulator-max-microvolt = <1800000>;
237			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
238		};
239
240		vreg_l16a_2p7: ldo16 {
241			regulator-min-microvolt = <2704000>;
242			regulator-max-microvolt = <2704000>;
243			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
244		};
245
246		vreg_l17a_1p3: ldo17 {
247			regulator-min-microvolt = <1304000>;
248			regulator-max-microvolt = <1304000>;
249			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
250		};
251
252		vreg_l18a_2p7: ldo18 {
253			regulator-min-microvolt = <2704000>;
254			regulator-max-microvolt = <2960000>;
255			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
256		};
257
258		vreg_l19a_2p7: ldo19 {
259			regulator-min-microvolt = <2700000>;
260			regulator-max-microvolt = <2700000>;
261			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
262
263			/*
264			 * The driver *really* doesn't want this regualtor to exist,
265			 * saying that it could not get the current voltage (-ENOTRECOVERABLE)
266			 * even though it surely is used on these devices (as a voltage
267			 * source for camera autofocus)
268			 */
269			status = "disabled";
270		};
271
272		vreg_l20a_2p7: ldo20 {
273			regulator-min-microvolt = <2704000>;
274			regulator-max-microvolt = <2960000>;
275			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
276		};
277
278		vreg_l21a_2p7: ldo21 {
279			regulator-min-microvolt = <2704000>;
280			regulator-max-microvolt = <2960000>;
281			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
282		};
283
284		vreg_l22a_2p8: ldo22 {
285			regulator-min-microvolt = <2800000>;
286			regulator-max-microvolt = <2800000>;
287			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
288		};
289
290		vreg_l23a_3p0: ldo23 {
291			regulator-min-microvolt = <3000000>;
292			regulator-max-microvolt = <3312000>;
293			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
294		};
295
296		vreg_l24a_3p1: ldo24 {
297			regulator-min-microvolt = <3088000>;
298			regulator-max-microvolt = <3088000>;
299			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
300		};
301
302		vreg_l25a_3p0: ldo25 {
303			regulator-min-microvolt = <3000000>;
304			regulator-max-microvolt = <3312000>;
305			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
306		};
307
308		vreg_l26a_1p2: ldo26 {
309			regulator-min-microvolt = <1200000>;
310			regulator-max-microvolt = <1200000>;
311			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
312		};
313
314		vreg_l28a_2p8: ldo28 {
315			regulator-min-microvolt = <2856000>;
316			regulator-max-microvolt = <3008000>;
317			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
318			regulator-system-load = <100000>;
319		};
320
321		vreg_lvs1a_1p8: lvs1 {
322			regulator-min-microvolt = <1800000>;
323			regulator-max-microvolt = <1800000>;
324			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
325		};
326
327		vreg_lvs2a_1p8: lvs2 {
328			regulator-min-microvolt = <1800000>;
329			regulator-max-microvolt = <1800000>;
330			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
331		};
332	};
333
334	regulators-1 {
335		compatible = "qcom,pmi8998-rpmh-regulators";
336		qcom,pmic-id = "b";
337
338		src_vreg_bob: bob {
339			regulator-min-microvolt = <3312000>;
340			regulator-max-microvolt = <3600000>;
341			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
342		};
343	};
344
345	regulators-2 {
346		compatible = "qcom,pm8005-rpmh-regulators";
347		qcom,pmic-id = "c";
348
349		vdd-s1-supply = <&vph_pwr>;
350		vdd-s2-supply = <&vph_pwr>;
351		vdd-s3-supply = <&vph_pwr>;
352		vdd-s4-supply = <&vph_pwr>;
353
354		vreg_s3c_0p6: smps3 {
355			regulator-min-microvolt = <600000>;
356			regulator-max-microvolt = <600000>;
357		};
358	};
359};
360
361&dsi0 {
362	vdda-supply = <&vreg_l26a_1p2>;
363	status = "okay";
364
365	panel: panel@0 {
366		/* The compatible is assigned in device DTs. */
367		reg = <0>;
368
369		backlight = <&pmi8998_wled>;
370		vddio-supply = <&vreg_l14a_1p8>;
371		vsp-supply = <&lab>;
372		vsn-supply = <&ibb>;
373		panel-reset-gpios = <&tlmm 6 GPIO_ACTIVE_HIGH>;
374		touch-reset-gpios = <&tlmm 99 GPIO_ACTIVE_HIGH>;
375
376		pinctrl-0 = <&sde_dsi_active &sde_te_active_sleep>;
377		pinctrl-1 = <&sde_dsi_sleep &sde_te_active_sleep>;
378		pinctrl-names = "default", "sleep";
379
380		port {
381			panel_in: endpoint {
382				remote-endpoint = <&dsi0_out>;
383			};
384		};
385	};
386};
387
388&dsi0_out {
389	remote-endpoint = <&panel_in>;
390	data-lanes = <0 1 2 3>;
391};
392
393&dsi0_phy {
394	vdds-supply = <&vreg_l1a_0p9>;
395	status = "okay";
396};
397
398&gcc {
399	protected-clocks = <GCC_QSPI_CORE_CLK>,
400			<GCC_QSPI_CORE_CLK_SRC>,
401			<GCC_QSPI_CNOC_PERIPH_AHB_CLK>,
402			<GCC_LPASS_Q6_AXI_CLK>,
403			<GCC_LPASS_SWAY_CLK>;
404};
405
406&i2c5 {
407	clock-frequency = <400000>;
408	status = "okay";
409
410	touchscreen: touchscreen@2c {
411		compatible = "syna,rmi4-i2c";
412		reg = <0x2c>;
413
414		interrupts-extended = <&tlmm 125 IRQ_TYPE_EDGE_FALLING>;
415		vdd-supply = <&vreg_l14a_1p8>;
416		/*
417		 * This is a blatant abuse of OF, but the panel driver *needs*
418		 * to probe first, as the power/gpio switching needs to be precisely
419		 * timed in order for both the display and touch panel to function properly.
420		 */
421		incell-supply = <&panel>;
422
423		syna,reset-delay-ms = <220>;
424		syna,startup-delay-ms = <1000>;
425
426		pinctrl-0 = <&ts_default>;
427		pinctrl-1 = <&ts_sleep>;
428		pinctrl-names = "default", "sleep";
429
430		#address-cells = <1>;
431		#size-cells = <0>;
432
433		rmi4-f01@1 {
434			reg = <0x01>;
435			syna,nosleep-mode = <1>;
436		};
437
438		rmi4-f12@12 {
439			reg = <0x12>;
440			syna,sensor-type = <1>;
441		};
442	};
443};
444
445&i2c10 {
446	status = "okay";
447	clock-frequency = <400000>;
448
449	/* Qcom SMB1355 @ 8, c */
450	/* NXP PN547 NFC @ 28 */
451	/* Renesas IDTP9221 Qi charger @ 61 */
452};
453
454&i2c14 {
455	status = "okay";
456	clock-frequency = <400000>;
457
458	/* SONY ToF sensor @ 52 */
459	/* AMS TCS3490 RGB+IR color sensor @ 72 */
460};
461
462&ibb {
463	qcom,discharge-resistor-kohms = <300>;
464	regulator-min-microvolt = <5500000>;
465	regulator-max-microvolt = <5700000>;
466	regulator-min-microamp = <0>;
467	regulator-max-microamp = <800000>;
468	regulator-over-current-protection;
469	regulator-soft-start;
470	regulator-pull-down;
471};
472
473&lab {
474	regulator-min-microvolt = <5500000>;
475	regulator-max-microvolt = <5700000>;
476	regulator-min-microamp = <200000>;
477	regulator-max-microamp = <200000>;
478	regulator-over-current-protection;
479	regulator-soft-start;
480	regulator-pull-down;
481};
482
483&mdss {
484	status = "okay";
485};
486
487&pm8998_gpios {
488	focus_n: focus-n-state {
489		pins = "gpio2";
490		function = PMIC_GPIO_FUNC_NORMAL;
491		power-source = <0>;
492		bias-pull-up;
493		input-enable;
494	};
495
496	vol_down_n: vol-down-n-state {
497		pins = "gpio5";
498		function = PMIC_GPIO_FUNC_NORMAL;
499		power-source = <0>;
500		bias-pull-up;
501		input-enable;
502	};
503
504	vol_up_n: vol-up-n-state {
505		pins = "gpio6";
506		function = PMIC_GPIO_FUNC_NORMAL;
507		power-source = <0>;
508		bias-pull-up;
509		input-enable;
510	};
511
512	snapshot_n: snapshot-n-state {
513		pins = "gpio7";
514		function = PMIC_GPIO_FUNC_NORMAL;
515		power-source = <0>;
516		bias-pull-up;
517		input-enable;
518	};
519};
520
521&pmi8998_wled {
522	default-brightness = <800>;
523	qcom,switching-freq = <800>;
524	qcom,ovp-millivolt = <29600>;
525	qcom,current-boost-limit = <970>;
526	qcom,current-limit-microamp = <20000>;
527	qcom,enabled-strings = <0 1 2 3>;
528	status = "okay";
529};
530
531&qupv3_id_0 {
532	status = "okay";
533};
534
535&qupv3_id_1 {
536	status = "okay";
537};
538
539&sdhc_2 {
540	status = "okay";
541
542	vmmc-supply = <&vreg_l21a_2p7>;
543	vqmmc-supply = <&vreg_l13a_1p8>;
544	cd-gpios = <&tlmm 126 GPIO_ACTIVE_HIGH>;
545	pinctrl-0 = <&sdc2_default_state>;
546	pinctrl-names = "default";
547	bus-width = <4>;
548	no-sdio;
549	no-mmc;
550};
551
552&tlmm {
553	gpio-reserved-ranges = <0 4>, <81 4>;
554
555	sdc2_default_state: sdc2-default-state {
556		clk-pins {
557			pins = "sdc2_clk";
558			drive-strength = <16>;
559			bias-disable;
560		};
561
562		cmd-pins {
563			pins = "sdc2_cmd";
564			drive-strength = <10>;
565			bias-pull-up;
566		};
567
568		data-pins {
569			pins = "sdc2_data";
570			drive-strength = <10>;
571			bias-pull-up;
572		};
573	};
574
575	sde_dsi_active: sde-dsi-active-state {
576		pins = "gpio6";
577		function = "gpio";
578		drive-strength = <8>;
579		bias-disable;
580	};
581
582	sde_dsi_sleep: sde-dsi-sleep-state {
583		pins = "gpio6";
584		function = "gpio";
585		drive-strength = <2>;
586		bias-pull-down;
587	};
588
589	sde_te_active_sleep: sde-te-active-sleep-state {
590		pins = "gpio10";
591		function = "mdp_vsync";
592		drive-strength = <2>;
593		bias-pull-down;
594	};
595
596	ts_default: ts-default-state {
597		reset-pins {
598			pins = "gpio99";
599			function = "gpio";
600			drive-strength = <2>;
601			bias-pull-up;
602		};
603
604		int-pins {
605			pins = "gpio125";
606			function = "gpio";
607			drive-strength = <2>;
608			bias-pull-up;
609		};
610	};
611
612	ts_sleep: ts-sleep-state {
613		reset-pins {
614			pins = "gpio99";
615			function = "gpio";
616			drive-strength = <2>;
617			bias-pull-down;
618		};
619
620		int-pins {
621			pins = "gpio125";
622			function = "gpio";
623			drive-strength = <2>;
624			bias-pull-down;
625		};
626	};
627};
628
629&uart6 {
630	status = "okay";
631};
632
633&uart9 {
634	status = "okay";
635};
636
637/* BIG WARNING! DO NOT TOUCH UFS, YOUR DEVICE WILL DIE! */
638&ufs_mem_hc { status = "disabled"; };
639&ufs_mem_phy { status = "disabled"; };
640
641&usb_1 {
642	status = "okay";
643
644	qcom,select-utmi-as-pipe-clk;
645};
646
647&usb_1_dwc3 {
648	dr_mode = "peripheral";
649
650	maximum-speed = "high-speed";
651	phys = <&usb_1_hsphy>;
652	phy-names = "usb2-phy";
653};
654
655&usb_1_hsphy {
656	status = "okay";
657
658	vdd-supply = <&vreg_l1a_0p9>;
659	vdda-pll-supply = <&vreg_l12a_1p8>;
660	vdda-phy-dpdm-supply = <&vreg_l24a_3p1>;
661};
662