aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c')
-rw-r--r--drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c11
1 files changed, 5 insertions, 6 deletions
diff --git a/drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c b/drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c
index 9a4f8ad..fc6016c 100644
--- a/drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c
+++ b/drivers/media/video/samsung/fimg2d4x-exynos4/fimg2d4x_blt.c
@@ -38,7 +38,9 @@ static inline void fimg2d4x_blit_wait(struct fimg2d_control *info, struct fimg2d
fimg2d_dump_command(cmd);
if (!fimg2d4x_blit_done_status(info))
- info->err = true; /* device error */
+ printk(KERN_ERR "[%s] G2D operation is not finished", __func__);
+
+ fimg2d4x_sw_reset(info);
}
}
@@ -63,19 +65,16 @@ void fimg2d4x_bitblt(struct fimg2d_control *info)
fimg2d_clk_on(info);
while (1) {
+ spin_lock(&info->bltlock);
cmd = fimg2d_get_first_command(info);
if (!cmd) {
- spin_lock(&info->bltlock);
atomic_set(&info->active, 0);
spin_unlock(&info->bltlock);
break;
}
+ spin_unlock(&info->bltlock);
ctx = cmd->ctx;
- if (info->err) {
- printk(KERN_ERR "[%s] device error\n", __func__);
- goto blitend;
- }
atomic_set(&info->busy, 1);