aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKarsten Keil <kkeil@suse.de>2007-07-17 07:04:18 -0400
committerLinus Torvalds <torvalds@woody.linux-foundation.org>2007-07-17 13:23:05 -0400
commitc713f57ed5eb2e073de9d60ee1da25939966647e (patch)
tree909f787b58247fb87e6a501919adc5290c46b0d5
parent2b7c30292af56e64feaecdbe97da57918927b730 (diff)
sane irq initialization in sedlbauer hisax
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>
-rw-r--r--drivers/isdn/hisax/sedlbauer.c8
1 files changed, 7 insertions, 1 deletions
diff --git a/drivers/isdn/hisax/sedlbauer.c b/drivers/isdn/hisax/sedlbauer.c
index 030d1625c5c6..ad06f3cc60fb 100644
--- a/drivers/isdn/hisax/sedlbauer.c
+++ b/drivers/isdn/hisax/sedlbauer.c
@@ -451,6 +451,9 @@ Sedl_card_msg(struct IsdnCardState *cs, int mt, void *arg)
451 spin_unlock_irqrestore(&cs->lock, flags); 451 spin_unlock_irqrestore(&cs->lock, flags);
452 return(0); 452 return(0);
453 case CARD_RELEASE: 453 case CARD_RELEASE:
454 if (cs->hw.sedl.bus == SEDL_BUS_PCI)
455 /* disable all IRQ */
456 byteout(cs->hw.sedl.cfg_reg+ 5, 0);
454 if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) { 457 if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) {
455 spin_lock_irqsave(&cs->lock, flags); 458 spin_lock_irqsave(&cs->lock, flags);
456 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, 459 writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx,
@@ -468,6 +471,9 @@ Sedl_card_msg(struct IsdnCardState *cs, int mt, void *arg)
468 return(0); 471 return(0);
469 case CARD_INIT: 472 case CARD_INIT:
470 spin_lock_irqsave(&cs->lock, flags); 473 spin_lock_irqsave(&cs->lock, flags);
474 if (cs->hw.sedl.bus == SEDL_BUS_PCI)
475 /* enable all IRQ */
476 byteout(cs->hw.sedl.cfg_reg+ 5, 0x02);
471 reset_sedlbauer(cs); 477 reset_sedlbauer(cs);
472 if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) { 478 if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) {
473 clear_pending_isac_ints(cs); 479 clear_pending_isac_ints(cs);
@@ -667,7 +673,7 @@ setup_sedlbauer(struct IsdnCard *card)
667 byteout(cs->hw.sedl.cfg_reg, 0xff); 673 byteout(cs->hw.sedl.cfg_reg, 0xff);
668 byteout(cs->hw.sedl.cfg_reg, 0x00); 674 byteout(cs->hw.sedl.cfg_reg, 0x00);
669 byteout(cs->hw.sedl.cfg_reg+ 2, 0xdd); 675 byteout(cs->hw.sedl.cfg_reg+ 2, 0xdd);
670 byteout(cs->hw.sedl.cfg_reg+ 5, 0x02); 676 byteout(cs->hw.sedl.cfg_reg+ 5, 0); /* disable all IRQ */
671 byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_on); 677 byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_on);
672 mdelay(2); 678 mdelay(2);
673 byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_off); 679 byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_off);