#include "../comedidev.h"
-/*
- * PCI device ids supported by this driver
- */
-#define PCI_DEVICE_ID_APCI1648 0x1009
-#define PCI_DEVICE_ID_APCI1696 0x100a
-
/*
* Register I/O map
*/
#define APCI16XX_OUT_REG(x) (((x) * 4) + 0x14)
#define APCI16XX_DIR_REG(x) (((x) * 4) + 0x20)
+enum apci16xx_boardid {
+ BOARD_APCI1648,
+ BOARD_APCI1696,
+};
+
struct apci16xx_boardinfo {
const char *name;
- unsigned short vendor;
- unsigned short device;
int n_chan;
};
static const struct apci16xx_boardinfo apci16xx_boardtypes[] = {
- {
+ [BOARD_APCI1648] = {
.name = "apci1648",
- .vendor = PCI_VENDOR_ID_ADDIDATA,
- .device = PCI_DEVICE_ID_APCI1648,
.n_chan = 48, /* 2 subdevices */
- }, {
+ },
+ [BOARD_APCI1696] = {
.name = "apci1696",
- .vendor = PCI_VENDOR_ID_ADDIDATA,
- .device = PCI_DEVICE_ID_APCI1696,
.n_chan = 96, /* 3 subdevices */
},
};
return insn->n;
}
-static const void *apci16xx_find_boardinfo(struct comedi_device *dev,
- struct pci_dev *pcidev)
-{
- const struct apci16xx_boardinfo *board;
- int i;
-
- for (i = 0; i < ARRAY_SIZE(apci16xx_boardtypes); i++) {
- board = &apci16xx_boardtypes[i];
- if (board->vendor == pcidev->vendor &&
- board->device == pcidev->device)
- return board;
- }
- return NULL;
-}
-
static int apci16xx_auto_attach(struct comedi_device *dev,
- unsigned long context_unused)
+ unsigned long context)
{
struct pci_dev *pcidev = comedi_to_pci_dev(dev);
- const struct apci16xx_boardinfo *board;
+ const struct apci16xx_boardinfo *board = NULL;
struct comedi_subdevice *s;
unsigned int n_subdevs;
unsigned int last;
int i;
int ret;
- board = apci16xx_find_boardinfo(dev, pcidev);
+ if (context < ARRAY_SIZE(apci16xx_boardtypes))
+ board = &apci16xx_boardtypes[context];
if (!board)
return -ENODEV;
dev->board_ptr = board;
}
static DEFINE_PCI_DEVICE_TABLE(apci16xx_pci_table) = {
- { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, PCI_DEVICE_ID_APCI1648) },
- { PCI_DEVICE(PCI_VENDOR_ID_ADDIDATA, PCI_DEVICE_ID_APCI1696) },
+ { PCI_VDEVICE(ADDIDATA, 0x1009), BOARD_APCI1648 },
+ { PCI_VDEVICE(ADDIDATA, 0x100a), BOARD_APCI1696 },
{ 0 }
};
MODULE_DEVICE_TABLE(pci, apci16xx_pci_table);