struct completion video_comp;
        struct mutex dev_mutex;
        struct mutex cmd_mutex;
-       struct mutex clk_mutex;
        spinlock_t intr_lock; /* Protect interrupt ctrl register */
 
        u32 err_work_state;
                clk_disable_unprepare(msm_host->bus_clks[i]);
 }
 
+int msm_dsi_runtime_suspend(struct device *dev)
+{
+       struct platform_device *pdev = to_platform_device(dev);
+       struct msm_dsi *msm_dsi = platform_get_drvdata(pdev);
+       struct mipi_dsi_host *host = msm_dsi->host;
+       struct msm_dsi_host *msm_host = to_msm_dsi_host(host);
+
+       if (!msm_host->cfg_hnd)
+               return 0;
+
+       dsi_bus_clk_disable(msm_host);
+
+       return 0;
+}
+
+int msm_dsi_runtime_resume(struct device *dev)
+{
+       struct platform_device *pdev = to_platform_device(dev);
+       struct msm_dsi *msm_dsi = platform_get_drvdata(pdev);
+       struct mipi_dsi_host *host = msm_dsi->host;
+       struct msm_dsi_host *msm_host = to_msm_dsi_host(host);
+
+       if (!msm_host->cfg_hnd)
+               return 0;
+
+       return dsi_bus_clk_enable(msm_host);
+}
+
 static int dsi_link_clk_enable_6g(struct msm_dsi_host *msm_host)
 {
        int ret;
        }
 }
 
-static int dsi_clk_ctrl(struct msm_dsi_host *msm_host, bool enable)
-{
-       int ret = 0;
-
-       mutex_lock(&msm_host->clk_mutex);
-       if (enable) {
-               ret = dsi_bus_clk_enable(msm_host);
-               if (ret) {
-                       pr_err("%s: Can not enable bus clk, %d\n",
-                               __func__, ret);
-                       goto unlock_ret;
-               }
-               ret = dsi_link_clk_enable(msm_host);
-               if (ret) {
-                       pr_err("%s: Can not enable link clk, %d\n",
-                               __func__, ret);
-                       dsi_bus_clk_disable(msm_host);
-                       goto unlock_ret;
-               }
-       } else {
-               dsi_link_clk_disable(msm_host);
-               dsi_bus_clk_disable(msm_host);
-       }
-
-unlock_ret:
-       mutex_unlock(&msm_host->clk_mutex);
-       return ret;
-}
-
 static int dsi_calc_clk_rate(struct msm_dsi_host *msm_host)
 {
        struct drm_display_mode *mode = msm_host->mode;
        }
 
        msm_host->pdev = pdev;
+       msm_dsi->host = &msm_host->base;
 
        ret = dsi_host_parse_dt(msm_host);
        if (ret) {
        init_completion(&msm_host->video_comp);
        mutex_init(&msm_host->dev_mutex);
        mutex_init(&msm_host->cmd_mutex);
-       mutex_init(&msm_host->clk_mutex);
        spin_lock_init(&msm_host->intr_lock);
 
        /* setup workqueue */
        INIT_WORK(&msm_host->err_work, dsi_err_worker);
        INIT_WORK(&msm_host->hpd_work, dsi_hpd_worker);
 
-       msm_dsi->host = &msm_host->base;
        msm_dsi->id = msm_host->id;
 
        DBG("Dsi Host %d initialized", msm_host->id);
                msm_host->workqueue = NULL;
        }
 
-       mutex_destroy(&msm_host->clk_mutex);
        mutex_destroy(&msm_host->cmd_mutex);
        mutex_destroy(&msm_host->dev_mutex);
 
         * mdp clock need to be enabled to receive dsi interrupt
         */
        pm_runtime_get_sync(&msm_host->pdev->dev);
-       dsi_clk_ctrl(msm_host, 1);
+       dsi_link_clk_enable(msm_host);
 
        /* TODO: vote for bus bandwidth */
 
 
        /* TODO: unvote for bus bandwidth */
 
-       dsi_clk_ctrl(msm_host, 0);
+       dsi_link_clk_disable(msm_host);
        pm_runtime_put_autosuspend(&msm_host->pdev->dev);
 }
 
         * and only turned on before MDP START.
         * This part of code should be enabled once mdp driver support it.
         */
-       /* if (msm_panel->mode == MSM_DSI_CMD_MODE)
-               dsi_clk_ctrl(msm_host, 0); */
+       /* if (msm_panel->mode == MSM_DSI_CMD_MODE) {
+        *      dsi_link_clk_disable(msm_host);
+        *      pm_runtime_put_autosuspend(&msm_host->pdev->dev);
+        * }
+        */
 
        return 0;
 }
        }
 
        pm_runtime_get_sync(&msm_host->pdev->dev);
-       ret = dsi_clk_ctrl(msm_host, 1);
+       ret = dsi_link_clk_enable(msm_host);
        if (ret) {
-               pr_err("%s: failed to enable clocks. ret=%d\n", __func__, ret);
+               pr_err("%s: failed to enable link clocks. ret=%d\n",
+                      __func__, ret);
                goto fail_disable_reg;
        }
 
        return 0;
 
 fail_disable_clk:
-       dsi_clk_ctrl(msm_host, 0);
+       dsi_link_clk_disable(msm_host);
+       pm_runtime_put_autosuspend(&msm_host->pdev->dev);
 fail_disable_reg:
        dsi_host_regulator_disable(msm_host);
 unlock_ret:
 
        pinctrl_pm_select_sleep_state(&msm_host->pdev->dev);
 
-       dsi_clk_ctrl(msm_host, 0);
+       dsi_link_clk_disable(msm_host);
        pm_runtime_put_autosuspend(&msm_host->pdev->dev);
 
        dsi_host_regulator_disable(msm_host);