spin_unlock_irqrestore(&video->lock, flags);
 }
 
-static void aspeed_video_irq_res_change(struct aspeed_video *video)
+static void aspeed_video_irq_res_change(struct aspeed_video *video, ulong delay)
 {
        dev_dbg(video->dev, "Resolution changed; resetting\n");
 
        aspeed_video_off(video);
        aspeed_video_bufs_done(video, VB2_BUF_STATE_ERROR);
 
-       schedule_delayed_work(&video->res_work, RESOLUTION_CHANGE_DELAY);
+       schedule_delayed_work(&video->res_work, delay);
 }
 
 static irqreturn_t aspeed_video_irq(int irq, void *arg)
         * re-initialize
         */
        if (sts & VE_INTERRUPT_MODE_DETECT_WD) {
-               aspeed_video_irq_res_change(video);
+               aspeed_video_irq_res_change(video, 0);
                return IRQ_HANDLED;
        }
 
                         * Signal acquired while NOT doing resolution
                         * detection; reset the engine and re-initialize
                         */
-                       aspeed_video_irq_res_change(video);
+                       aspeed_video_irq_res_change(video,
+                                                   RESOLUTION_CHANGE_DELAY);
                        return IRQ_HANDLED;
                }
        }