bus: mhi: core: Trigger host resume if suspended during mhi_device_get()
authorBhaumik Bhatt <bbhatt@codeaurora.org>
Tue, 29 Sep 2020 17:52:04 +0000 (23:22 +0530)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 2 Oct 2020 09:33:46 +0000 (11:33 +0200)
It is possible that the host may be suspending or suspended and may
not allow an outgoing device wake assert immediately if a client has
requested for it. Ensure that the host wakes up and allows for it so
the client does not have to wait for an external trigger or an
outgoing packet to be queued for the host resume to occur.

Reviewed-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Signed-off-by: Bhaumik Bhatt <bbhatt@codeaurora.org>
Signed-off-by: Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>
Link: https://lore.kernel.org/r/20200929175218.8178-6-manivannan.sadhasivam@linaro.org
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/bus/mhi/core/pm.c

index b227d415e937a8fcf960f87b16ccc15543283db5..27bb471c8f4eb6e12d42eb1e4c45b39b7c65da2a 100644 (file)
@@ -1112,6 +1112,9 @@ void mhi_device_get(struct mhi_device *mhi_dev)
 
        mhi_dev->dev_wake++;
        read_lock_bh(&mhi_cntrl->pm_lock);
+       if (MHI_PM_IN_SUSPEND_STATE(mhi_cntrl->pm_state))
+               mhi_trigger_resume(mhi_cntrl);
+
        mhi_cntrl->wake_get(mhi_cntrl, true);
        read_unlock_bh(&mhi_cntrl->pm_lock);
 }