#include <linux/clk.h>
 #include <linux/pm_runtime.h>
 #include <linux/of.h>
+#include <linux/spinlock.h>
 
 #include <drm/drmP.h>
 #include <drm/exynos_drm.h>
        struct exynos_drm_ippdrv        ippdrv;
        struct resource *regs_res;
        void __iomem    *regs;
-       struct mutex    lock;
+       spinlock_t      lock;
        struct clk      *clocks[FIMC_CLKS_MAX];
        u32             clk_frequency;
        struct regmap   *sysreg;
        u32 cfg;
        u32 mask = 0x00000001 << buf_id;
        int ret = 0;
+       unsigned long flags;
 
        DRM_DEBUG_KMS("buf_id[%d]buf_type[%d]\n", buf_id, buf_type);
 
-       mutex_lock(&ctx->lock);
+       spin_lock_irqsave(&ctx->lock, flags);
 
        /* mask register set */
        cfg = fimc_read(ctx, EXYNOS_CIFCNTSEQ);
                fimc_mask_irq(ctx, false);
 
 err_unlock:
-       mutex_unlock(&ctx->lock);
+       spin_unlock_irqrestore(&ctx->lock, flags);
        return ret;
 }
 
 
        DRM_DEBUG_KMS("id[%d]ippdrv[0x%x]\n", ctx->id, (int)ippdrv);
 
-       mutex_init(&ctx->lock);
+       spin_lock_init(&ctx->lock);
        platform_set_drvdata(pdev, ctx);
 
        pm_runtime_set_active(dev);
        struct exynos_drm_ippdrv *ippdrv = &ctx->ippdrv;
 
        exynos_drm_ippdrv_unregister(ippdrv);
-       mutex_destroy(&ctx->lock);
 
        fimc_put_clocks(ctx);
        pm_runtime_set_suspended(dev);