xref: /freebsd/sys/contrib/device-tree/src/arm64/qcom/msm8916-samsung-serranove.dts (revision 96190b4fef3b4a0cc3ca0606b0c4e3e69a5e6717)
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&mpss_mem {
325	reg = <0x0 0x86800000 0x0 0x5a00000>;
326};
327
328&pm8916_resin {
329	status = "okay";
330	linux,code = <KEY_VOLUMEDOWN>;
331};
332
333&pm8916_vib {
334	status = "okay";
335};
336
337&sdhc_1 {
338	status = "okay";
339};
340
341&sdhc_2 {
342	status = "okay";
343	non-removable;
344
345	/*
346	 * FIXME: Disable UHS-I modes since tuning fails with:
347	 *
348	 * sdhci_msm 7864900.sdhci: mmc1: No tuning point found
349	 * mmc1: tuning execution failed: -5
350	 * mmc1: error -5 whilst initialising SD card
351	 *
352	 * This is the quirk used on downstream, which suggests this is
353	 * a hardware limitation. However, probing a card using DDR50 works
354	 * (without tuning), so maybe only tuning is broken?
355	 */
356	no-1-8-v;
357};
358
359&sound {
360	audio-routing =
361		"AMIC1", "MIC BIAS External1",
362		"AMIC2", "MIC BIAS Internal2",
363		"AMIC3", "MIC BIAS External1";
364};
365
366&usb {
367	status = "okay";
368	extcon = <&muic>, <&muic>;
369};
370
371&usb_hs_phy {
372	extcon = <&muic>;
373};
374
375&venus {
376	status = "okay";
377};
378
379&venus_mem {
380	status = "okay";
381};
382
383&wcnss {
384	status = "okay";
385};
386
387&wcnss_iris {
388	compatible = "qcom,wcn3660b";
389};
390
391&wcnss_mem {
392	status = "okay";
393};
394
395&tlmm {
396	fg_alert_default: fg-alert-default-state {
397		pins = "gpio121";
398		function = "gpio";
399
400		drive-strength = <2>;
401		bias-disable;
402	};
403
404	gpio_keys_default: gpio-keys-default-state {
405		pins = "gpio107", "gpio109";
406		function = "gpio";
407
408		drive-strength = <2>;
409		bias-pull-up;
410	};
411
412	gpio_hall_sensor_default: gpio-hall-sensor-default-state {
413		pins = "gpio52";
414		function = "gpio";
415
416		drive-strength = <2>;
417		bias-disable;
418	};
419
420	imu_irq_default: imu-irq-default-state {
421		pins = "gpio115";
422		function = "gpio";
423
424		drive-strength = <2>;
425		bias-disable;
426	};
427
428	muic_i2c_default: muic-i2c-default-state {
429		pins = "gpio105", "gpio106";
430		function = "gpio";
431
432		drive-strength = <2>;
433		bias-disable;
434	};
435
436	muic_irq_default: muic-irq-default-state {
437		pins = "gpio12";
438		function = "gpio";
439
440		drive-strength = <2>;
441		bias-disable;
442	};
443
444	nfc_default: nfc-default-state {
445		nfc-pins {
446			pins = "gpio20", "gpio49";
447			function = "gpio";
448
449			drive-strength = <2>;
450			bias-disable;
451		};
452		irq-pins {
453			pins = "gpio21";
454			function = "gpio";
455
456			drive-strength = <2>;
457			bias-pull-down;
458		};
459	};
460
461	nfc_i2c_default: nfc-i2c-default-state {
462		pins = "gpio0", "gpio1";
463		function = "gpio";
464
465		drive-strength = <2>;
466		bias-disable;
467	};
468
469	pmic_int_default: pmic-int-default-state {
470		pins = "gpio62";
471		function = "gpio";
472
473		drive-strength = <2>;
474		bias-disable;
475	};
476
477	tkey_default: tkey-default-state {
478		pins = "gpio98";
479		function = "gpio";
480
481		drive-strength = <2>;
482		bias-disable;
483	};
484
485	tkey_en_default: tkey-en-default-state {
486		pins = "gpio86";
487		function = "gpio";
488
489		drive-strength = <2>;
490		bias-disable;
491	};
492
493	tkey_i2c_default: tkey-i2c-default-state {
494		pins = "gpio16", "gpio17";
495		function = "gpio";
496
497		drive-strength = <2>;
498		bias-disable;
499	};
500
501	tkey_led_en_default: tkey-led-en-default-state {
502		pins = "gpio60";
503		function = "gpio";
504
505		drive-strength = <2>;
506		bias-disable;
507	};
508
509	tsp_en_default: tsp-en-default-state {
510		pins = "gpio73";
511		function = "gpio";
512
513		drive-strength = <2>;
514		bias-disable;
515	};
516
517	tsp_irq_default: tsp-irq-default-state {
518		pins = "gpio13";
519		function = "gpio";
520
521		drive-strength = <2>;
522		bias-disable;
523	};
524};
525