diff options
author | Karsten Keil <kkeil@suse.de> | 2007-07-17 07:04:18 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-07-17 13:23:05 -0400 |
commit | c713f57ed5eb2e073de9d60ee1da25939966647e (patch) | |
tree | 909f787b58247fb87e6a501919adc5290c46b0d5 | |
parent | 2b7c30292af56e64feaecdbe97da57918927b730 (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.c | 8 |
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); |