// SPDX-License-Identifier: GPL-2.0-only /* * Copyright (C) 2021 Stephan Gerhold */ /dts-v1/; #include "msm8916-pm8916.dtsi" #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/input/input.h> #include <dt-bindings/interrupt-controller/irq.h> #include <dt-bindings/leds/common.h> #include <dt-bindings/sound/apq8016-lpass.h> /* * Note: The original firmware from Huawei can only boot 32-bit kernels. * To boot this device tree using arm64 it is necessary to flash 64-bit TZ/HYP * firmware (e.g. taken from the DragonBoard 410c). * See https://wiki.postmarketos.org/wiki/Huawei_Ascend_G7_(huawei-g7) * for suggested installation instructions. */ / { model = "Huawei Ascend G7"; compatible = "huawei,g7", "qcom,msm8916"; chassis-type = "handset"; aliases { mmc0 = &sdhc_1; /* eMMC */ mmc1 = &sdhc_2; /* SD card */ serial0 = &blsp_uart2; }; chosen { stdout-path = "serial0"; }; gpio-keys { compatible = "gpio-keys"; pinctrl-names = "default"; pinctrl-0 = <&gpio_keys_default>; label = "GPIO Buttons"; button-volume-up { label = "Volume Up"; gpios = <&tlmm 107 GPIO_ACTIVE_LOW>; linux,code = <KEY_VOLUMEUP>; }; }; leds { compatible = "gpio-leds"; pinctrl-names = "default"; pinctrl-0 = <&gpio_leds_default>; led-0 { gpios = <&tlmm 8 GPIO_ACTIVE_HIGH>; color = <LED_COLOR_ID_RED>; default-state = "off"; function = LED_FUNCTION_INDICATOR; }; led-1 { gpios = <&tlmm 9 GPIO_ACTIVE_HIGH>; color = <LED_COLOR_ID_GREEN>; default-state = "off"; function = LED_FUNCTION_INDICATOR; }; led-2 { gpios = <&tlmm 10 GPIO_ACTIVE_HIGH>; color = <LED_COLOR_ID_BLUE>; default-state = "off"; function = LED_FUNCTION_INDICATOR; }; }; usb_id: usb-id { compatible = "linux,extcon-usb-gpio"; id-gpios = <&tlmm 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 = <&tlmm 36 GPIO_ACTIVE_LOW>; pinctrl-names = "default"; pinctrl-0 = <&mag_reset_default>; }; accelerometer@1e { compatible = "kionix,kx023-1025"; reg = <0x1e>; interrupt-parent = <&tlmm>; 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 = <&tlmm>; 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 = <&tlmm 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 = <&tlmm 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 = <&tlmm>; 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 = <&tlmm>; interrupts = <21 IRQ_TYPE_EDGE_RISING>; enable-gpios = <&tlmm 20 GPIO_ACTIVE_HIGH>; firmware-gpios = <&tlmm 2 GPIO_ACTIVE_HIGH>; pinctrl-names = "default"; pinctrl-0 = <&nfc_default>; }; }; &blsp_uart2 { status = "okay"; }; &lpass { status = "okay"; }; &lpass_codec { status = "okay"; }; &pm8916_codec { status = "okay"; qcom,micbias-lvl = <2800>; qcom,mbhc-vthreshold-low = <75 150 237 450 500>; qcom,mbhc-vthreshold-high = <75 150 237 450 500>; qcom,hphl-jack-type-normally-open; }; &pm8916_l8 { regulator-min-microvolt = <2950000>; regulator-max-microvolt = <2950000>; }; &pm8916_resin { status = "okay"; linux,code = <KEY_VOLUMEDOWN>; }; &pm8916_rpm_regulators { pm8916_l16: l16 { regulator-min-microvolt = <1800000>; regulator-max-microvolt = <1800000>; }; pm8916_l17: l17 { regulator-min-microvolt = <2850000>; regulator-max-microvolt = <2850000>; }; }; &pm8916_vib { status = "okay"; }; &sdhc_1 { status = "okay"; }; &sdhc_2 { status = "okay"; pinctrl-names = "default", "sleep"; pinctrl-0 = <&sdc2_default &sdc2_cd_default>; pinctrl-1 = <&sdc2_sleep &sdc2_cd_default>; /* * The Huawei device tree sets cd-gpios = <&tlmm 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 = <&tlmm 56 GPIO_ACTIVE_LOW>; }; &sound { status = "okay"; model = "msm8916"; audio-routing = "AMIC1", "MIC BIAS External1", "AMIC2", "MIC BIAS External2", "AMIC3", "MIC BIAS External1"; pinctrl-names = "default", "sleep"; pinctrl-0 = <&cdc_pdm_default>; pinctrl-1 = <&cdc_pdm_sleep>; primary-dai-link { link-name = "WCD"; cpu { sound-dai = <&lpass MI2S_PRIMARY>; }; codec { sound-dai = <&lpass_codec 0>, <&pm8916_codec 0>; }; }; tertiary-dai-link { link-name = "WCD-Capture"; cpu { sound-dai = <&lpass MI2S_TERTIARY>; }; codec { sound-dai = <&lpass_codec 1>, <&pm8916_codec 1>; }; }; }; &usb { status = "okay"; extcon = <&usb_id>, <&usb_id>; }; &usb_hs_phy { extcon = <&usb_id>; }; &wcnss { status = "okay"; }; &wcnss_iris { compatible = "qcom,wcn3620"; }; &tlmm { accel_irq_default: accel-irq-default-state { pins = "gpio115"; function = "gpio"; drive-strength = <2>; bias-disable; }; gpio_keys_default: gpio-keys-default-state { pins = "gpio107"; function = "gpio"; drive-strength = <2>; bias-pull-up; }; gpio_leds_default: gpio-leds-default-state { pins = "gpio8", "gpio9", "gpio10"; function = "gpio"; drive-strength = <2>; bias-disable; }; nfc_default: nfc-default-state { pins = "gpio2", "gpio20", "gpio21"; function = "gpio"; drive-strength = <2>; bias-disable; }; mag_reset_default: mag-reset-default-state { pins = "gpio36"; function = "gpio"; drive-strength = <2>; bias-disable; }; prox_irq_default: prox-irq-default-state { pins = "gpio113"; function = "gpio"; drive-strength = <2>; bias-disable; }; reg_lcd_en_default: reg-lcd-en-default-state { pins = "gpio32", "gpio97"; function = "gpio"; drive-strength = <2>; bias-disable; }; sdc2_cd_default: sdc2-cd-default-state { pins = "gpio56"; function = "gpio"; drive-strength = <2>; bias-disable; }; ts_irq_default: ts-irq-default-state { pins = "gpio13"; function = "gpio"; drive-strength = <2>; bias-disable; }; usb_id_default: usb-id-default-state { pins = "gpio117"; function = "gpio"; drive-strength = <8>; bias-pull-up; }; };