Linux 6.9-rc6
[sfrench/cifs-2.6.git] / arch / arm64 / boot / dts / qcom / msm8916-samsung-serranove.dts
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 };