diff options
author | Kumar Sanghvi <kumar.sanghvi@stericsson.com> | 2011-04-19 21:07:56 +0530 |
---|---|---|
committer | Lee Jones <lee.jones@linaro.org> | 2012-01-05 10:12:47 +0000 |
commit | 20ba5f91f5b84b6a8e3f7feda8da0dc8a3c471e5 (patch) | |
tree | cbbd5af50043d4dc42c9c077610ef8f8cf738876 /drivers/misc | |
parent | 274b93f89db20d9c3f53c2be30ec862ba992fb10 (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.c | 23 |
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; |