#include "addi_watchdog.h"
#include "comedi_fc.h"
-/*
- * PCI device ids supported by this driver
- */
-#define PCI_DEVICE_ID_APCI1016 0x1000
-#define PCI_DEVICE_ID_APCI1516 0x1001
-#define PCI_DEVICE_ID_APCI2016 0x1002
-
/*
* PCI bar 1 I/O Register map - Digital input/output
*/
*/
#define APCI1516_WDOG_REG 0x00
+enum apci1516_boardid {
+ BOARD_APCI1016,
+ BOARD_APCI1516,
+ BOARD_APCI2016,
+};
+
struct apci1516_boardinfo {
const char *name;
- unsigned short device;
int di_nchan;
int do_nchan;
int has_wdog;
};
static const struct apci1516_boardinfo apci1516_boardtypes[] = {
- {
+ [BOARD_APCI1016] = {
.name = "apci1016",
- .device = PCI_DEVICE_ID_APCI1016,
.di_nchan = 16,
- }, {
+ },
+ [BOARD_APCI1516] = {
.name = "apci1516",
- .device = PCI_DEVICE_ID_APCI1516,
.di_nchan = 8,
.do_nchan = 8,
.has_wdog = 1,
- }, {
+ },
+ [BOARD_APCI2016] = {
.name = "apci2016",
- .device = PCI_DEVICE_ID_APCI2016,
.do_nchan = 16,
.has_wdog = 1,
},
return 0;
}
-static const void *apci1516_find_boardinfo(struct comedi_device *dev,
- struct pci_dev *pcidev)
-{
- const struct apci1516_boardinfo *this_board;
- int i;
-
- for (i = 0; i < dev->driver->num_names; i++) {
- this_board = &apci1516_boardtypes[i];
- if (this_board->device == pcidev->device)
- return this_board;
- }
- return NULL;
-}
-
static int apci1516_auto_attach(struct comedi_device *dev,
- unsigned long context_unused)
+ unsigned long context)
{
struct pci_dev *pcidev = comedi_to_pci_dev(dev);
- const struct apci1516_boardinfo *this_board;
+ const struct apci1516_boardinfo *this_board = NULL;
struct apci1516_private *devpriv;
struct comedi_subdevice *s;
int ret;
- this_board = apci1516_find_boardinfo(dev, pcidev);
+ if (context < ARRAY_SIZE(apci1516_boardtypes))
+ this_board = &apci1516_boardtypes[context];
if (!this_board)
return -ENODEV;
dev->board_ptr = this_board;
}
static DEFINE_PCI_DEVICE_TABLE(apci1516_pci_table) = {
- { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, PCI_DEVICE_ID_APCI1016) },
- { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, PCI_DEVICE_ID_APCI1516) },
- { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, PCI_DEVICE_ID_APCI2016) },
+ { PCI_VDEVICE(ADDIDATA, 0x1000), BOARD_APCI1016 },
+ { PCI_VDEVICE(ADDIDATA, 0x1001), BOARD_APCI1516 },
+ { PCI_VDEVICE(ADDIDATA, 0x1002), BOARD_APCI2016 },
{ 0 }
};
MODULE_DEVICE_TABLE(pci, apci1516_pci_table);