1// SPDX-License-Identifier: BSD-3-Clause
2/*
3 * Copyright (c) 2021, Konrad Dybcio <konrad.dybcio@somainline.org>
4 */
5
6#include <dt-bindings/regulator/qcom,rpmh-regulator.h>
7#include "sm8250.dtsi"
8#include "pm8150.dtsi"
9#include "pm8150b.dtsi"
10#include "pm8150l.dtsi"
11#include "pm8009.dtsi"
12
13/delete-node/ &adsp_mem;
14/delete-node/ &spss_mem;
15/delete-node/ &cdsp_secure_heap;
16
17/ {
18	qcom,msm-id = <356 0x20001>; /* SM8250 v2.1 */
19	qcom,board-id = <0x10008 0>;
20
21	chosen {
22		#address-cells = <2>;
23		#size-cells = <2>;
24		ranges;
25
26		framebuffer: framebuffer@9c000000 {
27			compatible = "simple-framebuffer";
28			reg = <0 0x9c000000 0 0x2300000>;
29			width = <1644>;
30			height = <3840>;
31			stride = <(1644 * 4)>;
32			format = "a8r8g8b8";
33			/*
34			 * That's a lot of clocks, but it's necessary due
35			 * to unused clk cleanup & no panel driver yet..
36			 */
37			clocks = <&dispcc DISP_CC_MDSS_AHB_CLK>,
38				 <&gcc GCC_DISP_HF_AXI_CLK>,
39				 <&gcc GCC_DISP_SF_AXI_CLK>,
40				 <&dispcc DISP_CC_MDSS_VSYNC_CLK>,
41				 <&dispcc DISP_CC_MDSS_MDP_CLK>,
42				 <&dispcc DISP_CC_MDSS_BYTE0_CLK>,
43				 <&dispcc DISP_CC_MDSS_BYTE0_INTF_CLK>,
44				 <&dispcc DISP_CC_MDSS_PCLK0_CLK>,
45				 <&dispcc DISP_CC_MDSS_ESC0_CLK>;
46			power-domains = <&dispcc MDSS_GDSC>;
47		};
48	};
49
50	gpio_keys: gpio-keys {
51		compatible = "gpio-keys";
52
53		/*
54		 * Camera focus (light press) and camera snapshot (full press)
55		 * seem not to work properly.. Adding the former one stalls the CPU
56		 * and the latter kills the volume down key for whatever reason. In any
57		 * case, they are both on &pm8150b_gpios: camera focus(2), camera snapshot(1).
58		 */
59
60		vol-down {
61			label = "Volume Down";
62			linux,code = <KEY_VOLUMEDOWN>;
63			gpios = <&pm8150_gpios 1 GPIO_ACTIVE_LOW>;
64			debounce-interval = <15>;
65			linux,can-disable;
66			gpio-key,wakeup;
67		};
68	};
69
70	vph_pwr: vph-pwr-regulator {
71		compatible = "regulator-fixed";
72		regulator-name = "vph_pwr";
73		regulator-min-microvolt = <3700000>;
74		regulator-max-microvolt = <3700000>;
75	};
76
77	/* S6c is really ebi.lvl but it's there for supply map completeness sake. */
78	vreg_s6c_0p88: smpc6-regulator {
79		compatible = "regulator-fixed";
80		regulator-name = "vreg_s6c_0p88";
81
82		regulator-min-microvolt = <880000>;
83		regulator-max-microvolt = <880000>;
84		regulator-always-on;
85		vin-supply = <&vph_pwr>;
86	};
87
88	reserved-memory {
89		adsp_mem: memory@8a100000 {
90			reg = <0x0 0x8a100000 0x0 0x2500000>;
91			no-map;
92		};
93
94		spss_mem: memory@8c600000 {
95			reg = <0x0 0x8c600000 0x0 0x100000>;
96			no-map;
97		};
98
99		cdsp_secure_heap: memory@8c700000 {
100			reg = <0x0 0x8c700000 0x0 0x4600000>;
101			no-map;
102		};
103
104		cont_splash_mem: memory@9c000000 {
105			reg = <0x0 0x9c000000 0x0 0x2300000>;
106			no-map;
107		};
108
109		ramoops@ffc00000 {
110			compatible = "ramoops";
111			reg = <0x0 0xffc00000 0x0 0x100000>;
112			record-size = <0x1000>;
113			console-size = <0x40000>;
114			msg-size = <0x20000 0x20000>;
115			ecc-size = <16>;
116			no-map;
117		};
118	};
119};
120
121&adsp {
122	status = "okay";
123};
124
125&apps_rsc {
126	pm8150-rpmh-regulators {
127		compatible = "qcom,pm8150-rpmh-regulators";
128		qcom,pmic-id = "a";
129
130		vdd-s1-supply = <&vph_pwr>;
131		vdd-s2-supply = <&vph_pwr>;
132		vdd-s3-supply = <&vph_pwr>;
133		vdd-s4-supply = <&vph_pwr>;
134		vdd-s5-supply = <&vph_pwr>;
135		vdd-s6-supply = <&vph_pwr>;
136		vdd-s7-supply = <&vph_pwr>;
137		vdd-s8-supply = <&vph_pwr>;
138		vdd-s9-supply = <&vph_pwr>;
139		vdd-s10-supply = <&vph_pwr>;
140		vdd-l1-l8-l11-supply = <&vreg_s6c_0p88>;
141		vdd-l2-l10-supply = <&vreg_bob>;
142		vdd-l3-l4-l5-l18-supply = <&vreg_s6a_0p6>;
143		vdd-l6-l9-supply = <&vreg_s8c_1p2>;
144		vdd-l7-l12-l14-l15-supply = <&vreg_s5a_1p9>;
145		vdd-l13-l16-l17-supply = <&vreg_bob>;
146
147		/* (S1+S2+S3) - cx.lvl (ARC) */
148
149		vreg_s4a_1p8: smps4 {
150			regulator-name = "vreg_s4a_1p8";
151			regulator-min-microvolt = <1800000>;
152			regulator-max-microvolt = <1920000>;
153			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
154		};
155
156		vreg_s5a_1p9: smps5 {
157			regulator-name = "vreg_s5a_1p9";
158			regulator-min-microvolt = <1824000>;
159			regulator-max-microvolt = <2040000>;
160			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
161		};
162
163		vreg_s6a_0p6: smps6 {
164			regulator-name = "vreg_s6a_0p6";
165			regulator-min-microvolt = <600000>;
166			regulator-max-microvolt = <1128000>;
167			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
168		};
169
170		vreg_l2a_3p1: ldo2 {
171			regulator-name = "vreg_l2a_3p1";
172			regulator-min-microvolt = <3072000>;
173			regulator-max-microvolt = <3072000>;
174			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
175		};
176
177		vreg_l3a_0p9: ldo3 {
178			regulator-name = "vreg_l3a_0p9";
179			regulator-min-microvolt = <928000>;
180			regulator-max-microvolt = <932000>;
181			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
182		};
183
184		/* L4 - lmx.lvl (ARC) */
185
186		vreg_l5a_0p88: ldo5 {
187			regulator-name = "vreg_l5a_0p88";
188			regulator-min-microvolt = <880000>;
189			regulator-max-microvolt = <880000>;
190			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
191		};
192
193		vreg_l6a_1p2: ldo6 {
194			regulator-name = "vreg_l6a_1p2";
195			regulator-min-microvolt = <1200000>;
196			regulator-max-microvolt = <1200000>;
197			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
198		};
199
200		/* L7 is unused. */
201
202		vreg_l9a_1p2: ldo9 {
203			regulator-name = "vreg_l9a_1p2";
204			regulator-min-microvolt = <1200000>;
205			regulator-max-microvolt = <1200000>;
206			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
207		};
208
209		/* L10 is unused, L11 - lcx.lvl (ARC) */
210
211		vreg_l12a_1p8: ldo12 {
212			regulator-name = "vreg_l12a_1p8";
213			regulator-min-microvolt = <1800000>;
214			regulator-max-microvolt = <1800000>;
215			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
216		};
217
218		/* L13 is unused. */
219
220		vreg_l14a_1p8: ldo14 {
221			regulator-name = "vreg_l14a_1p8";
222			regulator-min-microvolt = <1800000>;
223			regulator-max-microvolt = <1880000>;
224			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
225		};
226
227		/* L15 & L16 are unused. */
228
229		vreg_l17a_3p0: ldo17 {
230			regulator-name = "vreg_l17a_3p0";
231			regulator-min-microvolt = <2496000>;
232			regulator-max-microvolt = <3008000>;
233			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
234		};
235
236		vreg_l18a_0p9: ldo18 {
237			regulator-name = "vreg_l18a_0p9";
238			regulator-min-microvolt = <800000>;
239			regulator-max-microvolt = <920000>;
240			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
241		};
242	};
243
244	/*
245	 * Remaining regulators that are not yet supported:
246	 * OLEDB: 4925000-8100000
247	 * ab: 4600000-6100000
248	 * ibb: 800000-5400000
249	 */
250	pm8150l-rpmh-regulators {
251		compatible = "qcom,pm8150l-rpmh-regulators";
252		qcom,pmic-id = "c";
253
254		vdd-s1-supply = <&vph_pwr>;
255		vdd-s2-supply = <&vph_pwr>;
256		vdd-s3-supply = <&vph_pwr>;
257		vdd-s4-supply = <&vph_pwr>;
258		vdd-s5-supply = <&vph_pwr>;
259		vdd-s6-supply = <&vph_pwr>;
260		vdd-s7-supply = <&vph_pwr>;
261		vdd-s8-supply = <&vph_pwr>;
262		vdd-l1-l8-supply = <&vreg_s4a_1p8>;
263		vdd-l2-l3-supply = <&vreg_s8c_1p2>;
264		vdd-l4-l5-l6-supply = <&vreg_bob>;
265		vdd-l7-l11-supply = <&vreg_bob>;
266		vdd-l9-l10-supply = <&vreg_bob>;
267		vdd-bob-supply = <&vph_pwr>;
268
269		vreg_bob: bob {
270			regulator-name = "vreg_bob";
271			regulator-min-microvolt = <3350000>;
272			regulator-max-microvolt = <3960000>;
273			regulator-initial-mode = <RPMH_REGULATOR_MODE_AUTO>;
274		};
275
276		/*
277		 * S1-S6 are ARCs:
278		 * (S1+S2) - gfx.lvl,
279		 * S3 - mx.lvl,
280		 * (S4+S5) - mmcx.lvl,
281		 * S6 - ebi.lvl
282		 */
283
284		vreg_s7c_0p35: smps7 {
285			regulator-name = "vreg_s7c_0p35";
286			regulator-min-microvolt = <348000>;
287			regulator-max-microvolt = <1000000>;
288			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
289		};
290
291		vreg_s8c_1p2: smps8 {
292			regulator-name = "vreg_s8c_1p2";
293			regulator-min-microvolt = <1200000>;
294			regulator-max-microvolt = <1400000>;
295			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
296		};
297
298		vreg_l1c_1p8: ldo1 {
299			regulator-name = "vreg_l1c_1p8";
300			regulator-min-microvolt = <1800000>;
301			regulator-max-microvolt = <1800000>;
302			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
303		};
304
305		/* L2-4 are unused. */
306
307		vreg_l5c_1p8: ldo5 {
308			regulator-name = "vreg_l5c_1p8";
309			regulator-min-microvolt = <1800000>;
310			regulator-max-microvolt = <2800000>;
311			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
312		};
313
314		vreg_l6c_2p9: ldo6 {
315			regulator-name = "vreg_l6c_2p9";
316			regulator-min-microvolt = <1800000>;
317			regulator-max-microvolt = <2960000>;
318			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
319			regulator-allow-set-load;
320		};
321
322		vreg_l7c_2p85: ldo7 {
323			regulator-name = "vreg_l7c_2p85";
324			regulator-min-microvolt = <2856000>;
325			regulator-max-microvolt = <3104000>;
326			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
327		};
328
329		vreg_l8c_1p8: ldo8 {
330			regulator-name = "vreg_l8c_1p8";
331			regulator-min-microvolt = <1800000>;
332			regulator-max-microvolt = <1800000>;
333			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
334		};
335
336		vreg_l9c_2p9: ldo9 {
337			regulator-name = "vreg_l9c_2p9";
338			regulator-min-microvolt = <2704000>;
339			regulator-max-microvolt = <2960000>;
340			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
341			regulator-allow-set-load;
342		};
343
344		vreg_l10c_3p3: ldo10 {
345			regulator-name = "vreg_l10c_3p3";
346			regulator-min-microvolt = <3296000>;
347			regulator-max-microvolt = <3296000>;
348			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
349		};
350
351		vreg_l11c_3p0: ldo11 {
352			regulator-name = "vreg_l11c_3p0";
353			regulator-min-microvolt = <3000000>;
354			regulator-max-microvolt = <3000000>;
355			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
356		};
357	};
358
359	pm8009-rpmh-regulators {
360		compatible = "qcom,pm8009-rpmh-regulators";
361		qcom,pmic-id = "f";
362
363		vdd-s1-supply = <&vph_pwr>;
364		vdd-s2-supply = <&vreg_bob>;
365		vdd-l2-supply = <&vreg_s8c_1p2>;
366		vdd-l5-l6-supply = <&vreg_bob>;
367		vdd-l7-supply = <&vreg_s4a_1p8>;
368
369		vreg_s1f_1p2: smps1 {
370			regulator-name = "vreg_s1f_1p2";
371			regulator-min-microvolt = <1200000>;
372			regulator-max-microvolt = <1200000>;
373			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
374		};
375
376		vreg_s2f_0p5: smps2 {
377			regulator-name = "vreg_s2f_0p5";
378			regulator-min-microvolt = <512000>;
379			regulator-max-microvolt = <1100000>;
380			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
381		};
382
383		/* L1 is unused. */
384
385		vreg_l2f_1p3: ldo2 {
386			regulator-name = "vreg_l2f_1p3";
387			regulator-min-microvolt = <1304000>;
388			regulator-max-microvolt = <1304000>;
389			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
390		};
391
392		/* L3 & L4 are unused. */
393
394		vreg_l5f_2p8: ldo5 {
395			regulator-name = "vreg_l5f_2p85";
396			regulator-min-microvolt = <2800000>;
397			regulator-max-microvolt = <2800000>;
398			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
399		};
400
401		vreg_l6f_2p8: ldo6 {
402			regulator-name = "vreg_l6f_2p8";
403			regulator-min-microvolt = <2800000>;
404			regulator-max-microvolt = <2800000>;
405			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
406		};
407
408		vreg_l7f_1p8: ldo7 {
409			regulator-name = "vreg_l7f_1p8";
410			regulator-min-microvolt = <1800000>;
411			regulator-max-microvolt = <1800000>;
412			regulator-initial-mode = <RPMH_REGULATOR_MODE_HPM>;
413		};
414	};
415};
416
417&cdsp {
418	status = "okay";
419};
420
421&gpi_dma0 {
422	status = "okay";
423};
424
425&gpi_dma1 {
426	status = "okay";
427};
428
429&gpi_dma2 {
430	status = "okay";
431};
432
433&i2c1 {
434	status = "okay";
435	clock-frequency = <400000>;
436
437	/* NXP PN553 NFC @ 28 */
438};
439
440&i2c2 {
441	status = "okay";
442	clock-frequency = <1000000>;
443
444	/* Dual Cirrus Logic CS35L41 amps @ 40, 41 */
445};
446
447&i2c5 {
448	status = "okay";
449	clock-frequency = <400000>;
450
451	/* Dialog SLG51000 CMIC @ 75 */
452};
453
454&i2c9 {
455	status = "okay";
456	clock-frequency = <400000>;
457
458	/* AMS TCS3490 RGB+IR color sensor @ 72 */
459};
460
461&i2c13 {
462	status = "okay";
463	clock-frequency = <400000>;
464
465	touchscreen@48 {
466		compatible = "samsung,s6sy761";
467		reg = <0x48>;
468		interrupt-parent = <&tlmm>;
469		interrupts = <39 0x2008>;
470		/* It's "vddio" downstream but it works anyway! */
471		vdd-supply = <&vreg_l1c_1p8>;
472		avdd-supply = <&vreg_l10c_3p3>;
473
474		pinctrl-names = "default";
475		pinctrl-0 = <&ts_int_default>;
476	};
477};
478
479&i2c15 {
480	status = "okay";
481	clock-frequency = <400000>;
482
483	/* Qcom SMB1390 @ 10 */
484	/* Silicon Labs SI4704 FM Radio Receiver @ 11 */
485	/* Qcom SMB1390_slave @ 18 */
486	/* HALO HL6111R Qi charger @ 25 */
487	/* Richwave RTC6226 FM Radio Receiver @ 64 */
488};
489
490&pcie0 {
491	status = "okay";
492};
493
494&pcie0_phy {
495	status = "okay";
496
497	vdda-phy-supply = <&vreg_l5a_0p88>;
498	vdda-pll-supply = <&vreg_l9a_1p2>;
499};
500
501&pcie2 {
502	status = "okay";
503
504	pinctrl-0 = <&pcie2_default_state &mdm2ap_default &ap2mdm_default>;
505};
506
507&pcie2_phy {
508	status = "okay";
509
510	vdda-phy-supply = <&vreg_l5a_0p88>;
511	vdda-pll-supply = <&vreg_l9a_1p2>;
512};
513
514&pon_pwrkey {
515	status = "okay";
516};
517
518&pon_resin {
519	status = "okay";
520
521	linux,code = <KEY_VOLUMEUP>;
522};
523
524&qupv3_id_0 {
525	status = "okay";
526};
527
528&qupv3_id_1 {
529	status = "okay";
530};
531
532&qupv3_id_2 {
533	status = "okay";
534};
535
536&sdhc_2 {
537	status = "okay";
538
539	cd-gpios = <&tlmm 77 GPIO_ACTIVE_HIGH>;
540	pinctrl-names = "default", "sleep";
541	pinctrl-0 = <&sdc2_default_state &sdc2_card_det_n>;
542	pinctrl-1 = <&sdc2_sleep_state &sdc2_card_det_n>;
543	vmmc-supply = <&vreg_l9c_2p9>;
544	vqmmc-supply = <&vreg_l6c_2p9>;
545	bus-width = <4>;
546	no-sdio;
547	no-emmc;
548};
549
550&slpi {
551	status = "okay";
552};
553
554&tlmm {
555	gpio-reserved-ranges = <40 4>, <52 4>;
556
557	sdc2_default_state: sdc2-default {
558		clk {
559			pins = "sdc2_clk";
560			drive-strength = <16>;
561			bias-disable;
562		};
563
564		cmd {
565			pins = "sdc2_cmd";
566			drive-strength = <16>;
567			bias-pull-up;
568		};
569
570		data {
571			pins = "sdc2_data";
572			drive-strength = <16>;
573			bias-pull-up;
574		};
575	};
576
577	mdm2ap_default: mdm2ap-default {
578		pins = "gpio1", "gpio3";
579		function = "gpio";
580		drive-strength = <8>;
581		bias-disable;
582	};
583
584	ts_int_default: ts-int-default {
585		pins = "gpio39";
586		function = "gpio";
587		drive-strength = <2>;
588		bias-disabled;
589		input-enable;
590	};
591
592	ap2mdm_default: ap2mdm-default {
593		pins = "gpio56", "gpio57";
594		function = "gpio";
595		drive-strength = <16>;
596		bias-disable;
597	};
598
599	sdc2_card_det_n: sd-card-det-n {
600		pins = "gpio77";
601		function = "gpio";
602		bias-pull-up;
603		drive-strength = <2>;
604	};
605};
606
607&uart12 {
608	status = "okay";
609};
610
611/* BIG WARNING! DO NOT TOUCH UFS, YOUR DEVICE WILL DIE! */
612&ufs_mem_hc { status = "disabled"; };
613&ufs_mem_phy { status = "disabled"; };
614
615&usb_1 {
616	status = "okay";
617};
618
619&usb_1_dwc3 {
620	dr_mode = "peripheral";
621};
622
623&usb_1_hsphy {
624	status = "okay";
625
626	vdda-pll-supply = <&vreg_l5a_0p88>;
627	vdda18-supply = <&vreg_l12a_1p8>;
628	vdda33-supply = <&vreg_l2a_3p1>;
629};
630
631&usb_1_qmpphy {
632	status = "okay";
633
634	vdda-phy-supply = <&vreg_l9a_1p2>;
635	vdda-pll-supply = <&vreg_l18a_0p9>;
636};
637