Commit 2b0287ef authored by Jae Hyun Yoo's avatar Jae Hyun Yoo Committed by Mauro Carvalho Chehab

media: aspeed: use different delays for triggering VE H/W reset

In case of watchdog timeout detected while doing mode detection,
it's better triggering video engine hardware reset immediately so
this commit fixes code for the case. Other than the case, it will
trigger video engine hardware reset after RESOLUTION_CHANGE_DELAY.
Signed-off-by: default avatarJae Hyun Yoo <jae.hyun.yoo@linux.intel.com>
Reviewed-by: default avatarEddie James <eajames@linux.ibm.com>
Signed-off-by: default avatarHans Verkuil <hverkuil-cisco@xs4all.nl>
Signed-off-by: default avatarMauro Carvalho Chehab <mchehab+samsung@kernel.org>
parent 99914b61
...@@ -522,7 +522,7 @@ static void aspeed_video_bufs_done(struct aspeed_video *video, ...@@ -522,7 +522,7 @@ static void aspeed_video_bufs_done(struct aspeed_video *video,
spin_unlock_irqrestore(&video->lock, flags); 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"); dev_dbg(video->dev, "Resolution changed; resetting\n");
...@@ -532,7 +532,7 @@ static void aspeed_video_irq_res_change(struct aspeed_video *video) ...@@ -532,7 +532,7 @@ static void aspeed_video_irq_res_change(struct aspeed_video *video)
aspeed_video_off(video); aspeed_video_off(video);
aspeed_video_bufs_done(video, VB2_BUF_STATE_ERROR); 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) static irqreturn_t aspeed_video_irq(int irq, void *arg)
...@@ -545,7 +545,7 @@ static irqreturn_t aspeed_video_irq(int irq, void *arg) ...@@ -545,7 +545,7 @@ static irqreturn_t aspeed_video_irq(int irq, void *arg)
* re-initialize * re-initialize
*/ */
if (sts & VE_INTERRUPT_MODE_DETECT_WD) { if (sts & VE_INTERRUPT_MODE_DETECT_WD) {
aspeed_video_irq_res_change(video); aspeed_video_irq_res_change(video, 0);
return IRQ_HANDLED; return IRQ_HANDLED;
} }
...@@ -563,7 +563,8 @@ static irqreturn_t aspeed_video_irq(int irq, void *arg) ...@@ -563,7 +563,8 @@ static irqreturn_t aspeed_video_irq(int irq, void *arg)
* Signal acquired while NOT doing resolution * Signal acquired while NOT doing resolution
* detection; reset the engine and re-initialize * 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; return IRQ_HANDLED;
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment