diff options
author | Arun Murthy <arun.murthy@stericsson.com> | 2011-11-24 11:39:41 +0530 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:07:21 +0200 |
commit | 21b8f8e3134a838a71c90d467c4f72d7148651e7 (patch) | |
tree | b33e5d2dec3c024067f942a36d945b7f1f70880e /drivers/modem | |
parent | 0ac258cfc8e78e8c1eeeaa182e0307d74b70543e (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>
Diffstat (limited to 'drivers/modem')
-rw-r--r-- | drivers/modem/shrm/shrm_protocol.c | 25 |
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); |