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-06-05 10:40:29 +0200
commitf54226c4e42d5a4941e149bd9dc24d2def2ad991 (patch)
tree65b600fce2221228254e15da6ea12086e1bbb630
parent6cb71f8714be3e54d5272f5e0f696ce9b2167f64 (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);