summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinux Build Service Account <lnxbuild@localhost>2014-11-25 22:31:39 -0700
committerLinux Build Service Account <lnxbuild@localhost>2014-11-25 22:31:39 -0700
commit432f00a897f09f05a29a63df79539fc0b38bdab6 (patch)
treedc29bd23bf059b0b1fba71429e27bb073185bb8d
parente928c716d77112186a20c7c8f94a1ef250bbef4b (diff)
parent1632f03cb26a46d3c0f9dcac09ac73bba5248a77 (diff)
Merge 1632f03cb26a46d3c0f9dcac09ac73bba5248a77 on remote branch
Change-Id: If06242d1b013e39db0e9e5bddee98305e6a8ca4d
-rw-r--r--drivers/clk/qcom/clock-generic.c2
-rw-r--r--drivers/cpufreq/cpufreq.c7
-rw-r--r--drivers/hwmon/qpnp-adc-common.c5
-rw-r--r--drivers/hwmon/qpnp-adc-voltage.c3
-rw-r--r--drivers/mmc/host/sdhci.c31
-rw-r--r--drivers/video/msm/mdp.c5
-rw-r--r--drivers/video/msm/mdss/mdss_mdp_pp.c4
-rw-r--r--include/linux/qpnp/qpnp-adc.h3
8 files changed, 42 insertions, 18 deletions
diff --git a/drivers/clk/qcom/clock-generic.c b/drivers/clk/qcom/clock-generic.c
index 3da2ee90d64e..8292dc9db920 100644
--- a/drivers/clk/qcom/clock-generic.c
+++ b/drivers/clk/qcom/clock-generic.c
@@ -423,7 +423,7 @@ static long __slave_div_round_rate(struct clk *c, unsigned long rate,
max_div = d->data.max_div;
p_rate = clk_get_rate(c->parent);
- div = p_rate / rate;
+ div = DIV_ROUND_CLOSEST(p_rate, rate);
div = max(div, min_div);
div = min(div, max_div);
if (best_div)
diff --git a/drivers/cpufreq/cpufreq.c b/drivers/cpufreq/cpufreq.c
index c7c1ecfaaaaa..81ededa4d72d 100644
--- a/drivers/cpufreq/cpufreq.c
+++ b/drivers/cpufreq/cpufreq.c
@@ -433,6 +433,9 @@ static ssize_t store_##file_name \
if (ret) \
return -EINVAL; \
\
+ new_policy.min = new_policy.user_policy.min; \
+ new_policy.max = new_policy.user_policy.max; \
+ \
ret = sscanf(buf, "%u", &new_policy.object); \
if (ret != 1) \
return -EINVAL; \
@@ -441,7 +444,9 @@ static ssize_t store_##file_name \
if (ret) \
pr_err("cpufreq: Frequency verification failed\n"); \
\
- policy->user_policy.object = new_policy.object; \
+ policy->user_policy.min = new_policy.min; \
+ policy->user_policy.max = new_policy.max; \
+ \
ret = cpufreq_set_policy(policy, &new_policy); \
\
return ret ? ret : count; \
diff --git a/drivers/hwmon/qpnp-adc-common.c b/drivers/hwmon/qpnp-adc-common.c
index 23a0524b3e64..37a429f8d779 100644
--- a/drivers/hwmon/qpnp-adc-common.c
+++ b/drivers/hwmon/qpnp-adc-common.c
@@ -1310,8 +1310,11 @@ int32_t qpnp_adc_smb_btm_rscaler(struct qpnp_vadc_chip *chip,
}
EXPORT_SYMBOL(qpnp_adc_smb_btm_rscaler);
-int32_t qpnp_vadc_check_result(int32_t *data)
+int32_t qpnp_vadc_check_result(int32_t *data, bool recalib_check)
{
+ if (recalib_check)
+ return 0;
+
if (*data < QPNP_VADC_MIN_ADC_CODE)
*data = QPNP_VADC_MIN_ADC_CODE;
else if (*data > QPNP_VADC_MAX_ADC_CODE)
diff --git a/drivers/hwmon/qpnp-adc-voltage.c b/drivers/hwmon/qpnp-adc-voltage.c
index 203942af3361..037f78953edf 100644
--- a/drivers/hwmon/qpnp-adc-voltage.c
+++ b/drivers/hwmon/qpnp-adc-voltage.c
@@ -397,7 +397,8 @@ static int32_t qpnp_vadc_read_conversion_result(struct qpnp_vadc_chip *vadc,
*data = (rslt_msb << 8) | rslt_lsb;
- status = qpnp_vadc_check_result(data);
+ status = qpnp_vadc_check_result(data,
+ (vadc->vadc_recalib_check ? true : false));
if (status < 0) {
pr_err("VADC data check failed\n");
goto fail;
diff --git a/drivers/mmc/host/sdhci.c b/drivers/mmc/host/sdhci.c
index 3a12acab7840..00a50d432df0 100644
--- a/drivers/mmc/host/sdhci.c
+++ b/drivers/mmc/host/sdhci.c
@@ -687,9 +687,11 @@ static int sdhci_adma_table_pre(struct sdhci_host *host,
BUG_ON(len > 65536);
- /* tran, valid */
- sdhci_set_adma_desc(host, desc, addr, len, 0x21);
- desc += host->adma_desc_line_sz;
+ if (len) {
+ /* tran, valid */
+ sdhci_set_adma_desc(host, desc, addr, len, 0x21);
+ desc += host->adma_desc_line_sz;
+ }
/*
* If this triggers then we have a calculation bug
@@ -877,6 +879,17 @@ static void sdhci_set_transfer_irqs(struct sdhci_host *host)
sdhci_clear_set_irqs(host, dma_irqs, pio_irqs);
}
+static void sdhci_set_blk_size_reg(struct sdhci_host *host, unsigned int blksz,
+ unsigned int sdma_boundary)
+{
+ if (host->flags & SDHCI_USE_ADMA)
+ sdhci_writew(host, SDHCI_MAKE_BLKSZ(0, blksz),
+ SDHCI_BLOCK_SIZE);
+ else
+ sdhci_writew(host, SDHCI_MAKE_BLKSZ(sdma_boundary, blksz),
+ SDHCI_BLOCK_SIZE);
+}
+
static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
{
u8 count;
@@ -1048,8 +1061,7 @@ static void sdhci_prepare_data(struct sdhci_host *host, struct mmc_command *cmd)
sdhci_set_transfer_irqs(host);
/* Set the DMA boundary value and block size */
- sdhci_writew(host, SDHCI_MAKE_BLKSZ(SDHCI_DEFAULT_BOUNDARY_ARG,
- data->blksz), SDHCI_BLOCK_SIZE);
+ sdhci_set_blk_size_reg(host, data->blksz, SDHCI_DEFAULT_BOUNDARY_ARG);
sdhci_writew(host, data->blocks, SDHCI_BLOCK_COUNT);
}
@@ -2397,14 +2409,11 @@ static int sdhci_execute_tuning(struct mmc_host *mmc, u32 opcode)
if ((cmd.opcode == MMC_SEND_TUNING_BLOCK_HS400) ||
(cmd.opcode == MMC_SEND_TUNING_BLOCK_HS200)) {
if (mmc->ios.bus_width == MMC_BUS_WIDTH_8)
- sdhci_writew(host, SDHCI_MAKE_BLKSZ(7, 128),
- SDHCI_BLOCK_SIZE);
+ sdhci_set_blk_size_reg(host, 128, 7);
else if (mmc->ios.bus_width == MMC_BUS_WIDTH_4)
- sdhci_writew(host, SDHCI_MAKE_BLKSZ(7, 64),
- SDHCI_BLOCK_SIZE);
+ sdhci_set_blk_size_reg(host, 64, 7);
} else {
- sdhci_writew(host, SDHCI_MAKE_BLKSZ(7, 64),
- SDHCI_BLOCK_SIZE);
+ sdhci_set_blk_size_reg(host, 64, 7);
}
/*
diff --git a/drivers/video/msm/mdp.c b/drivers/video/msm/mdp.c
index 4ede0b524403..c00bd78884d4 100644
--- a/drivers/video/msm/mdp.c
+++ b/drivers/video/msm/mdp.c
@@ -485,6 +485,11 @@ static int mdp_lut_hw_update(struct fb_cmap *cmap)
c[1] = cmap->blue;
c[2] = cmap->red;
+ if (cmap->start > MDP_HIST_LUT_SIZE || cmap->len > MDP_HIST_LUT_SIZE ||
+ (cmap->start + cmap->len > MDP_HIST_LUT_SIZE)) {
+ pr_err("mdp_lut_hw_update invalid arguments\n");
+ return -EINVAL;
+ }
for (i = 0; i < cmap->len; i++) {
if (copy_from_user(&r, cmap->red++, sizeof(r)) ||
copy_from_user(&g, cmap->green++, sizeof(g)) ||
diff --git a/drivers/video/msm/mdss/mdss_mdp_pp.c b/drivers/video/msm/mdss/mdss_mdp_pp.c
index 164bf7e4ba62..239ccccfcece 100644
--- a/drivers/video/msm/mdss/mdss_mdp_pp.c
+++ b/drivers/video/msm/mdss/mdss_mdp_pp.c
@@ -1071,7 +1071,7 @@ static int mdss_mdp_scale_setup(struct mdss_mdp_pipe *pipe)
(pipe->pp_res.pp_sts.sharp_sts & PP_STS_ENABLE) ||
(chroma_sample == MDSS_MDP_CHROMA_420) ||
(chroma_sample == MDSS_MDP_CHROMA_H1V2) ||
- pipe->scale.enable_pxl_ext) {
+ (pipe->scale.enable_pxl_ext && (src_h != pipe->dst.h))) {
pr_debug("scale y - src_h=%d dst_h=%d\n", src_h, pipe->dst.h);
if ((src_h / MAX_DOWNSCALE_RATIO) > pipe->dst.h) {
@@ -1127,7 +1127,7 @@ static int mdss_mdp_scale_setup(struct mdss_mdp_pipe *pipe)
(pipe->pp_res.pp_sts.sharp_sts & PP_STS_ENABLE) ||
(chroma_sample == MDSS_MDP_CHROMA_420) ||
(chroma_sample == MDSS_MDP_CHROMA_H2V1) ||
- pipe->scale.enable_pxl_ext) {
+ (pipe->scale.enable_pxl_ext && (src_w != pipe->dst.w))) {
pr_debug("scale x - src_w=%d dst_w=%d\n", src_w, pipe->dst.w);
if ((src_w / MAX_DOWNSCALE_RATIO) > pipe->dst.w) {
diff --git a/include/linux/qpnp/qpnp-adc.h b/include/linux/qpnp/qpnp-adc.h
index 86587504a4c6..727e30d896e5 100644
--- a/include/linux/qpnp/qpnp-adc.h
+++ b/include/linux/qpnp/qpnp-adc.h
@@ -1093,8 +1093,9 @@ int32_t qpnp_vadc_conv_seq_request(struct qpnp_vadc_chip *dev,
/**
* qpnp_vadc_check_result() - Performs check on the ADC raw code.
* @data: Data used for verifying the range of the ADC code.
+ * @recalib_check: Recalibration check to ignore result check.
*/
-int32_t qpnp_vadc_check_result(int32_t *data);
+int32_t qpnp_vadc_check_result(int32_t *data, bool recalib_check);
/**
* qpnp_adc_get_devicetree_data() - Abstracts the ADC devicetree data.