static int ix1_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_long flags; switch (mt) { case CARD_RESET: spin_lock_irqsave(&cs->lock, flags); ix1_reset(cs); spin_unlock_irqrestore(&cs->lock, flags); return (0); case CARD_RELEASE: release_io_ix1micro(cs); return (0); case CARD_INIT: spin_lock_irqsave(&cs->lock, flags); ix1_reset(cs); inithscxisac(cs, 3); spin_unlock_irqrestore(&cs->lock, flags); return (0); case CARD_TEST: return (0); } return (0); }
static int Gazel_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_long flags; switch (mt) { case CARD_RESET: spin_lock_irqsave(&cs->lock, flags); reset_gazel(cs); spin_unlock_irqrestore(&cs->lock, flags); return (0); case CARD_RELEASE: release_io_gazel(cs); return (0); case CARD_INIT: spin_lock_irqsave(&cs->lock, flags); inithscxisac(cs, 1); if ((cs->subtyp==R647)||(cs->subtyp==R685)) { int i; for (i=0; i<(2+MAX_WAITING_CALLS); i++) { cs->bcs[i].hw.hscx.tsaxr0 = 0x1f; cs->bcs[i].hw.hscx.tsaxr1 = 0x23; } } spin_unlock_irqrestore(&cs->lock, flags); return (0); case CARD_TEST: return (0); } return (0); }
static int BKM_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: /* Disable ints */ set_ipac_active(cs->subtyp, 0); enable_bkm_int(cs, 0); reset_bkm(cs); return (0); case CARD_RELEASE: /* Sanity */ set_ipac_active(cs->subtyp, 0); enable_bkm_int(cs, 0); reset_bkm(cs); release_io_sct_quadro(cs); return (0); case CARD_INIT: cs->debug |= L1_DEB_IPAC; set_ipac_active(cs->subtyp, 1); inithscxisac(cs, 3); /* Enable ints */ enable_bkm_int(cs, 1); return (0); case CARD_TEST: return (0); } return (0); }
static int Asus_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_long flags; switch (mt) { case CARD_RESET: spin_lock_irqsave(&cs->lock, flags); reset_asuscom(cs); spin_unlock_irqrestore(&cs->lock, flags); return(0); case CARD_RELEASE: release_io_asuscom(cs); return(0); case CARD_INIT: spin_lock_irqsave(&cs->lock, flags); cs->debug |= L1_DEB_IPAC; inithscxisac(cs, 3); spin_unlock_irqrestore(&cs->lock, flags); return(0); case CARD_TEST: return(0); } return(0); }
static int Diva_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_int irq_flag = I4L_IRQ_FLAG; switch (mt) { case CARD_RESET: reset_diva(cs); return(0); case CARD_RELEASE: release_io_diva(cs); return(0); case CARD_SETIRQ: if (cs->subtyp == DIVA_PCI) irq_flag |= SA_SHIRQ; if (cs->subtyp == DIVA_IPAC_ISA) { return(request_irq(cs->irq, &diva_interrupt_ipac, irq_flag, "HiSax", cs)); } else { return(request_irq(cs->irq, &diva_interrupt, irq_flag, "HiSax", cs)); } case CARD_INIT: inithscxisac(cs, 3); return(0); case CARD_TEST: return(0); case (MDL_REMOVE | REQUEST): cs->hw.diva.status = 0; break; case (MDL_ASSIGN | REQUEST): cs->hw.diva.status |= DIVA_ASSIGN; break; case MDL_INFO_SETUP: if ((long)arg) cs->hw.diva.status |= 0x0200; else cs->hw.diva.status |= 0x0100; break; case MDL_INFO_CONN: if ((long)arg) cs->hw.diva.status |= 0x2000; else cs->hw.diva.status |= 0x1000; break; case MDL_INFO_REL: if ((long)arg) { cs->hw.diva.status &= ~0x2000; cs->hw.diva.status &= ~0x0200; } else { cs->hw.diva.status &= ~0x1000; cs->hw.diva.status &= ~0x0100; } break; } if (cs->subtyp != DIVA_IPAC_ISA) diva_led_handler(cs); return(0); }
static int Sedl_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: reset_sedlbauer(cs); return(0); case CARD_RELEASE: if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) { writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, ISAR_IRQBIT, 0); writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_MASK, 0xFF); reset_sedlbauer(cs); writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, ISAR_IRQBIT, 0); writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_MASK, 0xFF); } release_io_sedlbauer(cs); return(0); case CARD_INIT: if (cs->hw.sedl.chip == SEDL_CHIP_ISAC_ISAR) { clear_pending_isac_ints(cs); writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, ISAR_IRQBIT, 0); initisac(cs); initisar(cs); /* Reenable all IRQ */ cs->writeisac(cs, ISAC_MASK, 0); /* RESET Receiver and Transmitter */ cs->writeisac(cs, ISAC_CMDR, 0x41); } else { inithscxisac(cs, 3); } return(0); case CARD_TEST: return(0); case MDL_INFO_CONN: if (cs->subtyp != SEDL_SPEEDFAX_PYRAMID) return(0); if ((long) arg) cs->hw.sedl.reset_off &= ~SEDL_ISAR_PCI_LED2; else cs->hw.sedl.reset_off &= ~SEDL_ISAR_PCI_LED1; byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_off); break; case MDL_INFO_REL: if (cs->subtyp != SEDL_SPEEDFAX_PYRAMID) return(0); if ((long) arg) cs->hw.sedl.reset_off |= SEDL_ISAR_PCI_LED2; else cs->hw.sedl.reset_off |= SEDL_ISAR_PCI_LED1; byteout(cs->hw.sedl.cfg_reg +3, cs->hw.sedl.reset_off); break; } return(0); }
static void niccy_reset(struct IsdnCardState *cs) { if (cs->subtyp == NICCY_PCI) { int val; val = inl(cs->hw.niccy.cfg_reg + PCI_IRQ_CTRL_REG); val |= PCI_IRQ_ENABLE; outl(val, cs->hw.niccy.cfg_reg + PCI_IRQ_CTRL_REG); } inithscxisac(cs, 3); }
static void niccy_reset(struct IsdnCardState *cs) { int val, nval; val = inl(cs->hw.niccy.cfg_reg + PCI_IRQ_CTRL_REG); nval = val | PCI_IRQ_ENABLE; outl(nval, cs->hw.niccy.cfg_reg + PCI_IRQ_CTRL_REG); inithscxisac(cs, 3); }
static int AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: return(0); case CARD_RELEASE: release_ioregs(cs, 0x3f); return(0); case CARD_INIT: inithscxisac(cs, 1); byteout(cs->hw.avm.cfg_reg, 0x16); byteout(cs->hw.avm.cfg_reg, 0x1E); inithscxisac(cs, 2); return(0); case CARD_TEST: return(0); } return(0); }
static void elsa_init(struct IsdnCardState *cs) { if (cs->subtyp == ELSA_QS1000 || cs->subtyp == ELSA_QS3000) byteout(cs->hw.elsa.timer, 0); if (cs->hw.elsa.trig) byteout(cs->hw.elsa.trig, 0xff); inithscxisac(cs); }
static int AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_long flags; switch (mt) { case CARD_RESET: spin_lock_irqsave(&cs->lock, flags); byteout(cs->hw.avm.cfg_reg+ASL0_OFFSET,0x00); HZDELAY(HZ / 5 + 1); byteout(cs->hw.avm.cfg_reg+ASL0_OFFSET,ASL0_W_RESET); HZDELAY(HZ / 5 + 1); byteout(cs->hw.avm.cfg_reg+ASL0_OFFSET,0x00); spin_unlock_irqrestore(&cs->lock, flags); return 0; case CARD_RELEASE: /* free_irq is done in HiSax_closecard(). */ /* free_irq(cs->irq, cs); */ return 0; case CARD_INIT: spin_lock_irqsave(&cs->lock, flags); byteout(cs->hw.avm.cfg_reg+ASL0_OFFSET,ASL0_W_TDISABLE|ASL0_W_TRESET|ASL0_W_IRQENABLE); clear_pending_isac_ints(cs); clear_pending_hscx_ints(cs); inithscxisac(cs, 1); inithscxisac(cs, 2); spin_unlock_irqrestore(&cs->lock, flags); return 0; case CARD_TEST: /* we really don't need it for the PCMCIA Version */ return 0; default: /* all card drivers ignore others, so we do the same */ return 0; } return 0; }
static int Sportster_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: reset_sportster(cs); return(0); case CARD_RELEASE: release_io_sportster(cs); return(0); case CARD_INIT: inithscxisac(cs, 1); cs->hw.spt.res_irq |= SPORTSTER_INTE; /* IRQ On */ byteout(cs->hw.spt.cfg_reg + SPORTSTER_RES_IRQ, cs->hw.spt.res_irq); inithscxisac(cs, 2); return(0); case CARD_TEST: return(0); } return(0); }
static int Diva_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_int *ireg; switch (mt) { case CARD_RESET: reset_diva(cs); return(0); case CARD_RELEASE: release_io_diva(cs); return(0); case CARD_INIT: if (cs->subtyp == DIVA_IPAC_PCI) { ireg = (unsigned int *)cs->hw.diva.pci_cfg; *ireg = PITA_INT0_ENABLE; } inithscxisac(cs, 3); return(0); case CARD_TEST: return(0); case (MDL_REMOVE | REQUEST): cs->hw.diva.status = 0; break; case (MDL_ASSIGN | REQUEST): cs->hw.diva.status |= DIVA_ASSIGN; break; case MDL_INFO_SETUP: if ((long)arg) cs->hw.diva.status |= 0x0200; else cs->hw.diva.status |= 0x0100; break; case MDL_INFO_CONN: if ((long)arg) cs->hw.diva.status |= 0x2000; else cs->hw.diva.status |= 0x1000; break; case MDL_INFO_REL: if ((long)arg) { cs->hw.diva.status &= ~0x2000; cs->hw.diva.status &= ~0x0200; } else { cs->hw.diva.status &= ~0x1000; cs->hw.diva.status &= ~0x0100; } break; } if ((cs->subtyp != DIVA_IPAC_ISA) && (cs->subtyp != DIVA_IPAC_PCI)) diva_led_handler(cs); return(0); }
static int AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: return(0); case CARD_RELEASE: release_ioregs(cs, 0x3f); return(0); case CARD_SETIRQ: return(request_irq(cs->irq, &avm_a1_interrupt, I4L_IRQ_FLAG, "HiSax", cs)); case CARD_INIT: inithscxisac(cs, 1); byteout(cs->hw.avm.cfg_reg, 0x16); byteout(cs->hw.avm.cfg_reg, 0x1E); inithscxisac(cs, 2); return(0); case CARD_TEST: return(0); } return(0); }
static int AVM_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_long flags; switch (mt) { case CARD_RESET: return(0); case CARD_RELEASE: release_ioregs(cs, 0x3f); return(0); case CARD_INIT: spin_lock_irqsave(&cs->lock, flags); inithscxisac(cs, 1); byteout(cs->hw.avm.cfg_reg, 0x16); byteout(cs->hw.avm.cfg_reg, 0x1E); inithscxisac(cs, 2); spin_unlock_irqrestore(&cs->lock, flags); return(0); case CARD_TEST: return(0); } return(0); }
static int TelesPCI_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: return(0); case CARD_RELEASE: release_io_telespci(cs); return(0); case CARD_INIT: inithscxisac(cs, 3); return(0); case CARD_TEST: return(0); } return(0); }
static int mic_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: return(0); case CARD_RELEASE: release_io_mic(cs); return(0); case CARD_INIT: inithscx(cs); /* /RTSA := ISAC RST */ inithscxisac(cs, 3); return(0); case CARD_TEST: return(0); } return(0); }
static int ix1_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: ix1_reset(cs); return(0); case CARD_RELEASE: release_io_ix1micro(cs); return(0); case CARD_INIT: inithscxisac(cs, 3); return(0); case CARD_TEST: return(0); } return(0); }
static int Asus_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: reset_asuscom(cs); return(0); case CARD_RELEASE: release_io_asuscom(cs); return(0); case CARD_INIT: cs->debug |= L1_DEB_IPAC; inithscxisac(cs, 3); return(0); case CARD_TEST: return(0); } return(0); }
static int TelesPCI_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: return(0); case CARD_RELEASE: release_io_telespci(cs); return(0); case CARD_SETIRQ: return(request_irq(cs->irq, &telespci_interrupt, I4L_IRQ_FLAG | SA_SHIRQ, "HiSax", cs)); case CARD_INIT: inithscxisac(cs, 3); return(0); case CARD_TEST: return(0); } return(0); }
static int ix1_card_msg(struct IsdnCardState *cs, int mt, void *arg) { switch (mt) { case CARD_RESET: ix1_reset(cs); return(0); case CARD_RELEASE: release_io_ix1micro(cs); return(0); case CARD_SETIRQ: return(request_irq(cs->irq, &ix1micro_interrupt, I4L_IRQ_FLAG, "HiSax", cs)); case CARD_INIT: inithscxisac(cs, 3); return(0); case CARD_TEST: return(0); } return(0); }
static int BKM_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_long flags; switch (mt) { case CARD_RESET: spin_lock_irqsave(&cs->lock, flags); /* Disable ints */ set_ipac_active(cs, 0); enable_bkm_int(cs, 0); reset_bkm(cs); spin_unlock_irqrestore(&cs->lock, flags); return (0); case CARD_RELEASE: /* Sanity */ spin_lock_irqsave(&cs->lock, flags); set_ipac_active(cs, 0); enable_bkm_int(cs, 0); spin_unlock_irqrestore(&cs->lock, flags); release_io_sct_quadro(cs); return (0); case CARD_INIT: spin_lock_irqsave(&cs->lock, flags); cs->debug |= L1_DEB_IPAC; set_ipac_active(cs, 1); inithscxisac(cs, 3); /* Enable ints */ enable_bkm_int(cs, 1); spin_unlock_irqrestore(&cs->lock, flags); return (0); case CARD_TEST: return (0); } return (0); }
static int Sedl_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_long flags; switch (mt) { case CARD_RESET: spin_lock_irqsave(&cs->lock, flags); reset_sedlbauer(cs); spin_unlock_irqrestore(&cs->lock, flags); return (0); case CARD_RELEASE: if (cs->hw.sedl.bus == SEDL_BUS_PCI) /* */ 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, ISAR_IRQBIT, 0); writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_MASK, 0xFF); reset_sedlbauer(cs); writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, ISAR_IRQBIT, 0); writereg(cs->hw.sedl.adr, cs->hw.sedl.isac, ISAC_MASK, 0xFF); spin_unlock_irqrestore(&cs->lock, flags); } release_io_sedlbauer(cs); return (0); case CARD_INIT: spin_lock_irqsave(&cs->lock, flags); if (cs->hw.sedl.bus == SEDL_BUS_PCI) /* */ 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); writereg(cs->hw.sedl.adr, cs->hw.sedl.hscx, ISAR_IRQBIT, 0); initisac(cs); initisar(cs); /* */ cs->writeisac(cs, ISAC_MASK, 0); /* */ cs->writeisac(cs, ISAC_CMDR, 0x41); } else { inithscxisac(cs, 3); } spin_unlock_irqrestore(&cs->lock, flags); return (0); case CARD_TEST: return (0); case MDL_INFO_CONN: if (cs->subtyp != SEDL_SPEEDFAX_PYRAMID) return (0); spin_lock_irqsave(&cs->lock, flags); if ((long) arg) cs->hw.sedl.reset_off &= ~SEDL_ISAR_PCI_LED2; else cs->hw.sedl.reset_off &= ~SEDL_ISAR_PCI_LED1; byteout(cs->hw.sedl.cfg_reg + 3, cs->hw.sedl.reset_off); spin_unlock_irqrestore(&cs->lock, flags); break; case MDL_INFO_REL: if (cs->subtyp != SEDL_SPEEDFAX_PYRAMID) return (0); spin_lock_irqsave(&cs->lock, flags); if ((long) arg) cs->hw.sedl.reset_off |= SEDL_ISAR_PCI_LED2; else cs->hw.sedl.reset_off |= SEDL_ISAR_PCI_LED1; byteout(cs->hw.sedl.cfg_reg + 3, cs->hw.sedl.reset_off); spin_unlock_irqrestore(&cs->lock, flags); break; } return (0); }
static int Diva_card_msg(struct IsdnCardState *cs, int mt, void *arg) { u_int *ireg; u_long flags; switch (mt) { case CARD_RESET: spin_lock_irqsave(&cs->lock, flags); reset_diva(cs); spin_unlock_irqrestore(&cs->lock, flags); return (0); case CARD_RELEASE: release_io_diva(cs); return (0); case CARD_INIT: spin_lock_irqsave(&cs->lock, flags); reset_diva(cs); if (cs->subtyp == DIVA_IPACX_PCI) { ireg = (unsigned int *)cs->hw.diva.pci_cfg; *ireg = PITA_INT0_ENABLE; init_ipacx(cs, 3); // init chip and enable interrupts spin_unlock_irqrestore(&cs->lock, flags); return (0); } if (cs->subtyp == DIVA_IPAC_PCI) { ireg = (unsigned int *)cs->hw.diva.pci_cfg; *ireg = PITA_INT0_ENABLE; } inithscxisac(cs, 3); spin_unlock_irqrestore(&cs->lock, flags); return (0); case CARD_TEST: return (0); case (MDL_REMOVE | REQUEST): cs->hw.diva.status = 0; break; case (MDL_ASSIGN | REQUEST): cs->hw.diva.status |= DIVA_ASSIGN; break; case MDL_INFO_SETUP: if ((long)arg) cs->hw.diva.status |= 0x0200; else cs->hw.diva.status |= 0x0100; break; case MDL_INFO_CONN: if ((long)arg) cs->hw.diva.status |= 0x2000; else cs->hw.diva.status |= 0x1000; break; case MDL_INFO_REL: if ((long)arg) { cs->hw.diva.status &= ~0x2000; cs->hw.diva.status &= ~0x0200; } else { cs->hw.diva.status &= ~0x1000; cs->hw.diva.status &= ~0x0100; } break; } if ((cs->subtyp != DIVA_IPAC_ISA) && (cs->subtyp != DIVA_IPAC_PCI) && (cs->subtyp != DIVA_IPACX_PCI)) { spin_lock_irqsave(&cs->lock, flags); diva_led_handler(cs); spin_unlock_irqrestore(&cs->lock, flags); } return (0); }
static int Elsa_card_msg(struct IsdnCardState *cs, int mt, void *arg) { int ret = 0; u_long flags; switch (mt) { case CARD_RESET: spin_lock_irqsave(&cs->lock, flags); reset_elsa(cs); spin_unlock_irqrestore(&cs->lock, flags); return(0); case CARD_RELEASE: release_io_elsa(cs); return(0); case CARD_INIT: spin_lock_irqsave(&cs->lock, flags); cs->debug |= L1_DEB_IPAC; reset_elsa(cs); inithscxisac(cs, 1); if ((cs->subtyp == ELSA_QS1000) || (cs->subtyp == ELSA_QS3000)) { byteout(cs->hw.elsa.timer, 0); } if (cs->hw.elsa.trig) byteout(cs->hw.elsa.trig, 0xff); inithscxisac(cs, 2); spin_unlock_irqrestore(&cs->lock, flags); return(0); case CARD_TEST: if ((cs->subtyp == ELSA_PCMCIA) || (cs->subtyp == ELSA_PCMCIA_IPAC) || (cs->subtyp == ELSA_QS1000PCI)) { return(0); } else if (cs->subtyp == ELSA_QS3000PCI) { ret = 0; } else { spin_lock_irqsave(&cs->lock, flags); cs->hw.elsa.counter = 0; cs->hw.elsa.ctrl_reg |= ELSA_ENA_TIMER_INT; cs->hw.elsa.status |= ELSA_TIMER_AKTIV; byteout(cs->hw.elsa.ctrl, cs->hw.elsa.ctrl_reg); byteout(cs->hw.elsa.timer, 0); spin_unlock_irqrestore(&cs->lock, flags); msleep(110); spin_lock_irqsave(&cs->lock, flags); cs->hw.elsa.ctrl_reg &= ~ELSA_ENA_TIMER_INT; byteout(cs->hw.elsa.ctrl, cs->hw.elsa.ctrl_reg); cs->hw.elsa.status &= ~ELSA_TIMER_AKTIV; spin_unlock_irqrestore(&cs->lock, flags); printk(KERN_INFO "Elsa: %d timer tics in 110 msek\n", cs->hw.elsa.counter); if ((cs->hw.elsa.counter > 10) && (cs->hw.elsa.counter < 16)) { printk(KERN_INFO "Elsa: timer and irq OK\n"); ret = 0; } else { printk(KERN_WARNING "Elsa: timer tic problem (%d/12) maybe an IRQ(%d) conflict\n", cs->hw.elsa.counter, cs->irq); ret = 1; } } #if ARCOFI_USE if (check_arcofi(cs)) { init_modem(cs); } #endif elsa_led_handler(cs); return(ret); case (MDL_REMOVE | REQUEST): cs->hw.elsa.status &= 0; break; case (MDL_ASSIGN | REQUEST): cs->hw.elsa.status |= ELSA_ASSIGN; break; case MDL_INFO_SETUP: if ((long) arg) cs->hw.elsa.status |= 0x0200; else cs->hw.elsa.status |= 0x0100; break; case MDL_INFO_CONN: if ((long) arg) cs->hw.elsa.status |= 0x2000; else cs->hw.elsa.status |= 0x1000; break; case MDL_INFO_REL: if ((long) arg) { cs->hw.elsa.status &= ~0x2000; cs->hw.elsa.status &= ~0x0200; } else { cs->hw.elsa.status &= ~0x1000; cs->hw.elsa.status &= ~0x0100; } break; #if ARCOFI_USE case CARD_AUX_IND: if (cs->hw.elsa.MFlag) { int len; u_char *msg; if (!arg) return(0); msg = arg; len = *msg; msg++; modem_write_cmd(cs, msg, len); } break; #endif } if (cs->typ == ISDN_CTYPE_ELSA) { int pwr = bytein(cs->hw.elsa.ale); if (pwr & 0x08) cs->hw.elsa.status |= ELSA_BAD_PWR; else cs->hw.elsa.status &= ~ELSA_BAD_PWR; } elsa_led_handler(cs); return(ret); }