]> CyberLeo.Net >> Repos - FreeBSD/FreeBSD.git/blob - src/arm64/qcom/msm8916-huawei-g7.dts
Import device-tree files from Linux 6.4
[FreeBSD/FreeBSD.git] / src / arm64 / qcom / msm8916-huawei-g7.dts
1 // SPDX-License-Identifier: GPL-2.0-only
2 /*
3  * Copyright (C) 2021 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 #include <dt-bindings/leds/common.h>
13 #include <dt-bindings/sound/apq8016-lpass.h>
14
15 /*
16  * Note: The original firmware from Huawei can only boot 32-bit kernels.
17  * To boot this device tree using arm64 it is necessary to flash 64-bit TZ/HYP
18  * firmware (e.g. taken from the DragonBoard 410c).
19  * See https://wiki.postmarketos.org/wiki/Huawei_Ascend_G7_(huawei-g7)
20  * for suggested installation instructions.
21  */
22
23 / {
24         model = "Huawei Ascend G7";
25         compatible = "huawei,g7", "qcom,msm8916";
26         chassis-type = "handset";
27
28         aliases {
29                 serial0 = &blsp1_uart2;
30         };
31
32         chosen {
33                 stdout-path = "serial0";
34         };
35
36         gpio-keys {
37                 compatible = "gpio-keys";
38
39                 pinctrl-names = "default";
40                 pinctrl-0 = <&gpio_keys_default>;
41
42                 label = "GPIO Buttons";
43
44                 button-volume-up {
45                         label = "Volume Up";
46                         gpios = <&msmgpio 107 GPIO_ACTIVE_LOW>;
47                         linux,code = <KEY_VOLUMEUP>;
48                 };
49         };
50
51         leds {
52                 compatible = "gpio-leds";
53
54                 pinctrl-names = "default";
55                 pinctrl-0 = <&gpio_leds_default>;
56
57                 led-0 {
58                         gpios = <&msmgpio 8 GPIO_ACTIVE_HIGH>;
59                         color = <LED_COLOR_ID_RED>;
60                         default-state = "off";
61                         function = LED_FUNCTION_INDICATOR;
62                 };
63
64                 led-1 {
65                         gpios = <&msmgpio 9 GPIO_ACTIVE_HIGH>;
66                         color = <LED_COLOR_ID_GREEN>;
67                         default-state = "off";
68                         function = LED_FUNCTION_INDICATOR;
69                 };
70
71                 led-2 {
72                         gpios = <&msmgpio 10 GPIO_ACTIVE_HIGH>;
73                         color = <LED_COLOR_ID_BLUE>;
74                         default-state = "off";
75                         function = LED_FUNCTION_INDICATOR;
76                 };
77         };
78
79         usb_id: usb-id {
80                 compatible = "linux,extcon-usb-gpio";
81                 id-gpio = <&msmgpio 117 GPIO_ACTIVE_HIGH>;
82                 pinctrl-names = "default";
83                 pinctrl-0 = <&usb_id_default>;
84         };
85 };
86
87 &blsp_i2c2 {
88         status = "okay";
89
90         magnetometer@c {
91                 compatible = "asahi-kasei,ak09911";
92                 reg = <0x0c>;
93
94                 vdd-supply = <&pm8916_l17>;
95                 vid-supply = <&pm8916_l6>;
96
97                 reset-gpios = <&msmgpio 36 GPIO_ACTIVE_LOW>;
98
99                 pinctrl-names = "default";
100                 pinctrl-0 = <&mag_reset_default>;
101         };
102
103         accelerometer@1e {
104                 compatible = "kionix,kx023-1025";
105                 reg = <0x1e>;
106
107                 interrupt-parent = <&msmgpio>;
108                 interrupts = <115 IRQ_TYPE_EDGE_RISING>;
109
110                 vdd-supply = <&pm8916_l17>;
111                 vddio-supply = <&pm8916_l6>;
112
113                 pinctrl-names = "default";
114                 pinctrl-0 = <&accel_irq_default>;
115
116                 mount-matrix = "-1", "0", "0",
117                                 "0", "1", "0",
118                                 "0", "0", "1";
119         };
120
121         proximity@39 {
122                 compatible = "avago,apds9930";
123                 reg = <0x39>;
124
125                 interrupt-parent = <&msmgpio>;
126                 interrupts = <113 IRQ_TYPE_EDGE_FALLING>;
127
128                 vdd-supply = <&pm8916_l17>;
129                 vddio-supply = <&pm8916_l6>;
130
131                 led-max-microamp = <100000>;
132                 amstaos,proximity-diodes = <1>;
133
134                 pinctrl-names = "default";
135                 pinctrl-0 = <&prox_irq_default>;
136         };
137
138         regulator@3e {
139                 compatible = "ti,tps65132";
140                 reg = <0x3e>;
141
142                 pinctrl-names = "default";
143                 pinctrl-0 = <&reg_lcd_en_default>;
144
145                 reg_lcd_pos: outp {
146                         regulator-name = "outp";
147                         regulator-min-microvolt = <5400000>;
148                         regulator-max-microvolt = <5400000>;
149                         enable-gpios = <&msmgpio 97 GPIO_ACTIVE_HIGH>;
150                         regulator-active-discharge = <1>;
151                 };
152
153                 reg_lcd_neg: outn {
154                         regulator-name = "outn";
155                         regulator-min-microvolt = <5400000>;
156                         regulator-max-microvolt = <5400000>;
157                         enable-gpios = <&msmgpio 32 GPIO_ACTIVE_HIGH>;
158                         regulator-active-discharge = <1>;
159                 };
160         };
161 };
162
163 &blsp_i2c5 {
164         status = "okay";
165
166         rmi4@70 {
167                 compatible = "syna,rmi4-i2c";
168                 reg = <0x70>;
169                 #address-cells = <1>;
170                 #size-cells = <0>;
171
172                 interrupt-parent = <&msmgpio>;
173                 interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
174
175                 vdd-supply = <&pm8916_l17>;
176                 vio-supply = <&pm8916_l16>;
177
178                 pinctrl-names = "default";
179                 pinctrl-0 = <&ts_irq_default>;
180
181                 syna,startup-delay-ms = <100>;
182
183                 rmi4-f01@1 {
184                         reg = <0x1>;
185                         syna,nosleep-mode = <1>; /* Allow sleeping */
186                 };
187
188                 rmi4-f11@11 {
189                         reg = <0x11>;
190                         syna,sensor-type = <1>; /* Touchscreen */
191                 };
192         };
193 };
194
195 &blsp_i2c6 {
196         status = "okay";
197
198         nfc@28 {
199                 compatible = "nxp,pn547", "nxp,nxp-nci-i2c";
200                 reg = <0x28>;
201
202                 interrupt-parent = <&msmgpio>;
203                 interrupts = <21 IRQ_TYPE_EDGE_RISING>;
204
205                 enable-gpios = <&msmgpio 20 GPIO_ACTIVE_HIGH>;
206                 firmware-gpios = <&msmgpio 2 GPIO_ACTIVE_HIGH>;
207
208                 pinctrl-names = "default";
209                 pinctrl-0 = <&nfc_default>;
210         };
211 };
212
213 &blsp1_uart2 {
214         status = "okay";
215 };
216
217 &lpass {
218         status = "okay";
219 };
220
221 &pm8916_resin {
222         status = "okay";
223         linux,code = <KEY_VOLUMEDOWN>;
224 };
225
226 &pm8916_vib {
227         status = "okay";
228 };
229
230 &sdhc_1 {
231         status = "okay";
232
233         pinctrl-names = "default", "sleep";
234         pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
235         pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>;
236 };
237
238 &sdhc_2 {
239         status = "okay";
240
241         pinctrl-names = "default", "sleep";
242         pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdhc2_cd_default>;
243         pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdhc2_cd_default>;
244
245         /*
246          * The Huawei device tree sets cd-gpios = <&msmgpio 38 GPIO_ACTIVE_HIGH>.
247          * However, gpio38 does not change its state when inserting/removing the
248          * SD card, it's just low all the time. The Huawei kernel seems to use
249          * polling for SD card detection instead.
250          *
251          * However, looking closer at the GPIO debug output it turns out that
252          * gpio56 switches its state when inserting/removing the SD card.
253          * It behaves just like gpio38 normally does. Usually GPIO56 is used as
254          * "UIM2_PRESENT", i.e. to check if a second SIM card is inserted.
255          * Maybe Huawei decided to replace the second SIM card slot with the
256          * SD card slot and forgot to re-route to gpio38.
257          */
258         cd-gpios = <&msmgpio 56 GPIO_ACTIVE_LOW>;
259 };
260
261 &sound {
262         status = "okay";
263
264         model = "msm8916";
265         audio-routing =
266                 "AMIC1", "MIC BIAS External1",
267                 "AMIC2", "MIC BIAS External2",
268                 "AMIC3", "MIC BIAS External1";
269
270         pinctrl-names = "default", "sleep";
271         pinctrl-0 = <&cdc_pdm_lines_act>;
272         pinctrl-1 = <&cdc_pdm_lines_sus>;
273
274         primary-dai-link {
275                 link-name = "WCD";
276                 cpu {
277                         sound-dai = <&lpass MI2S_PRIMARY>;
278                 };
279                 codec {
280                         sound-dai = <&lpass_codec 0>, <&wcd_codec 0>;
281                 };
282         };
283
284         tertiary-dai-link {
285                 link-name = "WCD-Capture";
286                 cpu {
287                         sound-dai = <&lpass MI2S_TERTIARY>;
288                 };
289                 codec {
290                         sound-dai = <&lpass_codec 1>, <&wcd_codec 1>;
291                 };
292         };
293 };
294
295 &usb {
296         status = "okay";
297         extcon = <&usb_id>, <&usb_id>;
298 };
299
300 &usb_hs_phy {
301         extcon = <&usb_id>;
302 };
303
304 &wcd_codec {
305         qcom,micbias-lvl = <2800>;
306         qcom,mbhc-vthreshold-low = <75 150 237 450 500>;
307         qcom,mbhc-vthreshold-high = <75 150 237 450 500>;
308         qcom,hphl-jack-type-normally-open;
309 };
310
311 &wcnss {
312         status = "okay";
313 };
314
315 &wcnss_iris {
316         compatible = "qcom,wcn3620";
317 };
318
319 &smd_rpm_regulators {
320         vdd_l1_l2_l3-supply = <&pm8916_s3>;
321         vdd_l4_l5_l6-supply = <&pm8916_s4>;
322         vdd_l7-supply = <&pm8916_s4>;
323
324         s3 {
325                 regulator-min-microvolt = <1200000>;
326                 regulator-max-microvolt = <1300000>;
327         };
328
329         s4 {
330                 regulator-min-microvolt = <1800000>;
331                 regulator-max-microvolt = <2100000>;
332         };
333
334         l1 {
335                 regulator-min-microvolt = <1225000>;
336                 regulator-max-microvolt = <1225000>;
337         };
338
339         l2 {
340                 regulator-min-microvolt = <1200000>;
341                 regulator-max-microvolt = <1200000>;
342         };
343
344         l4 {
345                 regulator-min-microvolt = <2050000>;
346                 regulator-max-microvolt = <2050000>;
347         };
348
349         l5 {
350                 regulator-min-microvolt = <1800000>;
351                 regulator-max-microvolt = <1800000>;
352         };
353
354         l6 {
355                 regulator-min-microvolt = <1800000>;
356                 regulator-max-microvolt = <1800000>;
357         };
358
359         l7 {
360                 regulator-min-microvolt = <1800000>;
361                 regulator-max-microvolt = <1800000>;
362         };
363
364         l8 {
365                 regulator-min-microvolt = <2950000>;
366                 regulator-max-microvolt = <2950000>;
367         };
368
369         l9 {
370                 regulator-min-microvolt = <3300000>;
371                 regulator-max-microvolt = <3300000>;
372         };
373
374         l10 {
375                 regulator-min-microvolt = <2700000>;
376                 regulator-max-microvolt = <2800000>;
377         };
378
379         l11 {
380                 regulator-min-microvolt = <1800000>;
381                 regulator-max-microvolt = <2950000>;
382                 regulator-allow-set-load;
383                 regulator-system-load = <200000>;
384         };
385
386         l12 {
387                 regulator-min-microvolt = <1800000>;
388                 regulator-max-microvolt = <2950000>;
389         };
390
391         l13 {
392                 regulator-min-microvolt = <3075000>;
393                 regulator-max-microvolt = <3075000>;
394         };
395
396         l14 {
397                 regulator-min-microvolt = <1800000>;
398                 regulator-max-microvolt = <3300000>;
399         };
400
401         l15 {
402                 regulator-min-microvolt = <1800000>;
403                 regulator-max-microvolt = <3300000>;
404         };
405
406         l16 {
407                 regulator-min-microvolt = <1800000>;
408                 regulator-max-microvolt = <1800000>;
409         };
410
411         l17 {
412                 regulator-min-microvolt = <2850000>;
413                 regulator-max-microvolt = <2850000>;
414         };
415
416         l18 {
417                 regulator-min-microvolt = <2700000>;
418                 regulator-max-microvolt = <2700000>;
419         };
420 };
421
422 &msmgpio {
423         accel_irq_default: accel-irq-default-state {
424                 pins = "gpio115";
425                 function = "gpio";
426
427                 drive-strength = <2>;
428                 bias-disable;
429         };
430
431         gpio_keys_default: gpio-keys-default-state {
432                 pins = "gpio107";
433                 function = "gpio";
434
435                 drive-strength = <2>;
436                 bias-pull-up;
437         };
438
439         gpio_leds_default: gpio-leds-default-state {
440                 pins = "gpio8", "gpio9", "gpio10";
441                 function = "gpio";
442
443                 drive-strength = <2>;
444                 bias-disable;
445         };
446
447         nfc_default: nfc-default-state {
448                 pins = "gpio2", "gpio20", "gpio21";
449                 function = "gpio";
450
451                 drive-strength = <2>;
452                 bias-disable;
453         };
454
455         mag_reset_default: mag-reset-default-state {
456                 pins = "gpio36";
457                 function = "gpio";
458
459                 drive-strength = <2>;
460                 bias-disable;
461         };
462
463         prox_irq_default: prox-irq-default-state {
464                 pins = "gpio113";
465                 function = "gpio";
466
467                 drive-strength = <2>;
468                 bias-disable;
469         };
470
471         reg_lcd_en_default: reg-lcd-en-default-state {
472                 pins = "gpio32", "gpio97";
473                 function = "gpio";
474
475                 drive-strength = <2>;
476                 bias-disable;
477         };
478
479         sdhc2_cd_default: sdhc2-cd-default-state {
480                 pins = "gpio56";
481                 function = "gpio";
482
483                 drive-strength = <2>;
484                 bias-disable;
485         };
486
487         ts_irq_default: ts-irq-default-state {
488                 pins = "gpio13";
489                 function = "gpio";
490
491                 drive-strength = <2>;
492                 bias-disable;
493         };
494
495         usb_id_default: usb-id-default-state {
496                 pins = "gpio117";
497                 function = "gpio";
498
499                 drive-strength = <8>;
500                 bias-pull-up;
501         };
502 };