summaryrefslogtreecommitdiff
path: root/drivers/misc
diff options
context:
space:
mode:
authorKumar Sanghvi <kumar.sanghvi@stericsson.com>2011-04-19 21:07:56 +0530
committerLee Jones <lee.jones@linaro.org>2012-01-05 10:12:47 +0000
commit20ba5f91f5b84b6a8e3f7feda8da0dc8a3c471e5 (patch)
treecbbd5af50043d4dc42c9c077610ef8f8cf738876 /drivers/misc
parent274b93f89db20d9c3f53c2be30ec862ba992fb10 (diff)
u8500: shrm: Update AC_Wake logic and one fix for MSR
Updates the AC_Wake logic related to MSR. Also, corrects one NULL pointer dereference. ST-Ericsson ID: ER335373 Change-Id: Ie3f46c2a7bcdde9936a0f9eed52f8dcd0ab5a06b Signed-off-by: Kumar Sanghvi <kumar.sanghvi@stericsson.com> Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/21162 Reviewed-by: QATEST Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
Diffstat (limited to 'drivers/misc')
-rw-r--r--drivers/misc/shrm/shrm_protocol.c23
1 files changed, 7 insertions, 16 deletions
diff --git a/drivers/misc/shrm/shrm_protocol.c b/drivers/misc/shrm/shrm_protocol.c
index 0831bc8803e..0598c62812f 100644
--- a/drivers/misc/shrm/shrm_protocol.c
+++ b/drivers/misc/shrm/shrm_protocol.c
@@ -80,14 +80,6 @@ static void shm_ac_sleep_req_work(struct work_struct *work)
static void shm_ac_wake_req_work(struct work_struct *work)
{
mutex_lock(&ac_state_mutex);
- /* make sure that we bring down the ac-wake line
- * so that prcmu driver will actually write
- * to the PRCM_HOSTACCESS_REQ register on the
- * next prcmu_ac_wake_req call
- */
- prcmu_ac_sleep_req();
-
- atomic_inc(&ac_sleep_disable_count);
prcmu_ac_wake_req();
mutex_unlock(&ac_state_mutex);
}
@@ -384,13 +376,6 @@ void shm_ac_read_notif_0_tasklet(unsigned long tasklet_data)
/* multicast that modem is online */
nl_send_multicast_message(SHRM_NL_STATUS_MOD_ONLINE, GFP_ATOMIC);
-
- /* This decrement corresponds to increment
- * done in MSR sequecne
- */
- atomic_dec(&ac_sleep_disable_count);
- queue_work(shm_dev->shm_ac_sleep_wq,
- &shm_dev->shm_ac_sleep_req);
}
} else if (boot_state == BOOT_DONE) {
@@ -523,9 +508,13 @@ static int shrm_modem_reset_sequence(void)
hrtimer_cancel(&timer);
- /* reset the state for ac-wake LOW logic */
+ /*
+ * keep the count to 0 so that we can bring down the line
+ * for normal ac-wake and ac-sleep logic
+ */
atomic_set(&ac_sleep_disable_count, 0);
+ /* workaround for MSR */
queue_work(shm_dev->shm_ac_wake_wq,
&shm_dev->shm_ac_wake_req);
@@ -598,6 +587,8 @@ static irqreturn_t shrm_prcmu_irq_handler(int irq, void *data)
#ifdef CONFIG_UX500_SUSPEND
suspend_block_sleep();
#endif
+ if (shrm->msr_flag)
+ atomic_set(&ac_sleep_disable_count, 0);
atomic_inc(&ac_sleep_disable_count);
queue_work(shrm->shm_ca_wake_wq, &shrm->shm_ca_wake_req);
break;