cmd->mdp_ctx = param->mdp_ctx;
 
        ret = mdp_comp_clocks_on(&mdp->pdev->dev, cmd->comps, cmd->num_comps);
-       if (ret) {
-               dev_err(dev, "comp %d failed to enable clock!\n", ret);
+       if (ret)
                goto err_free_path;
-       }
 
        dma_sync_single_for_device(mdp->cmdq_clt->chan->mbox->dev,
                                   cmd->pkt.pa_base, cmd->pkt.cmd_buf_size,
 
                        dev_err(dev,
                                "Failed to enable clk %d. type:%d id:%d\n",
                                i, comp->type, comp->id);
-                       pm_runtime_put(comp->comp_dev);
-                       return ret;
+                       goto err_revert;
                }
        }
 
        return 0;
+
+err_revert:
+       while (--i >= 0) {
+               if (IS_ERR_OR_NULL(comp->clks[i]))
+                       continue;
+               clk_disable_unprepare(comp->clks[i]);
+       }
+       if (comp->comp_dev)
+               pm_runtime_put_sync(comp->comp_dev);
+
+       return ret;
 }
 
 void mdp_comp_clock_off(struct device *dev, struct mdp_comp *comp)
 
 int mdp_comp_clocks_on(struct device *dev, struct mdp_comp *comps, int num)
 {
-       int i;
+       int i, ret;
 
-       for (i = 0; i < num; i++)
-               if (mdp_comp_clock_on(dev, &comps[i]) != 0)
-                       return ++i;
+       for (i = 0; i < num; i++) {
+               ret = mdp_comp_clock_on(dev, &comps[i]);
+               if (ret)
+                       return ret;
+       }
 
        return 0;
 }