Merge "wcnss: Fix for Static analysis issues"
diff --git a/arch/arm/boot/dts/msm8974.dtsi b/arch/arm/boot/dts/msm8974.dtsi
index f8c9b46..d27c146 100644
--- a/arch/arm/boot/dts/msm8974.dtsi
+++ b/arch/arm/boot/dts/msm8974.dtsi
@@ -1987,7 +1987,7 @@
gpios = <&msmgpio 36 0>, <&msmgpio 37 0>, <&msmgpio 38 0>, <&msmgpio 39 0>, <&msmgpio 40 0>;
qcom,has-48mhz-xo;
qcom,has-pronto-hw;
- qcom,wcnss-pm = <11 21 1200 1 1>;
+ qcom,wcnss-pm = <11 21 1200 1 1 6>;
};
qcom,ocmem@fdd00000 {
diff --git a/arch/arm/configs/msm8610-perf_defconfig b/arch/arm/configs/msm8610-perf_defconfig
index a521cbc..931b272 100644
--- a/arch/arm/configs/msm8610-perf_defconfig
+++ b/arch/arm/configs/msm8610-perf_defconfig
@@ -76,9 +76,7 @@
CONFIG_AEABI=y
CONFIG_HIGHMEM=y
CONFIG_COMPACTION=y
-CONFIG_KSM=y
CONFIG_CC_STACKPROTECTOR=y
-CONFIG_KSM=y
CONFIG_CP_ACCESS=y
CONFIG_USE_OF=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
diff --git a/arch/arm/configs/msm8610_defconfig b/arch/arm/configs/msm8610_defconfig
index 1f7fcbd..47df8f0 100644
--- a/arch/arm/configs/msm8610_defconfig
+++ b/arch/arm/configs/msm8610_defconfig
@@ -77,9 +77,7 @@
CONFIG_AEABI=y
CONFIG_HIGHMEM=y
CONFIG_COMPACTION=y
-CONFIG_KSM=y
CONFIG_CC_STACKPROTECTOR=y
-CONFIG_KSM=y
CONFIG_CP_ACCESS=y
CONFIG_USE_OF=y
CONFIG_CPU_FREQ_GOV_POWERSAVE=y
diff --git a/arch/arm/mach-msm/qdsp6v2/audio_utils.c b/arch/arm/mach-msm/qdsp6v2/audio_utils.c
index 109e120..7ccc0e3 100644
--- a/arch/arm/mach-msm/qdsp6v2/audio_utils.c
+++ b/arch/arm/mach-msm/qdsp6v2/audio_utils.c
@@ -24,9 +24,9 @@
#include "audio_utils.h"
#define MIN_FRAME_SIZE 1536
-#define NUM_FRAMES 5
-#define META_SIZE (sizeof(struct meta_out_dsp))
-#define FRAME_SIZE (1 + ((MIN_FRAME_SIZE + META_SIZE) * NUM_FRAMES))
+#define NUM_FRAMES 5
+#define META_SIZE (sizeof(struct meta_out_dsp))
+#define FRAME_SIZE (1 + ((MIN_FRAME_SIZE + META_SIZE) * NUM_FRAMES))
static int audio_in_pause(struct q6audio_in *audio)
{
diff --git a/drivers/gpu/msm/adreno_snapshot.c b/drivers/gpu/msm/adreno_snapshot.c
index bc37bf2..a11c63d 100644
--- a/drivers/gpu/msm/adreno_snapshot.c
+++ b/drivers/gpu/msm/adreno_snapshot.c
@@ -599,11 +599,8 @@
unsigned int gpuaddr = src[i + 1];
unsigned int size = src[i + 2];
- ret = parse_ib(device, ptbase, gpuaddr, size);
+ parse_ib(device, ptbase, gpuaddr, size);
- /* If adding the IB failed then stop parsing */
- if (ret < 0)
- goto done;
} else {
ret = ib_parse_type3(device, &src[i], ptbase);
/*
@@ -929,15 +926,16 @@
if ((obj->dwords - i) < type3_pkt_size(*src) + 1)
continue;
- if (adreno_cmd_is_ib(*src))
- ret = parse_ib(device, obj->ptbase, src[1],
+ if (adreno_cmd_is_ib(*src)) {
+ parse_ib(device, obj->ptbase, src[1],
src[2]);
- else
+ } else {
ret = ib_parse_type3(device, src, obj->ptbase);
- /* Stop parsing if the type3 decode fails */
- if (ret < 0)
- break;
+ /* Stop parsing if the type3 decode fails */
+ if (ret < 0)
+ break;
+ }
}
}
diff --git a/drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c b/drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c
index 8f99ff6..d044c1d 100755
--- a/drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c
+++ b/drivers/media/platform/msm/camera_v2/ispif/msm_ispif.c
@@ -60,8 +60,8 @@
static inline int msm_ispif_is_intf_valid(uint32_t csid_version,
uint8_t intf_type)
{
- return (csid_version <= CSID_VERSION_V22 && intf_type != VFE0) ?
- false : true;
+ return ((csid_version <= CSID_VERSION_V22 && intf_type != VFE0) ||
+ (intf_type >= VFE_MAX)) ? false : true;
}
static struct msm_cam_clk_info ispif_8626_reset_clk_info[] = {
diff --git a/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c b/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c
index 3596a12..53a5ed3 100644
--- a/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c
+++ b/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c
@@ -50,6 +50,13 @@
return -EINVAL;
}
for (i = 0; i < csid_lut_params->num_cid && i < 16; i++) {
+ if (csid_lut_params->vc_cfg[i]->cid >=
+ csid_lut_params->num_cid ||
+ csid_lut_params->vc_cfg[i]->cid < 0) {
+ pr_err("%s: cid outside range %d\n",
+ __func__, csid_lut_params->vc_cfg[i]->cid);
+ return -EINVAL;
+ }
CDBG("%s lut params num_cid = %d, cid = %d, dt = %x, df = %d\n",
__func__,
csid_lut_params->num_cid,
diff --git a/drivers/video/msm/mdss/mdss_dsi_cmd.h b/drivers/video/msm/mdss/mdss_dsi_cmd.h
index 3abe4fc..7ad2d71 100644
--- a/drivers/video/msm/mdss/mdss_dsi_cmd.h
+++ b/drivers/video/msm/mdss/mdss_dsi_cmd.h
@@ -100,6 +100,7 @@
#define CMD_CLK_CTRL 0x0004
#define CMD_REQ_NO_MAX_PKT_SIZE 0x0008
#define CMD_REQ_LP_MODE 0x0010
+#define CMD_REQ_HS_MODE 0x0020
struct dcs_cmd_req {
struct dsi_cmd_desc *cmds;
diff --git a/drivers/video/msm/mdss/mdss_dsi_host.c b/drivers/video/msm/mdss/mdss_dsi_host.c
index 0e48ee1..9d89e21 100644
--- a/drivers/video/msm/mdss/mdss_dsi_host.c
+++ b/drivers/video/msm/mdss/mdss_dsi_host.c
@@ -1351,10 +1351,18 @@
mutex_unlock(&ctrl->cmd_mutex);
return rc;
}
+
+ if (req->flags & CMD_REQ_HS_MODE)
+ mdss_dsi_set_tx_power_mode(0, &ctrl->panel_data);
+
if (req->flags & CMD_REQ_RX)
ret = mdss_dsi_cmdlist_rx(ctrl, req);
else
ret = mdss_dsi_cmdlist_tx(ctrl, req);
+
+ if (req->flags & CMD_REQ_HS_MODE)
+ mdss_dsi_set_tx_power_mode(1, &ctrl->panel_data);
+
mdss_iommu_ctrl(0);
mdss_dsi_clk_ctrl(ctrl, DSI_ALL_CLKS, 0);
mdss_bus_scale_set_quota(MDSS_HW_DSI0, 0, 0);
diff --git a/drivers/video/msm/mdss/mdss_mdp_ctl.c b/drivers/video/msm/mdss/mdss_mdp_ctl.c
index 08c0eac..0b02ed6 100644
--- a/drivers/video/msm/mdss/mdss_mdp_ctl.c
+++ b/drivers/video/msm/mdss/mdss_mdp_ctl.c
@@ -733,7 +733,8 @@
left_plist, (left_plist ? MDSS_MDP_MAX_STAGE : 0),
right_plist, (right_plist ? MDSS_MDP_MAX_STAGE : 0));
- if (ctl->is_video_mode || mdss_mdp_video_mode_intf_connected(ctl)) {
+ if (ctl->is_video_mode || ((ctl->intf_type != MDSS_MDP_NO_INTF) &&
+ mdss_mdp_video_mode_intf_connected(ctl))) {
perf->bw_ctl =
max(apply_fudge_factor(perf->bw_overlap,
&mdss_res->ib_factor_overlap),
diff --git a/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c b/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c
index b6bec08..70e2972 100755
--- a/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c
+++ b/drivers/video/msm/mdss/mdss_mdp_intf_cmd.c
@@ -730,13 +730,10 @@
pr_err("no panel data\n");
} else {
pinfo = &ctl->panel_data->panel_info;
-
- if (pinfo->panel_dead) {
- mdss_mdp_irq_disable
- (MDSS_MDP_IRQ_PING_PONG_RD_PTR,
- ctx->pp_num);
- ctx->rdptr_enabled = 0;
- }
+ mdss_mdp_irq_disable
+ (MDSS_MDP_IRQ_PING_PONG_RD_PTR,
+ ctx->pp_num);
+ ctx->rdptr_enabled = 0;
}
}
diff --git a/mm/vmscan.c b/mm/vmscan.c
index d0e40e5..e2e43aa 100644
--- a/mm/vmscan.c
+++ b/mm/vmscan.c
@@ -474,8 +474,18 @@
if (!PageWriteback(page)) {
/* synchronous write or broken a_ops? */
ClearPageReclaim(page);
- if (PageError(page))
+ if (PageError(page) && PageSwapCache(page)) {
+ ClearPageError(page);
+ /*
+ * We lock the page here because it is required
+ * to free the swp space later in
+ * shrink_page_list. But the page may be
+ * unclocked by functions like
+ * handle_write_error.
+ */
+ __set_page_locked(page);
return PAGE_ACTIVATE;
+ }
}
trace_mm_vmscan_writepage(page, trace_reclaim_flags(page));
inc_zone_page_state(page, NR_VMSCAN_WRITE);
diff --git a/sound/soc/codecs/msm8x10-wcd.c b/sound/soc/codecs/msm8x10-wcd.c
index a2f6811..63a6223 100644
--- a/sound/soc/codecs/msm8x10-wcd.c
+++ b/sound/soc/codecs/msm8x10-wcd.c
@@ -1672,20 +1672,22 @@
char *internal1_text = "Internal1";
char *internal2_text = "Internal2";
char *internal3_text = "Internal3";
+ char *external_text = "External";
enum wcd9xxx_notify_event e_post_off, e_pre_on, e_post_on;
dev_dbg(codec->dev, "%s %d\n", __func__, event);
- switch (w->reg) {
- case MSM8X10_WCD_A_MICB_1_CTL:
+
+ if ((strnstr(w->name, internal1_text, 30)) ||
+ (strnstr(w->name, internal2_text, 30)) ||
+ (strnstr(w->name, internal3_text, 30)) ||
+ (strnstr(w->name, external_text, 30))) {
micb_int_reg = MSM8X10_WCD_A_MICB_1_INT_RBIAS;
e_pre_on = WCD9XXX_EVENT_PRE_MICBIAS_1_ON;
e_post_on = WCD9XXX_EVENT_POST_MICBIAS_1_ON;
e_post_off = WCD9XXX_EVENT_POST_MICBIAS_1_OFF;
- break;
- default:
+ } else {
dev_err(codec->dev,
- "%s: Error, invalid micbias register 0x%x\n",
- __func__, w->reg);
+ "%s: Error, invalid micbias %s\n", __func__, w->name);
return -EINVAL;
}
@@ -1703,9 +1705,9 @@
/* Always pull up TxFe for TX2 to Micbias */
snd_soc_update_bits(codec, micb_int_reg, 0x04, 0x04);
- snd_soc_update_bits(codec, MSM8X10_WCD_A_MICB_1_CTL,
+ if (++msm8x10_wcd->micb_en_count == 1)
+ snd_soc_update_bits(codec, MSM8X10_WCD_A_MICB_1_CTL,
0x80, 0x80);
- msm8x10_wcd->micb_en_count++;
pr_debug("%s micb_en_count : %d", __func__,
msm8x10_wcd->micb_en_count);
break;
@@ -1715,12 +1717,11 @@
wcd9xxx_resmgr_notifier_call(&msm8x10_wcd->resmgr, e_post_on);
break;
case SND_SOC_DAPM_POST_PMD:
- if (msm8x10_wcd->micb_en_count > 0)
- msm8x10_wcd->micb_en_count--;
+ if (--msm8x10_wcd->micb_en_count == 0)
+ snd_soc_update_bits(codec, MSM8X10_WCD_A_MICB_1_CTL,
+ 0x80, 0x00);
pr_debug("%s micb_en_count : %d", __func__,
msm8x10_wcd->micb_en_count);
- snd_soc_update_bits(codec, MSM8X10_WCD_A_MICB_1_CTL,
- 0x80, 0x00);
/* Let MBHC module know so micbias switch to be off */
wcd9xxx_resmgr_notifier_call(&msm8x10_wcd->resmgr, e_post_off);
@@ -2534,23 +2535,23 @@
SND_SOC_DAPM_INPUT("AMIC1"),
SND_SOC_DAPM_MICBIAS_E("MIC BIAS Internal1",
- MSM8X10_WCD_A_MICB_1_CTL, 7, 0,
+ SND_SOC_NOPM, 7, 0,
msm8x10_wcd_codec_enable_micbias, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_MICBIAS_E("MIC BIAS Internal2",
- MSM8X10_WCD_A_MICB_1_CTL, 7, 0,
+ SND_SOC_NOPM, 7, 0,
msm8x10_wcd_codec_enable_micbias, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_MICBIAS_E("MIC BIAS Internal3",
- MSM8X10_WCD_A_MICB_1_CTL, 7, 0,
+ SND_SOC_NOPM, 7, 0,
msm8x10_wcd_codec_enable_micbias, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_MICBIAS_E("MIC BIAS External",
- MSM8X10_WCD_A_MICB_1_CTL, 7, 0,
+ SND_SOC_NOPM, 7, 0,
msm8x10_wcd_codec_enable_micbias, SND_SOC_DAPM_PRE_PMU |
SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD),
SND_SOC_DAPM_MICBIAS_E(DAPM_MICBIAS_EXTERNAL_STANDALONE,
- MSM8X10_WCD_A_MICB_1_CTL,
+ SND_SOC_NOPM,
7, 0, msm8x10_wcd_codec_enable_micbias,
SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMU |
SND_SOC_DAPM_POST_PMD),
@@ -2823,7 +2824,6 @@
enum wcd9xxx_micbias_num micb_num)
{
int rc;
- struct msm8x10_wcd_priv *msm8x10_wcd = snd_soc_codec_get_drvdata(codec);
if (micb_num != MBHC_MICBIAS1) {
rc = -EINVAL;
@@ -2834,12 +2834,6 @@
rc = snd_soc_dapm_force_enable_pin(&codec->dapm,
DAPM_MICBIAS_EXTERNAL_STANDALONE);
else {
- if (msm8x10_wcd->micb_en_count > 1) {
- msm8x10_wcd->micb_en_count--;
- pr_debug("%s micb_en_count : %d", __func__,
- msm8x10_wcd->micb_en_count);
- return 0;
- }
rc = snd_soc_dapm_disable_pin(&codec->dapm,
DAPM_MICBIAS_EXTERNAL_STANDALONE);
}
diff --git a/sound/soc/msm/msm-pcm-loopback.c b/sound/soc/msm/msm-pcm-loopback.c
index ecf8394..f2024d8 100644
--- a/sound/soc/msm/msm-pcm-loopback.c
+++ b/sound/soc/msm/msm-pcm-loopback.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2013, The Linux Foundation. All rights reserved.
+/* Copyright (c) 2013-2014, 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
@@ -200,19 +200,23 @@
static void stop_pcm(struct msm_pcm_loopback *pcm)
{
- struct snd_soc_pcm_runtime *soc_pcm_rx =
- pcm->playback_substream->private_data;
- struct snd_soc_pcm_runtime *soc_pcm_tx =
- pcm->capture_substream->private_data;
+ struct snd_soc_pcm_runtime *soc_pcm_rx;
+ struct snd_soc_pcm_runtime *soc_pcm_tx;
if (pcm->audio_client == NULL)
return;
q6asm_cmd(pcm->audio_client, CMD_CLOSE);
- msm_pcm_routing_dereg_phy_stream(soc_pcm_rx->dai_link->be_id,
- SNDRV_PCM_STREAM_PLAYBACK);
- msm_pcm_routing_dereg_phy_stream(soc_pcm_tx->dai_link->be_id,
- SNDRV_PCM_STREAM_CAPTURE);
+ if (pcm->playback_substream != NULL) {
+ soc_pcm_rx = pcm->playback_substream->private_data;
+ msm_pcm_routing_dereg_phy_stream(soc_pcm_rx->dai_link->be_id,
+ SNDRV_PCM_STREAM_PLAYBACK);
+ }
+ if (pcm->capture_substream != NULL) {
+ soc_pcm_tx = pcm->capture_substream->private_data;
+ msm_pcm_routing_dereg_phy_stream(soc_pcm_tx->dai_link->be_id,
+ SNDRV_PCM_STREAM_CAPTURE);
+ }
q6asm_audio_client_free(pcm->audio_client);
pcm->audio_client = NULL;
}
diff --git a/sound/soc/msm/qdsp6/q6asm.c b/sound/soc/msm/qdsp6/q6asm.c
index 659d5a2..8ecb147 100644
--- a/sound/soc/msm/qdsp6/q6asm.c
+++ b/sound/soc/msm/qdsp6/q6asm.c
@@ -57,6 +57,7 @@
#define OUT_BUFFER_SIZE 56
#define IN_BUFFER_SIZE 24
#endif
+#define FRAME_NUM (8)
static DEFINE_MUTEX(session_lock);
/* session id: 0 reserved */
@@ -509,6 +510,9 @@
pr_debug("%s: buffer already allocated\n", __func__);
return 0;
}
+
+ if (bufcnt != FRAME_NUM)
+ goto fail;
mutex_lock(&ac->cmd_lock);
buf = kzalloc(((sizeof(struct audio_buffer))*bufcnt),
GFP_KERNEL);
diff --git a/sound/soc/msm/qdsp6v2/q6adm.c b/sound/soc/msm/qdsp6v2/q6adm.c
index bb1b7fb..662338e0 100644
--- a/sound/soc/msm/qdsp6v2/q6adm.c
+++ b/sound/soc/msm/qdsp6v2/q6adm.c
@@ -432,7 +432,7 @@
}
if ((params_data) && (ARRAY_SIZE(adm_get_parameters) >=
(1+adm_get_parameters[0])) &&
- (params_length/sizeof(int) >=
+ (params_length/sizeof(uint32_t) >=
adm_get_parameters[0])) {
for (i = 0; i < adm_get_parameters[0]; i++)
params_data[i] = adm_get_parameters[1+i];
@@ -640,16 +640,23 @@
/* is big enough and has a valid param size */
if ((payload[0] == 0) && (data->payload_size >
(4 * sizeof(*payload))) &&
- (data->payload_size/sizeof(*payload)-4 >=
+ (data->payload_size - 4 >=
payload[3]) &&
(ARRAY_SIZE(adm_get_parameters)-1 >=
payload[3])) {
- adm_get_parameters[0] = payload[3];
+ adm_get_parameters[0] = payload[3] /
+ sizeof(uint32_t);
+ /*
+ * payload[3] is param_size which is
+ * expressed in number of bytes
+ */
pr_debug("%s: GET_PP PARAM:received parameter length: 0x%x\n",
__func__, adm_get_parameters[0]);
/* storing param size then params */
- for (i = 0; i < payload[3]; i++)
- adm_get_parameters[1+i] = payload[4+i];
+ for (i = 0; i < payload[3] /
+ sizeof(uint32_t); i++)
+ adm_get_parameters[1+i] =
+ payload[4+i];
} else {
adm_get_parameters[0] = -1;
pr_err("%s: GET_PP_PARAMS failed, setting size to %d\n",