summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorArun Murthy <arun.murthy@stericsson.com>2011-11-24 11:39:41 +0530
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:07:21 +0200
commit21b8f8e3134a838a71c90d467c4f72d7148651e7 (patch)
treeb33e5d2dec3c024067f942a36d945b7f1f70880e
parent0ac258cfc8e78e8c1eeeaa182e0307d74b70543e (diff)
u8500-shrm: check for modem status while writing to GOP
While writing to the modem GOP registers, check if modem is in reset else writing to GOP registers while modem being in reset will lead to system dreeze. ST-Ericsson Linux next: NA ST-Ericsson ID: 375164 ST-Ericsson FOSS-OUT ID: Trivial Change-Id: Ic4534c1b9c9eee09eb09fad298adddc6bfcb7c3f Signed-off-by: Arun Murthy <arun.murthy@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/39433 Reviewed-by: QABUILD Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
-rw-r--r--drivers/modem/shrm/shrm_protocol.c25
1 files changed, 25 insertions, 0 deletions
diff --git a/drivers/modem/shrm/shrm_protocol.c b/drivers/modem/shrm/shrm_protocol.c
index 19644ca8742..82fed247969 100644
--- a/drivers/modem/shrm/shrm_protocol.c
+++ b/drivers/modem/shrm/shrm_protocol.c
@@ -450,6 +450,12 @@ void shm_ca_sleep_req_work(struct kthread_work *work)
shrm_common_rx_state = SHRM_IDLE;
shrm_audio_rx_state = SHRM_IDLE;
+ if (check_modem_in_reset()) {
+ dev_err(shm_dev->dev, "%s:Modem state reset or unknown\n",
+ __func__);
+ return;
+ }
+
writel((1<<GOP_CA_WAKE_ACK_BIT),
shm_dev->intr_base + GOP_SET_REGISTER_BASE);
@@ -478,6 +484,13 @@ void shm_ca_wake_req_work(struct kthread_work *work)
dev_info(shrm->dev, "Initiating a modem reset\n");
prcmu_modem_reset();
}
+
+ if (check_modem_in_reset()) {
+ dev_err(shrm->dev, "%s:Modem state reset or unknown\n",
+ __func__);
+ return;
+ }
+
writel((1<<GOP_CA_WAKE_ACK_BIT),
shm_dev->intr_base + GOP_SET_REGISTER_BASE);
}
@@ -625,6 +638,12 @@ static void send_ac_msg_pend_notify_0_work(struct kthread_work *work)
prcmu_modem_reset();
}
+ if (check_modem_in_reset()) {
+ dev_err(shrm->dev, "%s:Modem state reset or unknown.\n",
+ __func__);
+ return;
+ }
+
/* Trigger AcMsgPendingNotification to CMU */
writel((1<<GOP_COMMON_AC_MSG_PENDING_NOTIFICATION_BIT),
shrm->intr_base + GOP_SET_REGISTER_BASE);
@@ -655,6 +674,12 @@ static void send_ac_msg_pend_notify_1_work(struct kthread_work *work)
prcmu_modem_reset();
}
+ if (check_modem_in_reset()) {
+ dev_err(shrm->dev, "%s:Modem state reset or unknown.\n",
+ __func__);
+ return;
+ }
+
/* Trigger AcMsgPendingNotification to CMU */
writel((1<<GOP_AUDIO_AC_MSG_PENDING_NOTIFICATION_BIT),
shrm->intr_base + GOP_SET_REGISTER_BASE);