staging: comedi: addi_apci_2032: remove boardinfo

This driver only supports a single board type. Remove the boardinfo
and just use the information directly where used.

Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
H Hartley Sweeten 2012-11-29 18:18:19 -07:00 коммит произвёл Greg Kroah-Hartman
Родитель 0c33bdd01a
Коммит c0c3c7dfc1
1 изменённых файлов: 20 добавлений и 81 удалений

Просмотреть файл

@ -5,30 +5,9 @@
#include "addi-data/hwdrv_apci2032.c"
static const struct addi_board apci2032_boardtypes[] = {
{
.pc_DriverName = "apci2032",
.i_VendorId = PCI_VENDOR_ID_ADDIDATA,
.i_DeviceId = 0x1004,
.i_NbrDoChannel = 32,
.i_DoMaxdata = 0xffffffff,
.i_Timer = 1,
.interrupt = v_APCI2032_Interrupt,
.do_config = i_APCI2032_ConfigDigitalOutput,
.do_bits = apci2032_do_insn_bits,
.do_read = i_APCI2032_ReadInterruptStatus,
.timer_config = i_APCI2032_ConfigWatchdog,
.timer_write = i_APCI2032_StartStopWriteWatchdog,
.timer_read = i_APCI2032_ReadWatchdog,
},
};
static irqreturn_t v_ADDI_Interrupt(int irq, void *d)
{
struct comedi_device *dev = d;
const struct addi_board *this_board = comedi_board(dev);
this_board->interrupt(irq, d);
v_APCI2032_Interrupt(irq, d);
return IRQ_RETVAL(1);
}
@ -46,37 +25,15 @@ static int apci2032_reset(struct comedi_device *dev)
return 0;
}
static const void *addi_find_boardinfo(struct comedi_device *dev,
struct pci_dev *pcidev)
{
const void *p = dev->driver->board_name;
const struct addi_board *this_board;
int i;
for (i = 0; i < dev->driver->num_names; i++) {
this_board = p;
if (this_board->i_VendorId == pcidev->vendor &&
this_board->i_DeviceId == pcidev->device)
return this_board;
p += dev->driver->offset;
}
return NULL;
}
static int apci2032_auto_attach(struct comedi_device *dev,
unsigned long context_unused)
{
struct pci_dev *pcidev = comedi_to_pci_dev(dev);
const struct addi_board *this_board;
struct addi_private *devpriv;
struct comedi_subdevice *s;
int ret;
this_board = addi_find_boardinfo(dev, pcidev);
if (!this_board)
return -ENODEV;
dev->board_ptr = this_board;
dev->board_name = this_board->pc_DriverName;
dev->board_name = dev->driver->driver_name;
devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
if (!devpriv)
@ -101,42 +58,27 @@ static int apci2032_auto_attach(struct comedi_device *dev,
/* Initialize the digital output subdevice */
s = &dev->subdevices[0];
if (this_board->i_NbrDoChannel) {
s->type = COMEDI_SUBD_DO;
s->subdev_flags =
SDF_READABLE | SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
s->n_chan = this_board->i_NbrDoChannel;
s->maxdata = this_board->i_DoMaxdata;
s->len_chanlist = this_board->i_NbrDoChannel;
s->range_table = &range_digital;
s->io_bits = 0xf; /* all bits output */
/* insn_config - for digital output memory */
s->insn_config = this_board->do_config;
s->insn_write = this_board->do_write;
s->insn_bits = this_board->do_bits;
s->insn_read = this_board->do_read;
} else {
s->type = COMEDI_SUBD_UNUSED;
}
s->type = COMEDI_SUBD_DO;
s->subdev_flags =
SDF_READABLE | SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
s->n_chan = 32;
s->maxdata = 1;
s->range_table = &range_digital;
s->insn_config = i_APCI2032_ConfigDigitalOutput;
s->insn_bits = apci2032_do_insn_bits;
s->insn_read = i_APCI2032_ReadInterruptStatus;
/* Initialize the watchdog subdevice */
s = &dev->subdevices[1];
if (this_board->i_Timer) {
s->type = COMEDI_SUBD_TIMER;
s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
s->n_chan = 1;
s->maxdata = 0;
s->len_chanlist = 1;
s->range_table = &range_digital;
s->insn_write = this_board->timer_write;
s->insn_read = this_board->timer_read;
s->insn_config = this_board->timer_config;
s->insn_bits = this_board->timer_bits;
} else {
s->type = COMEDI_SUBD_UNUSED;
}
s->type = COMEDI_SUBD_TIMER;
s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
s->n_chan = 1;
s->maxdata = 0;
s->len_chanlist = 1;
s->range_table = &range_digital;
s->insn_write = i_APCI2032_StartStopWriteWatchdog;
s->insn_read = i_APCI2032_ReadWatchdog;
s->insn_config = i_APCI2032_ConfigWatchdog;
apci2032_reset(dev);
return 0;
@ -164,9 +106,6 @@ static struct comedi_driver apci2032_driver = {
.module = THIS_MODULE,
.auto_attach = apci2032_auto_attach,
.detach = apci2032_detach,
.num_names = ARRAY_SIZE(apci2032_boardtypes),
.board_name = &apci2032_boardtypes[0].pc_DriverName,
.offset = sizeof(struct addi_board),
};
static int apci2032_pci_probe(struct pci_dev *dev,