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		key-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	cs35l41_l: cs35l41@40 {
445		compatible = "cirrus,cs35l41";
446		reg = <0x40>;
447		interrupt-parent = <&tlmm>;
448		interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
449		reset-gpios = <&tlmm 10 GPIO_ACTIVE_HIGH>;
450		cirrus,boost-peak-milliamp = <4000>;
451		cirrus,boost-ind-nanohenry = <1000>;
452		cirrus,boost-cap-microfarad = <15>;
453		cirrus,asp-sdout-hiz = <3>;
454		cirrus,gpio2-src-select = <2>;
455		cirrus,gpio2-output-enable;
456		#sound-dai-cells = <1>;
457	};
458
459	cs35l41_r: cs35l41@41 {
460		compatible = "cirrus,cs35l41";
461		reg = <0x41>;
462		interrupt-parent = <&tlmm>;
463		interrupts = <11 IRQ_TYPE_LEVEL_LOW>;
464		reset-gpios = <&tlmm 10 GPIO_ACTIVE_HIGH>;
465		cirrus,boost-peak-milliamp = <4000>;
466		cirrus,boost-ind-nanohenry = <1000>;
467		cirrus,boost-cap-microfarad = <15>;
468		cirrus,asp-sdout-hiz = <3>;
469		cirrus,gpio2-src-select = <2>;
470		cirrus,gpio2-output-enable;
471		#sound-dai-cells = <1>;
472	};
473};
474
475&i2c5 {
476	status = "okay";
477	clock-frequency = <400000>;
478
479	/* Dialog SLG51000 CMIC @ 75 */
480};
481
482&i2c9 {
483	status = "okay";
484	clock-frequency = <400000>;
485
486	/* AMS TCS3490 RGB+IR color sensor @ 72 */
487};
488
489&i2c13 {
490	status = "okay";
491	clock-frequency = <400000>;
492
493	touchscreen@48 {
494		compatible = "samsung,s6sy761";
495		reg = <0x48>;
496		interrupt-parent = <&tlmm>;
497		interrupts = <39 0x2008>;
498		/* It's "vddio" downstream but it works anyway! */
499		vdd-supply = <&vreg_l1c_1p8>;
500		avdd-supply = <&vreg_l10c_3p3>;
501
502		pinctrl-names = "default";
503		pinctrl-0 = <&ts_int_default>;
504	};
505};
506
507&i2c15 {
508	status = "okay";
509	clock-frequency = <400000>;
510
511	/* Qcom SMB1390 @ 10 */
512	/* Silicon Labs SI4704 FM Radio Receiver @ 11 */
513	/* Qcom SMB1390_slave @ 18 */
514	/* HALO HL6111R Qi charger @ 25 */
515	/* Richwave RTC6226 FM Radio Receiver @ 64 */
516};
517
518&pcie0 {
519	status = "okay";
520};
521
522&pcie0_phy {
523	status = "okay";
524
525	vdda-phy-supply = <&vreg_l5a_0p88>;
526	vdda-pll-supply = <&vreg_l9a_1p2>;
527};
528
529&pcie2 {
530	status = "okay";
531
532	pinctrl-0 = <&pcie2_default_state &mdm2ap_default &ap2mdm_default>;
533};
534
535&pcie2_phy {
536	status = "okay";
537
538	vdda-phy-supply = <&vreg_l5a_0p88>;
539	vdda-pll-supply = <&vreg_l9a_1p2>;
540};
541
542&pon_pwrkey {
543	status = "okay";
544};
545
546&pon_resin {
547	status = "okay";
548
549	linux,code = <KEY_VOLUMEUP>;
550};
551
552&qupv3_id_0 {
553	status = "okay";
554};
555
556&qupv3_id_1 {
557	status = "okay";
558};
559
560&qupv3_id_2 {
561	status = "okay";
562};
563
564&sdhc_2 {
565	status = "okay";
566
567	cd-gpios = <&tlmm 77 GPIO_ACTIVE_HIGH>;
568	pinctrl-names = "default", "sleep";
569	pinctrl-0 = <&sdc2_default_state &sdc2_card_det_n>;
570	pinctrl-1 = <&sdc2_sleep_state &sdc2_card_det_n>;
571	vmmc-supply = <&vreg_l9c_2p9>;
572	vqmmc-supply = <&vreg_l6c_2p9>;
573	bus-width = <4>;
574	no-sdio;
575	no-emmc;
576};
577
578&slpi {
579	status = "okay";
580};
581
582&tlmm {
583	gpio-reserved-ranges = <40 4>, <52 4>;
584
585	sdc2_default_state: sdc2-default {
586		clk {
587			pins = "sdc2_clk";
588			drive-strength = <16>;
589			bias-disable;
590		};
591
592		cmd {
593			pins = "sdc2_cmd";
594			drive-strength = <16>;
595			bias-pull-up;
596		};
597
598		data {
599			pins = "sdc2_data";
600			drive-strength = <16>;
601			bias-pull-up;
602		};
603	};
604
605	mdm2ap_default: mdm2ap-default {
606		pins = "gpio1", "gpio3";
607		function = "gpio";
608		drive-strength = <8>;
609		bias-disable;
610	};
611
612	ts_int_default: ts-int-default {
613		pins = "gpio39";
614		function = "gpio";
615		drive-strength = <2>;
616		bias-disabled;
617		input-enable;
618	};
619
620	ap2mdm_default: ap2mdm-default {
621		pins = "gpio56", "gpio57";
622		function = "gpio";
623		drive-strength = <16>;
624		bias-disable;
625	};
626
627	sdc2_card_det_n: sd-card-det-n {
628		pins = "gpio77";
629		function = "gpio";
630		bias-pull-up;
631		drive-strength = <2>;
632	};
633};
634
635&uart12 {
636	status = "okay";
637};
638
639/* BIG WARNING! DO NOT TOUCH UFS, YOUR DEVICE WILL DIE! */
640&ufs_mem_hc { status = "disabled"; };
641&ufs_mem_phy { status = "disabled"; };
642
643&usb_1 {
644	status = "okay";
645};
646
647&usb_1_dwc3 {
648	dr_mode = "peripheral";
649};
650
651&usb_1_hsphy {
652	status = "okay";
653
654	vdda-pll-supply = <&vreg_l5a_0p88>;
655	vdda18-supply = <&vreg_l12a_1p8>;
656	vdda33-supply = <&vreg_l2a_3p1>;
657};
658
659&usb_1_qmpphy {
660	status = "okay";
661
662	vdda-phy-supply = <&vreg_l9a_1p2>;
663	vdda-pll-supply = <&vreg_l18a_0p9>;
664};
665