diff options
-rw-r--r-- | linux/drivers/media/video/bttv-driver.c | 20 | ||||
-rw-r--r-- | v4l/ChangeLog | 8 |
2 files changed, 24 insertions, 4 deletions
diff --git a/linux/drivers/media/video/bttv-driver.c b/linux/drivers/media/video/bttv-driver.c index fc3cfe53b..839e69dc9 100644 --- a/linux/drivers/media/video/bttv-driver.c +++ b/linux/drivers/media/video/bttv-driver.c @@ -1,5 +1,5 @@ /* - $Id: bttv-driver.c,v 1.61 2005/10/09 18:07:06 mchehab Exp $ + $Id: bttv-driver.c,v 1.62 2005/10/15 17:02:48 nsh Exp $ bttv - Bt848 frame grabber driver @@ -3764,10 +3764,22 @@ static irqreturn_t bttv_irq(int irq, void *dev_id, struct pt_regs * regs) count++; if (count > 4) { - btwrite(0, BT848_INT_MASK); - printk(KERN_ERR - "bttv%d: IRQ lockup, cleared int mask [", btv->c.nr); + + if (count > 8 || !(astat & BT848_INT_GPINT)) { + btwrite(0, BT848_INT_MASK); + + printk(KERN_ERR + "bttv%d: IRQ lockup, cleared int mask [", btv->c.nr); + } else { + printk(KERN_ERR + "bttv%d: IRQ lockup, clearing GPINT from int mask [", btv->c.nr); + + btwrite(btread(BT848_INT_MASK) & (-1 ^ BT848_INT_GPINT), + BT848_INT_MASK); + }; + bttv_print_irqbits(stat,astat); + printk("]\n"); } } diff --git a/v4l/ChangeLog b/v4l/ChangeLog index 23960488f..e64766483 100644 --- a/v4l/ChangeLog +++ b/v4l/ChangeLog @@ -1,3 +1,11 @@ +2005-10-15 17:01 nshmyrev + + * ../linux/drivers/media/video/bttv-driver.c: (bttv_irq): + + More intellect on clearing in bits on irq lock. + + Signed-off-by: Nickolay V. Shmyrev <nshmyrev@yandex.ru> + 2005-10-15 14:14 nshmyrev * ../linux/Documentation/video4linux/CARDLIST.saa7134: |