linux/arch/arm64/boot/dts/qcom/msm8916-huawei-g7.dts
Stephan Gerhold c4e61e0af4 arm64: dts: qcom: msm8916-huawei-g7: Add NFC
The Huawei Ascend G7 supports NFC using the NXP PN547, which is
supported by the nxp-nci-i2c driver in mainline. It seems to detect
NFC tags using "nfctool" just fine, although it seems like there
are not really any useful applications making use of the Linux NFC
subsystem. :(

Signed-off-by: Stephan Gerhold <stephan@gerhold.net>
Link: https://lore.kernel.org/r/20210514104328.18756-5-stephan@gerhold.net
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
2021-06-10 11:05:02 -05:00

455 lines
8.8 KiB
Plaintext

// 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>
/*
* 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 = <KEY_VOLUMEUP>;
};
};
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&gpio_leds_default>;
led-0 {
gpios = <&msmgpio 8 GPIO_ACTIVE_HIGH>;
color = <LED_COLOR_ID_RED>;
default-state = "off";
function = LED_FUNCTION_INDICATOR;
};
led-1 {
gpios = <&msmgpio 9 GPIO_ACTIVE_HIGH>;
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
function = LED_FUNCTION_INDICATOR;
};
led-2 {
gpios = <&msmgpio 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-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 = <&reg_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 = <KEY_VOLUMEDOWN>;
};
&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;
};
};