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