static int mio_cs_attach(struct comedi_device *dev, struct comedi_devconfig *it) { struct pcmcia_device *link; unsigned int irq; int ret; DPRINTK("mio_cs_attach(dev=%p,it=%p)\n", dev, it); link = cur_dev; /* XXX hack */ if (!link) return -EIO; dev->driver = &driver_ni_mio_cs; dev->iobase = link->io.BasePort1; irq = link->irq; printk("comedi%d: %s: DAQCard: io 0x%04lx, irq %u, ", dev->minor, dev->driver->driver_name, dev->iobase, irq); #if 0 { int i; printk(" board fingerprint:"); for (i = 0; i < 32; i += 2) { printk(" %04x %02x", inw(dev->iobase + i), inb(dev->iobase + i + 1)); } printk("\n"); printk(" board fingerprint (windowed):"); for (i = 0; i < 10; i++) printk(" 0x%04x", win_in(i)); printk("\n"); } #endif dev->board_ptr = ni_boards + ni_getboardtype(dev, link); printk(" %s", boardtype.name); dev->board_name = boardtype.name; ret = request_irq(irq, ni_E_interrupt, NI_E_IRQ_FLAGS, "ni_mio_cs", dev); if (ret < 0) { printk(" irq not available\n"); return -EINVAL; } dev->irq = irq; /* allocate private area */ ret = ni_alloc_private(dev); if (ret < 0) return ret; devpriv->stc_writew = &mio_cs_win_out; devpriv->stc_readw = &mio_cs_win_in; devpriv->stc_writel = &win_out2; devpriv->stc_readl = &win_in2; ret = ni_E_init(dev, it); if (ret < 0) return ret; return 0; }
static int ni_atmio_attach(struct comedi_device *dev, struct comedi_devconfig *it) { struct pnp_dev *isapnp_dev; int ret; unsigned long iobase; int board; unsigned int irq; /* allocate private area */ ret = ni_alloc_private(dev); if (ret < 0) return ret; devpriv->stc_writew = &ni_atmio_win_out; devpriv->stc_readw = &ni_atmio_win_in; devpriv->stc_writel = &win_out2; devpriv->stc_readl = &win_in2; iobase = it->options[0]; irq = it->options[1]; isapnp_dev = NULL; if (iobase == 0) { ret = ni_isapnp_find_board(&isapnp_dev); if (ret < 0) return ret; iobase = pnp_port_start(isapnp_dev, 0); irq = pnp_irq(isapnp_dev, 0); devpriv->isapnp_dev = isapnp_dev; } /* reserve our I/O region */ printk("comedi%d: ni_atmio: 0x%04lx", dev->minor, iobase); if (!request_region(iobase, NI_SIZE, "ni_atmio")) { printk(" I/O port conflict\n"); return -EIO; } dev->iobase = iobase; #ifdef DEBUG /* board existence sanity check */ { int i; printk(" board fingerprint:"); for (i = 0; i < 16; i += 2) { printk(" %04x %02x", inw(dev->iobase + i), inb(dev->iobase + i + 1)); } } #endif /* get board type */ board = ni_getboardtype(dev); if (board < 0) return -EIO; dev->board_ptr = ni_boards + board; printk(" %s", boardtype.name); dev->board_name = boardtype.name; /* irq stuff */ if (irq != 0) { if (irq > 15 || ni_irqpin[irq] == -1) { printk(" invalid irq %u\n", irq); return -EINVAL; } printk(" ( irq = %u )", irq); ret = request_irq(irq, ni_E_interrupt, NI_E_IRQ_FLAGS, "ni_atmio", dev); if (ret < 0) { printk(" irq not available\n"); return -EINVAL; } dev->irq = irq; } /* generic E series stuff in ni_mio_common.c */ ret = ni_E_init(dev, it); if (ret < 0) return ret; return 0; }
static int ni_atmio_attach(struct comedi_device *dev, struct comedi_devconfig *it) { const struct ni_board_struct *boardtype; struct pnp_dev *isapnp_dev; int ret; unsigned long iobase; int board; unsigned int irq; ret = ni_alloc_private(dev); if (ret) return ret; iobase = it->options[0]; irq = it->options[1]; isapnp_dev = NULL; if (iobase == 0) { ret = ni_isapnp_find_board(&isapnp_dev); if (ret < 0) return ret; iobase = pnp_port_start(isapnp_dev, 0); irq = pnp_irq(isapnp_dev, 0); comedi_set_hw_dev(dev, &isapnp_dev->dev); } ret = comedi_request_region(dev, iobase, 0x20); if (ret) return ret; /* get board type */ board = ni_getboardtype(dev); if (board < 0) return -EIO; dev->board_ptr = ni_boards + board; boardtype = dev->board_ptr; dev->board_name = boardtype->name; /* irq stuff */ if (irq != 0) { if (irq > 15 || ni_irqpin[irq] == -1) return -EINVAL; ret = request_irq(irq, ni_E_interrupt, 0, dev->board_name, dev); if (ret < 0) return -EINVAL; dev->irq = irq; } /* generic E series stuff in ni_mio_common.c */ ret = ni_E_init(dev, ni_irqpin[dev->irq], 0); if (ret < 0) return ret; return 0; }