mirror of https://gitee.com/openkylin/linux.git
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:
parent
0c33bdd01a
commit
c0c3c7dfc1
|
@ -5,30 +5,9 @@
|
||||||
|
|
||||||
#include "addi-data/hwdrv_apci2032.c"
|
#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)
|
static irqreturn_t v_ADDI_Interrupt(int irq, void *d)
|
||||||
{
|
{
|
||||||
struct comedi_device *dev = d;
|
v_APCI2032_Interrupt(irq, d);
|
||||||
const struct addi_board *this_board = comedi_board(dev);
|
|
||||||
|
|
||||||
this_board->interrupt(irq, d);
|
|
||||||
return IRQ_RETVAL(1);
|
return IRQ_RETVAL(1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -46,37 +25,15 @@ static int apci2032_reset(struct comedi_device *dev)
|
||||||
return 0;
|
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,
|
static int apci2032_auto_attach(struct comedi_device *dev,
|
||||||
unsigned long context_unused)
|
unsigned long context_unused)
|
||||||
{
|
{
|
||||||
struct pci_dev *pcidev = comedi_to_pci_dev(dev);
|
struct pci_dev *pcidev = comedi_to_pci_dev(dev);
|
||||||
const struct addi_board *this_board;
|
|
||||||
struct addi_private *devpriv;
|
struct addi_private *devpriv;
|
||||||
struct comedi_subdevice *s;
|
struct comedi_subdevice *s;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
this_board = addi_find_boardinfo(dev, pcidev);
|
dev->board_name = dev->driver->driver_name;
|
||||||
if (!this_board)
|
|
||||||
return -ENODEV;
|
|
||||||
dev->board_ptr = this_board;
|
|
||||||
dev->board_name = this_board->pc_DriverName;
|
|
||||||
|
|
||||||
devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
|
devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);
|
||||||
if (!devpriv)
|
if (!devpriv)
|
||||||
|
@ -101,42 +58,27 @@ static int apci2032_auto_attach(struct comedi_device *dev,
|
||||||
|
|
||||||
/* Initialize the digital output subdevice */
|
/* Initialize the digital output subdevice */
|
||||||
s = &dev->subdevices[0];
|
s = &dev->subdevices[0];
|
||||||
if (this_board->i_NbrDoChannel) {
|
s->type = COMEDI_SUBD_DO;
|
||||||
s->type = COMEDI_SUBD_DO;
|
s->subdev_flags =
|
||||||
s->subdev_flags =
|
SDF_READABLE | SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
|
||||||
SDF_READABLE | SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
|
s->n_chan = 32;
|
||||||
s->n_chan = this_board->i_NbrDoChannel;
|
s->maxdata = 1;
|
||||||
s->maxdata = this_board->i_DoMaxdata;
|
s->range_table = &range_digital;
|
||||||
s->len_chanlist = this_board->i_NbrDoChannel;
|
s->insn_config = i_APCI2032_ConfigDigitalOutput;
|
||||||
s->range_table = &range_digital;
|
s->insn_bits = apci2032_do_insn_bits;
|
||||||
s->io_bits = 0xf; /* all bits output */
|
s->insn_read = i_APCI2032_ReadInterruptStatus;
|
||||||
|
|
||||||
/* 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;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Initialize the watchdog subdevice */
|
/* Initialize the watchdog subdevice */
|
||||||
s = &dev->subdevices[1];
|
s = &dev->subdevices[1];
|
||||||
if (this_board->i_Timer) {
|
s->type = COMEDI_SUBD_TIMER;
|
||||||
s->type = COMEDI_SUBD_TIMER;
|
s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
|
||||||
s->subdev_flags = SDF_WRITEABLE | SDF_GROUND | SDF_COMMON;
|
s->n_chan = 1;
|
||||||
s->n_chan = 1;
|
s->maxdata = 0;
|
||||||
s->maxdata = 0;
|
s->len_chanlist = 1;
|
||||||
s->len_chanlist = 1;
|
s->range_table = &range_digital;
|
||||||
s->range_table = &range_digital;
|
s->insn_write = i_APCI2032_StartStopWriteWatchdog;
|
||||||
|
s->insn_read = i_APCI2032_ReadWatchdog;
|
||||||
s->insn_write = this_board->timer_write;
|
s->insn_config = i_APCI2032_ConfigWatchdog;
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
apci2032_reset(dev);
|
apci2032_reset(dev);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -164,9 +106,6 @@ static struct comedi_driver apci2032_driver = {
|
||||||
.module = THIS_MODULE,
|
.module = THIS_MODULE,
|
||||||
.auto_attach = apci2032_auto_attach,
|
.auto_attach = apci2032_auto_attach,
|
||||||
.detach = apci2032_detach,
|
.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,
|
static int apci2032_pci_probe(struct pci_dev *dev,
|
||||||
|
|
Loading…
Reference in New Issue