msm: charm: Ignore spurious interrupts correctly
Disabling the IRQs for subsystem restart can lead to
an extra pending interrupt when the interrupts are
re-enabled, which we don't want. Fix this by ignoring
the spurious interrupt.
Signed-off-by: Laura Abbott <lauraa@codeaurora.org>
diff --git a/arch/arm/mach-msm/mdm.c b/arch/arm/mach-msm/mdm.c
index a3a3aab..e2ff0da 100644
--- a/arch/arm/mach-msm/mdm.c
+++ b/arch/arm/mach-msm/mdm.c
@@ -73,17 +73,10 @@
}
-static void charm_enable_irqs(void)
-{
- enable_irq(charm_errfatal_irq);
- enable_irq(charm_status_irq);
-}
-
static int charm_subsys_shutdown(const struct subsys_data *crashed_subsys)
{
- charm_disable_irqs();
- power_down_charm();
charm_ready = 0;
+ power_down_charm();
return 0;
}
@@ -95,7 +88,6 @@
wait_for_completion(&charm_boot);
pr_info("%s: charm modem has been restarted\n", __func__);
INIT_COMPLETION(charm_boot);
- charm_enable_irqs();
return charm_boot_status;
}
@@ -240,7 +232,7 @@
static irqreturn_t charm_errfatal(int irq, void *dev_id)
{
CHARM_DBG("%s: charm got errfatal interrupt\n", __func__);
- if (charm_ready) {
+ if (charm_ready && (gpio_get_value(MDM2AP_STATUS) == 1)) {
CHARM_DBG("%s: scheduling work now\n", __func__);
queue_work(charm_queue, &charm_fatal_work);
}