Commit:     4d8451700171d6bbc254191880f86bfdeec2f74f
Parent:     ba70d59bb987110c4394e896b299f9726609aa33
AuthorDate: Tue May 1 09:25:56 2007 -0300
Committer:  Mauro Carvalho Chehab <[EMAIL PROTECTED]>
CommitDate: Wed May 9 10:12:35 2007 -0300

    V4L/DVB (5578): Workaround for bad hardare/firmware on some pluto2 devices
    pluto2_driver: Workaround for pluto2 card reporting wrong number of
    received packets and flooding system with interrupts.
    This patch constitutes a workaround for a hardware/firmware problem of the
    pluto2-based card (e.g., Satelco EasyWatch).
    It can happen in rare cases that the card gets into a mode where it
    always reports back a number of received packets (nbpackets) which is
    larger than the maximum permissible number of packets (TS_DMA_PACKETS).
    The workaround that is already in the driver in function pluto_dma_end
    reports back zero received packets. In spite of the (in reality) zero
    received packets the card continues to generate interrupts at a very
    high rate, which can effectively stall the system.
    The patch resets the TS logic, which puts the card back into normal
    Signed-off-by: Holger Magnussen <[EMAIL PROTECTED]>
    Signed-off-by: Andreas Oberritter <[EMAIL PROTECTED]>
    Signed-off-by: Mauro Carvalho Chehab <[EMAIL PROTECTED]>
 drivers/media/dvb/pluto2/pluto2.c |    8 ++++++++
 1 files changed, 8 insertions(+), 0 deletions(-)

diff --git a/drivers/media/dvb/pluto2/pluto2.c 
index 058df5c..08a2599 100644
--- a/drivers/media/dvb/pluto2/pluto2.c
+++ b/drivers/media/dvb/pluto2/pluto2.c
@@ -293,12 +293,20 @@ static void pluto_dma_end(struct pluto *pluto, unsigned 
int nbpackets)
         *     but no packets have been transfered.
         * [2] Sometimes (actually very often) NBPACKETS stays at zero
         *     although one packet has been transfered.
+        * [3] Sometimes (actually rarely), the card gets into an erroneous
+        *     mode where it continuously generates interrupts, claiming it
+        *     has recieved nbpackets>TS_DMA_PACKETS packets, but no packet
+        *     has been transfered. Only a reset seems to solve this
        if ((nbpackets == 0) || (nbpackets > TS_DMA_PACKETS)) {
                unsigned int i = 0;
                while (pluto->dma_buf[i] == 0x47)
                        i += 188;
                nbpackets = i / 188;
+               if (i == 0) {
+                       pluto_reset_ts(pluto, 1);
+                       dev_printk(KERN_DEBUG, &pluto->pdev->dev, "resetting TS 
because of invalid packet counter\n");
+               }
        dvb_dmx_swfilter_packets(&pluto->demux, pluto->dma_buf, nbpackets);
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

Reply via email to