sane irq initialization in sedlbauer hisax
authorKarsten Keil <kkeil@suse.de>
Tue, 17 Jul 2007 11:04:18 +0000 (04:04 -0700)
committerLinus Torvalds <torvalds@woody.linux-foundation.org>
Tue, 17 Jul 2007 17:23:05 +0000 (10:23 -0700)
The interrupts schould be disabled until the driver
is ready and the IRQ function was registered.

Thanks to Bastian Friedrich  and Thomas Voegtle for spotting this.

Signed-off-by: Karsten Keil <kkeil@suse.de>
Signed-off-by: Bastian Friedrich <bastian@bastian-friedrich.de>
Signed-off-by: Thomas Voegtle <tv@lio96.de>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
drivers/isdn/hisax/sedlbauer.c

index 030d1625c5c6d78c88cc2db80974c86ffd6c5ed9..ad06f3cc60fb9c478fdbb2c7560e95b9996e4212 100644 (file)
@@ -451,6 +451,9 @@ Sedl_card_msg(struct IsdnCardState *cs, int mt, void *arg)
                        spin_unlock_irqrestore(&cs->lock, flags);
                        return(0);
                case CARD_RELEASE:
+                       if (cs->hw.sedl.bus == SEDL_BUS_PCI)
+                               /* disable all IRQ */
+                               byteout(cs->hw.sedl.cfg_reg+ 5, 0);
                        if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) {
                                spin_lock_irqsave(&cs->lock, flags);
                                writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx,
@@ -468,6 +471,9 @@ Sedl_card_msg(struct IsdnCardState *cs, int mt, void *arg)
                        return(0);
                case CARD_INIT:
                        spin_lock_irqsave(&cs->lock, flags);
+                       if (cs->hw.sedl.bus == SEDL_BUS_PCI)
+                               /* enable all IRQ */
+                               byteout(cs->hw.sedl.cfg_reg+ 5, 0x02);
                        reset_sedlbauer(cs);
                        if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) {
                                clear_pending_isac_ints(cs);
@@ -667,7 +673,7 @@ setup_sedlbauer(struct IsdnCard *card)
                byteout(cs->hw.sedl.cfg_reg, 0xff);
                byteout(cs->hw.sedl.cfg_reg, 0x00);
                byteout(cs->hw.sedl.cfg_reg+ 2, 0xdd);
-               byteout(cs->hw.sedl.cfg_reg+ 5, 0x02);
+               byteout(cs->hw.sedl.cfg_reg+ 5, 0); /* disable all IRQ */
                byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_on);
                mdelay(2);
                byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_off);