Merge "ARM: dts: qcom: Correct max voltage of Regulator L4"
diff --git a/arch/arm/configs/vendor/sdxprairie-perf_defconfig b/arch/arm/configs/vendor/sdxprairie-perf_defconfig
index ccd851b..9e5d542 100644
--- a/arch/arm/configs/vendor/sdxprairie-perf_defconfig
+++ b/arch/arm/configs/vendor/sdxprairie-perf_defconfig
@@ -160,12 +160,6 @@
CONFIG_QRTR_SMD=y
CONFIG_QRTR_MHI=y
CONFIG_QRTR_MHI_DEV=y
-CONFIG_BT=y
-# CONFIG_BT_BREDR is not set
-# CONFIG_BT_LE is not set
-# CONFIG_BT_DEBUGFS is not set
-CONFIG_MSM_BT_POWER=y
-# CONFIG_BTFM_SLIM is not set
CONFIG_CFG80211=y
CONFIG_CFG80211_DEBUGFS=y
CONFIG_CFG80211_INTERNAL_REGDB=y
@@ -464,6 +458,8 @@
CONFIG_HARDENED_USERCOPY=y
CONFIG_SECURITY_SELINUX=y
# CONFIG_SECURITY_SELINUX_AVC_STATS is not set
+CONFIG_CRYPTO_ECDH=y
+CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_DEV_QCOM_MSM_QCE=y
CONFIG_CRYPTO_DEV_QCRYPTO=y
CONFIG_CRYPTO_DEV_QCEDEV=y
diff --git a/arch/arm/configs/vendor/sdxprairie_defconfig b/arch/arm/configs/vendor/sdxprairie_defconfig
index 994ee3a..1823aba 100644
--- a/arch/arm/configs/vendor/sdxprairie_defconfig
+++ b/arch/arm/configs/vendor/sdxprairie_defconfig
@@ -160,12 +160,6 @@
CONFIG_QRTR_SMD=y
CONFIG_QRTR_MHI=y
CONFIG_QRTR_MHI_DEV=y
-CONFIG_BT=y
-# CONFIG_BT_BREDR is not set
-# CONFIG_BT_LE is not set
-# CONFIG_BT_DEBUGFS is not set
-CONFIG_MSM_BT_POWER=y
-# CONFIG_BTFM_SLIM is not set
CONFIG_CFG80211=y
CONFIG_RFKILL=y
CONFIG_DEVTMPFS=y
@@ -274,6 +268,9 @@
CONFIG_REGULATOR_RPMH=y
CONFIG_REGULATOR_STUB=y
CONFIG_FB=y
+CONFIG_FB_MSM=y
+CONFIG_FB_MSM_MDP_NONE=y
+CONFIG_FB_MSM_QPIC_PANEL_DETECT=y
CONFIG_SOUND=y
CONFIG_SND=y
CONFIG_SND_DYNAMIC_MINORS=y
@@ -338,6 +335,9 @@
CONFIG_MMC_SDHCI=y
CONFIG_MMC_SDHCI_PLTFM=y
CONFIG_MMC_SDHCI_MSM=y
+CONFIG_NEW_LEDS=y
+CONFIG_LEDS_CLASS=y
+CONFIG_LEDS_TRIGGERS=y
CONFIG_RTC_CLASS=y
CONFIG_RTC_DRV_QPNP=y
CONFIG_DMADEVICES=y
@@ -492,6 +492,8 @@
CONFIG_HARDENED_USERCOPY_PAGESPAN=y
CONFIG_SECURITY_SELINUX=y
# CONFIG_SECURITY_SELINUX_AVC_STATS is not set
+CONFIG_CRYPTO_ECDH=y
+CONFIG_CRYPTO_CMAC=y
CONFIG_CRYPTO_DEV_QCOM_MSM_QCE=y
CONFIG_CRYPTO_DEV_QCRYPTO=y
CONFIG_CRYPTO_DEV_QCEDEV=y
diff --git a/arch/arm64/boot/dts/qcom/atoll-atp.dtsi b/arch/arm64/boot/dts/qcom/atoll-atp.dtsi
index 840cdde..e8c9bcd 100644
--- a/arch/arm64/boot/dts/qcom/atoll-atp.dtsi
+++ b/arch/arm64/boot/dts/qcom/atoll-atp.dtsi
@@ -12,6 +12,7 @@
#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/iio/qcom,spmi-vadc.h>
+#include "atoll-sde-display.dtsi"
&soc {
};
@@ -40,7 +41,7 @@
};
&usb0 {
- extcon = <&pm6150_pdphy>, <&pm6150_charger>;
+ extcon = <&pm6150_pdphy>, <&pm6150_charger>, <&eud>;
};
&usb_qmp_dp_phy {
@@ -149,3 +150,67 @@
&nfc_clk_req_suspend>;
};
};
+
+&qupv3_se7_i2c {
+ status = "ok";
+
+ synaptics_tcm@20 {
+ compatible = "synaptics,tcm-i2c";
+ reg = <0x20>;
+ interrupt-parent = <&tlmm>;
+ interrupts = <9 0x2008>;
+ pinctrl-names = "pmx_ts_active","pmx_ts_suspend",
+ "pmx_ts_release";
+ pinctrl-0 = <&ts_active>;
+ pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
+ pinctrl-2 = <&ts_release>;
+ vdd-supply = <&pm6150_l10>;
+ avdd-supply = <&pm6150l_l7>;
+ synaptics,pwr-reg-name = "avdd";
+ synaptics,bus-reg-name = "vdd";
+ synaptics,irq-gpio = <&tlmm 9 0x2008>;
+ synaptics,irq-on-state = <0>;
+ synaptics,reset-gpio = <&tlmm 8 0x00>;
+ synaptics,reset-on-state = <0>;
+ synaptics,reset-active-ms = <20>;
+ synaptics,reset-delay-ms = <200>;
+ synaptics,power-delay-ms = <200>;
+ synaptics,ubl-i2c-addr = <0x20>;
+ };
+};
+
+&dsi_rm69299_visionox_amoled_video {
+ qcom,panel-supply-entries = <&dsi_panel_pwr_supply_labibb_amoled>;
+ qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
+ qcom,mdss-dsi-bl-min-level = <1>;
+ qcom,mdss-dsi-bl-max-level = <255>;
+ qcom,platform-te-gpio = <&tlmm 10 0>;
+ qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>;
+};
+
+&dsi_rm69299_visionox_amoled_cmd {
+ qcom,panel-supply-entries = <&dsi_panel_pwr_supply_labibb_amoled>;
+ qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
+ qcom,mdss-dsi-bl-min-level = <1>;
+ qcom,mdss-dsi-bl-max-level = <255>;
+ qcom,platform-te-gpio = <&tlmm 10 0>;
+ qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>;
+};
+
+&dsi_sim_cmd {
+ qcom,panel-supply-entries = <&dsi_panel_pwr_supply_no_labibb>;
+ qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
+ qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>;
+};
+
+&dsi_sim_vid {
+ qcom,panel-supply-entries = <&dsi_panel_pwr_supply_no_labibb>;
+ qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
+ qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>;
+};
+
+&dsi_sim_dsc_375_cmd {
+ qcom,panel-supply-entries = <&dsi_panel_pwr_supply_no_labibb>;
+ qcom,mdss-dsi-bl-pmic-control-type = "bl_ctrl_dcs";
+ qcom,platform-reset-gpio = <&pm6150l_gpios 3 0>;
+};
diff --git a/arch/arm64/boot/dts/qcom/atoll-npu.dtsi b/arch/arm64/boot/dts/qcom/atoll-npu.dtsi
new file mode 100644
index 0000000..1b47cf5
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/atoll-npu.dtsi
@@ -0,0 +1,160 @@
+/* Copyright (c) 2019, The Linux Foundation.All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+&soc {
+ msm_npu: qcom,msm_npu@9800000 {
+ compatible = "qcom,msm-npu";
+ status = "ok";
+ reg = <0x9900000 0x20000>,
+ <0x99f0000 0x10000>,
+ <0x9980000 0x10000>,
+ <0x17c00000 0x10000>;
+ reg-names = "tcm", "core", "cc", "apss_shared";
+ interrupts = <GIC_SPI 583 IRQ_TYPE_LEVEL_HIGH>,
+ <GIC_SPI 585 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 587 IRQ_TYPE_EDGE_RISING>,
+ <GIC_SPI 584 IRQ_TYPE_LEVEL_HIGH>;
+ interrupt-names = "error_irq", "wdg_bite_irq", "ipc_irq",
+ "general_irq";
+ iommus = <&apps_smmu 0x1461 0x0>, <&apps_smmu 0x1462 0x0>,
+ <&apps_smmu 0x1481 0x0>, <&apps_smmu 0x1482 0x0>;
+
+ clocks = <&clock_npucc NPU_CC_XO_CLK>,
+ <&clock_npucc NPU_CC_CORE_CLK>,
+ <&clock_npucc NPU_CC_CAL_HM0_CLK>,
+ <&clock_npucc NPU_CC_CAL_HM0_CDC_CLK>,
+ <&clock_npucc NPU_CC_NOC_AXI_CLK>,
+ <&clock_npucc NPU_CC_NOC_AHB_CLK>,
+ <&clock_npucc NPU_CC_NOC_DMA_CLK>,
+ <&clock_npucc NPU_CC_RSC_XO_CLK>,
+ <&clock_npucc NPU_CC_S2P_CLK>,
+ <&clock_npucc NPU_CC_BWMON_CLK>,
+ <&clock_npucc NPU_CC_CAL_HM0_PERF_CNT_CLK>,
+ <&clock_npucc NPU_CC_BTO_CORE_CLK>,
+ <&clock_npucc NPU_DSP_CORE_CLK_SRC>;
+ clock-names = "xo_clk",
+ "npu_core_clk",
+ "cal_hm0_clk",
+ "cal_hm0_cdc_clk",
+ "axi_clk",
+ "ahb_clk",
+ "dma_clk",
+ "rsc_xo_clk",
+ "s2p_clk",
+ "bwmon_clk",
+ "cal_hm0_perf_cnt_clk",
+ "bto_core_clk",
+ "dsp_core_clk_src";
+
+ vdd-supply = <&npu_core_gdsc>;
+ vdd_cx-supply = <&VDD_CX_LEVEL>;
+ qcom,proxy-reg-names ="vdd", "vdd_cx";
+ qcom,vdd_cx-uV-uA = <RPMH_REGULATOR_LEVEL_TURBO 100000>;
+ #cooling-cells = <2>;
+ qcom,src-dst-ports = <MSM_BUS_MASTER_NPU MSM_BUS_SLAVE_EBI_CH0>;
+ qcom,npu-pwrlevels {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ compatible = "qcom,npu-pwrlevels";
+ initial-pwrlevel = <4>;
+ qcom,npu-pwrlevel@0 {
+ reg = <0>;
+ vreg = <1>;
+ clk-freq = <19200000
+ 100000000
+ 200000000
+ 200000000
+ 120000000
+ 40000000
+ 200000000
+ 19200000
+ 50000000
+ 19200000
+ 200000000
+ 19200000
+ 300000000>;
+ };
+
+ qcom,npu-pwrlevel@1 {
+ reg = <1>;
+ vreg = <2>;
+ clk-freq = <19200000
+ 200000000
+ 400000000
+ 400000000
+ 200000000
+ 40000000
+ 300000000
+ 19200000
+ 50000000
+ 19200000
+ 400000000
+ 19200000
+ 400000000>;
+ };
+
+ qcom,npu-pwrlevel@2 {
+ reg = <2>;
+ vreg = <3>;
+ clk-freq = <19200000
+ 333000000
+ 515000000
+ 515000000
+ 300000000
+ 75000000
+ 400000000
+ 19200000
+ 50000000
+ 19200000
+ 515000000
+ 19200000
+ 500000000>;
+ };
+
+ qcom,npu-pwrlevel@3 {
+ reg = <3>;
+ vreg = <4>;
+ clk-freq = <19200000
+ 428000000
+ 650000000
+ 650000000
+ 403000000
+ 75000000
+ 600000000
+ 19200000
+ 100000000
+ 19200000
+ 515000000
+ 19200000
+ 660000000>;
+ };
+
+ qcom,npu-pwrlevel@4 {
+ reg = <4>;
+ vreg = <6>;
+ clk-freq = <19200000
+ 500000000
+ 800000000
+ 800000000
+ 533000000
+ 75000000
+ 710000000
+ 19200000
+ 100000000
+ 19200000
+ 650000000
+ 19200000
+ 800000000>;
+ };
+ };
+ };
+};
diff --git a/arch/arm64/boot/dts/qcom/atoll-qrd.dtsi b/arch/arm64/boot/dts/qcom/atoll-qrd.dtsi
index ecc0cb92..ca49d9e 100644
--- a/arch/arm64/boot/dts/qcom/atoll-qrd.dtsi
+++ b/arch/arm64/boot/dts/qcom/atoll-qrd.dtsi
@@ -19,11 +19,72 @@
#include "atoll-camera-sensor-qrd.dtsi"
#include "atoll-sde-display.dtsi"
+&tlmm {
+ fpc_reset_int: fpc_reset_int {
+ fpc_reset_low: reset_low {
+ mux {
+ pins = "gpio91";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio91";
+ drive-strength = <2>;
+ bias-disable;
+ output-low;
+ };
+ };
+
+ fpc_reset_high: reset_high {
+ mux {
+ pins = "gpio91";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio91";
+ drive-strength = <2>;
+ bias-disable;
+ output-high;
+ };
+ };
+
+ fpc_int_low: int_low {
+ mux {
+ pins = "gpio90";
+ function = "gpio";
+ };
+ config {
+ pins = "gpio90";
+ drive-strength = <2>;
+ bias-pull-down;
+ input-enable;
+ };
+ };
+ };
+};
+
&soc {
qrd_batterydata: qcom,battery-data {
qcom,batt-id-range-pct = <15>;
#include "qg-batterydata-atl466271_3300mAh.dtsi"
};
+
+ fingerprint: fpc1020 {
+ compatible = "fpc,fpc1020";
+ interrupt-parent = <&tlmm>;
+ interrupts = <90 0>;
+ fpc,gpio_rst = <&tlmm 91 0>;
+ fpc,gpio_irq = <&tlmm 90 0>;
+ vcc_spi-supply = <&pm6150_l10>;
+ vdd_io-supply = <&pm6150_l10>;
+ vdd_ana-supply = <&pm6150_l10>;
+ fpc,enable-on-boot;
+ pinctrl-names = "fpc1020_reset_reset",
+ "fpc1020_reset_active",
+ "fpc1020_irq_active";
+ pinctrl-0 = <&fpc_reset_low>;
+ pinctrl-1 = <&fpc_reset_high>;
+ pinctrl-2 = <&fpc_int_low>;
+ };
};
&pm6150a_amoled {
diff --git a/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi b/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi
index 4d168ca..b0ad41b 100644
--- a/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi
+++ b/arch/arm64/boot/dts/qcom/atoll-sde-display.dtsi
@@ -12,6 +12,9 @@
#include "dsi-panel-rm69299-visionox-amoled-fhd-plus-video.dtsi"
#include "dsi-panel-rm69299-visionox-amoled-fhd-plus-cmd.dtsi"
+#include "dsi-panel-sim-video.dtsi"
+#include "dsi-panel-sim-cmd.dtsi"
+#include "dsi-panel-sim-dsc375-cmd.dtsi"
#include <dt-bindings/clock/mdss-10nm-pll-clk.h>
&soc {
@@ -105,6 +108,39 @@
qcom,dsi-panel = <&dsi_rm69299_visionox_amoled_cmd>;
};
+ dsi_sim_vid_display: qcom,dsi-display@2 {
+ label = "dsi_sim_vid_display";
+ qcom,display-type = "primary";
+
+ qcom,dsi-ctrl-num = <0>;
+ qcom,dsi-phy-num = <0>;
+ qcom,dsi-select-clocks = "mux_byte_clk0", "mux_pixel_clk0";
+
+ qcom,dsi-panel = <&dsi_sim_vid>;
+ };
+
+ dsi_sim_cmd_display: qcom,dsi-display@3 {
+ label = "dsi_sim_cmd_display";
+ qcom,display-type = "primary";
+
+ qcom,dsi-ctrl-num = <0>;
+ qcom,dsi-phy-num = <0>;
+ qcom,dsi-select-clocks = "mux_byte_clk0", "mux_pixel_clk0";
+
+ qcom,dsi-panel = <&dsi_sim_cmd>;
+ };
+
+ dsi_sim_dsc_375_cmd_display: qcom,dsi-display@4 {
+ label = "dsi_sim_dsc_375_cmd_display";
+ qcom,display-type = "primary";
+
+ qcom,dsi-ctrl-num = <0>;
+ qcom,dsi-phy-num = <0>;
+ qcom,dsi-select-clocks = "mux_byte_clk0", "mux_pixel_clk0";
+
+ qcom,dsi-panel = <&dsi_sim_dsc_375_cmd>;
+ };
+
sde_dsi: qcom,dsi-display {
compatible = "qcom,dsi-display";
@@ -136,7 +172,10 @@
qcom,dsi-display-list =
<&dsi_rm69299_visionox_amoled_vid_display
- &dsi_rm69299_visionox_amoled_cmd_display>;
+ &dsi_rm69299_visionox_amoled_cmd_display
+ &dsi_sim_vid_display
+ &dsi_sim_cmd_display
+ &dsi_sim_dsc_375_cmd_display>;
};
sde_wb: qcom,wb-display@0 {
@@ -195,6 +234,7 @@
};
&dsi_rm69299_visionox_amoled_cmd {
+ qcom,ulps-enabled;
qcom,esd-check-enabled;
qcom,mdss-dsi-panel-status-check-mode = "reg_read";
qcom,mdss-dsi-panel-status-command = [06 01 00 01 00 00 01 0a];
@@ -213,3 +253,76 @@
};
};
};
+
+&dsi_sim_vid {
+ qcom,mdss-dsi-t-clk-post = <0x0d>;
+ qcom,mdss-dsi-t-clk-pre = <0x2d>;
+ qcom,mdss-dsi-display-timings {
+ timing@0{
+ qcom,mdss-dsi-panel-phy-timings = [00 1c 07 07 23 21 07
+ 07 05 02 04 00];
+ qcom,display-topology = <1 0 1>,
+ <2 0 1>;
+ qcom,default-topology-index = <0>;
+ };
+ };
+};
+
+&dsi_sim_cmd {
+ qcom,mdss-dsi-t-clk-post = <0x0c>;
+ qcom,mdss-dsi-t-clk-pre = <0x29>;
+ qcom,ulps-enabled;
+ qcom,mdss-dsi-display-timings {
+ timing@0{
+ qcom,mdss-dsi-panel-phy-timings = [00 1a 06 06 22 20 07
+ 07 04 02 04 00];
+ qcom,display-topology = <1 1 1>,
+ <2 2 1>;
+ qcom,default-topology-index = <1>;
+ qcom,panel-roi-alignment = <720 40 720 40 720 40>;
+ qcom,partial-update-enabled = "single_roi";
+ };
+
+ timing@1{
+ qcom,mdss-dsi-panel-phy-timings = [00 1a 06 06 22 20 07
+ 07 04 02 04 00];
+ qcom,display-topology = <1 1 1>,
+ <2 2 1>;
+ qcom,default-topology-index = <1>;
+ qcom,panel-roi-alignment = <540 40 540 40 540 40>;
+ qcom,partial-update-enabled = "single_roi";
+ };
+
+ timing@2{
+ qcom,mdss-dsi-panel-phy-timings = [00 1a 06 06 22 20 07
+ 07 04 02 04 00];
+ qcom,display-topology = <1 1 1>,
+ <2 2 1>;
+ qcom,default-topology-index = <1>;
+ qcom,panel-roi-alignment = <360 40 360 40 360 40>;
+ qcom,partial-update-enabled = "single_roi";
+ };
+ };
+};
+
+&dsi_sim_dsc_375_cmd {
+ qcom,mdss-dsi-t-clk-post = <0x0d>;
+ qcom,mdss-dsi-t-clk-pre = <0x2d>;
+ qcom,ulps-enabled;
+ qcom,mdss-dsi-display-timings {
+ timing@0 { /* 1080p */
+ qcom,mdss-dsi-panel-phy-timings = [00 1a 06 06 22 20 07
+ 07 04 02 04 00];
+ qcom,display-topology = <1 1 1>;
+ qcom,default-topology-index = <0>;
+ };
+ timing@1 { /* qhd */
+ qcom,mdss-dsi-panel-phy-timings = [00 15 05 05 20 1f 05
+ 05 03 02 04 00];
+ qcom,display-topology = <1 1 1>,
+ <2 2 1>, /* dsc merge */
+ <2 1 1>; /* 3d mux */
+ qcom,default-topology-index = <0>;
+ };
+ };
+};
diff --git a/arch/arm64/boot/dts/qcom/atoll.dtsi b/arch/arm64/boot/dts/qcom/atoll.dtsi
index 7c3fa9d..02de803 100644
--- a/arch/arm64/boot/dts/qcom/atoll.dtsi
+++ b/arch/arm64/boot/dts/qcom/atoll.dtsi
@@ -532,16 +532,22 @@
reg = <0 0x80b00000 0 0x3900000>;
};
+ pil_modem_mem: modem_region@86000000 {
+ compatible = "removed-dma-pool";
+ no-map;
+ reg = <0 0x86000000 0 0x8400000>;
+ };
+
pil_camera_mem: camera_region@8e000000 {
compatible = "removed-dma-pool";
no-map;
reg = <0 0x8e400000 0 0x500000>;
};
- pil_modem_mem: modem_region@86000000 {
+ pil_npu_mem: pil_npu_region@8e500000 {
compatible = "removed-dma-pool";
no-map;
- reg = <0 0x86000000 0 0x8400000>;
+ reg = <0 0x8e900000 0 0x500000>;
};
pil_video_mem: pil_video_region@8ea00000 {
@@ -568,12 +574,6 @@
reg = <0 0x93900000 0 0x200000>;
};
- npu_mem: npu_region@8e500000 {
- compatible = "removed-dma-pool";
- no-map;
- reg = <0 0x8e900000 0 0x500000>;
- };
-
pil_ipa_fw_mem: ipa_fw_region@93700000 {
compatible = "removed-dma-pool";
no-map;
@@ -620,6 +620,11 @@
size = <0 0x8c00000>;
};
+ cont_splash_memory: cont_splash_region@9bc00000 {
+ reg = <0x0 0x9bc00000 0x0 0x02400000>;
+ label = "cont_splash_region";
+ };
+
adsp_mem: adsp_region {
compatible = "shared-dma-pool";
alloc-ranges = <0x0 0x00000000 0x0 0xffffffff>;
@@ -1177,6 +1182,19 @@
mbox-names = "mss-pil";
};
+ qcom,npu@9800000 {
+ compatible = "qcom,pil-tz-generic";
+ reg = <0x9800000 0x800000>;
+
+ qcom,pas-id = <23>;
+ qcom,firmware-name = "npu";
+ memory-region = <&pil_npu_mem>;
+
+ /* Outputs to npu */
+ qcom,smem-states = <&npu_smp2p_out 0>;
+ qcom,smem-states-names = "qcom,force-stop";
+ };
+
qcom,turing@8300000 {
compatible = "qcom,pil-tz-generic";
reg = <0x8300000 0x100000>;
@@ -2926,7 +2944,8 @@
< 1113600 MHZ_TO_MBPS( 547, 4) >,
< 1267200 MHZ_TO_MBPS(1017, 4) >,
< 1708800 MHZ_TO_MBPS(1555, 4) >,
- < 2400000 MHZ_TO_MBPS(1804, 4) >;
+ < 2208000 MHZ_TO_MBPS(1804, 4) >,
+ < 2400000 MHZ_TO_MBPS(2133, 4) >;
};
cpu0_cpu_ddr_latfloor: qcom,cpu0-cpu-ddr-latfloor {
@@ -3273,6 +3292,7 @@
#include "atoll-regulator.dtsi"
#include "atoll-usb.dtsi"
#include "atoll-vidc.dtsi"
+#include "atoll-npu.dtsi"
&pm6150_vadc {
pinctrl-names = "default";
diff --git a/arch/arm64/boot/dts/qcom/dm-verity-boot.dtsi b/arch/arm64/boot/dts/qcom/dm-verity-boot.dtsi
deleted file mode 100644
index 3aee6a4..0000000
--- a/arch/arm64/boot/dts/qcom/dm-verity-boot.dtsi
+++ /dev/null
@@ -1,28 +0,0 @@
-/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-dm_verity {
- dmname="disabled";
- version="1";
- data_device="/dev/sda6";
- hash_device="/dev/sda6";
- data_block_size="4096";
- hash_block_size="4096";
- number_of_data_blocks="262144";
- hash_start_block="262145";
- algorithm="sha256";
- // root hash: 64 bytes long
- digest=
- "b0fe12d7da6e23a1e19b5a69252c7aaf7b249191eb13bba3f566d630b3f2828a";
- salt="a2df040e00f02c3b2a19e90e5aa76fe1a303f4e08584aaf40e87f088a32b7709";
- // restart_on_corruption ignore_corruption ignore_zero_blocks
- opt="restart_on_corruption";
-};
diff --git a/drivers/md/dm-ioctrl.h b/arch/arm64/boot/dts/qcom/qpic-panel-ili-hvga.dtsi
similarity index 61%
rename from drivers/md/dm-ioctrl.h
rename to arch/arm64/boot/dts/qcom/qpic-panel-ili-hvga.dtsi
index d331fcd..08cde28 100644
--- a/drivers/md/dm-ioctrl.h
+++ b/arch/arm64/boot/dts/qcom/qpic-panel-ili-hvga.dtsi
@@ -1,4 +1,4 @@
-/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2018-2019, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -10,11 +10,12 @@
* GNU General Public License for more details.
*/
-#ifndef DM_IOCTRL_INTERNAL_H
-#define DM_IOCTRL_INTERNAL_H
-
-#include <linux/dm-ioctl.h>
-
-int dm_ioctrl(uint cmd, struct dm_ioctl *param);
-
-#endif
+&soc {
+ qcom,mdss_lcdc_ili_hvga {
+ compatible = "qcom,mdss-qpic-panel";
+ label = "ili9488 hvga lcdc panel";
+ qcom,mdss-pan-res = <320 480>;
+ qcom,mdss-pan-bpp = <18>;
+ qcom,refresh_rate = <60>;
+ };
+};
diff --git a/arch/arm64/boot/dts/qcom/sa8155.dtsi b/arch/arm64/boot/dts/qcom/sa8155.dtsi
index 0e7494b..4016bf6 100644
--- a/arch/arm64/boot/dts/qcom/sa8155.dtsi
+++ b/arch/arm64/boot/dts/qcom/sa8155.dtsi
@@ -656,8 +656,6 @@
read-only;
ranges;
};
-
- /include/ "dm-verity-boot.dtsi"
};
&ipa_hw {
diff --git a/arch/arm64/boot/dts/qcom/sdmmagpie-sde-display.dtsi b/arch/arm64/boot/dts/qcom/sdmmagpie-sde-display.dtsi
index f39f94b..7b7f6ed 100644
--- a/arch/arm64/boot/dts/qcom/sdmmagpie-sde-display.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdmmagpie-sde-display.dtsi
@@ -788,6 +788,7 @@
qcom,mdss-dsi-panel-phy-timings = [00 20 08 08 24 23 08
08 05 02 04 00];
qcom,display-topology = <1 0 1>;
+ qcom,default-topology-index = <0>;
};
};
};
diff --git a/arch/arm64/boot/dts/qcom/sdxprairie-cdp.dts b/arch/arm64/boot/dts/qcom/sdxprairie-cdp.dts
index 795a7f2..fe85c561 100644
--- a/arch/arm64/boot/dts/qcom/sdxprairie-cdp.dts
+++ b/arch/arm64/boot/dts/qcom/sdxprairie-cdp.dts
@@ -14,6 +14,8 @@
#include "sdxprairie.dtsi"
#include "sdxprairie-cdp.dtsi"
+#include "sdxprairie-display.dtsi"
+#include "qpic-panel-ili-hvga.dtsi"
/ {
model = "Qualcomm Technologies, Inc. SDXPRAIRIE CDP";
diff --git a/arch/arm64/boot/dts/qcom/sdxprairie-display.dtsi b/arch/arm64/boot/dts/qcom/sdxprairie-display.dtsi
new file mode 100644
index 0000000..d0128c4
--- /dev/null
+++ b/arch/arm64/boot/dts/qcom/sdxprairie-display.dtsi
@@ -0,0 +1,46 @@
+/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ */
+
+/ {
+ mdss_qpic: qcom,msm_qpic@1b00000 {
+ compatible = "qcom,mdss_qpic";
+ reg = <0x1B00000 0x24000>;
+ reg-names = "qpic_base";
+ interrupts = <0 251 0>;
+
+ qcom,msm-bus,name = "mdss_qpic";
+ qcom,msm-bus,num-cases = <2>;
+ qcom,msm-bus,num-paths = <1>;
+
+ qcom,msm-bus,vectors-KBps =
+ <91 512 0 0>,
+ /* Voting for max b/w on PNOC bus for now */
+ <91 512 400000 800000>;
+
+ vdd-supply = <&pmxprairie_l6>;
+
+ qcom,rst-gpio = <&tlmm 23 0>;
+ qcom,cs-gpio = <&tlmm 21 0>;
+ qcom,ad8-gpio = <&tlmm 20 0>;
+ qcom,te-gpio = <&tlmm 22 0>;
+ qcom,bl-gpio = <&pmxprairie_gpios 1 0>;
+
+ clock-names = "core_clk";
+ clocks = <&clock_rpmh RPMH_QPIC_CLK>;
+
+ pinctrl-names= "mdss_default", "mdss_sleep";
+ pinctrl-0 = <&mdss_cs_active &mdss_te_active
+ &mdss_rs_active &mdss_ad_active>;
+ pinctrl-1 = <&mdss_cs_sleep &mdss_te_sleep
+ &mdss_rs_sleep &mdss_ad_sleep>;
+ };
+};
diff --git a/arch/arm64/boot/dts/qcom/sdxprairie-pinctrl.dtsi b/arch/arm64/boot/dts/qcom/sdxprairie-pinctrl.dtsi
index a5addb2..63bb000 100644
--- a/arch/arm64/boot/dts/qcom/sdxprairie-pinctrl.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdxprairie-pinctrl.dtsi
@@ -698,6 +698,111 @@
};
};
};
+
+ mdss_cs_active: mdss_cs_active {
+ mux {
+ pins = "gpio21";
+ function = "ebi2_lcd";
+ };
+
+ config {
+ pins = "gpio21";
+ drive-strength = <10>; /* 10 mA */
+ bias-disable; /* NO pull */
+ };
+ };
+
+ mdss_cs_sleep: mdss_cs_sleep {
+ mux {
+ pins = "gpio21";
+ function = "ebi2_lcd";
+ };
+
+ config {
+ pins = "gpio21";
+ drive-strength = <2>; /* 2 mA */
+ bias-disable; /* NO pull */
+ };
+ };
+
+ mdss_te_active: mdss_te_active {
+ mux {
+ pins = "gpio22";
+ function = "ebi2_lcd";
+ };
+
+ config {
+ pins = "gpio22";
+ drive-strength = <10>; /* 10 mA */
+ bias-disable; /* NO pull */
+ };
+ };
+
+ mdss_te_sleep: mdss_te_sleep {
+ mux {
+ pins = "gpio22";
+ function = "ebi2_lcd";
+ };
+
+ config {
+ pins = "gpio22";
+ drive-strength = <2>; /* 2 mA */
+ bias-disable; /* NO pull */
+ };
+ };
+
+ mdss_rs_active: mdss_rs_active {
+ mux {
+ pins = "gpio23";
+ function = "ebi2_lcd";
+ };
+
+ config {
+ pins = "gpio23";
+ drive-strength = <10>; /* 10 mA */
+ bias-disable; /* NO pull */
+ };
+ };
+
+ mdss_rs_sleep: mdss_rs_sleep {
+ mux {
+ pins = "gpio23";
+ function = "ebi2_lcd";
+ };
+
+ config {
+ pins = "gpio23";
+ drive-strength = <2>; /* 2 mA */
+ bias-disable; /* NO pull */
+ };
+ };
+
+ mdss_ad_active: mdss_ad_active {
+ mux {
+ pins = "gpio20";
+ function = "ebi2_a";
+ };
+
+ config {
+ pins = "gpio20";
+ drive-strength = <10>; /* 10 mA */
+ bias-disable; /* NO pull */
+ };
+ };
+
+ mdss_ad_sleep: mdss_ad_sleep {
+ mux {
+ pins = "gpio20";
+ function = "ebi2_a";
+ };
+
+ config {
+ pins = "gpio20";
+ drive-strength = <2>; /* 2 mA */
+ bias-disable; /* NO pull */
+ };
+ };
+
pmx_sec_mi2s_aux_din {
sec_din_sleep: sec_din_sleep {
mux {
diff --git a/arch/arm64/boot/dts/qcom/sdxprairie-usb.dtsi b/arch/arm64/boot/dts/qcom/sdxprairie-usb.dtsi
index a09c1c5..2bb5ae2 100644
--- a/arch/arm64/boot/dts/qcom/sdxprairie-usb.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdxprairie-usb.dtsi
@@ -206,11 +206,11 @@
USB3_UNI_QSERDES_COM_SSC_STEP_SIZE1_MODE0 0xde 0
USB3_UNI_QSERDES_COM_SSC_STEP_SIZE2_MODE0 0x07 0
USB3_UNI_QSERDES_COM_VCO_TUNE_MAP 0x02 0
- USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH4 0x8c 0
- USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH3 0x7f 0
- USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH2 0xff 0
- USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH 0x3f 0
- USB3_UNI_QSERDES_RX_RX_MODE_00_LOW 0xff 0
+ USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH4 0xb8 0
+ USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH3 0xff 0
+ USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH2 0xbf 0
+ USB3_UNI_QSERDES_RX_RX_MODE_00_HIGH 0x7f 0
+ USB3_UNI_QSERDES_RX_RX_MODE_00_LOW 0x7f 0
USB3_UNI_QSERDES_RX_RX_MODE_01_HIGH4 0xb4 0
USB3_UNI_QSERDES_RX_RX_MODE_01_HIGH3 0x7b 0
USB3_UNI_QSERDES_RX_RX_MODE_01_HIGH2 0x5c 0
@@ -238,13 +238,13 @@
USB3_UNI_QSERDES_RX_SIGDET_DEGLITCH_CNTRL 0x0e 0
USB3_UNI_QSERDES_RX_RX_IDAC_TSETTLE_HIGH 0x00 0
USB3_UNI_QSERDES_RX_RX_IDAC_TSETTLE_LOW 0xc0 0
- USB3_UNI_QSERDES_RX_DFE_CTLE_POST_CAL_OFFSET 0x00 0
+ USB3_UNI_QSERDES_RX_DFE_CTLE_POST_CAL_OFFSET 0x38 0
USB3_UNI_QSERDES_RX_UCDR_SO_GAIN 0x06 0
USB3_UNI_QSERDES_RX_DCC_CTRL1 0x0c 0
USB3_UNI_QSERDES_RX_GM_CAL 0x1f 0
USB3_UNI_QSERDES_TX_RCV_DETECT_LVL_2 0x12 0
USB3_UNI_QSERDES_TX_LANE_MODE_1 0xd5 0
- USB3_UNI_QSERDES_TX_PI_QEC_CTRL 0x20 0
+ USB3_UNI_QSERDES_TX_PI_QEC_CTRL 0x40 0
USB3_UNI_QSERDES_TX_RES_CODE_LANE_OFFSET_TX 0x08 0
USB3_UNI_PCS_LOCK_DETECT_CONFIG1 0xd0 0
USB3_UNI_PCS_LOCK_DETECT_CONFIG2 0x07 0
diff --git a/arch/arm64/boot/dts/qcom/sm8150-sdxprairie.dtsi b/arch/arm64/boot/dts/qcom/sm8150-sdxprairie.dtsi
index 19e713a..f3a2c94 100644
--- a/arch/arm64/boot/dts/qcom/sm8150-sdxprairie.dtsi
+++ b/arch/arm64/boot/dts/qcom/sm8150-sdxprairie.dtsi
@@ -11,6 +11,7 @@
*/
#include <dt-bindings/thermal/qmi_thermal.h>
+#include <dt-bindings/msm/msm-bus-ids.h>
&mdm3 {
compatible = "qcom,ext-sdxprairie";
@@ -128,9 +129,64 @@
qcom,testbus-collection-on-crash;
qcom,non-tn-collection-on-crash;
qcom,secure-debug-check-action = <0>;
+ qcom,msm-bus,name = "ipa";
+ qcom,msm-bus,num-cases = <5>;
+ qcom,msm-bus,num-paths = <6>;
+ qcom,msm-bus,vectors-KBps =
+ /* No vote */
+ <MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_SNOC_GEM_NOC_SF 0 0>,
+ <MSM_BUS_MASTER_SNOC_SF_MEM_NOC MSM_BUS_SLAVE_LLCC 0 0>,
+ <MSM_BUS_MASTER_LLCC MSM_BUS_SLAVE_EBI_CH0 0 0>,
+ <MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_OCIMEM 0 0>,
+ <MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_IPA_CFG 0 0>,
+ <MSM_BUS_MASTER_IPA_CORE MSM_BUS_SLAVE_IPA_CORE 0 0>,
+
+ /* SVS2 */
+ <MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_SNOC_GEM_NOC_SF
+ 150000 1590000>,
+ <MSM_BUS_MASTER_SNOC_SF_MEM_NOC MSM_BUS_SLAVE_LLCC
+ 150000 4789750>,
+ <MSM_BUS_MASTER_LLCC MSM_BUS_SLAVE_EBI_CH0 150000 1800000>,
+ <MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_OCIMEM 80000 350000>,
+ <MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_IPA_CFG 40000 40000>,
+ <MSM_BUS_MASTER_IPA_CORE MSM_BUS_SLAVE_IPA_CORE 0 125>,
+
+ /* SVS */
+ <MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_SNOC_GEM_NOC_SF
+ 150000 3180000>,
+ <MSM_BUS_MASTER_SNOC_SF_MEM_NOC MSM_BUS_SLAVE_LLCC
+ 150000 7429000>,
+ <MSM_BUS_MASTER_LLCC MSM_BUS_SLAVE_EBI_CH0 625000 3070000>,
+ <MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_OCIMEM 80000 640000>,
+ <MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_IPA_CFG 80000 80000>,
+ <MSM_BUS_MASTER_IPA_CORE MSM_BUS_SLAVE_IPA_CORE 0 250>,
+
+ /* NOMINAL */
+ <MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_SNOC_GEM_NOC_SF
+ 150000 6413000>,
+ <MSM_BUS_MASTER_SNOC_SF_MEM_NOC MSM_BUS_SLAVE_LLCC
+ 150000 8797500>,
+ <MSM_BUS_MASTER_LLCC MSM_BUS_SLAVE_EBI_CH0 1250000 6220000>,
+ <MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_OCIMEM 206000 960000>,
+ <MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_IPA_CFG 206000 160000>,
+ <MSM_BUS_MASTER_IPA_CORE MSM_BUS_SLAVE_IPA_CORE 0 500>,
+
+ /* TURBO */
+ <MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_SNOC_GEM_NOC_SF
+ 150000 8480000>,
+ <MSM_BUS_MASTER_SNOC_SF_MEM_NOC MSM_BUS_SLAVE_LLCC
+ 150000 15640000>,
+ <MSM_BUS_MASTER_LLCC MSM_BUS_SLAVE_EBI_CH0 2000000 7219000>,
+ <MSM_BUS_MASTER_IPA MSM_BUS_SLAVE_OCIMEM 206000 1600000>,
+ <MSM_BUS_MASTER_AMPSS_M0 MSM_BUS_SLAVE_IPA_CFG 206000 300000>,
+ <MSM_BUS_MASTER_IPA_CORE MSM_BUS_SLAVE_IPA_CORE 0 600>;
+
+ qcom,bus-vector-names = "MIN", "SVS2", "SVS", "NOMINAL",
+ "TURBO";
qcom,throughput-threshold = <600 2500 5000>;
- qcom,scaling-exceptions = "USB DPL", "0", "2500",
- "5000", "ODL", "0", "2500", "5000";
+ qcom,scaling-exceptions = "wdi", "0", "600", "1200",
+ "USB DPL", "0", "2500", "5000", "ODL", "0",
+ "2500", "5000";
};
qcom,ipa_fws {
diff --git a/drivers/clk/qcom/mdss/mdss-dsi-pll-10nm.c b/drivers/clk/qcom/mdss/mdss-dsi-pll-10nm.c
index ea69a14..a220506 100644
--- a/drivers/clk/qcom/mdss/mdss-dsi-pll-10nm.c
+++ b/drivers/clk/qcom/mdss/mdss-dsi-pll-10nm.c
@@ -410,7 +410,7 @@ static void dsi_pll_config_slave(struct mdss_pll_resources *rsc)
rsc->slave = NULL;
if (!orsc) {
- pr_warn("slave PLL unavilable, assuming standalone config\n");
+ pr_debug("slave PLL unavilable, assuming standalone config\n");
return;
}
diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
index 78fd2b6..7bde6c1 100644
--- a/drivers/gpu/drm/msm/dp/dp_display.c
+++ b/drivers/gpu/drm/msm/dp/dp_display.c
@@ -401,7 +401,8 @@ static void dp_display_hdcp_cb_work(struct work_struct *work)
dp_display_update_hdcp_status(dp, false);
- if (dp->debug->force_encryption && ops && ops->force_encryption)
+ if (status->hdcp_state != HDCP_STATE_AUTHENTICATED &&
+ dp->debug->force_encryption && ops && ops->force_encryption)
ops->force_encryption(data, dp->debug->force_encryption);
switch (status->hdcp_state) {
diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_display.c b/drivers/gpu/drm/msm/dsi-staging/dsi_display.c
index a4c4e95..c6b2d35 100644
--- a/drivers/gpu/drm/msm/dsi-staging/dsi_display.c
+++ b/drivers/gpu/drm/msm/dsi-staging/dsi_display.c
@@ -3648,7 +3648,7 @@ static int dsi_display_res_init(struct dsi_display *display)
display->panel = dsi_panel_get(&display->pdev->dev,
display->panel_of,
display->parser_node,
- display->display_type,
+ display->dsi_type,
display->cmdline_topology);
if (IS_ERR_OR_NULL(display->panel)) {
rc = PTR_ERR(display->panel);
@@ -5271,7 +5271,6 @@ int dsi_display_dev_probe(struct platform_device *pdev)
for (i = 0; i < count; i++) {
struct device_node *np;
- const char *disp_type = NULL;
np = of_parse_phandle(node, disp_list, i);
name = of_get_property(np, "label", NULL);
@@ -5280,16 +5279,6 @@ int dsi_display_dev_probe(struct platform_device *pdev)
continue;
}
- disp_type = of_get_property(np, "qcom,display-type", NULL);
- if (!disp_type) {
- pr_err("display type not defined for %s\n", name);
- continue;
- }
-
- /* primary/secondary display should match with current dsi */
- if (strcmp(dsi_type, disp_type))
- continue;
-
if (boot_disp->boot_disp_en) {
if (!strcmp(boot_disp->name, name)) {
disp_node = np;
@@ -5319,6 +5308,7 @@ int dsi_display_dev_probe(struct platform_device *pdev)
display->name = name;
display->pdev = pdev;
display->boot_disp = boot_disp;
+ display->dsi_type = dsi_type;
dsi_display_parse_cmdline_topology(display, index);
@@ -5545,7 +5535,7 @@ static int dsi_display_ext_get_info(struct drm_connector *connector,
info->is_connected = connector->status != connector_status_disconnected;
- if (!strcmp(display->display_type, "primary"))
+ if (!strcmp(display->dsi_type, "primary"))
info->is_primary = true;
else
info->is_primary = false;
@@ -5901,7 +5891,7 @@ int dsi_display_get_info(struct drm_connector *connector,
info->is_connected = true;
info->is_primary = false;
- if (!strcmp(display->display_type, "primary"))
+ if (!strcmp(display->dsi_type, "primary"))
info->is_primary = true;
info->width_mm = phy_props.panel_width_mm;
diff --git a/drivers/gpu/drm/msm/dsi-staging/dsi_display.h b/drivers/gpu/drm/msm/dsi-staging/dsi_display.h
index 4cf3ceb..b4a5cf9 100644
--- a/drivers/gpu/drm/msm/dsi-staging/dsi_display.h
+++ b/drivers/gpu/drm/msm/dsi-staging/dsi_display.h
@@ -146,6 +146,7 @@ struct dsi_display_ext_bridge {
* @ext_conn: Pointer to external connector attached to DSI connector
* @name: Name of the display.
* @display_type: Display type as defined in device tree.
+ * @dsi_type: Display label as defined in device tree.
* @list: List pointer.
* @is_active: Is display active.
* @is_cont_splash_enabled: Is continuous splash enabled
@@ -196,6 +197,7 @@ struct dsi_display {
const char *name;
const char *display_type;
+ const char *dsi_type;
struct list_head list;
bool is_cont_splash_enabled;
bool sw_te_using_wd;
diff --git a/drivers/gpu/drm/msm/sde/sde_connector.c b/drivers/gpu/drm/msm/sde/sde_connector.c
index 18ce981..5dad84b 100644
--- a/drivers/gpu/drm/msm/sde/sde_connector.c
+++ b/drivers/gpu/drm/msm/sde/sde_connector.c
@@ -135,7 +135,7 @@ static int sde_backlight_setup(struct sde_connector *c_conn,
if (!c_conn || !dev || !dev->dev) {
SDE_ERROR("invalid param\n");
return -EINVAL;
- } else if (c_conn->connector_type != DRM_MODE_CONNECTOR_DSI) {
+ } else if (!c_conn->ops.set_backlight) {
return 0;
}
diff --git a/drivers/gpu/drm/msm/sde/sde_encoder.c b/drivers/gpu/drm/msm/sde/sde_encoder.c
index be06c3c..3ddc4bf 100644
--- a/drivers/gpu/drm/msm/sde/sde_encoder.c
+++ b/drivers/gpu/drm/msm/sde/sde_encoder.c
@@ -5376,7 +5376,7 @@ struct drm_encoder *sde_encoder_init_with_ops(
snprintf(name, SDE_NAME_SIZE, "rsc_enc%u", drm_enc->base.id);
sde_enc->rsc_client = sde_rsc_client_create(SDE_RSC_INDEX, name,
disp_info->is_primary ? SDE_RSC_PRIMARY_DISP_CLIENT :
- SDE_RSC_EXTERNAL_DISP_CLIENT, intf_index);
+ SDE_RSC_EXTERNAL_DISP_CLIENT, intf_index + 1);
if (IS_ERR_OR_NULL(sde_enc->rsc_client)) {
SDE_DEBUG("sde rsc client create failed :%ld\n",
PTR_ERR(sde_enc->rsc_client));
diff --git a/drivers/gpu/drm/msm/sde_hdcp_1x.c b/drivers/gpu/drm/msm/sde_hdcp_1x.c
index 36484b2..6f3339e 100644
--- a/drivers/gpu/drm/msm/sde_hdcp_1x.c
+++ b/drivers/gpu/drm/msm/sde_hdcp_1x.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2010-2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2010-2019, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -214,6 +214,7 @@ struct sde_hdcp_1x {
bool sink_r0_ready;
bool reauth;
bool ksv_ready;
+ bool force_encryption;
enum sde_hdcp_state hdcp_state;
struct HDCP_V2V1_MSG_TOPOLOGY current_tp;
struct delayed_work hdcp_auth_work;
@@ -1078,10 +1079,13 @@ static void sde_hdcp_1x_auth_work(struct work_struct *work)
}
/*
- * program hw to enable encryption as soon as
- * authentication is successful.
+ * Program h/w to enable encryption as soon as authentication is
+ * successful. This is applicable for HDMI sinks and HDCP 1.x compliance
+ * test cases.
*/
- hdcp1_set_enc(hdcp->hdcp1_handle, true);
+ if (hdcp->init_data.client_id == HDCP_CLIENT_HDMI ||
+ hdcp->force_encryption)
+ hdcp1_set_enc(hdcp->hdcp1_handle, true);
rc = sde_hdcp_1x_authentication_part1(hdcp);
if (rc)
@@ -1238,7 +1242,9 @@ static void sde_hdcp_1x_off(void *input)
pr_debug("%s: Deleted hdcp auth work\n",
SDE_HDCP_STATE_NAME);
- hdcp1_set_enc(hdcp->hdcp1_handle, false);
+ if (hdcp->init_data.client_id == HDCP_CLIENT_HDMI ||
+ hdcp->force_encryption)
+ hdcp1_set_enc(hdcp->hdcp1_handle, false);
reg = DSS_REG_R(io, reg_set->reset);
DSS_REG_W(io, reg_set->reset, reg | reg_set->reset_bit);
@@ -1367,6 +1373,18 @@ static bool sde_hdcp_1x_feature_supported(void *input)
return feature_supported;
}
+static void sde_hdcp_1x_force_encryption(void *input, bool enable)
+{
+ struct sde_hdcp_1x *hdcp = (struct sde_hdcp_1x *)input;
+
+ if (!hdcp) {
+ pr_err("invalid input\n");
+ return;
+ }
+ hdcp->force_encryption = enable;
+ pr_info("force_encryption=%d\n", hdcp->force_encryption);
+}
+
static bool sde_hdcp_1x_sink_support(void *input)
{
return true;
@@ -1490,6 +1508,7 @@ void *sde_hdcp_1x_init(struct sde_hdcp_init_data *init_data)
.reauthenticate = sde_hdcp_1x_reauthenticate,
.authenticate = sde_hdcp_1x_authenticate,
.feature_supported = sde_hdcp_1x_feature_supported,
+ .force_encryption = sde_hdcp_1x_force_encryption,
.sink_support = sde_hdcp_1x_sink_support,
.off = sde_hdcp_1x_off
};
@@ -1534,6 +1553,7 @@ void *sde_hdcp_1x_init(struct sde_hdcp_init_data *init_data)
hdcp->hdcp_state = HDCP_STATE_INACTIVE;
init_completion(&hdcp->r0_checked);
init_completion(&hdcp->sink_r0_available);
+ hdcp->force_encryption = false;
pr_debug("HDCP module initialized. HDCP_STATE=%s\n",
SDE_HDCP_STATE_NAME);
diff --git a/drivers/gpu/drm/msm/sde_rsc.c b/drivers/gpu/drm/msm/sde_rsc.c
index 674fbff..8f725ee 100644
--- a/drivers/gpu/drm/msm/sde_rsc.c
+++ b/drivers/gpu/drm/msm/sde_rsc.c
@@ -1097,7 +1097,9 @@ int sde_rsc_client_trigger_vote(struct sde_rsc_client *caller_client,
rpmh_flush(rsc->disp_rsc);
}
- if (rsc->hw_ops.bwi_status && rsc->current_state == SDE_RSC_CMD_STATE)
+ if (rsc->hw_ops.bwi_status &&
+ (rsc->current_state == SDE_RSC_CMD_STATE ||
+ rsc->current_state == SDE_RSC_VID_STATE))
rsc->hw_ops.bwi_status(rsc, bw_increase);
else if (rsc->hw_ops.tcs_use_ok)
rsc->hw_ops.tcs_use_ok(rsc);
diff --git a/drivers/gpu/drm/msm/shd/shd_drm.c b/drivers/gpu/drm/msm/shd/shd_drm.c
index 738ba98..58ce011 100644
--- a/drivers/gpu/drm/msm/shd/shd_drm.c
+++ b/drivers/gpu/drm/msm/shd/shd_drm.c
@@ -335,6 +335,7 @@ static void shd_display_disable_base(struct drm_device *dev,
base->enabled = false;
base->connector->state->crtc = NULL;
+ base->connector->state->best_encoder = NULL;
drm_connector_put(base->connector);
}
@@ -687,6 +688,9 @@ static int shd_conn_set_info_blob(struct drm_connector *connector,
sde_kms_info_add_keyint(info, "max_blendstages",
shd_display->stage_range.size);
+ sde_kms_info_add_keystr(info, "display type",
+ shd_display->display_type);
+
return 0;
}
@@ -1120,6 +1124,11 @@ static int shd_parse_display(struct shd_display *display)
display->stage_range.start,
display->stage_range.size);
+ display->display_type = of_get_property(of_node,
+ "qcom,display-type", NULL);
+ if (!display->display_type)
+ display->display_type = "unknown";
+
error:
return rc;
}
diff --git a/drivers/gpu/drm/msm/shd/shd_drm.h b/drivers/gpu/drm/msm/shd/shd_drm.h
index 03aa95e..35a9278 100644
--- a/drivers/gpu/drm/msm/shd/shd_drm.h
+++ b/drivers/gpu/drm/msm/shd/shd_drm.h
@@ -53,6 +53,7 @@ struct shd_display_base {
struct shd_display {
struct drm_device *drm_dev;
const char *name;
+ const char *display_type;
struct shd_display_base *base;
struct drm_bridge *bridge;
diff --git a/drivers/gpu/drm/msm/shd/shd_hw.c b/drivers/gpu/drm/msm/shd/shd_hw.c
index 6d11f25..1f6bd58 100644
--- a/drivers/gpu/drm/msm/shd/shd_hw.c
+++ b/drivers/gpu/drm/msm/shd/shd_hw.c
@@ -103,7 +103,6 @@ static void _sde_shd_hw_ctl_clear_blendstages_in_range(
u32 mixermask[4] = {0, 0, 0, 0};
u32 start = hw_ctl->range.start + SDE_STAGE_0;
u32 end = start + hw_ctl->range.size;
- int pipes_per_stage;
int i, j;
u32 value, mask;
const struct ctl_sspp_stage_reg_map *sspp_cfg;
@@ -117,14 +116,8 @@ static void _sde_shd_hw_ctl_clear_blendstages_in_range(
mixercfg[1] | mixercfg[2] | mixercfg[3]))
goto end;
- if (test_bit(SDE_MIXER_SOURCESPLIT,
- &ctx->mixer_hw_caps->features))
- pipes_per_stage = PIPES_PER_STAGE;
- else
- pipes_per_stage = 1;
-
for (i = 1; i < SSPP_MAX; i++) {
- for (j = 0 ; j < pipes_per_stage; j++) {
+ for (j = 0 ; j < CTL_SSPP_MAX_RECTS; j++) {
sspp_cfg = &sspp_reg_cfg_tbl[i][j];
if (!sspp_cfg->bits)
continue;
diff --git a/drivers/md/dm-ioctl.c b/drivers/md/dm-ioctl.c
index 33d6011..787afba 100644
--- a/drivers/md/dm-ioctl.c
+++ b/drivers/md/dm-ioctl.c
@@ -6,7 +6,6 @@
*/
#include "dm-core.h"
-#include "dm-ioctrl.h"
#include <linux/module.h>
#include <linux/vmalloc.h>
@@ -2057,37 +2056,3 @@ int dm_copy_name_and_uuid(struct mapped_device *md, char *name, char *uuid)
return r;
}
-
-int __init dm_ioctrl(uint cmd, struct dm_ioctl *param)
-{
- int r = 0;
- int ioctl_flags;
- ioctl_fn fn = NULL;
- size_t input_param_size;
-
- /*
- * Nothing more to do for the version command.
- */
- if (cmd == DM_VERSION_CMD)
- return 0;
-
- DMDEBUG("dm_ctl_ioctl: command 0x%x", cmd);
-
- fn = lookup_ioctl(cmd, &ioctl_flags);
- if (!fn) {
- DMWARN("dm_ctl_ioctl: unknown command 0x%x", cmd);
- return -ENOTTY;
- }
-
- input_param_size = param->data_size;
- param->data_size = sizeof(*param);
-
- r = fn(NULL, param, input_param_size);
-
- if (unlikely(param->flags & DM_BUFFER_FULL_FLAG) &&
- unlikely(ioctl_flags & IOCTL_FLAGS_NO_PARAMS))
- DMERR("ioctl %d but has IOCTL_FLAGS_NO_PARAMS set", cmd);
-
- return r;
-}
-EXPORT_SYMBOL(dm_ioctrl);
diff --git a/drivers/misc/qseecom.c b/drivers/misc/qseecom.c
index 8f3ccf8f..cc1f2ce 100644
--- a/drivers/misc/qseecom.c
+++ b/drivers/misc/qseecom.c
@@ -7641,6 +7641,13 @@ static long qseecom_ioctl(struct file *file,
break;
}
case QSEECOM_IOCTL_APP_LOADED_QUERY_REQ: {
+ if ((data->type != QSEECOM_GENERIC) &&
+ (data->type != QSEECOM_CLIENT_APP)) {
+ pr_err("app loaded query req: invalid handle (%d)\n",
+ data->type);
+ ret = -EINVAL;
+ break;
+ }
data->type = QSEECOM_CLIENT_APP;
mutex_lock(&app_access_lock);
atomic_inc(&data->ioctl_count);
diff --git a/drivers/video/fbdev/msm/mdss_qpic.c b/drivers/video/fbdev/msm/mdss_qpic.c
index aa8d783..c15f017 100644
--- a/drivers/video/fbdev/msm/mdss_qpic.c
+++ b/drivers/video/fbdev/msm/mdss_qpic.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2016, 2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2016, 2018-2019, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -28,7 +28,6 @@
#include <linux/uaccess.h>
#include <linux/bootmem.h>
#include <linux/dma-mapping.h>
-#include <linux/clk/msm-clk.h>
#include <linux/msm-sps.h>
#include <linux/msm-bus.h>
@@ -305,7 +304,7 @@ int qpic_init_sps(struct platform_device *pdev,
sps_config->source = SPS_DEV_HANDLE_MEM;
sps_config->destination = bam_handle;
sps_config->mode = SPS_MODE_DEST;
- sps_config->dest_pipe_index = 6;
+ sps_config->dest_pipe_index = 8;
sps_config->options = SPS_O_AUTO_ENABLE | SPS_O_EOT;
sps_config->lock_group = 0;
diff --git a/drivers/video/fbdev/msm/mdss_qpic_panel.c b/drivers/video/fbdev/msm/mdss_qpic_panel.c
index 3637716..98bbb37 100644
--- a/drivers/video/fbdev/msm/mdss_qpic_panel.c
+++ b/drivers/video/fbdev/msm/mdss_qpic_panel.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2014-2015, 2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2014-2015, 2018-2019, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -15,7 +15,6 @@
#include <linux/of.h>
#include <linux/of_gpio.h>
#include <linux/gpio.h>
-#include <linux/qpnp/pin.h>
#include <linux/delay.h>
#include <linux/slab.h>
#include <linux/leds.h>
diff --git a/drivers/video/fbdev/msm/qpic_panel_ili_qvga.c b/drivers/video/fbdev/msm/qpic_panel_ili_qvga.c
index d644f4f..98d79cb 100644
--- a/drivers/video/fbdev/msm/qpic_panel_ili_qvga.c
+++ b/drivers/video/fbdev/msm/qpic_panel_ili_qvga.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013-2015, 2018, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2015, 2018-2019, The Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -217,6 +217,11 @@ static int mdss_qpic_pinctrl_set_state(struct qpic_panel_io_desc *qpic_panel_io,
if (IS_ERR_OR_NULL(qpic_panel_io->pin_res.pinctrl))
return PTR_ERR(qpic_panel_io->pin_res.pinctrl);
+ if (active)
+ gpio_direction_output(qpic_panel_io->bl_gpio, 1);
+ else
+ gpio_direction_output(qpic_panel_io->bl_gpio, 0);
+
pin_state = active ? qpic_panel_io->pin_res.gpio_state_active
: qpic_panel_io->pin_res.gpio_state_suspend;
if (!IS_ERR_OR_NULL(pin_state)) {
diff --git a/init/Makefile b/init/Makefile
index 00b39d4..0320e1a 100644
--- a/init/Makefile
+++ b/init/Makefile
@@ -19,7 +19,6 @@
mounts-$(CONFIG_BLK_DEV_INITRD) += do_mounts_initrd.o
mounts-$(CONFIG_BLK_DEV_MD) += do_mounts_md.o
mounts-$(CONFIG_BLK_DEV_DM) += do_mounts_dm.o
-mounts-$(CONFIG_BLK_DEV_DM) += do_mounts_verity.o
# dependencies on generated files need to be listed explicitly
$(obj)/version.o: include/generated/compile.h
diff --git a/init/do_mounts.c b/init/do_mounts.c
index f44460b..ca5de99 100644
--- a/init/do_mounts.c
+++ b/init/do_mounts.c
@@ -576,7 +576,6 @@ void __init prepare_namespace(void)
md_run_setup();
dm_run_setup();
- dm_verity_setup();
if (saved_root_name[0]) {
root_device_name = saved_root_name;
diff --git a/init/do_mounts.h b/init/do_mounts.h
index 9dfd413..cd20112 100644
--- a/init/do_mounts.h
+++ b/init/do_mounts.h
@@ -8,8 +8,6 @@
#include <linux/mount.h>
#include <linux/major.h>
#include <linux/root_dev.h>
-#include "uapi/linux/dm-ioctl.h"
-#include <linux/device-mapper.h>
void change_floppy(char *fmt, ...);
void mount_block_root(char *name, int flags);
@@ -73,15 +71,3 @@ void dm_run_setup(void);
static inline void dm_run_setup(void) {}
#endif
-
-#ifdef CONFIG_BLK_DEV_DM
-
-void dm_verity_setup(void);
-extern int dm_ioctrl(uint cmd, struct dm_ioctl *param);
-extern void dm_table_destroy(struct dm_table *t);
-
-#else
-
-static inline void dm_verity_setup(void) {}
-
-#endif
diff --git a/init/do_mounts_verity.c b/init/do_mounts_verity.c
deleted file mode 100644
index aa5893d..0000000
--- a/init/do_mounts_verity.c
+++ /dev/null
@@ -1,193 +0,0 @@
-/* Copyright (c) 2019, The Linux Foundation. All rights reserved.
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 and
- * only version 2 as published by the Free Software Foundation.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- */
-
-#include <linux/device-mapper.h>
-#include <linux/fs.h>
-#include <linux/string.h>
-#include "uapi/linux/dm-ioctl.h"
-#include <linux/of_device.h>
-#include <linux/of_platform.h>
-#include "do_mounts.h"
-
-#define DM_BUF_SIZE 4096
-
-#define DM_MSG_PREFIX "verity"
-
-static void __init init_param(struct dm_ioctl *param, const char *name)
-{
- memset(param, 0, DM_BUF_SIZE);
- param->data_size = DM_BUF_SIZE;
- param->data_start = sizeof(struct dm_ioctl);
- param->version[0] = 4;
- param->version[1] = 0;
- param->version[2] = 0;
- param->flags = DM_READONLY_FLAG;
- strlcpy(param->name, name, sizeof(param->name));
-}
-
-static void __init dm_setup_drive(void)
-{
- struct device_node *dt_node;
- const char *name;
- const char *version;
- const char *data_device;
- const char *hash_device;
- const char *data_block_size;
- const char *hash_block_size;
- const char *number_of_data_blocks;
- const char *hash_start_block;
- const char *algorithm;
- const char *digest;
- const char *salt;
- const char *opt;
- int len;
- unsigned long long data_blocks;
- char dummy;
- char *verity_params;
- size_t bufsize;
- char *buffer = kzalloc(DM_BUF_SIZE, GFP_KERNEL);
- struct dm_ioctl *param = (struct dm_ioctl *) buffer;
- size_t dm_sz = sizeof(struct dm_ioctl);
- struct dm_target_spec *tgt = (struct dm_target_spec *) &buffer[dm_sz];
-
- if (!buffer)
- goto fail;
- dt_node = of_find_node_by_path("/soc/dm_verity");
- if (!dt_node) {
- DMERR("(E) Failed to find device-tree node: /soc/dm_verity");
- goto fail;
- }
-
- name = of_get_property(dt_node, "dmname", &len);
- if (name == NULL)
- goto fail;
- DMDEBUG("(I) name=%s", name);
-
- if (strcmp(name, "disabled") == 0) {
- pr_info("dm: dm-verity is disabled.");
- kfree(buffer);
- return;
- }
-
- version = of_get_property(dt_node, "version", &len);
- if (version == NULL)
- goto fail;
- DMDEBUG("(I) version=%s", version);
-
- data_device = of_get_property(dt_node, "data_device", &len);
- if (data_device == NULL)
- goto fail;
- DMDEBUG("(I) data_device=%s", data_device);
-
- hash_device = of_get_property(dt_node, "hash_device", &len);
- if (hash_device == NULL)
- goto fail;
- DMDEBUG("(I) hash_device=%s", hash_device);
-
- data_block_size = of_get_property(dt_node, "data_block_size", &len);
- if (data_block_size == NULL)
- goto fail;
- DMDEBUG("(I) data_block_size=%s", data_block_size);
-
- hash_block_size = of_get_property(dt_node, "hash_block_size", &len);
- if (hash_block_size == NULL)
- goto fail;
- DMDEBUG("(I) hash_block_size=%s", hash_block_size);
-
- number_of_data_blocks = of_get_property(dt_node,
- "number_of_data_blocks",
- &len);
- if (number_of_data_blocks == NULL)
- goto fail;
- DMDEBUG("(I) number_of_data_blocks=%s", number_of_data_blocks);
-
- hash_start_block = of_get_property(dt_node, "hash_start_block", &len);
- if (hash_start_block == NULL)
- goto fail;
- DMDEBUG("(I) hash_start_block=%s", hash_start_block);
-
- algorithm = of_get_property(dt_node, "algorithm", &len);
- if (algorithm == NULL)
- goto fail;
- DMDEBUG("(I) algorithm=%s", algorithm);
-
- digest = of_get_property(dt_node, "digest", &len);
- if (digest == NULL)
- goto fail;
- DMDEBUG("(I) digest=%s", digest);
-
- salt = of_get_property(dt_node, "salt", &len);
- if (salt == NULL)
- goto fail;
- DMDEBUG("(I) salt=%s", salt);
-
- opt = of_get_property(dt_node, "opt", &len);
- if (opt == NULL)
- goto fail;
- DMDEBUG("(I) opt=%s", opt);
-
- init_param(param, name);
- if (dm_ioctrl(DM_DEV_CREATE_CMD, param)) {
- DMERR("(E) failed to create the device");
- goto fail;
- }
-
- init_param(param, name);
- param->target_count = 1;
- /* set tgt arguments */
- tgt->status = 0;
- tgt->sector_start = 0;
- if (sscanf(number_of_data_blocks, "%llu%c", &data_blocks, &dummy) != 1)
- goto fail;
-
- tgt->length = data_blocks*4096/512; /* size in sector of data dev */
- strlcpy(tgt->target_type, "verity", sizeof(tgt->target_type));
- /* build the verity params here */
- verity_params = buffer + dm_sz + sizeof(struct dm_target_spec);
- bufsize = DM_BUF_SIZE - (verity_params - buffer);
-
- verity_params += snprintf(verity_params, bufsize,
- "%s %s %s %s %s %s %s %s %s %s 1 %s",
- version,
- data_device, hash_device,
- data_block_size, hash_block_size,
- number_of_data_blocks, hash_start_block,
- algorithm, digest, salt, opt);
-
- tgt->next = verity_params - buffer;
- if (dm_ioctrl(DM_TABLE_LOAD_CMD, param)) {
- DMERR("(E) failed to load the device");
- goto fail;
- }
-
- init_param(param, name);
- if (dm_ioctrl(DM_DEV_SUSPEND_CMD, param)) {
- DMERR("(E) failed to suspend the device");
- goto fail;
- }
-
- pr_info("dm: dm-0 (%s) is ready", data_device);
- kfree(buffer);
- return;
-
-fail:
- pr_info("dm: starting dm-0 failed");
- kfree(buffer);
- return;
-
-}
-
-void __init dm_verity_setup(void)
-{
- pr_info("dm: attempting early device configuration.");
- dm_setup_drive();
-}
diff --git a/sound/soc/Kconfig b/sound/soc/Kconfig
index 8c2096f..42d251e 100644
--- a/sound/soc/Kconfig
+++ b/sound/soc/Kconfig
@@ -7,6 +7,7 @@
select SND_PCM
select AC97_BUS if SND_SOC_AC97_BUS
select SND_JACK
+ select SND_TIMER
select SND_HWDEP
select SND_SOC_COMPRESS
select REGMAP_I2C if I2C