mhi: core: unconditionally trigger resume to assert device wake
In order to ensure that a DRV resume follows immediately after a client calls device wake assert or deassert, MHI core driver must unconditionally increment the PM runtime usage count and post a wake source before waiting for the state change. Change-Id: I50228742c090a5df6fcb06f89f53723179bcd76d Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org>
This commit is contained in:
parent
6275ce75f6
commit
dd0fe1d092
@ -1499,10 +1499,11 @@ int __mhi_device_get_sync(struct mhi_controller *mhi_cntrl)
|
||||
|
||||
read_lock_bh(&mhi_cntrl->pm_lock);
|
||||
mhi_cntrl->wake_get(mhi_cntrl, true);
|
||||
if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
|
||||
mhi_trigger_resume(mhi_cntrl);
|
||||
read_unlock_bh(&mhi_cntrl->pm_lock);
|
||||
|
||||
pm_wakeup_hard_event(&mhi_cntrl->mhi_dev->dev);
|
||||
mhi_cntrl->runtime_get(mhi_cntrl, mhi_cntrl->priv_data);
|
||||
|
||||
mhi_force_reg_write(mhi_cntrl);
|
||||
|
||||
ret = wait_event_timeout(mhi_cntrl->state_event,
|
||||
@ -1517,9 +1518,11 @@ int __mhi_device_get_sync(struct mhi_controller *mhi_cntrl)
|
||||
read_lock_bh(&mhi_cntrl->pm_lock);
|
||||
mhi_cntrl->wake_put(mhi_cntrl, false);
|
||||
read_unlock_bh(&mhi_cntrl->pm_lock);
|
||||
mhi_cntrl->runtime_put(mhi_cntrl, mhi_cntrl->priv_data);
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
mhi_cntrl->runtime_put(mhi_cntrl, mhi_cntrl->priv_data);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -1579,9 +1582,7 @@ void mhi_device_put(struct mhi_device *mhi_dev, int vote)
|
||||
if (vote & MHI_VOTE_DEVICE) {
|
||||
atomic_dec(&mhi_dev->dev_vote);
|
||||
read_lock_bh(&mhi_cntrl->pm_lock);
|
||||
if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
|
||||
mhi_trigger_resume(mhi_cntrl);
|
||||
|
||||
mhi_trigger_resume(mhi_cntrl);
|
||||
mhi_cntrl->wake_put(mhi_cntrl, false);
|
||||
read_unlock_bh(&mhi_cntrl->pm_lock);
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user