Merge "msm: camera: isp: validate in_port before accessing"
diff --git a/arch/arm64/boot/dts/qcom/msm-audio-lpass.dtsi b/arch/arm64/boot/dts/qcom/msm-audio-lpass.dtsi
index dcbfe47..bb05a2e 100644
--- a/arch/arm64/boot/dts/qcom/msm-audio-lpass.dtsi
+++ b/arch/arm64/boot/dts/qcom/msm-audio-lpass.dtsi
@@ -1,5 +1,5 @@
/*
- * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
+ * Copyright (c) 2016-2020, 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
@@ -286,6 +286,15 @@
compatible = "qcom,msm-dai-q6-dev";
qcom,msm-dai-q6-dev-id = <32770>;
};
+ proxy_rx: qcom,msm-dai-q6-proxy-rx {
+ compatible = "qcom,msm-dai-q6-dev";
+ qcom,msm-dai-q6-dev-id = <8194>;
+ };
+
+ proxy_tx: qcom,msm-dai-q6-proxy-tx {
+ compatible = "qcom,msm-dai-q6-dev";
+ qcom,msm-dai-q6-dev-id = <8195>;
+ };
usb_audio_rx: qcom,msm-dai-q6-usb-audio-rx {
compatible = "qcom,msm-dai-q6-dev";
diff --git a/arch/arm64/boot/dts/qcom/sda429-bg-dvt2-wtp-overlay.dts b/arch/arm64/boot/dts/qcom/sda429-bg-dvt2-wtp-overlay.dts
index eb9d5d4..78970d5 100644
--- a/arch/arm64/boot/dts/qcom/sda429-bg-dvt2-wtp-overlay.dts
+++ b/arch/arm64/boot/dts/qcom/sda429-bg-dvt2-wtp-overlay.dts
@@ -51,6 +51,36 @@
/delete-node/ qcom,panel-supply-entry@0;
};
+&i2c_4 {
+ status = "ok";
+ tsc@24 {
+ status = "disabled";
+ };
+
+ raydium_ts@39 {
+ compatible = "raydium,raydium-ts";
+ reg = <0x39>;
+ interrupt-parent = <&tlmm>;
+ interrupts = <13 0x2008>;
+ vdd_ana-supply = <&pm660_l11>;
+ vcc_i2c-supply = <&pm660_l13>;
+ pinctrl-names = "pmx_ts_active","pmx_ts_suspend",
+ "pmx_ts_release";
+ pinctrl-0 = <&ts_int_active &ts_reset_active>;
+ pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
+ pinctrl-2 = <&ts_release>;
+ raydium,reset-gpio = <&tlmm 64 0x00>;
+ raydium,irq-gpio = <&tlmm 65 0x00>;
+ raydium,num-max-touches = <2>;
+ raydium,soft-reset-delay-ms = <50>;
+ raydium,hard-reset-delay-ms = <100>;
+ raydium,x_max = <416>;
+ raydium,y_max = <416>;
+ raydium,display-coords= <0 0 416 416>;
+ raydium,fw_id = <0x2202>;
+ };
+};
+
&usb_otg {
HSUSB_3p3-supply = <&L16A>;
};
diff --git a/arch/arm64/boot/dts/qcom/sdm429-bg-dvt2-wtp-overlay.dts b/arch/arm64/boot/dts/qcom/sdm429-bg-dvt2-wtp-overlay.dts
index b2f9204..31d0c07b0 100644
--- a/arch/arm64/boot/dts/qcom/sdm429-bg-dvt2-wtp-overlay.dts
+++ b/arch/arm64/boot/dts/qcom/sdm429-bg-dvt2-wtp-overlay.dts
@@ -39,6 +39,36 @@
/delete-node/ qcom,panel-supply-entry@0;
};
+&i2c_4 {
+ status = "ok";
+ tsc@24 {
+ status = "disabled";
+ };
+
+ raydium_ts@39 {
+ compatible = "raydium,raydium-ts";
+ reg = <0x39>;
+ interrupt-parent = <&tlmm>;
+ interrupts = <13 0x2008>;
+ vdd_ana-supply = <&pm660_l11>;
+ vcc_i2c-supply = <&pm660_l13>;
+ pinctrl-names = "pmx_ts_active","pmx_ts_suspend",
+ "pmx_ts_release";
+ pinctrl-0 = <&ts_int_active &ts_reset_active>;
+ pinctrl-1 = <&ts_int_suspend &ts_reset_suspend>;
+ pinctrl-2 = <&ts_release>;
+ raydium,reset-gpio = <&tlmm 64 0x00>;
+ raydium,irq-gpio = <&tlmm 65 0x00>;
+ raydium,num-max-touches = <2>;
+ raydium,soft-reset-delay-ms = <50>;
+ raydium,hard-reset-delay-ms = <100>;
+ raydium,x_max = <416>;
+ raydium,y_max = <416>;
+ raydium,display-coords= <0 0 416 416>;
+ raydium,fw_id = <0x2202>;
+ };
+};
+
&usb_otg {
HSUSB_3p3-supply = <&L16A>;
};
diff --git a/arch/arm64/boot/dts/qcom/sdm670-audio.dtsi b/arch/arm64/boot/dts/qcom/sdm670-audio.dtsi
index 7990e91..8b46a2f 100644
--- a/arch/arm64/boot/dts/qcom/sdm670-audio.dtsi
+++ b/arch/arm64/boot/dts/qcom/sdm670-audio.dtsi
@@ -65,6 +65,7 @@
<&sb_4_rx>, <&sb_4_tx>, <&sb_5_rx>, <&sb_5_tx>,
<&sb_6_rx>, <&sb_7_rx>, <&sb_7_tx>,
<&sb_8_rx>, <&sb_8_tx>,
+ <&proxy_rx>, <&proxy_tx>,
<&afe_pcm_rx>, <&afe_pcm_tx>, <&afe_proxy_rx>,
<&afe_proxy_tx>, <&incall_record_rx>,
<&incall_record_tx>, <&incall_music_rx>,
@@ -92,6 +93,7 @@
"msm-dai-q6-dev.16396",
"msm-dai-q6-dev.16398", "msm-dai-q6-dev.16399",
"msm-dai-q6-dev.16400", "msm-dai-q6-dev.16401",
+ "msm-dai-q6-dev.8194", "msm-dai-q6-dev.8195",
"msm-dai-q6-dev.224", "msm-dai-q6-dev.225",
"msm-dai-q6-dev.241", "msm-dai-q6-dev.240",
"msm-dai-q6-dev.32771", "msm-dai-q6-dev.32772",
@@ -143,7 +145,8 @@
<&dai_sec_tdm_rx_0>, <&dai_sec_tdm_tx_0>,
<&dai_tert_tdm_rx_0>, <&dai_tert_tdm_tx_0>,
<&dai_quat_tdm_rx_0>, <&dai_quat_tdm_tx_0>,
- <&dai_quin_tdm_rx_0>, <&dai_quin_tdm_tx_0>;
+ <&dai_quin_tdm_rx_0>, <&dai_quin_tdm_tx_0>,
+ <&proxy_rx>, <&proxy_tx>;
asoc-cpu-names = "msm-dai-q6-mi2s.0", "msm-dai-q6-mi2s.1",
"msm-dai-q6-mi2s.2", "msm-dai-q6-mi2s.3",
"msm-dai-q6-mi2s.4",
@@ -168,7 +171,8 @@
"msm-dai-q6-tdm.36880", "msm-dai-q6-tdm.36881",
"msm-dai-q6-tdm.36896", "msm-dai-q6-tdm.36897",
"msm-dai-q6-tdm.36912", "msm-dai-q6-tdm.36913",
- "msm-dai-q6-tdm.36928", "msm-dai-q6-tdm.36929";
+ "msm-dai-q6-tdm.36928", "msm-dai-q6-tdm.36929",
+ "msm-dai-q6-dev.8194", "msm-dai-q6-dev.8195";
};
int_codec: sound {
@@ -208,7 +212,8 @@
<&dai_sec_tdm_rx_0>, <&dai_sec_tdm_tx_0>,
<&dai_tert_tdm_rx_0>, <&dai_tert_tdm_tx_0>,
<&dai_quat_tdm_rx_0>, <&dai_quat_tdm_tx_0>,
- <&dai_quin_tdm_rx_0>, <&dai_quin_tdm_tx_0>;
+ <&dai_quin_tdm_rx_0>, <&dai_quin_tdm_tx_0>,
+ <&proxy_rx>, <&proxy_tx>;
asoc-cpu-names = "msm-dai-q6-dp.24608",
"msm-dai-q6-mi2s.0","msm-dai-q6-mi2s.1",
"msm-dai-q6-mi2s.2", "msm-dai-q6-mi2s.3",
@@ -230,7 +235,8 @@
"msm-dai-q6-tdm.36880", "msm-dai-q6-tdm.36881",
"msm-dai-q6-tdm.36896", "msm-dai-q6-tdm.36897",
"msm-dai-q6-tdm.36912", "msm-dai-q6-tdm.36913",
- "msm-dai-q6-tdm.36928", "msm-dai-q6-tdm.36929";
+ "msm-dai-q6-tdm.36928", "msm-dai-q6-tdm.36929",
+ "msm-dai-q6-dev.8194", "msm-dai-q6-dev.8195";
};
cpe: qcom,msm-cpe-lsm {
diff --git a/drivers/bus/mhi/core/mhi_main.c b/drivers/bus/mhi/core/mhi_main.c
index 1b81eb8..0dfeff0 100644
--- a/drivers/bus/mhi/core/mhi_main.c
+++ b/drivers/bus/mhi/core/mhi_main.c
@@ -1049,7 +1049,9 @@
result.transaction_status = (ev_code == MHI_EV_CC_OVERFLOW) ?
-EOVERFLOW : 0;
- result.bytes_xferd = xfer_len;
+
+ /* truncate to buf len if xfer_len is larger */
+ result.bytes_xferd = min_t(u16, xfer_len, buf_info->len);
result.buf_addr = buf_info->cb_buf;
result.dir = mhi_chan->dir;
@@ -1287,7 +1289,7 @@
chan = MHI_TRE_GET_EV_CHID(local_rp);
if (chan >= mhi_cntrl->max_chan) {
MHI_ERR("invalid channel id %u\n", chan);
- continue;
+ goto next_er_element;
}
mhi_chan = &mhi_cntrl->mhi_chan[chan];
@@ -1299,6 +1301,7 @@
event_quota--;
}
+next_er_element:
mhi_recycle_ev_ring_element(mhi_cntrl, ev_ring);
local_rp = ev_ring->rp;
dev_rp = mhi_to_virtual(ev_ring, er_ctxt->rp);
diff --git a/drivers/input/misc/qti-haptics.c b/drivers/input/misc/qti-haptics.c
index a2c8e76..11d23e5 100644
--- a/drivers/input/misc/qti-haptics.c
+++ b/drivers/input/misc/qti-haptics.c
@@ -251,6 +251,13 @@
{REG_HAP_EN_CTL1, 0x80}, /* Enable haptics driver */
};
+static struct hap_addr_val twm_cfg[] = {
+ {REG_HAP_PLAY, 0x00}, /* Stop playing haptics waveform */
+ {REG_HAP_SEL, 0x00}, /* Configure for cmd mode */
+ {REG_HAP_EN_CTL1, 0x00}, /* Enable haptics driver */
+ {REG_HAP_PERPH_RESET_CTL3, 0x0D}, /* Disable SHUTDOWN1_RB reset */
+};
+
static int wf_repeat[8] = {1, 2, 4, 8, 16, 32, 64, 128};
static int wf_s_repeat[4] = {1, 2, 4, 8};
@@ -1058,20 +1065,30 @@
qti_haptics_config_vmax(chip, play->vmax_mv);
}
-static int qti_haptics_twm_config(struct qti_hap_chip *chip)
+static int qti_haptics_twm_config(struct qti_hap_chip *chip, bool ext_pin)
{
- int rc, i;
+ int rc = 0, i;
- for (i = 0; i < ARRAY_SIZE(twm_ext_cfg); i++) {
- rc = qti_haptics_write(chip, twm_ext_cfg[i].addr,
- &twm_ext_cfg[i].value, 1);
- if (rc < 0) {
- dev_err(chip->dev, "Haptics TWM config failed, rc=%d\n",
- rc);
- return rc;
+ if (ext_pin) {
+ for (i = 0; i < ARRAY_SIZE(twm_ext_cfg); i++) {
+ rc = qti_haptics_write(chip, twm_ext_cfg[i].addr,
+ &twm_ext_cfg[i].value, 1);
+ if (rc < 0)
+ break;
+ }
+ } else {
+ for (i = 0; i < ARRAY_SIZE(twm_cfg); i++) {
+ rc = qti_haptics_write(chip, twm_cfg[i].addr,
+ &twm_cfg[i].value, 1);
+ if (rc < 0)
+ break;
}
}
- pr_debug("Enabled haptics for TWM mode\n");
+
+ if (rc < 0)
+ pr_err("Failed to write twm_config rc=%d\n", rc);
+ else
+ pr_debug("Enabled haptics for TWM mode\n");
return 0;
}
@@ -2033,7 +2050,6 @@
{
struct qti_hap_chip *chip = dev_get_drvdata(&pdev->dev);
int rc;
- bool enable_haptics_twm;
dev_dbg(chip->dev, "Shutdown!\n");
@@ -2049,10 +2065,8 @@
chip->vdd_enabled = false;
}
- enable_haptics_twm = chip->haptics_ext_pin_twm && twm_sys_enable;
-
- if (chip->twm_state == PMIC_TWM_ENABLE && enable_haptics_twm) {
- rc = qti_haptics_twm_config(chip);
+ if (chip->twm_state == PMIC_TWM_ENABLE && twm_sys_enable) {
+ rc = qti_haptics_twm_config(chip, chip->haptics_ext_pin_twm);
if (rc < 0)
pr_err("Haptics TWM config failed rc=%d\n", rc);
}
diff --git a/drivers/net/wireless/cnss2/main.c b/drivers/net/wireless/cnss2/main.c
index 89d6e1c..c115a0e 100644
--- a/drivers/net/wireless/cnss2/main.c
+++ b/drivers/net/wireless/cnss2/main.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2016-2019, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2016-2020, 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
@@ -249,6 +249,8 @@
{
struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev);
int ret = 0;
+ if (!plat_priv)
+ return -ENODEV;
if (plat_priv->device_id == QCA6174_DEVICE_ID)
return 0;
@@ -281,6 +283,8 @@
int cnss_wlan_disable(struct device *dev, enum cnss_driver_mode mode)
{
struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev);
+ if (!plat_priv)
+ return -ENODEV;
if (plat_priv->device_id == QCA6174_DEVICE_ID)
return 0;
@@ -369,6 +373,8 @@
int cnss_set_fw_log_mode(struct device *dev, u8 fw_log_mode)
{
struct cnss_plat_data *plat_priv = cnss_bus_dev_to_plat_priv(dev);
+ if (!plat_priv)
+ return -ENODEV;
if (plat_priv->device_id == QCA6174_DEVICE_ID)
return 0;
diff --git a/drivers/soc/qcom/bgcom_spi.c b/drivers/soc/qcom/bgcom_spi.c
index a6a176a..ff07a32 100644
--- a/drivers/soc/qcom/bgcom_spi.c
+++ b/drivers/soc/qcom/bgcom_spi.c
@@ -1050,6 +1050,7 @@
{
struct bg_spi_priv *bg_spi = spi_get_drvdata(spi);
+ bg_com_drv = NULL;
mutex_destroy(&bg_spi->xfer_mutex);
devm_kfree(&spi->dev, bg_spi);
spi_set_drvdata(spi, NULL);
diff --git a/drivers/usb/dwc3/gadget.c b/drivers/usb/dwc3/gadget.c
index 2daa8ef..2ade984 100644
--- a/drivers/usb/dwc3/gadget.c
+++ b/drivers/usb/dwc3/gadget.c
@@ -3042,11 +3042,9 @@
if (!(dep->flags & DWC3_EP_ENABLED))
continue;
- if (dep->endpoint.ep_type == EP_TYPE_GSI && dep->direction)
- dwc3_notify_event(dwc,
- DWC3_CONTROLLER_NOTIFY_CLEAR_DB, 0);
dwc3_remove_requests(dwc, dep);
}
+ dwc3_notify_event(dwc, DWC3_CONTROLLER_NOTIFY_CLEAR_DB, 0);
dbg_log_string("DONE");
}
diff --git a/drivers/usb/gadget/configfs.c b/drivers/usb/gadget/configfs.c
index 1a7ebc5..625e44d 100755
--- a/drivers/usb/gadget/configfs.c
+++ b/drivers/usb/gadget/configfs.c
@@ -1496,6 +1496,8 @@
usb_ep_autoconfig_reset(cdev->gadget);
spin_lock_irqsave(&gi->spinlock, flags);
cdev->gadget = NULL;
+ cdev->deactivations = 0;
+ gadget->deactivated = false;
set_gadget_data(gadget, NULL);
spin_unlock_irqrestore(&gi->spinlock, flags);
}
diff --git a/drivers/usb/gadget/function/u_ether.c b/drivers/usb/gadget/function/u_ether.c
index c75e790..a0ad21f 100644
--- a/drivers/usb/gadget/function/u_ether.c
+++ b/drivers/usb/gadget/function/u_ether.c
@@ -550,7 +550,7 @@
while ((skb = skb_dequeue(&dev->rx_frames))) {
if (status < 0
|| ETH_HLEN > skb->len
- || skb->len > ETH_FRAME_LEN) {
+ || skb->len > GETHER_MAX_ETH_FRAME_LEN) {
dev->net->stats.rx_errors++;
dev->net->stats.rx_length_errors++;
DBG(dev, "rx length %d\n", skb->len);
diff --git a/drivers/video/fbdev/msm/mdss_fb.c b/drivers/video/fbdev/msm/mdss_fb.c
index d1bce46..b827eca 100644
--- a/drivers/video/fbdev/msm/mdss_fb.c
+++ b/drivers/video/fbdev/msm/mdss_fb.c
@@ -4470,7 +4470,6 @@
}
skip_retire_fence:
- mdss_get_sync_fence_fd(rel_fence);
mutex_unlock(&sync_pt_data->sync_mutex);
if (buf_sync->flags & MDP_BUF_SYNC_FLAG_WAIT)