Merge "iommu: msm: Use ion_phys_addr_t for iova argument"
diff --git a/arch/arm/mach-msm/qdsp6v2/audio_amrwbplus.c b/arch/arm/mach-msm/qdsp6v2/audio_amrwbplus.c
index 902e06d..544bf9c 100644
--- a/arch/arm/mach-msm/qdsp6v2/audio_amrwbplus.c
+++ b/arch/arm/mach-msm/qdsp6v2/audio_amrwbplus.c
@@ -36,7 +36,7 @@
}
}
#else
-static void config_debug_fs(struct q6audio_aio *)
+static void config_debug_fs(struct q6audio_aio *audio)
{
}
#endif
diff --git a/drivers/gpu/msm/adreno.h b/drivers/gpu/msm/adreno.h
index 26a6720..8f48440 100644
--- a/drivers/gpu/msm/adreno.h
+++ b/drivers/gpu/msm/adreno.h
@@ -383,8 +383,7 @@
#define KGSL_FT_PAGEFAULT_GPUHALT_ENABLE BIT(1)
#define KGSL_FT_PAGEFAULT_LOG_ONE_PER_PAGE BIT(2)
#define KGSL_FT_PAGEFAULT_LOG_ONE_PER_INT BIT(3)
-#define KGSL_FT_PAGEFAULT_DEFAULT_POLICY (KGSL_FT_PAGEFAULT_INT_ENABLE + \
- KGSL_FT_PAGEFAULT_GPUHALT_ENABLE)
+#define KGSL_FT_PAGEFAULT_DEFAULT_POLICY KGSL_FT_PAGEFAULT_INT_ENABLE
extern struct adreno_gpudev adreno_a2xx_gpudev;
extern struct adreno_gpudev adreno_a3xx_gpudev;
diff --git a/drivers/input/touchscreen/synaptics_i2c_rmi4.c b/drivers/input/touchscreen/synaptics_i2c_rmi4.c
index cf43a9c..d21b6c1 100644
--- a/drivers/input/touchscreen/synaptics_i2c_rmi4.c
+++ b/drivers/input/touchscreen/synaptics_i2c_rmi4.c
@@ -2681,8 +2681,22 @@
if (rmi4_data->board->disable_gpios) {
if (gpio_is_valid(rmi4_data->board->irq_gpio))
gpio_free(rmi4_data->board->irq_gpio);
- if (gpio_is_valid(rmi4_data->board->reset_gpio))
+ if (gpio_is_valid(rmi4_data->board->reset_gpio)) {
+ /*
+ * This is intended to save leakage current
+ * only. Even if the call(gpio_direction_input)
+ * fails, only leakage current will be more but
+ * functionality will not be affected.
+ */
+ retval = gpio_direction_input(rmi4_data->
+ board->reset_gpio);
+ if (retval) {
+ dev_err(&rmi4_data->i2c_client->dev,
+ "unable to set direction for gpio "
+ "[%d]\n", rmi4_data->board->irq_gpio);
+ }
gpio_free(rmi4_data->board->reset_gpio);
+ }
}
return 0;
diff --git a/drivers/usb/otg/msm_otg.c b/drivers/usb/otg/msm_otg.c
index 4cf4703..276bbb0 100644
--- a/drivers/usb/otg/msm_otg.c
+++ b/drivers/usb/otg/msm_otg.c
@@ -882,6 +882,7 @@
if (motg->pdata->delay_lpm_hndshk_on_disconnect && !msm_bam_lpm_ok())
return -EBUSY;
+ motg->ui_enabled = 0;
disable_irq(motg->irq);
host_bus_suspend = !test_bit(MHL, &motg->inputs) && phy->otg->host &&
!test_bit(ID, &motg->inputs);
@@ -912,6 +913,7 @@
if ((test_bit(B_SESS_VLD, &motg->inputs) && !device_bus_suspend &&
!dcp && !prop_charger && !floated_charger) ||
test_bit(A_BUS_REQ, &motg->inputs)) {
+ motg->ui_enabled = 1;
enable_irq(motg->irq);
return -EBUSY;
}
@@ -961,6 +963,7 @@
if (cnt >= PHY_SUSPEND_TIMEOUT_USEC) {
dev_err(phy->dev, "Unable to suspend PHY\n");
msm_otg_reset(phy);
+ motg->ui_enabled = 1;
enable_irq(motg->irq);
return -ETIMEDOUT;
}
@@ -1077,7 +1080,12 @@
/* Enable ASYNC IRQ (if present) during LPM */
if (motg->async_irq)
enable_irq(motg->async_irq);
- enable_irq(motg->irq);
+
+ /* XO shutdown during idle , non wakeable irqs must be disabled */
+ if (device_bus_suspend || host_bus_suspend || !motg->async_irq) {
+ motg->ui_enabled = 1;
+ enable_irq(motg->irq);
+ }
wake_unlock(&motg->wlock);
dev_info(phy->dev, "USB in low power mode\n");
@@ -1101,7 +1109,10 @@
if (motg->pdata->delay_lpm_hndshk_on_disconnect)
msm_bam_notify_lpm_resume();
- disable_irq(motg->irq);
+ if (motg->ui_enabled) {
+ motg->ui_enabled = 0;
+ disable_irq(motg->irq);
+ }
wake_lock(&motg->wlock);
/* Some platforms require BUS vote to enable/disable clocks */
@@ -1206,6 +1217,7 @@
enable_irq(motg->async_int);
motg->async_int = 0;
}
+ motg->ui_enabled = 1;
enable_irq(motg->irq);
/* If ASYNC IRQ is present then keep it enabled only during LPM */
diff --git a/drivers/video/msm/mdss/dsi_host_v2.c b/drivers/video/msm/mdss/dsi_host_v2.c
index 05cc9cc..e416a55 100644
--- a/drivers/video/msm/mdss/dsi_host_v2.c
+++ b/drivers/video/msm/mdss/dsi_host_v2.c
@@ -547,7 +547,6 @@
for (i = 0; i < cnt; i++) {
dsi_buf_init(tp);
dsi_cmd_dma_add(tp, cm);
- msm_dsi_cmd_dma_tx(tp);
rc = msm_dsi_cmd_dma_tx(tp);
if (IS_ERR_VALUE(rc)) {
pr_err("%s: failed to call cmd_dma_tx\n", __func__);
diff --git a/drivers/video/msm/mdss/mdp3.c b/drivers/video/msm/mdss/mdp3.c
index 55037e3..638fcb3 100644
--- a/drivers/video/msm/mdss/mdp3.c
+++ b/drivers/video/msm/mdss/mdp3.c
@@ -586,41 +586,6 @@
return 0;
}
-struct reg_dump {
- int start_addr;
- int num_reads;
-};
-
-struct reg_dump ppp_reg[] = {
- {0x10108, 3},
- {0x10118, 6},
- {0x10138, 9},
- {0x10158, 1},
- {0x10164, 7},
- {0x1019C, 1},
- {0x101b8, 2},
- {0x101c0, 8},
-};
-
-static int mdp3_iommu_fault_handler(struct iommu_domain *domain,
- struct device *dev, unsigned long iova, int flags, void *token)
-{
- unsigned int addr, val;
- int i, j;
- pr_err("MDP IOMMU page fault: iova 0x%lx\n", iova);
- for (i = 0; i < ARRAY_SIZE(ppp_reg); i++) {
- for (j = 0; j < ppp_reg[i].num_reads; j++) {
- addr = ppp_reg[i].start_addr + (j*4);
- val = MDP3_REG_READ(addr);
- pr_err("TMsg: Addr= 0x%08x, val= 0x%08x\n",
- (unsigned int)addr, (unsigned int)val);
- }
- }
- panic("PPP pagefault, shutting down for easier debugging\n");
- return 0;
-}
-
-
int mdp3_iommu_attach(int context)
{
struct mdp3_iommu_ctx_map *context_map;
@@ -696,9 +661,6 @@
else
return PTR_ERR(mdp3_iommu_domains[i].domain);
}
- iommu_set_fault_handler(mdp3_iommu_domains[i].domain,
- mdp3_iommu_fault_handler,
- NULL);
}
mdp3_res->domains = mdp3_iommu_domains;
diff --git a/drivers/video/msm/mdss/mdp3_ppp.c b/drivers/video/msm/mdss/mdp3_ppp.c
index 8f6168a..d16cb3f 100644
--- a/drivers/video/msm/mdss/mdp3_ppp.c
+++ b/drivers/video/msm/mdss/mdp3_ppp.c
@@ -502,7 +502,6 @@
src_w = req->src_rect.w;
dst_h = blit_op->dst.roi.height;
- pr_err("TMsg: In workaround. srcw= %d, dstH=%d\n", src_w, dst_h);
/* bg tile fetching HW workaround */
for (i = 0; i < (req->dst_rect.h / 16); i++) {
/* this tile size */
diff --git a/include/linux/usb/msm_hsusb.h b/include/linux/usb/msm_hsusb.h
index be92ca7..07f9b90 100644
--- a/include/linux/usb/msm_hsusb.h
+++ b/include/linux/usb/msm_hsusb.h
@@ -339,6 +339,7 @@
* @host_bus_suspend: indicates host bus suspend or not.
* @chg_check_timer: The timer used to implement the workaround to detect
* very slow plug in of wall charger.
+ * @ui_enabled: USB Intterupt is enabled or disabled.
*/
struct msm_otg {
struct usb_phy phy;
@@ -449,6 +450,7 @@
bool ext_chg_opened;
bool ext_chg_active;
struct completion ext_chg_wait;
+ int ui_enabled;
};
struct ci13xxx_platform_data {
diff --git a/sound/soc/codecs/wcd9xxx-mbhc.c b/sound/soc/codecs/wcd9xxx-mbhc.c
index 362a9ca..73fd16d 100644
--- a/sound/soc/codecs/wcd9xxx-mbhc.c
+++ b/sound/soc/codecs/wcd9xxx-mbhc.c
@@ -4193,10 +4193,11 @@
(1 << MBHC_EVENT_PA_HPHL | 1 << MBHC_EVENT_PA_HPHR))
wcd9xxx_switch_micbias(mbhc, 1);
/*
- * Disable MBHC TxFE, in case it was enabled
- * earlier when micbias was enabled.
+ * Disable MBHC TxFE, in case it was enabled earlier
+ * when micbias was enabled and polling is not active.
*/
- wcd9xxx_enable_mbhc_txfe(mbhc, false);
+ if (!mbhc->polling_active)
+ wcd9xxx_enable_mbhc_txfe(mbhc, false);
}
break;
/* PA usage change */