diff options
-rw-r--r-- | drivers/bus/mhi/host/main.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/drivers/bus/mhi/host/main.c b/drivers/bus/mhi/host/main.c index a7aa06b58d90..ee4b43b17e8a 100644 --- a/drivers/bus/mhi/host/main.c +++ b/drivers/bus/mhi/host/main.c @@ -482,13 +482,23 @@ irqreturn_t mhi_intvec_threaded_handler(int irq_number, void *priv) enum mhi_state state; enum mhi_pm_state pm_state = 0; enum mhi_ee_type ee; + int ret; + bool can_wake; + + can_wake = MHI_WAKE_DB_SET_VALID(mhi_cntrl->pm_state) && + MHI_WAKE_DB_CLEAR_VALID(mhi_cntrl->pm_state); - mhi_device_get_sync(mhi_cntrl->mhi_dev); + if (can_wake) { + ret = mhi_device_get_sync(mhi_cntrl->mhi_dev); + if (ret) + printk("%s %d: mhi get failed %d\n", __func__, __LINE__, ret); + } write_lock_irq(&mhi_cntrl->pm_lock); if (!MHI_REG_ACCESS_VALID(mhi_cntrl->pm_state)) { write_unlock_irq(&mhi_cntrl->pm_lock); - mhi_device_put(mhi_cntrl->mhi_dev); + if (can_wake) + mhi_device_put(mhi_cntrl->mhi_dev); goto exit_intvec; } @@ -505,7 +515,8 @@ irqreturn_t mhi_intvec_threaded_handler(int irq_number, void *priv) MHI_PM_SYS_ERR_DETECT); } write_unlock_irq(&mhi_cntrl->pm_lock); - mhi_device_put(mhi_cntrl->mhi_dev); + if (can_wake) + mhi_device_put(mhi_cntrl->mhi_dev); if (pm_state != MHI_PM_SYS_ERR_DETECT) goto exit_intvec; |