Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=e17a06badaedba89fad989eed409661c89a22e04
Commit:     e17a06badaedba89fad989eed409661c89a22e04
Parent:     51a99c0428cc6d3a442eef1c9046099c9383d72b
Author:     Hans Verkuil <[EMAIL PROTECTED]>
AuthorDate: Sat Aug 18 15:48:42 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Tue Oct 9 22:05:37 2007 -0300

    V4L/DVB (6050): ivtv: retry/timer improvements
    
    - Give up frame after three retries.
    - When the last capture/decode ends, make sure to delete the dma_timer.
    
    Signed-off-by: Hans Verkuil <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
---
 drivers/media/video/ivtv/ivtv-irq.c     |    4 ++++
 drivers/media/video/ivtv/ivtv-streams.c |    2 ++
 2 files changed, 6 insertions(+), 0 deletions(-)

diff --git a/drivers/media/video/ivtv/ivtv-irq.c 
b/drivers/media/video/ivtv/ivtv-irq.c
index 7272f1a..d68853f 100644
--- a/drivers/media/video/ivtv/ivtv-irq.c
+++ b/drivers/media/video/ivtv/ivtv-irq.c
@@ -494,7 +494,9 @@ static void ivtv_irq_dma_read(struct ivtv *itv)
                                        s->sg_processed, s->sg_processing_size, 
itv->dma_retries);
                        write_reg(read_reg(IVTV_REG_DMASTATUS) & 3, 
IVTV_REG_DMASTATUS);
                        if (itv->dma_retries == 3) {
+                               /* Too many retries, give up on this frame */
                                itv->dma_retries = 0;
+                               s->sg_processed = s->sg_processing_size;
                        }
                        else {
                                /* Retry, starting with the first xfer segment.
@@ -554,7 +556,9 @@ static void ivtv_irq_enc_dma_complete(struct ivtv *itv)
                        s->dma_offset, s->sg_processed, s->sg_processing_size, 
itv->dma_retries);
                write_reg(read_reg(IVTV_REG_DMASTATUS) & 3, IVTV_REG_DMASTATUS);
                if (itv->dma_retries == 3) {
+                       /* Too many retries, give up on this frame */
                        itv->dma_retries = 0;
+                       s->sg_processed = s->sg_processing_size;
                }
                else {
                        /* Retry, starting with the first xfer segment.
diff --git a/drivers/media/video/ivtv/ivtv-streams.c 
b/drivers/media/video/ivtv/ivtv-streams.c
index 4272fbc..2e63201 100644
--- a/drivers/media/video/ivtv/ivtv-streams.c
+++ b/drivers/media/video/ivtv/ivtv-streams.c
@@ -816,6 +816,7 @@ int ivtv_stop_v4l2_encode_stream(struct ivtv_stream *s, int 
gop_end)
 
        /* Set the following Interrupt mask bits for capture */
        ivtv_set_irq_mask(itv, IVTV_IRQ_MASK_CAPTURE);
+       del_timer(&itv->dma_timer);
 
        /* event notification (off) */
        if (test_and_clear_bit(IVTV_F_I_DIG_RST, &itv->i_flags)) {
@@ -873,6 +874,7 @@ int ivtv_stop_v4l2_decode_stream(struct ivtv_stream *s, int 
flags, u64 pts)
        ivtv_vapi(itv, CX2341X_DEC_SET_EVENT_NOTIFICATION, 4, 0, 0, 
IVTV_IRQ_DEC_AUD_MODE_CHG, -1);
 
        ivtv_set_irq_mask(itv, IVTV_IRQ_MASK_DECODE);
+       del_timer(&itv->dma_timer);
 
        clear_bit(IVTV_F_S_NEEDS_DATA, &s->s_flags);
        clear_bit(IVTV_F_S_STREAMING, &s->s_flags);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to