[media] v4l: omap4iss: resizer: Stop the whole resizer to avoid FIFO overflows
authorLaurent Pinchart <laurent.pinchart@ideasonboard.com>
Wed, 4 Sep 2013 12:48:20 +0000 (09:48 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Wed, 11 Dec 2013 09:00:34 +0000 (07:00 -0200)
When stopping the resizer due to a buffer underrun, disabling RZA only
produces input FIFO overflows, most probably when the next frame is
received. Disable the whole resizer to work around the problem.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/staging/media/omap4iss/iss_resizer.c

index 793325c33f814d08deb7413c23a73ee890a444a3..5bf50808acc36120e29f44637cf65bd42847c82e 100644 (file)
@@ -266,10 +266,12 @@ static void resizer_configure(struct iss_resizer_device *resizer)
 
 static void resizer_isr_buffer(struct iss_resizer_device *resizer)
 {
-       struct iss_device *iss = to_iss_device(resizer);
        struct iss_buffer *buffer;
 
-       iss_reg_clr(iss, OMAP4_ISS_MEM_ISP_RESIZER, RZA_EN, RSZ_EN_EN);
+       /* The whole resizer needs to be stopped. Disabling RZA only produces
+        * input FIFO overflows, most probably when the next frame is received.
+        */
+       resizer_enable(resizer, 0);
 
        buffer = omap4iss_video_buffer_next(&resizer->video_out);
        if (buffer == NULL)
@@ -277,7 +279,7 @@ static void resizer_isr_buffer(struct iss_resizer_device *resizer)
 
        resizer_set_outaddr(resizer, buffer->iss_addr);
 
-       iss_reg_set(iss, OMAP4_ISS_MEM_ISP_RESIZER, RZA_EN, RSZ_EN_EN);
+       resizer_enable(resizer, 1);
 }
 
 /*