1// SPDX-License-Identifier: GPL-2.0-only
2/*
3 * Copyright (C) 2019 Stephan Gerhold
4 */
5
6/dts-v1/;
7
8#include "msm8916-pm8916.dtsi"
9#include "msm8916-modem-qdsp6.dtsi"
10
11#include <dt-bindings/gpio/gpio.h>
12#include <dt-bindings/input/input.h>
13#include <dt-bindings/interrupt-controller/irq.h>
14
15/*
16 * NOTE: The original firmware from Samsung can only boot ARM32 kernels.
17 * Unfortunately, the firmware is signed and cannot be replaced easily.
18 * There seems to be no way to boot ARM64 kernels on this device at the moment,
19 * even though the hardware would support it.
20 *
21 * However, it is possible to use this device tree by compiling an ARM32 kernel
22 * instead. For clarity and build testing this device tree is maintained next
23 * to the other MSM8916 device trees. However, it is actually used through
24 *   arch/arm/boot/dts/qcom-msm8916-samsung-serranove.dts
25 */
26
27/ {
28	model = "Samsung Galaxy S4 Mini Value Edition";
29	compatible = "samsung,serranove", "qcom,msm8916";
30	chassis-type = "handset";
31
32	aliases {
33		mmc0 = &sdhc_1; /* eMMC */
34		mmc1 = &sdhc_2; /* SD card */
35		serial0 = &blsp_uart2;
36	};
37
38	chosen {
39		stdout-path = "serial0";
40	};
41
42	reserved-memory {
43		/* Additional memory used by Samsung firmware modifications */
44		tz-apps@85500000 {
45			reg = <0x0 0x85500000 0x0 0xb00000>;
46			no-map;
47		};
48	};
49
50	gpio-keys {
51		compatible = "gpio-keys";
52
53		pinctrl-names = "default";
54		pinctrl-0 = <&gpio_keys_default>;
55
56		label = "GPIO Buttons";
57
58		button-volume-up {
59			label = "Volume Up";
60			gpios = <&tlmm 107 GPIO_ACTIVE_LOW>;
61			linux,code = <KEY_VOLUMEUP>;
62		};
63
64		button-home {
65			label = "Home";
66			gpios = <&tlmm 109 GPIO_ACTIVE_LOW>;
67			linux,code = <KEY_HOMEPAGE>;
68		};
69	};
70
71	gpio-hall-sensor {
72		compatible = "gpio-keys";
73
74		pinctrl-names = "default";
75		pinctrl-0 = <&gpio_hall_sensor_default>;
76
77		label = "GPIO Hall Effect Sensor";
78
79		event-hall-sensor {
80			label = "Hall Effect Sensor";
81			gpios = <&tlmm 52 GPIO_ACTIVE_LOW>;
82			linux,input-type = <EV_SW>;
83			linux,code = <SW_LID>;
84			linux,can-disable;
85		};
86	};
87
88	reg_vdd_tsp: regulator-vdd-tsp {
89		compatible = "regulator-fixed";
90		regulator-name = "vdd_tsp";
91		regulator-min-microvolt = <3300000>;
92		regulator-max-microvolt = <3300000>;
93
94		gpio = <&tlmm 73 GPIO_ACTIVE_HIGH>;
95		enable-active-high;
96
97		pinctrl-names = "default";
98		pinctrl-0 = <&tsp_en_default>;
99	};
100
101	reg_touch_key: regulator-touch-key {
102		compatible = "regulator-fixed";
103		regulator-name = "touch_key";
104		regulator-min-microvolt = <2800000>;
105		regulator-max-microvolt = <2800000>;
106
107		gpio = <&tlmm 86 GPIO_ACTIVE_HIGH>;
108		enable-active-high;
109
110		pinctrl-names = "default";
111		pinctrl-0 = <&tkey_en_default>;
112	};
113
114	reg_key_led: regulator-key-led {
115		compatible = "regulator-fixed";
116		regulator-name = "key_led";
117		regulator-min-microvolt = <3300000>;
118		regulator-max-microvolt = <3300000>;
119
120		gpio = <&tlmm 60 GPIO_ACTIVE_HIGH>;
121		enable-active-high;
122
123		pinctrl-names = "default";
124		pinctrl-0 = <&tkey_led_en_default>;
125	};
126
127	i2c-muic {
128		compatible = "i2c-gpio";
129		sda-gpios = <&tlmm 105 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
130		scl-gpios = <&tlmm 106 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
131
132		pinctrl-names = "default";
133		pinctrl-0 = <&muic_i2c_default>;
134
135		#address-cells = <1>;
136		#size-cells = <0>;
137
138		muic: extcon@14 {
139			compatible = "siliconmitus,sm5504-muic";
140			reg = <0x14>;
141
142			interrupt-parent = <&tlmm>;
143			interrupts = <12 IRQ_TYPE_EDGE_FALLING>;
144
145			pinctrl-names = "default";
146			pinctrl-0 = <&muic_irq_default>;
147
148			usb_con: connector {
149				compatible = "usb-b-connector";
150				label = "micro-USB";
151				type = "micro";
152			};
153		};
154	};
155
156	i2c-tkey {
157		compatible = "i2c-gpio";
158		sda-gpios = <&tlmm 16 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
159		scl-gpios = <&tlmm 17 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
160
161		pinctrl-names = "default";
162		pinctrl-0 = <&tkey_i2c_default>;
163
164		#address-cells = <1>;
165		#size-cells = <0>;
166
167		touchkey@20 {
168			compatible = "coreriver,tc360-touchkey";
169			reg = <0x20>;
170
171			interrupt-parent = <&tlmm>;
172			interrupts = <98 IRQ_TYPE_EDGE_FALLING>;
173
174			vcc-supply = <&reg_touch_key>;
175			vdd-supply = <&reg_key_led>;
176			vddio-supply = <&pm8916_l6>;
177
178			linux,keycodes = <KEY_APPSELECT KEY_BACK>;
179
180			pinctrl-names = "default";
181			pinctrl-0 = <&tkey_default>;
182		};
183	};
184
185	i2c-nfc {
186		compatible = "i2c-gpio";
187		sda-gpios = <&tlmm 0 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
188		scl-gpios = <&tlmm 1 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
189
190		pinctrl-names = "default";
191		pinctrl-0 = <&nfc_i2c_default>;
192
193		#address-cells = <1>;
194		#size-cells = <0>;
195
196		nfc@2b {
197			compatible = "nxp,pn547", "nxp,nxp-nci-i2c";
198			reg = <0x2b>;
199
200			interrupt-parent = <&tlmm>;
201			interrupts = <21 IRQ_TYPE_EDGE_RISING>;
202
203			enable-gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>;
204			firmware-gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>;
205
206			pinctrl-names = "default";
207			pinctrl-0 = <&nfc_default>;
208		};
209	};
210
211	battery: battery {
212		compatible = "simple-battery";
213		precharge-current-microamp = <450000>;
214		constant-charge-current-max-microamp = <1000000>;
215		charge-term-current-microamp = <150000>;
216		precharge-upper-limit-microvolt = <3500000>;
217		constant-charge-voltage-max-microvolt = <4350000>;
218	};
219};
220
221&blsp_i2c2 {
222	status = "okay";
223
224	imu@6b {
225		compatible = "st,lsm6ds3";
226		reg = <0x6b>;
227
228		interrupt-parent = <&tlmm>;
229		interrupts = <115 IRQ_TYPE_EDGE_RISING>;
230
231		pinctrl-names = "default";
232		pinctrl-0 = <&imu_irq_default>;
233	};
234
235	magnetometer@2e {
236		compatible = "yamaha,yas537";
237		reg = <0x2e>;
238
239		mount-matrix = "0",  "1",  "0",
240			       "1",  "0",  "0",
241			       "0",  "0", "-1";
242	};
243};
244
245&blsp_i2c4 {
246	status = "okay";
247
248	fuel-gauge@35 {
249		compatible = "richtek,rt5033-battery";
250		reg = <0x35>;
251
252		interrupt-parent = <&tlmm>;
253		interrupts = <121 IRQ_TYPE_EDGE_FALLING>;
254
255		pinctrl-names = "default";
256		pinctrl-0 = <&fg_alert_default>;
257
258		power-supplies = <&rt5033_charger>;
259	};
260};
261
262&blsp_i2c5 {
263	status = "okay";
264
265	touchscreen@20 {
266		compatible = "zinitix,bt541";
267		reg = <0x20>;
268
269		interrupt-parent = <&tlmm>;
270		interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
271
272		touchscreen-size-x = <540>;
273		touchscreen-size-y = <960>;
274
275		vdd-supply = <&reg_vdd_tsp>;
276		vddo-supply = <&pm8916_l6>;
277
278		pinctrl-names = "default";
279		pinctrl-0 = <&tsp_irq_default>;
280	};
281};
282
283&blsp_i2c6 {
284	status = "okay";
285
286	pmic@34 {
287		compatible = "richtek,rt5033";
288		reg = <0x34>;
289
290		interrupt-parent = <&tlmm>;
291		interrupts = <62 IRQ_TYPE_EDGE_FALLING>;
292
293		pinctrl-names = "default";
294		pinctrl-0 = <&pmic_int_default>;
295
296		regulators {
297			rt5033_reg_safe_ldo: SAFE_LDO {
298				regulator-min-microvolt = <4900000>;
299				regulator-max-microvolt = <4900000>;
300				regulator-always-on;
301			};
302			rt5033_reg_ldo: LDO {
303				regulator-min-microvolt = <2800000>;
304				regulator-max-microvolt = <2800000>;
305			};
306			rt5033_reg_buck: BUCK {
307				regulator-min-microvolt = <1200000>;
308				regulator-max-microvolt = <1200000>;
309			};
310		};
311
312		rt5033_charger: charger {
313			compatible = "richtek,rt5033-charger";
314			monitored-battery = <&battery>;
315			richtek,usb-connector = <&usb_con>;
316		};
317	};
318};
319
320&blsp_uart2 {
321	status = "okay";
322};
323
324&gpu {
325	status = "okay";
326};
327
328&mdss {
329	status = "okay";
330};
331
332&mdss_dsi0 {
333	pinctrl-names = "default", "sleep";
334	pinctrl-0 = <&mdss_default>;
335	pinctrl-1 = <&mdss_sleep>;
336
337	panel@0 {
338		compatible = "samsung,s6e88a0-ams427ap24";
339		reg = <0>;
340
341		vdd3-supply = <&pm8916_l17>;
342		vci-supply = <&pm8916_l6>;
343		reset-gpios = <&tlmm 25 GPIO_ACTIVE_LOW>;
344		flip-horizontal;
345
346		port {
347			panel_in: endpoint {
348				remote-endpoint = <&mdss_dsi0_out>;
349			};
350		};
351	};
352};
353
354&mdss_dsi0_out {
355	data-lanes = <0 1>;
356	remote-endpoint = <&panel_in>;
357};
358
359&mpss_mem {
360	reg = <0x0 0x86800000 0x0 0x5a00000>;
361};
362
363&pm8916_resin {
364	status = "okay";
365	linux,code = <KEY_VOLUMEDOWN>;
366};
367
368&pm8916_rpm_regulators {
369	pm8916_l17: l17 {
370		regulator-min-microvolt = <2850000>;
371		regulator-max-microvolt = <2850000>;
372	};
373};
374
375&pm8916_vib {
376	status = "okay";
377};
378
379&sdhc_1 {
380	status = "okay";
381};
382
383&sdhc_2 {
384	status = "okay";
385	non-removable;
386
387	/*
388	 * FIXME: Disable UHS-I modes since tuning fails with:
389	 *
390	 * sdhci_msm 7864900.sdhci: mmc1: No tuning point found
391	 * mmc1: tuning execution failed: -5
392	 * mmc1: error -5 whilst initialising SD card
393	 *
394	 * This is the quirk used on downstream, which suggests this is
395	 * a hardware limitation. However, probing a card using DDR50 works
396	 * (without tuning), so maybe only tuning is broken?
397	 */
398	no-1-8-v;
399};
400
401&sound {
402	audio-routing =
403		"AMIC1", "MIC BIAS External1",
404		"AMIC2", "MIC BIAS Internal2",
405		"AMIC3", "MIC BIAS External1";
406};
407
408&usb {
409	status = "okay";
410	extcon = <&muic>, <&muic>;
411};
412
413&usb_hs_phy {
414	extcon = <&muic>;
415};
416
417&venus {
418	status = "okay";
419};
420
421&venus_mem {
422	status = "okay";
423};
424
425&wcnss {
426	status = "okay";
427};
428
429&wcnss_iris {
430	compatible = "qcom,wcn3660b";
431};
432
433&wcnss_mem {
434	status = "okay";
435};
436
437&tlmm {
438	fg_alert_default: fg-alert-default-state {
439		pins = "gpio121";
440		function = "gpio";
441
442		drive-strength = <2>;
443		bias-disable;
444	};
445
446	gpio_keys_default: gpio-keys-default-state {
447		pins = "gpio107", "gpio109";
448		function = "gpio";
449
450		drive-strength = <2>;
451		bias-pull-up;
452	};
453
454	gpio_hall_sensor_default: gpio-hall-sensor-default-state {
455		pins = "gpio52";
456		function = "gpio";
457
458		drive-strength = <2>;
459		bias-disable;
460	};
461
462	imu_irq_default: imu-irq-default-state {
463		pins = "gpio115";
464		function = "gpio";
465
466		drive-strength = <2>;
467		bias-disable;
468	};
469
470	mdss_default: mdss-default-state {
471		pins = "gpio25";
472		function = "gpio";
473
474		drive-strength = <8>;
475		bias-disable;
476	};
477
478	mdss_sleep: mdss-sleep-state {
479		pins = "gpio25";
480		function = "gpio";
481
482		drive-strength = <2>;
483		bias-pull-down;
484	};
485
486	muic_i2c_default: muic-i2c-default-state {
487		pins = "gpio105", "gpio106";
488		function = "gpio";
489
490		drive-strength = <2>;
491		bias-disable;
492	};
493
494	muic_irq_default: muic-irq-default-state {
495		pins = "gpio12";
496		function = "gpio";
497
498		drive-strength = <2>;
499		bias-disable;
500	};
501
502	nfc_default: nfc-default-state {
503		nfc-pins {
504			pins = "gpio20", "gpio49";
505			function = "gpio";
506
507			drive-strength = <2>;
508			bias-disable;
509		};
510		irq-pins {
511			pins = "gpio21";
512			function = "gpio";
513
514			drive-strength = <2>;
515			bias-pull-down;
516		};
517	};
518
519	nfc_i2c_default: nfc-i2c-default-state {
520		pins = "gpio0", "gpio1";
521		function = "gpio";
522
523		drive-strength = <2>;
524		bias-disable;
525	};
526
527	pmic_int_default: pmic-int-default-state {
528		pins = "gpio62";
529		function = "gpio";
530
531		drive-strength = <2>;
532		bias-disable;
533	};
534
535	tkey_default: tkey-default-state {
536		pins = "gpio98";
537		function = "gpio";
538
539		drive-strength = <2>;
540		bias-disable;
541	};
542
543	tkey_en_default: tkey-en-default-state {
544		pins = "gpio86";
545		function = "gpio";
546
547		drive-strength = <2>;
548		bias-disable;
549	};
550
551	tkey_i2c_default: tkey-i2c-default-state {
552		pins = "gpio16", "gpio17";
553		function = "gpio";
554
555		drive-strength = <2>;
556		bias-disable;
557	};
558
559	tkey_led_en_default: tkey-led-en-default-state {
560		pins = "gpio60";
561		function = "gpio";
562
563		drive-strength = <2>;
564		bias-disable;
565	};
566
567	tsp_en_default: tsp-en-default-state {
568		pins = "gpio73";
569		function = "gpio";
570
571		drive-strength = <2>;
572		bias-disable;
573	};
574
575	tsp_irq_default: tsp-irq-default-state {
576		pins = "gpio13";
577		function = "gpio";
578
579		drive-strength = <2>;
580		bias-disable;
581	};
582};
583