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