msm: bam_dmux: reset wakelock flag during subsystem restart
Reset the flag that prevents grabbing the wakelock the first time
modem boots up when a subsystem restart event occurs. This keeps the
wakelock reference count consistant after a restart event so that
bam_dmux does not end up holding the wakelock for longer than needed.
CRs-Fixed: 333552
Change-Id: Iaa149f35059277289a00bb77608be2b2f7f8edbe
Signed-off-by: Jeffrey Hugo <jhugo@codeaurora.org>
diff --git a/arch/arm/mach-msm/bam_dmux.c b/arch/arm/mach-msm/bam_dmux.c
index 05c5a2b..f8ecd5b 100644
--- a/arch/arm/mach-msm/bam_dmux.c
+++ b/arch/arm/mach-msm/bam_dmux.c
@@ -221,6 +221,7 @@
static DEFINE_SPINLOCK(wakelock_reference_lock);
static int wakelock_reference_count;
static struct delayed_work msm9615_bam_init_work;
+static int a2_pc_disabled_wakelock_skipped;
/* End A2 power collaspe */
/* subsystem restart */
@@ -1476,7 +1477,6 @@
static void ul_wakeup(void)
{
int ret;
- static int called_before;
mutex_lock(&wakeup_lock);
if (bam_is_connected) { /* bam got connected before lock grabbed */
@@ -1490,10 +1490,10 @@
* don't grab the wakelock the first time because it is
* already grabbed when a2 powers on
*/
- if (likely(called_before))
+ if (likely(a2_pc_disabled_wakelock_skipped))
grab_wakelock();
else
- called_before = 1;
+ a2_pc_disabled_wakelock_skipped = 1;
if (wait_for_dfab) {
ret = wait_for_completion_timeout(
&dfab_unvote_completion, HZ);
@@ -1717,6 +1717,7 @@
write_unlock_irqrestore(&ul_wakeup_lock, flags);
ul_powerdown_finish();
a2_pc_disabled = 0;
+ a2_pc_disabled_wakelock_skipped = 0;
/* Cleanup Channel States */
for (i = 0; i < BAM_DMUX_NUM_CHANNELS; ++i) {