static int init_card(struct w6692_hw *card) { int cnt = 3; u_long flags; spin_lock_irqsave(&card->lock, flags); disable_hwirq(card); spin_unlock_irqrestore(&card->lock, flags); if (request_irq(card->irq, w6692_irq, IRQF_SHARED, card->name, card)) { pr_info("%s: couldn't get interrupt %d\n", card->name, card->irq); return -EIO; } while (cnt--) { spin_lock_irqsave(&card->lock, flags); initW6692(card); enable_hwirq(card); spin_unlock_irqrestore(&card->lock, flags); msleep_interruptible(10); if (debug & DEBUG_HW) pr_notice("%s: IRQ %d count %d\n", card->name, card->irq, card->irqcnt); if (!card->irqcnt) { pr_info("%s: IRQ(%d) getting no IRQs during init %d\n", card->name, card->irq, 3 - cnt); reset_w6692(card); } else return 0; } free_irq(card->irq, card); return -EIO; }
static int w6692_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: return (0); case CARD_RELEASE: release_region(cs->hw.w6692.iobase, 256); return (0); case CARD_INIT: initW6692(cs, 3); return (0); case CARD_TEST: return (0); } return (0); }
static int w6692_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: resetW6692(cs); return (0); case CARD_RELEASE: cs->writeW6692(cs, W_IMASK, 0xff); release_region(cs->hw.w6692.iobase, 256); if (cs->subtyp == W6692_USR) { cs->writeW6692(cs, W_XDATA, 0x04); } return (0); case CARD_INIT: initW6692(cs, 3); return (0); case CARD_TEST: return (0); } return (0); }