u8 request = msg->request & ~DP_AUX_I2C_MOT;
        int ret = 0;
 
+       mutex_lock(&ctx->aux_lock);
        pm_runtime_get_sync(dev);
        msg->reply = 0;
        switch (request) {
                                        msg->size, msg->buffer);
        pm_runtime_mark_last_busy(dev);
        pm_runtime_put_autosuspend(dev);
+       mutex_unlock(&ctx->aux_lock);
 
        return ret;
 }
        ctx->connector = NULL;
        anx7625_dp_stop(ctx);
 
-       pm_runtime_put_sync(dev);
+       mutex_lock(&ctx->aux_lock);
+       pm_runtime_put_sync_suspend(dev);
+       mutex_unlock(&ctx->aux_lock);
 }
 
 static enum drm_connector_status
 
        mutex_init(&platform->lock);
        mutex_init(&platform->hdcp_wq_lock);
+       mutex_init(&platform->aux_lock);
 
        INIT_DELAYED_WORK(&platform->hdcp_work, hdcp_check_work_func);
        platform->hdcp_workqueue = create_workqueue("hdcp workqueue");
 
        struct workqueue_struct *hdcp_workqueue;
        /* Lock for hdcp work queue */
        struct mutex hdcp_wq_lock;
+       /* Lock for aux transfer and disable */
+       struct mutex aux_lock;
        char edid_block;
        struct display_timing dt;
        u8 display_timing_valid;