arm64: dts: qcom: msm8939-samsung-a7: Add initial dts
authorLin, Meng-Bo <linmengbo0689@protonmail.com>
Fri, 23 Jun 2023 10:02:51 +0000 (10:02 +0000)
committerBjorn Andersson <andersson@kernel.org>
Sat, 22 Jul 2023 04:19:15 +0000 (21:19 -0700)
This dts adds support for Samsung Galaxy A7 smartphone released in 2015.

Add a device tree for A7 with initial support for:

- GPIO keys
- Hall Sensor
- SDHCI (internal and external storage)
- USB Device Mode
- UART (on USB connector via the SM5502 MUIC)
- WCNSS (WiFi/BT)
- Regulators
- Touch key
- Accelerometer/Magnetometer
- Fuelgauge
- NFC
- Vibrator
- Touchscreen

Signed-off-by: Lin, Meng-Bo <linmengbo0689@protonmail.com>
Link: https://lore.kernel.org/r/20230623100237.5299-1-linmengbo0689@protonmail.com
Signed-off-by: Bjorn Andersson <andersson@kernel.org>
arch/arm64/boot/dts/qcom/Makefile
arch/arm64/boot/dts/qcom/msm8939-samsung-a7.dts [new file with mode: 0644]

index 337abc4ceb17758c6390a88b887b8ba70c2cedff..23fd31d4bf5a6db26fa7a2b2b7f327aa736adbc4 100644 (file)
@@ -39,6 +39,7 @@ dtb-$(CONFIG_ARCH_QCOM)       += msm8916-thwc-uf896.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += msm8916-thwc-ufi001c.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += msm8916-wingtech-wt88047.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += msm8916-yiming-uz801v3.dtb
+dtb-$(CONFIG_ARCH_QCOM)        += msm8939-samsung-a7.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += msm8939-sony-xperia-kanuti-tulip.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += msm8953-motorola-potter.dtb
 dtb-$(CONFIG_ARCH_QCOM)        += msm8953-xiaomi-daisy.dtb
diff --git a/arch/arm64/boot/dts/qcom/msm8939-samsung-a7.dts b/arch/arm64/boot/dts/qcom/msm8939-samsung-a7.dts
new file mode 100644 (file)
index 0000000..66e56ac
--- /dev/null
@@ -0,0 +1,495 @@
+// SPDX-License-Identifier: GPL-2.0-only
+
+/dts-v1/;
+
+#include "msm8939-pm8916.dtsi"
+
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/input.h>
+#include <dt-bindings/interrupt-controller/irq.h>
+
+/ {
+       model = "Samsung Galaxy A7 (2015)";
+       compatible = "samsung,a7", "qcom,msm8939";
+       chassis-type = "handset";
+
+       aliases {
+               mmc0 = &sdhc_1; /* SDC1 eMMC slot */
+               mmc1 = &sdhc_2; /* SDC2 SD card slot */
+               serial0 = &blsp_uart2;
+       };
+
+       chosen {
+               stdout-path = "serial0";
+       };
+
+       reserved-memory {
+               /* Additional memory used by Samsung firmware modifications */
+               tz-apps@85500000 {
+                       reg = <0x0 0x85500000 0x0 0xb00000>;
+                       no-map;
+               };
+       };
+
+       gpio-hall-sensor {
+               compatible = "gpio-keys";
+
+               pinctrl-0 = <&gpio_hall_sensor_default>;
+               pinctrl-names = "default";
+
+               label = "GPIO Hall Effect Sensor";
+
+               event-hall-sensor {
+                       label = "Hall Effect Sensor";
+                       gpios = <&tlmm 52 GPIO_ACTIVE_LOW>;
+                       linux,input-type = <EV_SW>;
+                       linux,code = <SW_LID>;
+                       linux,can-disable;
+               };
+       };
+
+       gpio-keys {
+               compatible = "gpio-keys";
+
+               pinctrl-0 = <&gpio_keys_default>;
+               pinctrl-names = "default";
+
+               label = "GPIO Buttons";
+
+               button-volume-up {
+                       label = "Volume Up";
+                       gpios = <&tlmm 107 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_VOLUMEUP>;
+               };
+
+               button-home {
+                       label = "Home";
+                       gpios = <&tlmm 109 GPIO_ACTIVE_LOW>;
+                       linux,code = <KEY_HOMEPAGE>;
+               };
+       };
+
+       i2c-fg {
+               compatible = "i2c-gpio";
+               sda-gpios = <&tlmm 106 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+               scl-gpios = <&tlmm 105 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+
+               pinctrl-0 = <&fg_i2c_default>;
+               pinctrl-names = "default";
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               battery@35 {
+                       compatible = "richtek,rt5033-battery";
+                       reg = <0x35>;
+
+                       interrupt-parent = <&tlmm>;
+                       interrupts = <121 IRQ_TYPE_EDGE_BOTH>;
+
+                       pinctrl-0 = <&fg_alert_default>;
+                       pinctrl-names = "default";
+               };
+       };
+
+       i2c-nfc {
+               compatible = "i2c-gpio";
+               sda-gpios = <&tlmm 0 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+               scl-gpios = <&tlmm 1 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+
+               pinctrl-0 = <&nfc_i2c_default>;
+               pinctrl-names = "default";
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               nfc@2b {
+                       compatible = "nxp,pn547", "nxp,nxp-nci-i2c";
+                       reg = <0x2b>;
+
+                       interrupt-parent = <&tlmm>;
+                       interrupts = <21 IRQ_TYPE_EDGE_RISING>;
+
+                       enable-gpios = <&tlmm 116 GPIO_ACTIVE_HIGH>;
+                       firmware-gpios = <&tlmm 49 GPIO_ACTIVE_HIGH>;
+
+                       pinctrl-0 = <&nfc_default>;
+                       pinctrl-names = "default";
+               };
+       };
+
+       i2c-sensor {
+               compatible = "i2c-gpio";
+               sda-gpios = <&tlmm 84 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+               scl-gpios = <&tlmm 85 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+
+               pinctrl-0 = <&sensor_i2c_default>;
+               pinctrl-names = "default";
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               accelerometer: accelerometer@10 {
+                       compatible = "bosch,bmc150_accel";
+                       reg = <0x10>;
+                       interrupt-parent = <&tlmm>;
+                       interrupts = <115 IRQ_TYPE_EDGE_RISING>;
+
+                       vdd-supply = <&pm8916_l17>;
+                       vddio-supply = <&pm8916_l5>;
+
+                       pinctrl-0 = <&accel_int_default>;
+                       pinctrl-names = "default";
+
+                       mount-matrix = "-1", "0", "0",
+                                       "0", "-1", "0",
+                                       "0", "0", "1";
+               };
+
+               magnetometer@12 {
+                       compatible = "bosch,bmc150_magn";
+                       reg = <0x12>;
+
+                       vdd-supply = <&pm8916_l17>;
+                       vddio-supply = <&pm8916_l5>;
+               };
+       };
+
+       i2c-tkey {
+               compatible = "i2c-gpio";
+               sda-gpios = <&tlmm 16 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+               scl-gpios = <&tlmm 17 (GPIO_ACTIVE_HIGH|GPIO_OPEN_DRAIN)>;
+
+               pinctrl-0 = <&tkey_i2c_default>;
+               pinctrl-names = "default";
+
+               #address-cells = <1>;
+               #size-cells = <0>;
+
+               touchkey@20 {
+                       /* Note: Actually an ABOV MCU that implements same interface */
+                       compatible = "coreriver,tc360-touchkey";
+                       reg = <0x20>;
+
+                       interrupt-parent = <&tlmm>;
+                       interrupts = <20 IRQ_TYPE_EDGE_FALLING>;
+
+                       vcc-supply = <&reg_touch_key>;
+                       vdd-supply = <&reg_keyled>;
+                       vddio-supply = <&pm8916_l6>;
+
+                       linux,keycodes = <KEY_APPSELECT KEY_BACK>;
+
+                       pinctrl-0 = <&tkey_default>;
+                       pinctrl-names = "default";
+               };
+       };
+
+       pwm_vibrator: pwm-vibrator {
+               compatible = "clk-pwm";
+               #pwm-cells = <2>;
+
+               clocks = <&gcc GCC_GP2_CLK>;
+
+               pinctrl-0 = <&motor_pwm_default>;
+               pinctrl-names = "default";
+       };
+
+       reg_keyled: regulator-keyled {
+               compatible = "regulator-fixed";
+               regulator-name = "keyled";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+
+               /* NOTE: On some variants e.g. SM-A700FD it's GPIO 91 */
+               gpio = <&tlmm 100 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+
+               pinctrl-0 = <&tkey_led_en_default>;
+               pinctrl-names = "default";
+       };
+
+       reg_touch_key: regulator-touch-key {
+               compatible = "regulator-fixed";
+               regulator-name = "touch_key";
+               regulator-min-microvolt = <2800000>;
+               regulator-max-microvolt = <2800000>;
+
+               gpio = <&tlmm 56 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+
+               pinctrl-0 = <&tkey_en_default>;
+               pinctrl-names = "default";
+       };
+
+       reg_tsp_vdd: regulator-tsp-vdd {
+               compatible = "regulator-fixed";
+               regulator-name = "tsp_vdd";
+               regulator-min-microvolt = <1800000>;
+               regulator-max-microvolt = <1800000>;
+               vin-supply = <&pm8916_s4>;
+
+               gpio = <&tlmm 8 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+
+               pinctrl-0 = <&reg_tsp_io_en_default>;
+               pinctrl-names = "default";
+       };
+
+       reg_vdd_tsp: regulator-vdd-tsp {
+               compatible = "regulator-fixed";
+               regulator-name = "vdd_tsp";
+               regulator-min-microvolt = <3300000>;
+               regulator-max-microvolt = <3300000>;
+
+               gpio = <&tlmm 73 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+
+               pinctrl-0 = <&reg_tsp_en_default>;
+               pinctrl-names = "default";
+       };
+
+       reg_vibrator: regulator-vibrator {
+               compatible = "regulator-fixed";
+               regulator-name = "motor_en";
+               regulator-min-microvolt = <3000000>;
+               regulator-max-microvolt = <3000000>;
+
+               gpio = <&tlmm 86 GPIO_ACTIVE_HIGH>;
+               enable-active-high;
+
+               pinctrl-0 = <&motor_en_default>;
+               pinctrl-names = "default";
+       };
+
+       vibrator {
+               compatible = "pwm-vibrator";
+
+               pwms = <&pwm_vibrator 0 100000>;
+               pwm-names = "enable";
+
+               vcc-supply = <&reg_vibrator>;
+       };
+};
+
+&blsp_i2c1 {
+       status = "okay";
+
+       muic: extcon@25 {
+               compatible = "siliconmitus,sm5502-muic";
+               reg = <0x25>;
+
+               interrupt-parent = <&tlmm>;
+               interrupts = <12 IRQ_TYPE_EDGE_FALLING>;
+
+               pinctrl-0 = <&muic_int_default>;
+               pinctrl-names = "default";
+       };
+};
+
+&blsp_i2c5 {
+       status = "okay";
+
+       touchscreen@24 {
+               compatible = "cypress,tt21000";
+
+               reg = <0x24>;
+               interrupt-parent = <&tlmm>;
+               interrupts = <13 IRQ_TYPE_EDGE_FALLING>;
+
+               vdd-supply = <&reg_vdd_tsp>;
+               vddio-supply = <&reg_tsp_vdd>;
+
+               pinctrl-0 = <&tsp_int_default>;
+               pinctrl-names = "default";
+       };
+};
+
+&blsp_uart2 {
+       status = "okay";
+};
+
+&pm8916_resin {
+       linux,code = <KEY_VOLUMEDOWN>;
+       status = "okay";
+};
+
+&pm8916_rpm_regulators {
+       pm8916_l17: l17 {
+               regulator-min-microvolt = <2850000>;
+               regulator-max-microvolt = <2850000>;
+       };
+};
+
+&sdhc_1 {
+       status = "okay";
+};
+
+&sdhc_2 {
+       pinctrl-0 = <&sdc2_default &sdc2_cd_default>;
+       pinctrl-1 = <&sdc2_sleep &sdc2_cd_default>;
+       pinctrl-names = "default", "sleep";
+
+       cd-gpios = <&tlmm 38 GPIO_ACTIVE_LOW>;
+
+       status = "okay";
+};
+
+&usb {
+       extcon = <&muic>, <&muic>;
+       status = "okay";
+};
+
+&usb_hs_phy {
+       extcon = <&muic>;
+};
+
+&wcnss {
+       status = "okay";
+};
+
+&wcnss_iris {
+       compatible = "qcom,wcn3660b";
+};
+
+&tlmm {
+       accel_int_default: accel-int-default-state {
+               pins = "gpio115";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       fg_alert_default: fg-alert-default-state {
+               pins = "gpio121";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       fg_i2c_default: fg-i2c-default-state {
+               pins = "gpio105", "gpio106";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       gpio_hall_sensor_default: gpio-hall-sensor-default-state {
+               pins = "gpio52";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       gpio_keys_default: gpio-keys-default-state {
+               pins = "gpio107", "gpio109";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-pull-up;
+       };
+
+       motor_en_default: motor-en-default-state {
+               pins = "gpio86";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       motor_pwm_default: motor-pwm-default-state {
+               pins = "gpio50";
+               function = "gcc_gp2_clk_a";
+       };
+
+       muic_int_default: muic-int-default-state {
+               pins = "gpio12";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       nfc_default: nfc-default-state {
+               irq-pins {
+                       pins = "gpio21";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-pull-down;
+               };
+
+               nfc-pins {
+                       pins = "gpio49", "gpio116";
+                       function = "gpio";
+                       drive-strength = <2>;
+                       bias-disable;
+               };
+       };
+
+       nfc_i2c_default: nfc-i2c-default-state {
+               pins = "gpio0", "gpio1";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       reg_tsp_en_default: reg-tsp-en-default-state {
+               pins = "gpio73";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       reg_tsp_io_en_default: reg-tsp-io-en-default-state {
+               pins = "gpio8";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       sdc2_cd_default: sdc2-cd-default-state {
+               pins = "gpio38";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-pull-up;
+       };
+
+       sensor_i2c_default: sensor-i2c-default-state {
+               pins = "gpio84", "gpio85";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       tkey_default: tkey-default-state {
+               pins = "gpio20";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       tkey_en_default: tkey-en-default-state {
+               pins = "gpio56";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       tkey_i2c_default: tkey-i2c-default-state {
+               pins = "gpio16", "gpio17";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       tkey_led_en_default: tkey-led-en-default-state {
+               pins = "gpio100";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+
+       tsp_int_default: tsp-int-default-state {
+               pins = "gpio13";
+               function = "gpio";
+               drive-strength = <2>;
+               bias-disable;
+       };
+};