blob: 91acdb160227114e0961ce06f1b3a1a0602bc00b [file] [log] [blame]
Tom Rini53633a82024-02-29 12:33:36 -05001// SPDX-License-Identifier: GPL-2.0-only
2
3/dts-v1/;
4
5#include "msm8939-pm8916.dtsi"
Tom Rini93743d22024-04-01 09:08:13 -04006#include "msm8916-modem-qdsp6.dtsi"
Tom Rini53633a82024-02-29 12:33:36 -05007
8#include <dt-bindings/gpio/gpio.h>
9#include <dt-bindings/input/input.h>
10#include <dt-bindings/interrupt-controller/irq.h>
Tom Rini93743d22024-04-01 09:08:13 -040011#include <dt-bindings/sound/apq8016-lpass.h>
Tom Rini53633a82024-02-29 12:33:36 -050012
13/ {
14 model = "Samsung Galaxy A7 (2015)";
15 compatible = "samsung,a7", "qcom,msm8939";
16 chassis-type = "handset";
17
18 aliases {
19 mmc0 = &sdhc_1; /* SDC1 eMMC slot */
20 mmc1 = &sdhc_2; /* SDC2 SD card slot */
21 serial0 = &blsp_uart2;
22 };
23
24 chosen {
25 stdout-path = "serial0";
26 };
27
28 reserved-memory {
29 /* Additional memory used by Samsung firmware modifications */
30 tz-apps@85500000 {
31 reg = <0x0 0x85500000 0x0 0xb00000>;
32 no-map;
33 };
34 };
35
Tom Rini6b642ac2024-10-01 12:20:28 -060036 battery: battery {
37 compatible = "simple-battery";
38 charge-term-current-microamp = <150000>;
39 constant-charge-current-max-microamp = <1500000>;
40 constant-charge-voltage-max-microvolt = <4300000>;
41 precharge-current-microamp = <450000>;
42 precharge-upper-limit-microvolt = <3500000>;
43 };
44
Tom Rini53633a82024-02-29 12:33:36 -050045 gpio-hall-sensor {
46 compatible = "gpio-keys";
47
48 pinctrl-0 = <&gpio_hall_sensor_default>;
49 pinctrl-names = "default";
50
51 label = "GPIO Hall Effect Sensor";
52
53 event-hall-sensor {
54 label = "Hall Effect Sensor";
55 gpios = <&tlmm 52 GPIO_ACTIVE_LOW>;
56 linux,input-type = <EV_SW>;
57 linux,code = <SW_LID>;
58 linux,can-disable;
59 };
60 };
61
62 gpio-keys {
63 compatible = "gpio-keys";
64
65 pinctrl-0 = <&gpio_keys_default>;
66 pinctrl-names = "default";
67
68 label = "GPIO Buttons";
69
70 button-volume-up {
71 label = "Volume Up";
72 gpios = <&tlmm 107 GPIO_ACTIVE_LOW>;
73 linux,code = <KEY_VOLUMEUP>;
74 };
75
76 button-home {
77 label = "Home";
78 gpios = <&tlmm 109 GPIO_ACTIVE_LOW>;
79 linux,code = <KEY_HOMEPAGE>;
80 };
81 };
82
83 i2c-fg {
84 compatible = "i2c-gpio";
85 sda-gpios = <&tlmm 106 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
86 scl-gpios = <&tlmm 105 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
87
88 pinctrl-0 = <&fg_i2c_default>;
89 pinctrl-names = "default";
90
91 #address-cells = <1>;
92 #size-cells = <0>;
93
Tom Rini6b642ac2024-10-01 12:20:28 -060094 fuel-gauge@35 {
Tom Rini53633a82024-02-29 12:33:36 -050095 compatible = "richtek,rt5033-battery";
96 reg = <0x35>;
97
98 interrupt-parent = <&tlmm>;
99 interrupts = <121 IRQ_TYPE_EDGE_BOTH>;
100
101 pinctrl-0 = <&fg_alert_default>;
102 pinctrl-names = "default";
Tom Rini6b642ac2024-10-01 12:20:28 -0600103
104 power-supplies = <&charger>;
Tom Rini53633a82024-02-29 12:33:36 -0500105 };
106 };
107
108 i2c-nfc {
109 compatible = "i2c-gpio";
110 sda-gpios = <&tlmm 0 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
111 scl-gpios = <&tlmm 1 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
112
113 pinctrl-0 = <&nfc_i2c_default>;
114 pinctrl-names = "default";
115
116 #address-cells = <1>;
117 #size-cells = <0>;
118
119 nfc@2b {
120 compatible = "nxp,pn547", "nxp,nxp-nci-i2c";
121 reg = <0x2b>;
122
123 interrupt-parent = <&tlmm>;
124 interrupts = <21 IRQ_TYPE_EDGE_RISING>;
125
126 enable-gpios = <&tlmm 116 GPIO_ACTIVE_HIGH>;
127 firmware-gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>;
128
129 pinctrl-0 = <&nfc_default>;
130 pinctrl-names = "default";
131 };
132 };
133
134 i2c-sensor {
135 compatible = "i2c-gpio";
136 sda-gpios = <&tlmm 84 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
137 scl-gpios = <&tlmm 85 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
138
139 pinctrl-0 = <&sensor_i2c_default>;
140 pinctrl-names = "default";
141
142 #address-cells = <1>;
143 #size-cells = <0>;
144
145 accelerometer: accelerometer@10 {
146 compatible = "bosch,bmc150_accel";
147 reg = <0x10>;
148 interrupt-parent = <&tlmm>;
149 interrupts = <115 IRQ_TYPE_EDGE_RISING>;
150
151 vdd-supply = <&pm8916_l17>;
152 vddio-supply = <&pm8916_l5>;
153
154 pinctrl-0 = <&accel_int_default>;
155 pinctrl-names = "default";
156
157 mount-matrix = "-1", "0", "0",
158 "0", "-1", "0",
159 "0", "0", "1";
160 };
161
162 magnetometer@12 {
163 compatible = "bosch,bmc150_magn";
164 reg = <0x12>;
165
166 vdd-supply = <&pm8916_l17>;
167 vddio-supply = <&pm8916_l5>;
168 };
169 };
170
171 i2c-tkey {
172 compatible = "i2c-gpio";
173 sda-gpios = <&tlmm 16 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
174 scl-gpios = <&tlmm 17 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
175
176 pinctrl-0 = <&tkey_i2c_default>;
177 pinctrl-names = "default";
178
179 #address-cells = <1>;
180 #size-cells = <0>;
181
182 touchkey@20 {
183 /* Note: Actually an ABOV MCU that implements same interface */
184 compatible = "coreriver,tc360-touchkey";
185 reg = <0x20>;
186
187 interrupt-parent = <&tlmm>;
188 interrupts = <20 IRQ_TYPE_EDGE_FALLING>;
189
190 vcc-supply = <&reg_touch_key>;
191 vdd-supply = <&reg_keyled>;
192 vddio-supply = <&pm8916_l6>;
193
194 linux,keycodes = <KEY_APPSELECT KEY_BACK>;
195
196 pinctrl-0 = <&tkey_default>;
197 pinctrl-names = "default";
198 };
199 };
200
201 pwm_vibrator: pwm-vibrator {
202 compatible = "clk-pwm";
203 #pwm-cells = <2>;
204
205 clocks = <&gcc GCC_GP2_CLK>;
206
207 pinctrl-0 = <&motor_pwm_default>;
208 pinctrl-names = "default";
209 };
210
211 reg_keyled: regulator-keyled {
212 compatible = "regulator-fixed";
213 regulator-name = "keyled";
214 regulator-min-microvolt = <3300000>;
215 regulator-max-microvolt = <3300000>;
216
217 /* NOTE: On some variants e.g. SM-A700FD it's GPIO 91 */
218 gpio = <&tlmm 100 GPIO_ACTIVE_HIGH>;
219 enable-active-high;
220
221 pinctrl-0 = <&tkey_led_en_default>;
222 pinctrl-names = "default";
223 };
224
225 reg_touch_key: regulator-touch-key {
226 compatible = "regulator-fixed";
227 regulator-name = "touch_key";
228 regulator-min-microvolt = <2800000>;
229 regulator-max-microvolt = <2800000>;
230
231 gpio = <&tlmm 56 GPIO_ACTIVE_HIGH>;
232 enable-active-high;
233
234 pinctrl-0 = <&tkey_en_default>;
235 pinctrl-names = "default";
236 };
237
238 reg_tsp_vdd: regulator-tsp-vdd {
239 compatible = "regulator-fixed";
240 regulator-name = "tsp_vdd";
241 regulator-min-microvolt = <1800000>;
242 regulator-max-microvolt = <1800000>;
243 vin-supply = <&pm8916_s4>;
244
245 gpio = <&tlmm 8 GPIO_ACTIVE_HIGH>;
246 enable-active-high;
247
248 pinctrl-0 = <&reg_tsp_io_en_default>;
249 pinctrl-names = "default";
250 };
251
252 reg_vdd_tsp: regulator-vdd-tsp {
253 compatible = "regulator-fixed";
254 regulator-name = "vdd_tsp";
255 regulator-min-microvolt = <3300000>;
256 regulator-max-microvolt = <3300000>;
257
258 gpio = <&tlmm 73 GPIO_ACTIVE_HIGH>;
259 enable-active-high;
260
261 pinctrl-0 = <&reg_tsp_en_default>;
262 pinctrl-names = "default";
263 };
264
265 reg_vibrator: regulator-vibrator {
266 compatible = "regulator-fixed";
267 regulator-name = "motor_en";
268 regulator-min-microvolt = <3000000>;
269 regulator-max-microvolt = <3000000>;
270
271 gpio = <&tlmm 86 GPIO_ACTIVE_HIGH>;
272 enable-active-high;
273
274 pinctrl-0 = <&motor_en_default>;
275 pinctrl-names = "default";
276 };
277
278 vibrator {
279 compatible = "pwm-vibrator";
280
281 pwms = <&pwm_vibrator 0 100000>;
282 pwm-names = "enable";
283
284 vcc-supply = <&reg_vibrator>;
285 };
286};
287
288&blsp_i2c1 {
289 status = "okay";
290
291 muic: extcon@25 {
292 compatible = "siliconmitus,sm5502-muic";
293 reg = <0x25>;
294
295 interrupt-parent = <&tlmm>;
296 interrupts = <12 IRQ_TYPE_EDGE_FALLING>;
297
298 pinctrl-0 = <&muic_int_default>;
299 pinctrl-names = "default";
Tom Rini762f85b2024-07-20 11:15:10 -0600300
301 usb_con: connector {
302 compatible = "usb-b-connector";
303 label = "micro-USB";
304 type = "micro";
305 };
Tom Rini53633a82024-02-29 12:33:36 -0500306 };
307};
308
Tom Rini93743d22024-04-01 09:08:13 -0400309&blsp_i2c2 {
310 status = "okay";
311
312 speaker_codec: audio-codec@34 {
313 compatible = "nxp,tfa9895";
314 reg = <0x34>;
315 vddd-supply = <&pm8916_l5>;
316 sound-name-prefix = "Speaker";
317 #sound-dai-cells = <0>;
318 };
319};
320
Tom Rini53633a82024-02-29 12:33:36 -0500321&blsp_i2c5 {
322 status = "okay";
323
324 touchscreen@24 {
325 compatible = "cypress,tt21000";
326
327 reg = <0x24>;
328 interrupt-parent = <&tlmm>;
329 interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
330
331 vdd-supply = <&reg_vdd_tsp>;
332 vddio-supply = <&reg_tsp_vdd>;
333
334 pinctrl-0 = <&tsp_int_default>;
335 pinctrl-names = "default";
Tom Rini6b642ac2024-10-01 12:20:28 -0600336 };
337};
338
339&blsp_i2c6 {
340 status = "okay";
341
342 pmic@34 {
343 compatible = "richtek,rt5033";
344 reg = <0x34>;
345
346 interrupts-extended = <&tlmm 62 IRQ_TYPE_EDGE_FALLING>;
347
348 pinctrl-0 = <&pmic_int_default>;
349 pinctrl-names = "default";
350
351 regulators {
352 rt5033_reg_safe_ldo: SAFE_LDO {
353 regulator-min-microvolt = <4900000>;
354 regulator-max-microvolt = <4900000>;
355 regulator-always-on;
356 };
357
358 /*
359 * Needed for camera, but not used yet.
360 * Define empty nodes to allow disabling the unused
361 * regulators.
362 */
363 LDO {};
364 BUCK {};
365 };
366
367 charger: charger {
368 compatible = "richtek,rt5033-charger";
369 monitored-battery = <&battery>;
370 richtek,usb-connector = <&usb_con>;
371 };
Tom Rini53633a82024-02-29 12:33:36 -0500372 };
373};
374
375&blsp_uart2 {
376 status = "okay";
377};
378
Tom Rini93743d22024-04-01 09:08:13 -0400379/*
380 * For some reason the speaker amplifier is connected to the second SD line
381 * (MI2S_2_D1) instead of the first (MI2S_2_D0). This must be configured in the
382 * device tree, otherwise audio will seemingly play fine on the wrong SD line
383 * but the speaker stays silent.
384 *
385 * When routing audio via QDSP6 (the default) the &lpass node is reserved and
386 * the definitions from &q6afedai are used. When the modem is disabled audio can
387 * be alternatively routed directly to the LPASS hardware with reduced latency.
388 * The definitions for &lpass are here for completeness to simplify changing the
389 * setup with minor changes to the DT (either manually or with DT overlays).
390 */
391&lpass {
392 dai-link@3 {
393 reg = <MI2S_QUATERNARY>;
394 qcom,playback-sd-lines = <1>;
395 };
396};
397
398&mpss_mem {
399 reg = <0x0 0x86800000 0x0 0x5800000>;
400};
401
Tom Rini53633a82024-02-29 12:33:36 -0500402&pm8916_resin {
403 linux,code = <KEY_VOLUMEDOWN>;
404 status = "okay";
405};
406
407&pm8916_rpm_regulators {
408 pm8916_l17: l17 {
409 regulator-min-microvolt = <2850000>;
410 regulator-max-microvolt = <2850000>;
411 };
412};
413
Tom Rini93743d22024-04-01 09:08:13 -0400414&q6afedai {
415 dai@22 {
416 reg = <QUATERNARY_MI2S_RX>;
417 qcom,sd-lines = <1>;
418 };
419};
420
Tom Rini53633a82024-02-29 12:33:36 -0500421&sdhc_1 {
422 status = "okay";
423};
424
425&sdhc_2 {
426 pinctrl-0 = <&sdc2_default &sdc2_cd_default>;
427 pinctrl-1 = <&sdc2_sleep &sdc2_cd_default>;
428 pinctrl-names = "default", "sleep";
429
430 cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
431
432 status = "okay";
433};
434
Tom Rini93743d22024-04-01 09:08:13 -0400435&sound {
436 model = "samsung-a2015";
437 audio-routing =
438 "AMIC1", "MIC BIAS External1",
439 "AMIC2", "MIC BIAS Internal2",
440 "AMIC3", "MIC BIAS External1";
441
442 pinctrl-0 = <&cdc_pdm_default &sec_mi2s_default>;
443 pinctrl-1 = <&cdc_pdm_sleep &sec_mi2s_sleep>;
444 pinctrl-names = "default", "sleep";
445
446 sound_link_backend2: backend2-dai-link {
447 link-name = "Quaternary MI2S";
448
449 cpu {
450 sound-dai = <&q6afedai QUATERNARY_MI2S_RX>;
451 };
452 platform {
453 sound-dai = <&q6routing>;
454 };
455 codec {
456 sound-dai = <&speaker_codec>;
457 };
458 };
459};
460
Tom Rini53633a82024-02-29 12:33:36 -0500461&usb {
462 extcon = <&muic>, <&muic>;
463 status = "okay";
464};
465
466&usb_hs_phy {
467 extcon = <&muic>;
468};
469
470&wcnss {
471 status = "okay";
472};
473
474&wcnss_iris {
475 compatible = "qcom,wcn3660b";
476};
477
478&wcnss_mem {
479 status = "okay";
480};
481
482&tlmm {
483 accel_int_default: accel-int-default-state {
484 pins = "gpio115";
485 function = "gpio";
486 drive-strength = <2>;
487 bias-disable;
488 };
489
490 fg_alert_default: fg-alert-default-state {
491 pins = "gpio121";
492 function = "gpio";
493 drive-strength = <2>;
494 bias-disable;
495 };
496
497 fg_i2c_default: fg-i2c-default-state {
498 pins = "gpio105", "gpio106";
499 function = "gpio";
500 drive-strength = <2>;
501 bias-disable;
502 };
503
504 gpio_hall_sensor_default: gpio-hall-sensor-default-state {
505 pins = "gpio52";
506 function = "gpio";
507 drive-strength = <2>;
508 bias-disable;
509 };
510
511 gpio_keys_default: gpio-keys-default-state {
512 pins = "gpio107", "gpio109";
513 function = "gpio";
514 drive-strength = <2>;
515 bias-pull-up;
516 };
517
518 motor_en_default: motor-en-default-state {
519 pins = "gpio86";
520 function = "gpio";
521 drive-strength = <2>;
522 bias-disable;
523 };
524
525 motor_pwm_default: motor-pwm-default-state {
526 pins = "gpio50";
527 function = "gcc_gp2_clk_a";
528 };
529
530 muic_int_default: muic-int-default-state {
531 pins = "gpio12";
532 function = "gpio";
533 drive-strength = <2>;
534 bias-disable;
535 };
536
537 nfc_default: nfc-default-state {
538 irq-pins {
539 pins = "gpio21";
540 function = "gpio";
541 drive-strength = <2>;
542 bias-pull-down;
543 };
544
545 nfc-pins {
546 pins = "gpio49", "gpio116";
547 function = "gpio";
548 drive-strength = <2>;
549 bias-disable;
550 };
551 };
552
553 nfc_i2c_default: nfc-i2c-default-state {
554 pins = "gpio0", "gpio1";
555 function = "gpio";
556 drive-strength = <2>;
557 bias-disable;
558 };
559
Tom Rini6b642ac2024-10-01 12:20:28 -0600560 pmic_int_default: pmic-int-default-state {
561 pins = "gpio62";
562 function = "gpio";
563 drive-strength = <2>;
564 bias-disable;
565 };
566
Tom Rini53633a82024-02-29 12:33:36 -0500567 reg_tsp_en_default: reg-tsp-en-default-state {
568 pins = "gpio73";
569 function = "gpio";
570 drive-strength = <2>;
571 bias-disable;
572 };
573
574 reg_tsp_io_en_default: reg-tsp-io-en-default-state {
575 pins = "gpio8";
576 function = "gpio";
577 drive-strength = <2>;
578 bias-disable;
579 };
580
581 sdc2_cd_default: sdc2-cd-default-state {
582 pins = "gpio38";
583 function = "gpio";
584 drive-strength = <2>;
585 bias-disable;
586 };
587
588 sensor_i2c_default: sensor-i2c-default-state {
589 pins = "gpio84", "gpio85";
590 function = "gpio";
591 drive-strength = <2>;
592 bias-disable;
593 };
594
595 tkey_default: tkey-default-state {
596 pins = "gpio20";
597 function = "gpio";
598 drive-strength = <2>;
599 bias-disable;
600 };
601
602 tkey_en_default: tkey-en-default-state {
603 pins = "gpio56";
604 function = "gpio";
605 drive-strength = <2>;
606 bias-disable;
607 };
608
609 tkey_i2c_default: tkey-i2c-default-state {
610 pins = "gpio16", "gpio17";
611 function = "gpio";
612 drive-strength = <2>;
613 bias-disable;
614 };
615
616 tkey_led_en_default: tkey-led-en-default-state {
617 pins = "gpio100";
618 function = "gpio";
619 drive-strength = <2>;
620 bias-disable;
621 };
622
623 tsp_int_default: tsp-int-default-state {
624 pins = "gpio13";
625 function = "gpio";
626 drive-strength = <2>;
627 bias-disable;
628 };
629};