dev->dec_ops[CEDRUS_CODEC_MPEG2] = &cedrus_dec_ops_mpeg2;
 
        mutex_init(&dev->dev_mutex);
-       spin_lock_init(&dev->irq_lock);
 
        ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev);
        if (ret) {
 
 
        /* Device file mutex */
        struct mutex            dev_mutex;
-       /* Interrupt spinlock */
-       spinlock_t              irq_lock;
 
        void __iomem            *base;
 
 
        struct cedrus_dev *dev = ctx->dev;
        struct cedrus_run run = { 0 };
        struct media_request *src_req;
-       unsigned long flags;
 
        run.src = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
        run.dst = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
        if (src_req)
                v4l2_ctrl_request_setup(src_req, &ctx->hdl);
 
-       spin_lock_irqsave(&ctx->dev->irq_lock, flags);
-
        switch (ctx->src_fmt.pixelformat) {
        case V4L2_PIX_FMT_MPEG2_SLICE:
                run.mpeg2.slice_params = cedrus_find_control_data(ctx,
 
        dev->dec_ops[ctx->current_codec]->setup(ctx, &run);
 
-       spin_unlock_irqrestore(&ctx->dev->irq_lock, flags);
-
        /* Complete request(s) controls if needed. */
 
        if (src_req)
                v4l2_ctrl_request_complete(src_req, &ctx->hdl);
 
-       spin_lock_irqsave(&ctx->dev->irq_lock, flags);
-
        dev->dec_ops[ctx->current_codec]->trigger(ctx);
-
-       spin_unlock_irqrestore(&ctx->dev->irq_lock, flags);
 }
 
        struct vb2_v4l2_buffer *src_buf, *dst_buf;
        enum vb2_buffer_state state;
        enum cedrus_irq_status status;
-       unsigned long flags;
-
-       spin_lock_irqsave(&dev->irq_lock, flags);
 
        ctx = v4l2_m2m_get_curr_priv(dev->m2m_dev);
        if (!ctx) {
                v4l2_err(&dev->v4l2_dev,
                         "Instance released before the end of transaction\n");
-               spin_unlock_irqrestore(&dev->irq_lock, flags);
-
                return IRQ_NONE;
        }
 
        status = dev->dec_ops[ctx->current_codec]->irq_status(ctx);
-       if (status == CEDRUS_IRQ_NONE) {
-               spin_unlock_irqrestore(&dev->irq_lock, flags);
+       if (status == CEDRUS_IRQ_NONE)
                return IRQ_NONE;
-       }
 
        dev->dec_ops[ctx->current_codec]->irq_disable(ctx);
        dev->dec_ops[ctx->current_codec]->irq_clear(ctx);
        if (!src_buf || !dst_buf) {
                v4l2_err(&dev->v4l2_dev,
                         "Missing source and/or destination buffers\n");
-               spin_unlock_irqrestore(&dev->irq_lock, flags);
-
                return IRQ_HANDLED;
        }
 
        v4l2_m2m_buf_done(src_buf, state);
        v4l2_m2m_buf_done(dst_buf, state);
 
-       spin_unlock_irqrestore(&dev->irq_lock, flags);
-
        v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx);
 
        return IRQ_HANDLED;
 
 {
        struct cedrus_ctx *ctx = vb2_get_drv_priv(vq);
        struct vb2_v4l2_buffer *vbuf;
-       unsigned long flags;
 
        for (;;) {
-               spin_lock_irqsave(&ctx->dev->irq_lock, flags);
-
                if (V4L2_TYPE_IS_OUTPUT(vq->type))
                        vbuf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
                else
                        vbuf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
 
-               spin_unlock_irqrestore(&ctx->dev->irq_lock, flags);
-
                if (!vbuf)
                        return;