// SPDX-License-Identifier: GPL-2.0-only // Copyright (C) 2021 Stephan Gerhold /dts-v1/; #include "msm8916-pm8916.dtsi" #include #include #include #include /* * Note: The original firmware from Huawei can only boot 32-bit kernels. * To boot arm64 kernels it is necessary to flash 64-bit TZ/HYP firmware * with EDL, e.g. taken from the DragonBoard 410c. This works because Huawei * forgot to set up (firmware) secure boot for some reason. * * Also note that Huawei no longer provides bootloader unlock codes. * This can be bypassed by patching the bootloader from a custom HYP firmware, * making it think the bootloader is unlocked. * * See: https://wiki.postmarketos.org/wiki/Huawei_Ascend_G7_(huawei-g7) */ / { model = "Huawei Ascend G7"; compatible = "huawei,g7", "qcom,msm8916"; aliases { serial0 = &blsp1_uart2; }; chosen { stdout-path = "serial0"; }; gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; pinctrl-0 = <&gpio_keys_default>; label = "GPIO Buttons"; volume-up { label = "Volume Up"; gpios = <&msmgpio 107 GPIO_ACTIVE_LOW>; linux,code = ; }; }; leds { compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&gpio_leds_default>; led-0 { gpios = <&msmgpio 8 GPIO_ACTIVE_HIGH>; color = ; default-state = "off"; function = LED_FUNCTION_INDICATOR; }; led-1 { gpios = <&msmgpio 9 GPIO_ACTIVE_HIGH>; color = ; default-state = "off"; function = LED_FUNCTION_INDICATOR; }; led-2 { gpios = <&msmgpio 10 GPIO_ACTIVE_HIGH>; color = ; default-state = "off"; function = LED_FUNCTION_INDICATOR; }; }; usb_id: usb-id { compatible = "linux,extcon-usb-gpio"; id-gpio = <&msmgpio 117 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&usb_id_default>; }; }; &blsp_i2c2 { status = "okay"; magnetometer@c { compatible = "asahi-kasei,ak09911"; reg = <0x0c>; vdd-supply = <&pm8916_l17>; vid-supply = <&pm8916_l6>; reset-gpios = <&msmgpio 36 GPIO_ACTIVE_LOW>; pinctrl-names = "default"; pinctrl-0 = <&mag_reset_default>; }; accelerometer@1e { compatible = "kionix,kx023-1025"; reg = <0x1e>; interrupt-parent = <&msmgpio>; interrupts = <115 IRQ_TYPE_EDGE_RISING>; vdd-supply = <&pm8916_l17>; vddio-supply = <&pm8916_l6>; pinctrl-names = "default"; pinctrl-0 = <&accel_irq_default>; mount-matrix = "-1", "0", "0", "0", "1", "0", "0", "0", "1"; }; proximity@39 { compatible = "avago,apds9930"; reg = <0x39>; interrupt-parent = <&msmgpio>; interrupts = <113 IRQ_TYPE_EDGE_FALLING>; vdd-supply = <&pm8916_l17>; vddio-supply = <&pm8916_l6>; led-max-microamp = <100000>; amstaos,proximity-diodes = <1>; pinctrl-names = "default"; pinctrl-0 = <&prox_irq_default>; }; regulator@3e { compatible = "ti,tps65132"; reg = <0x3e>; pinctrl-names = "default"; pinctrl-0 = <®_lcd_en_default>; reg_lcd_pos: outp { regulator-name = "outp"; regulator-min-microvolt = <5400000>; regulator-max-microvolt = <5400000>; enable-gpios = <&msmgpio 97 GPIO_ACTIVE_HIGH>; regulator-active-discharge = <1>; }; reg_lcd_neg: outn { regulator-name = "outn"; regulator-min-microvolt = <5400000>; regulator-max-microvolt = <5400000>; enable-gpios = <&msmgpio 32 GPIO_ACTIVE_HIGH>; regulator-active-discharge = <1>; }; }; }; &blsp_i2c5 { status = "okay"; rmi4@70 { compatible = "syna,rmi4-i2c"; reg = <0x70>; #address-cells = <1>; #size-cells = <0>; interrupt-parent = <&msmgpio>; interrupts = <13 IRQ_TYPE_EDGE_FALLING>; vdd-supply = <&pm8916_l17>; vio-supply = <&pm8916_l16>; pinctrl-names = "default"; pinctrl-0 = <&ts_irq_default>; syna,startup-delay-ms = <100>; rmi4-f01@1 { reg = <0x1>; syna,nosleep-mode = <1>; /* Allow sleeping */ }; rmi4-f11@11 { reg = <0x11>; syna,sensor-type = <1>; /* Touchscreen */ }; }; }; &blsp_i2c6 { status = "okay"; nfc@28 { compatible = "nxp,pn547", "nxp,nxp-nci-i2c"; reg = <0x28>; interrupt-parent = <&msmgpio>; interrupts = <21 IRQ_TYPE_EDGE_RISING>; enable-gpios = <&msmgpio 20 GPIO_ACTIVE_HIGH>; firmware-gpios = <&msmgpio 2 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&nfc_default>; }; }; &blsp1_uart2 { status = "okay"; }; &pm8916_resin { status = "okay"; linux,code = ; }; &pm8916_vib { status = "okay"; }; &pronto { status = "okay"; }; &sdhc_1 { status = "okay"; pinctrl-names = "default", "sleep"; pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>; pinctrl-1 = <&sdc1_clk_off &sdc1_cmd_off &sdc1_data_off>; }; &sdhc_2 { status = "okay"; pinctrl-names = "default", "sleep"; pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &sdhc2_cd_default>; pinctrl-1 = <&sdc2_clk_off &sdc2_cmd_off &sdc2_data_off &sdhc2_cd_default>; /* * The Huawei device tree sets cd-gpios = <&msmgpio 38 GPIO_ACTIVE_HIGH>. * However, gpio38 does not change its state when inserting/removing the * SD card, it's just low all the time. The Huawei kernel seems to use * polling for SD card detection instead. * * However, looking closer at the GPIO debug output it turns out that * gpio56 switches its state when inserting/removing the SD card. * It behaves just like gpio38 normally does. Usually GPIO56 is used as * "UIM2_PRESENT", i.e. to check if a second SIM card is inserted. * Maybe Huawei decided to replace the second SIM card slot with the * SD card slot and forgot to re-route to gpio38. */ cd-gpios = <&msmgpio 56 GPIO_ACTIVE_LOW>; }; &usb { status = "okay"; extcon = <&usb_id>, <&usb_id>; }; &usb_hs_phy { extcon = <&usb_id>; }; &smd_rpm_regulators { vdd_l1_l2_l3-supply = <&pm8916_s3>; vdd_l4_l5_l6-supply = <&pm8916_s4>; vdd_l7-supply = <&pm8916_s4>; s3 { regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1300000>; }; s4 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <2100000>; }; l1 { regulator-min-microvolt = <1225000>; regulator-max-microvolt = <1225000>; }; l2 { regulator-min-microvolt = <1200000>; regulator-max-microvolt = <1200000>; }; l4 { regulator-min-microvolt = <2050000>; regulator-max-microvolt = <2050000>; }; l5 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; l6 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; l7 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; l8 { regulator-min-microvolt = <2950000>; regulator-max-microvolt = <2950000>; }; l9 { regulator-min-microvolt = <3300000>; regulator-max-microvolt = <3300000>; }; l10 { regulator-min-microvolt = <2700000>; regulator-max-microvolt = <2800000>; }; l11 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <2950000>; regulator-allow-set-load; regulator-system-load = <200000>; }; l12 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <2950000>; }; l13 { regulator-min-microvolt = <3075000>; regulator-max-microvolt = <3075000>; }; l14 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <3300000>; }; l15 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <3300000>; }; l16 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; l17 { regulator-min-microvolt = <2850000>; regulator-max-microvolt = <2850000>; }; l18 { regulator-min-microvolt = <2700000>; regulator-max-microvolt = <2700000>; }; }; &msmgpio { accel_irq_default: accel-irq-default { pins = "gpio115"; function = "gpio"; drive-strength = <2>; bias-disable; }; gpio_keys_default: gpio-keys-default { pins = "gpio107"; function = "gpio"; drive-strength = <2>; bias-pull-up; }; gpio_leds_default: gpio-leds-default { pins = "gpio8", "gpio9", "gpio10"; function = "gpio"; drive-strength = <2>; bias-disable; }; nfc_default: nfc-default { pins = "gpio2", "gpio20", "gpio21"; function = "gpio"; drive-strength = <2>; bias-disable; }; mag_reset_default: mag-reset-default { pins = "gpio36"; function = "gpio"; drive-strength = <2>; bias-disable; }; prox_irq_default: prox-irq-default { pins = "gpio113"; function = "gpio"; drive-strength = <2>; bias-disable; }; reg_lcd_en_default: reg-lcd-en-default { pins = "gpio32", "gpio97"; function = "gpio"; drive-strength = <2>; bias-disable; }; sdhc2_cd_default: sdhc2-cd-default { pins = "gpio56"; function = "gpio"; drive-strength = <2>; bias-disable; }; ts_irq_default: ts-irq-default { pins = "gpio13"; function = "gpio"; drive-strength = <2>; bias-disable; }; usb_id_default: usb-id-default { pins = "gpio117"; function = "gpio"; drive-strength = <8>; bias-pull-up; }; };