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);
 	}