Re: [PATCH 4/4] pxa_camera: Fix overrun condition on last buffer

2009-03-11 Thread Guennadi Liakhovetski
On Thu, 5 Mar 2009, Robert Jarzmik wrote:

 The last buffer queued will often overrun, as the DMA chain
 is finished, and the time the dma irq handler is activated,
 the QIF fifos are filled by the sensor.
 
 The fix is to ignore the overrun condition on the last
 queued buffer, and restart the capture only on intermediate
 buffers of the chain.
 
 Signed-off-by: Robert Jarzmik robert.jarz...@free.fr
 ---
  drivers/media/video/pxa_camera.c |8 ++--
  1 files changed, 6 insertions(+), 2 deletions(-)
 
 diff --git a/drivers/media/video/pxa_camera.c 
 b/drivers/media/video/pxa_camera.c
 index 16bf0a3..dd56c35 100644
 --- a/drivers/media/video/pxa_camera.c
 +++ b/drivers/media/video/pxa_camera.c
 @@ -734,14 +734,18 @@ static void pxa_camera_dma_irq(int channel, struct 
 pxa_camera_dev *pcdev,
   status  DCSR_ENDINTR ? EOF  : , vb, DDADR(channel));
  
   if (status  DCSR_ENDINTR) {
 - if (camera_status  overrun) {
 + /*
 +  * It's normal if the last frame creates an overrun, as there
 +  * are no more DMA descriptors to fetch from QIF fifos
 +  */
 + if (camera_status  overrun
 +  !list_is_last(pcdev-capture.next, pcdev-capture)) {

On a second look - didn't you want to test for -active being the last?

Thanks
Guennadi
---
Guennadi Liakhovetski, Ph.D.
Freelance Open-Source Software Developer
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


Re: [PATCH 4/4] pxa_camera: Fix overrun condition on last buffer

2009-03-09 Thread Robert Jarzmik
Guennadi Liakhovetski g.liakhovet...@gmx.de writes:

 On Thu, 5 Mar 2009, Robert Jarzmik wrote:

 The last buffer queued will often overrun, as the DMA chain
 is finished, and the time the dma irq handler is activated,

 s/and the time/and during the time/ ?
If you wish, or might be simply and before the dma irq handler is
activated. As you see fit.

 +if (camera_status  overrun
 + !list_is_last(pcdev-capture.next, pcdev-capture)) {
  dev_dbg(pcdev-dev, FIFO overrun! CISR: %x\n,
  camera_status);
  pxa_camera_stop_capture(pcdev);
  pxa_camera_start_capture(pcdev);
  goto out;
  }
 -
  buf-active_dma = ~act_dma;

 This empty like removal doesn't belong to the fix, I'll remove it when 
 committing, and amend the commit message as above. Please, comment if you 
 disagree.
I totally agree with you, remove that removal :)

Cheers.

--
Robert
--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH 4/4] pxa_camera: Fix overrun condition on last buffer

2009-03-05 Thread Robert Jarzmik
The last buffer queued will often overrun, as the DMA chain
is finished, and the time the dma irq handler is activated,
the QIF fifos are filled by the sensor.

The fix is to ignore the overrun condition on the last
queued buffer, and restart the capture only on intermediate
buffers of the chain.

Signed-off-by: Robert Jarzmik robert.jarz...@free.fr
---
 drivers/media/video/pxa_camera.c |8 ++--
 1 files changed, 6 insertions(+), 2 deletions(-)

diff --git a/drivers/media/video/pxa_camera.c b/drivers/media/video/pxa_camera.c
index 16bf0a3..dd56c35 100644
--- a/drivers/media/video/pxa_camera.c
+++ b/drivers/media/video/pxa_camera.c
@@ -734,14 +734,18 @@ static void pxa_camera_dma_irq(int channel, struct 
pxa_camera_dev *pcdev,
status  DCSR_ENDINTR ? EOF  : , vb, DDADR(channel));
 
if (status  DCSR_ENDINTR) {
-   if (camera_status  overrun) {
+   /*
+* It's normal if the last frame creates an overrun, as there
+* are no more DMA descriptors to fetch from QIF fifos
+*/
+   if (camera_status  overrun
+!list_is_last(pcdev-capture.next, pcdev-capture)) {
dev_dbg(pcdev-dev, FIFO overrun! CISR: %x\n,
camera_status);
pxa_camera_stop_capture(pcdev);
pxa_camera_start_capture(pcdev);
goto out;
}
-
buf-active_dma = ~act_dma;
if (!buf-active_dma)
pxa_camera_wakeup(pcdev, vb, buf);
-- 
1.5.6.5

--
To unsubscribe from this list: send the line unsubscribe linux-media in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html