diff --git a/drivers/platform/msm/mhi_dev/mhi.c b/drivers/platform/msm/mhi_dev/mhi.c index da7bc72af9f5..565c9d19a108 100644 --- a/drivers/platform/msm/mhi_dev/mhi.c +++ b/drivers/platform/msm/mhi_dev/mhi.c @@ -3355,7 +3355,8 @@ static void mhi_dev_enable(struct work_struct *work) "Cleared reset before waiting for M0\n"); } - while (state != MHI_DEV_M0_STATE && max_cnt < MHI_SUSPEND_TIMEOUT) { + while (state != MHI_DEV_M0_STATE && + ((max_cnt < MHI_SUSPEND_TIMEOUT) || mhi->no_m0_timeout)) { /* Wait for Host to set the M0 state */ msleep(MHI_SUSPEND_MIN); rc = mhi_dev_mmio_get_mhi_state(mhi, &state, &mhi_reset); @@ -3624,6 +3625,9 @@ static int get_device_tree_data(struct platform_device *pdev) mhi->enable_m2 = of_property_read_bool((&pdev->dev)->of_node, "qcom,enable-m2"); + mhi->no_m0_timeout = of_property_read_bool((&pdev->dev)->of_node, + "qcom,no-m0-timeout"); + mhi_log(MHI_MSG_VERBOSE, "acquiring wakelock\n"); return 0; diff --git a/drivers/platform/msm/mhi_dev/mhi.h b/drivers/platform/msm/mhi_dev/mhi.h index 47f77aab4a91..47a3fd368082 100644 --- a/drivers/platform/msm/mhi_dev/mhi.h +++ b/drivers/platform/msm/mhi_dev/mhi.h @@ -595,9 +595,13 @@ struct mhi_dev { /*Register for interrupt*/ bool mhi_int; bool mhi_int_en; + /* Enable M2 autonomous mode from MHI */ bool enable_m2; + /* Dont timeout waiting for M0 */ + bool no_m0_timeout; + /* Registered client callback list */ struct list_head client_cb_list; /* Tx, Rx DMA channels */