diff options
author | Arun Murthy <arun.murthy@stericsson.com> | 2012-02-08 17:25:27 +0530 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-06-05 10:40:29 +0200 |
commit | f54226c4e42d5a4941e149bd9dc24d2def2ad991 (patch) | |
tree | 65b600fce2221228254e15da6ea12086e1bbb630 | |
parent | 6cb71f8714be3e54d5272f5e0f696ce9b2167f64 (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.c | 15 |
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); |