summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Murthy <arun.murthy@stericsson.com>2012-02-08 17:25:27 +0530
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:07:26 +0200
commit211d77b805e2c7f5f1ef02ecc6c777a313f5688d (patch)
tree83b32f9f3f4bd8aec560371fff00a7708725e74a
parent40a824150688e73e6153cf15ffde55421a801ce8 (diff)
u8500-shrm: ensure hostaccess_port is high while accessing GOP
In places of APE handling modem ISR, its clear that modem is awake since it has sent the interrupt and it should be waiting for the ACK for the interrupt. But still its better to check since there are cases where modem behaves unexpectedly. ST-Ericsson Linux next: NA ST-Ericsson ID: 413508 ST-Ericsson FOSS-OUT ID: Trivial Change-Id: If9f13388aabeb6b9721ae7274b0d2216d1bca027 Signed-off-by: Arun Murthy <arun.murthy@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/48274 Reviewed-by: QABUILD Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
-rw-r--r--drivers/modem/shrm/shrm_protocol.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/modem/shrm/shrm_protocol.c b/drivers/modem/shrm/shrm_protocol.c
index d6d9e605b5c..aad2431324d 100644
--- a/drivers/modem/shrm/shrm_protocol.c
+++ b/drivers/modem/shrm/shrm_protocol.c
@@ -523,6 +523,8 @@ void shm_ca_sleep_req_work(struct kthread_work *work)
shrm_common_rx_state = SHRM_IDLE;
shrm_audio_rx_state = SHRM_IDLE;
+ if (!get_host_accessport_val())
+ BUG();
writel((1<<GOP_CA_WAKE_ACK_BIT),
shm_dev->intr_base + GOP_SET_REGISTER_BASE);
@@ -558,6 +560,7 @@ void shm_ca_wake_req_work(struct kthread_work *work)
return;
}
+ /* send ca_wake_ack_interrupt to CMU */
writel((1<<GOP_CA_WAKE_ACK_BIT),
shm_dev->intr_base + GOP_SET_REGISTER_BASE);
}
@@ -1058,6 +1061,8 @@ irqreturn_t ac_read_notif_0_irq_handler(int irq, void *ctrlr)
return IRQ_HANDLED;
}
+ if (!get_host_accessport_val())
+ BUG();
/* Clear the interrupt */
writel((1 << GOP_COMMON_AC_READ_NOTIFICATION_BIT),
shrm->intr_base + GOP_CLEAR_REGISTER_BASE);
@@ -1094,6 +1099,8 @@ irqreturn_t ac_read_notif_1_irq_handler(int irq, void *ctrlr)
return IRQ_HANDLED;
}
+ if (!get_host_accessport_val())
+ BUG();
/* Clear the interrupt */
writel((1 << GOP_AUDIO_AC_READ_NOTIFICATION_BIT),
shrm->intr_base + GOP_CLEAR_REGISTER_BASE);
@@ -1122,6 +1129,8 @@ irqreturn_t ca_msg_pending_notif_0_irq_handler(int irq, void *ctrlr)
return IRQ_HANDLED;
}
+ if (!get_host_accessport_val())
+ BUG();
/* Clear the interrupt */
writel((1 << GOP_COMMON_CA_MSG_PENDING_NOTIFICATION_BIT),
shrm->intr_base + GOP_CLEAR_REGISTER_BASE);
@@ -1150,6 +1159,8 @@ irqreturn_t ca_msg_pending_notif_1_irq_handler(int irq, void *ctrlr)
return IRQ_HANDLED;
}
+ if (!get_host_accessport_val())
+ BUG();
/* Clear the interrupt */
writel((1<<GOP_AUDIO_CA_MSG_PENDING_NOTIFICATION_BIT),
shrm->intr_base+GOP_CLEAR_REGISTER_BASE);
@@ -1264,6 +1275,8 @@ void ca_msg_read_notification_0(struct shrm_dev *shrm)
return;
}
+ if (!get_host_accessport_val())
+ BUG();
/* Trigger CaMsgReadNotification to CMU */
writel((1 << GOP_COMMON_CA_READ_NOTIFICATION_BIT),
shrm->intr_base + GOP_SET_REGISTER_BASE);
@@ -1287,6 +1300,8 @@ void ca_msg_read_notification_1(struct shrm_dev *shrm)
return;
}
+ if (!get_host_accessport_val())
+ BUG();
/* Trigger CaMsgReadNotification to CMU */
writel((1<<GOP_AUDIO_CA_READ_NOTIFICATION_BIT),
shrm->intr_base+GOP_SET_REGISTER_BASE);