@@ -6,6 +6,8 @@ dtb-$(CONFIG_ARCH_QCOM) += msm8916-mtp.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8916-longcheer-l8150.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-a3u-eur.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8916-samsung-a5u-eur.dtb
+dtb-$(CONFIG_ARCH_QCOM) += msm8956-sony-xperia-loire-kugo.dtb
+dtb-$(CONFIG_ARCH_QCOM) += msm8956-sony-xperia-loire-suzu.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8992-bullhead-rev-101.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8994-angler-rev-101.dtb
dtb-$(CONFIG_ARCH_QCOM) += msm8996-mtp.dtb
new file mode 100644
@@ -0,0 +1,74 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (C) 2014 Sony Mobile Communications Inc.
+ * Copyright (c) 2016-2019 AngeloGioacchino Del Regno <kholk11@gmail.com>
+ */
+
+/dts-v1/;
+
+#include "msm8956-sony-xperia-loire.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+ model = "Sony Xperia X Compact (Loire Kugo)";
+ compatible = "sony,xperia-kugo", "qcom,msm8956";
+
+ qcom,msm-id = <266 0x10001>; /* MSM8956 PM/PMI8956 */
+ qcom,board-id = <8 0>;
+};
+
+&blsp_i2c6 {
+ status = "okay";
+};
+
+&blsp_i2c8 {
+ status = "okay";
+};
+
+&pm8950_l1 {
+ regulator-min-microvolt = <1100000>;
+ regulator-max-microvolt = <1300000>;
+ qcom,init-voltage = <1200000>;
+};
+
+/* Machine specific pins override */
+&tlmm {
+ usb_cable_det_n_gpio: usb_cable_det_n {
+ mux {
+ pins = "gpio107";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio107";
+ drive-strength = <2>;
+ bias-pull-up;
+ input-enable;
+ };
+ };
+
+ usb_cable_sense_en_gpio: usb_cable_sense_en {
+ mux {
+ pins = "gpio116";
+ function = "gpio";
+ };
+
+ config {
+ pins = "gpio116";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+ };
+
+ usb_cc_int_n_gpio: usb_cc_int_n {
+ mux {
+ pins = "gpio131";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio131";
+ drive-strength = <2>;
+ bias-pull-up;
+ input-enable;
+ };
+ };
+};
new file mode 100644
@@ -0,0 +1,21 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Copyright (C) 2014 Sony Mobile Communications Inc.
+ * Copyright (c) 2016-2019 AngeloGioacchino Del Regno <kholk11@gmail.com>
+ */
+
+/dts-v1/;
+
+#include "msm8956-sony-xperia-loire.dtsi"
+#include <dt-bindings/gpio/gpio.h>
+
+/ {
+ model = "Sony Xperia X (Loire Suzu)";
+ compatible = "sony,xperia-suzu", "qcom,msm8956";
+
+ qcom,msm-id = <266 0x10001>; /* MSM8956 PM/PMI8956 */
+ qcom,board-id = <8 0>;
+};
+
+&blsp_i2c8 {
+ status = "okay";
+};
new file mode 100644
@@ -0,0 +1,663 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Sony Xperia Loire/SmartLoire platform (MSM8956/APQ8056) configuration
+ * This configuration is common across a range of Xperia devices
+ * based on the Loire and SmartLoire projects.
+ *
+ * Copyright (C) 2014 Sony Mobile Communications Inc.
+ * Copyright (c) 2016-2019 AngeloGioacchino Del Regno <kholk11@gmail.com>
+ */
+
+#include "msm8976.dtsi"
+#include "pmi8950.dtsi"
+#include "pm8950.dtsi"
+#include "pm8004.dtsi"
+#include <dt-bindings/interrupt-controller/irq.h>
+#include <dt-bindings/gpio/gpio.h>
+#include <dt-bindings/input/gpio-keys.h>
+#include <dt-bindings/input/input.h>
+
+/ {
+ aliases {
+ serial0 = &blsp2_uart2;
+ };
+
+ chosen {
+ stdout-path = "serial0:115200n8";
+ };
+
+ reserved-memory {
+ ramoops {
+ compatible = "ramoops";
+ reg = <0 0x57f00000 0 0x00100000>;
+ record-size = <0x20000>;
+ console-size = <0x40000>;
+ ftrace-size = <0x20000>;
+ pmsg-size = <0x20000>;
+ ecc-size = <16>;
+ status = "ok";
+ };
+ };
+
+ vph_pwr: vph-pwr-regulator {
+ compatible = "regulator-fixed";
+ regulator-name = "vph_pwr";
+ regulator-always-on;
+ regulator-boot-on;
+ };
+
+ tp_vddio_vreg: tp-vddio-regulator {
+ compatible = "regulator-fixed";
+
+ regulator-name = "tp-vddio";
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+
+ gpio = <&tlmm 126 GPIO_ACTIVE_HIGH>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&tp_vddio_en_gpio>;
+ };
+
+ bcm43455_pwr_vreg: wlan-regulator {
+ compatible = "regulator-fixed";
+
+ regulator-name = "wlan-vreg";
+ regulator-min-microvolt = <3300000>;
+ regulator-max-microvolt = <3300000>;
+
+ gpio = <&tlmm 48 GPIO_ACTIVE_HIGH>;
+ enable-active-high;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&wl_vreg_on_gpio>;
+ };
+
+ bcm43455_pwrseq: wlan-pwrseq {
+ compatible = "mmc-pwrseq-simple";
+ reset-gpios = <&pm8950_gpios 2 GPIO_ACTIVE_LOW>;
+ };
+
+ vibrator {
+ compatible = "gpio-vibrator";
+ enable-gpios = <&pmi8950_gpio 2 GPIO_ACTIVE_HIGH>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&vibrator_ldo_en>;
+ };
+};
+
+&soc {
+ blsp2_uart2: serial@7af0000 {
+ compatible = "qcom,msm-uartdm-v1.4", "qcom,msm-uartdm";
+ reg = <0x7af0000 0x200>;
+ interrupts = <GIC_SPI 307 IRQ_TYPE_LEVEL_HIGH>;
+ clocks = <&gcc GCC_BLSP2_UART2_APPS_CLK>,
+ <&gcc GCC_BLSP2_AHB_CLK>;
+ clock-names = "core", "iface";
+ dmas = <&blsp2_dma 1>, <&blsp2_dma 0>;
+ dma-names = "rx", "tx";
+ status = "okay";
+ };
+
+ gpio_keys {
+ compatible = "gpio-keys";
+ input-name = "gpio-keys";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ autorepeat;
+
+ button@0 {
+ label = "Volume Up";
+ gpios = <&tlmm 130 GPIO_ACTIVE_LOW>;
+ linux,input-type = <1>;
+ linux,code = <KEY_VOLUMEUP>;
+ wakeup-source;
+ debounce-interval = <15>;
+ };
+
+ button@1 {
+ label = "Volume Down";
+ gpios = <&tlmm 113 GPIO_ACTIVE_LOW>;
+ linux,input-type = <1>;
+ linux,code = <KEY_VOLUMEDOWN>;
+ wakeup-source;
+ debounce-interval = <15>;
+ };
+
+ button@2 {
+ label = "Camera Focus";
+ gpios = <&tlmm 114 GPIO_ACTIVE_LOW>;
+ linux,input-type = <1>;
+ linux,code = <KEY_CAMERA_FOCUS>;
+ wakeup-source;
+ debounce-interval = <15>;
+ };
+
+ button@3 {
+ label = "Camera Snapshot";
+ gpios = <&tlmm 115 GPIO_ACTIVE_LOW>;
+ linux,input-type = <1>;
+ linux,code = <KEY_CAMERA>;
+ wakeup-source;
+ wakeup-event-action = <EV_ACT_ASSERTED>;
+ debounce-interval = <15>;
+ };
+ };
+};
+
+&blsp_dma {
+ status = "ok";
+};
+
+&blsp2_dma {
+ status = "ok";
+};
+
+&blsp1_uart1 {
+ status = "disabled";
+};
+
+&blsp1_uart2 {
+ status = "disabled";
+};
+
+/* eMMC */
+&sdhc_1 {
+ vmmc-supply = <&pm8950_l8>;
+ vqmmc-supply = <&pm8950_l5>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdc1_clk_on &sdc1_cmd_on &sdc1_data_on>;
+
+ status = "ok";
+};
+
+/* MicroSD card slot */
+&sdhc_2 {
+ vmmc-supply = <&pm8950_l11>;
+ vqmmc-supply = <&pm8950_l12>;
+ cd-gpios = <&tlmm 100 GPIO_ACTIVE_HIGH>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdc2_clk_on &sdc2_cmd_on &sdc2_data_on &tray_det_n_gpio>;
+
+ status = "ok";
+};
+
+/* SDIO (internal) to BCM WiFi */
+&sdhc_3 {
+ status = "ok";
+ no-sd;
+ no-mmc;
+
+ bus-width = <4>;
+ max-frequency = <100000000>;
+ keep-power-in-suspend;
+
+ non-removable;
+ wakeup-source;
+ vmmc-supply = <&bcm43455_pwr_vreg>;
+ mmc-pwrseq = <&bcm43455_pwrseq>;
+
+ pinctrl-names = "default";
+ pinctrl-0 = <&sdc3_clk_on &sdc3_cmd_on &sdc3_dat_on &wlan_sleep_pin
+ &wl_host_wake_n_gpio>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ brcmf: brcmf@1 {
+ reg = <1>;
+ compatible = "brcm,bcm4329-fmac";
+ interrupt-parent = <&tlmm>;
+ interrupts = <45 IRQ_TYPE_LEVEL_LOW>;
+ interrupt-names = "host-wake";
+ };
+};
+
+&blsp_i2c4 {
+ status = "ok";
+
+ rmi4-i2c-dev@2c {
+ compatible = "syna,rmi4-i2c";
+ reg = <0x2c>;
+
+ interrupt-parent = <&tlmm>;
+ interrupts = <65 IRQ_TYPE_EDGE_FALLING>;
+
+ #address-cells = <1>;
+ #size-cells = <0>;
+
+ vdd-supply = <&tp_vddio_vreg>;
+
+ syna,reset-delay-ms = <220>;
+ syna,startup-delay-ms = <220>;
+
+ rmi4-f01@1 {
+ reg = <0x1>;
+ syna,nosleep-mode = <1>;
+ };
+
+ rmi4-f12@12 {
+ reg = <0x12>;
+ syna,sensor-type = <1>;
+ };
+ };
+};
+
+&tlmm {
+ gpio-reserved-ranges = <0 4>;
+
+ blsp2_uart2_active: blsp2_uart2_active {
+ mux {
+ pins = "gpio20", "gpio21";
+ function = "blsp_uart6";
+ };
+ config {
+ pins = "gpio20", "gpio21";
+ drive-strength = <4>;
+ bias-disable;
+ };
+ };
+
+ blsp2_uart2_sleep: blsp2_uart2_sleep {
+ mux {
+ pins = "gpio20", "gpio21";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio20", "gpio21";
+ drive-strength = <2>;
+ bias-disable;
+ };
+ };
+
+ disp_reset_n_gpio: disp_reset_n_gpio {
+ mux {
+ pins = "gpio25";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio25";
+ drive-strength = <2>;
+ output-high;
+ };
+ };
+
+ wl_host_wake_n_gpio: wl_host_wake_n_gpio {
+ mux {
+ pins = "gpio45";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio45";
+ drive-strength = <2>;
+ bias-pull-down;
+ input-enable;
+ };
+ };
+
+ wl_vreg_on_gpio: wl_vreg_on_gpio {
+ mux {
+ pins = "gpio48";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio48";
+ drive-strength = <2>;
+ bias-disable;
+ output-high;
+ };
+ };
+
+ tp_reset_n_gpio: tp_reset_n_gpio {
+ mux {
+ pins = "gpio64";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio64";
+ drive-strength = <2>;
+ };
+ };
+
+ tp_int_n_gpio: tp_int_n_gpio {
+ mux {
+ pins = "gpio65";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio65";
+ drive-strength = <2>;
+ bias-pull-up;
+ input-enable;
+ };
+ };
+
+ tray_det_n_gpio: tray_det_n_gpio {
+ mux {
+ pins = "gpio100";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio100";
+ drive-strength = <2>;
+ bias-disable;
+ input-enable;
+ };
+ };
+
+ tp_vddio_en_gpio: tp_vddio_en_gpio {
+ mux {
+ pins = "gpio126";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio126";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+ };
+};
+
+&sdc3_clk_on {
+ config {
+ drive-strength = <10>;
+ };
+};
+
+&pm8004_lsid5 {
+ status = "ok";
+};
+
+&pm8004_spmi_regulators {
+ vdd_s2-supply = <&vph_pwr>;
+ vdd_s5-supply = <&vph_pwr>;
+
+ /* Cluster 1 supply */
+ pm8004_s2: s2 {
+ /* Set APC1 always-on and raise min voltage to .95V
+ * until a proper CPU scaling solution lands
+ */
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vdd_apc1";
+ regulator-min-microvolt = <950000>; /* 500000 */
+ regulator-max-microvolt = <1165000>;
+ };
+
+ pm8004_s5: s5 {
+ /* Put GFX VDD up at boot until a proper solution lands */
+ regulator-boot-on;
+
+ regulator-name = "vdd_gfx";
+ regulator-min-microvolt = <950000>;
+ regulator-max-microvolt = <1165000>;
+ regulator-enable-ramp-delay = <500>;
+ };
+};
+
+&adreno_gpu {
+ vdd-supply = <&pm8004_s5>;
+};
+
+&pm8950_spmi_regulators {
+ vdd_s5-supply = <&vph_pwr>;
+
+ /* Cluster 0 supply */
+ pm8950_spmi_s5: s5 {
+ /* Set APC0 always-on and raise min voltage to .95V
+ * until a proper CPU scaling solution lands
+ */
+ regulator-always-on;
+ regulator-boot-on;
+ regulator-name = "vdd_apc0";
+ regulator-min-microvolt = <950000>; /* 790000 */
+ regulator-max-microvolt = <1165000>;
+ };
+};
+
+&smd_rpm_regulators {
+ vdd_s1-supply = <&vph_pwr>;
+ vdd_s2-supply = <&vph_pwr>;
+ vdd_s3-supply = <&vph_pwr>;
+ vdd_s4-supply = <&vph_pwr>;
+ vdd_s5-supply = <&vph_pwr>;
+ vdd_s6-supply = <&vph_pwr>;
+ vdd_l1_l19-supply = <&pm8950_s3>;
+ vdd_l2_l23-supply = <&pm8950_s3>;
+ vdd_l3-supply = <&pm8950_s3>;
+ vdd_l4_l5_l6_l7_l16-supply = <&pm8950_s4>;
+ vdd_l8_l11_l12_l17_l22-supply = <&vph_pwr>;
+ vdd_l20-supply = <&pm8950_s4>;
+ vdd_l21-supply = <&pm8950_s4>;
+
+ s1 {
+ regulator-min-microvolt = <1000000>;
+ regulator-max-microvolt = <1162500>;
+ qcom,init-voltage = <1000000>;
+ status = "okay";
+ };
+
+ s3 {
+ regulator-min-microvolt = <1325000>;
+ regulator-max-microvolt = <1325000>;
+ qcom,init-voltage = <1325000>;
+ regulator-always-on;
+ status = "okay";
+ };
+
+ s4 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ qcom,init-voltage = <1800000>;
+ regulator-always-on;
+ status = "okay";
+ };
+
+ l1 {
+ regulator-min-microvolt = <900000>;
+ regulator-max-microvolt = <1100000>;
+ qcom,init-voltage = <1000000>;
+ status = "okay";
+ };
+
+ l2 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ qcom,init-voltage = <1200000>;
+ status = "okay";
+ };
+
+ l3 {
+ regulator-min-microvolt = <1000000>;
+ regulator-max-microvolt = <1200000>;
+ qcom,init-voltage = <1000000>;
+ status = "okay";
+ };
+
+ l5 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ qcom,init-voltage = <1800000>;
+
+ regulator-system-load = <300000>;
+ regulator-allow-set-load;
+ status = "okay";
+ };
+
+ l6 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ qcom,init-voltage = <1800000>;
+ status = "okay";
+ };
+
+ l7 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ qcom,init-voltage = <1800000>;
+ status = "okay";
+ };
+
+ l8 {
+ regulator-min-microvolt = <2900000>;
+ regulator-max-microvolt = <2900000>;
+ qcom,init-voltage = <2900000>;
+
+ regulator-system-load = <550000>;
+ regulator-allow-set-load;
+ status = "okay";
+ };
+
+ l9 {
+ regulator-min-microvolt = <2000000>;
+ regulator-max-microvolt = <2400000>;
+ qcom,init-voltage = <2200000>;
+ status = "okay";
+ };
+
+ l10 {
+ regulator-min-microvolt = <2500000>;
+ regulator-max-microvolt = <2900000>;
+ qcom,init-voltage = <2700000>;
+ status = "okay";
+ };
+
+ l11 {
+ regulator-min-microvolt = <2950000>;
+ regulator-max-microvolt = <2950000>;
+ qcom,init-voltage = <2950000>;
+
+ regulator-system-load = <550000>;
+ regulator-allow-set-load;
+ status = "okay";
+ };
+
+ l12 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <2950000>;
+ qcom,init-voltage = <1800000>;
+
+ regulator-system-load = <22000>;
+ regulator-allow-set-load;
+ status = "okay";
+ };
+
+ l13 {
+ regulator-min-microvolt = <3075000>;
+ regulator-max-microvolt = <3075000>;
+ qcom,init-voltage = <3075000>;
+ status = "okay";
+ };
+
+ l14 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ qcom,init-voltage = <1800000>;
+ status = "okay";
+ };
+
+ l15 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <3300000>;
+ qcom,init-voltage = <1800000>;
+ status = "okay";
+ };
+
+ l16 {
+ regulator-min-microvolt = <1800000>;
+ regulator-max-microvolt = <1800000>;
+ qcom,init-voltage = <1800000>;
+ status = "okay";
+ };
+
+ l17 {
+ regulator-min-microvolt = <2500000>;
+ regulator-max-microvolt = <2900000>;
+ qcom,init-voltage = <2700000>;
+ status = "okay";
+ };
+
+ l19 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1350000>;
+ qcom,init-voltage = <1200000>;
+ status = "okay";
+ };
+
+ l22 {
+ regulator-min-microvolt = <3000000>;
+ regulator-max-microvolt = <3000000>;
+ qcom,init-voltage = <3000000>;
+ status = "okay";
+ };
+
+ l23 {
+ regulator-min-microvolt = <1200000>;
+ regulator-max-microvolt = <1200000>;
+ qcom,init-voltage = <1200000>;
+ status = "okay";
+ };
+};
+
+&pm8950_gpios {
+ cdc_pm_mclk_pin: cdc_pm_mclk {
+ cdc_pm {
+ pins = "gpio1";
+ function = "func1"; /* SF1 */
+ output-low;
+ bias-disable;
+ qcom,drive-strength = <2>;
+ power-source = <2>; /* VIN 2 */
+ };
+ };
+
+ wlan_sleep_pin: wl_sleep_clk {
+ wl_sleep {
+ pins = "gpio2";
+ function = "func1"; /* SF1 SLEEP_CLK2 */
+ output-high;
+ bias-disable;
+ drive-push-pull;
+ qcom,drive-strength = <1>;
+ power-source = <0>; /* VPH_PWR */
+ };
+ };
+
+ wcd_eldo_pin: wcd_eldo_en {
+ wcd_eldo {
+ pins = "gpio7";
+ function = "gpio";
+ output-low;
+ bias-disable;
+ power-source = <0>; /* VPH_PWR */
+ };
+ };
+};
+
+&pmi8950_gpio {
+ usb_switch_sel_gpio: usb_switch_sel {
+ usb_switch {
+ pins = "gpio1";
+ function = "normal";
+ output-low;
+ drive-push-pull;
+ qcom,drive-strength = <1>;
+ power-source = <0>;
+ };
+ };
+
+ vibrator_ldo_en: vib_ldo_en {
+ vibrator_ldo {
+ pins = "gpio2";
+ function = "normal";
+ output-low;
+ drive-push-pull;
+ qcom,drive-strength = <1>;
+ power-source = <0>;
+ };
+ };
+};