Commit b3322d42 authored by H Hartley Sweeten's avatar H Hartley Sweeten Committed by Greg Kroah-Hartman

staging: comedi: rtd520: use the pci id_table 'driver_data'

Create an enum to the boardinfo and pass that enum in the pci_driver
id_table as the driver_data.

Change the macro used to fill in the device table from PCI_DEVICE() to
PCI_VDEVICE(). This allows passing the enum as the next field.

This allows removing the 'device_id' data from the boardinfo as well the
search function that was used to locate the boardinfo for the PCI device.
Signed-off-by: default avatarH Hartley Sweeten <hsweeten@visionengravers.com>
Cc: Ian Abbott <abbotti@mev.co.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 68278f10
...@@ -249,24 +249,27 @@ static const struct comedi_lrange rtd_ao_range = { ...@@ -249,24 +249,27 @@ static const struct comedi_lrange rtd_ao_range = {
} }
}; };
enum rtd_boardid {
BOARD_DM7520,
BOARD_PCI4520,
};
struct rtdBoard { struct rtdBoard {
const char *name; const char *name;
int device_id;
int range10Start; /* start of +-10V range */ int range10Start; /* start of +-10V range */
int rangeUniStart; /* start of +10V range */ int rangeUniStart; /* start of +10V range */
const struct comedi_lrange *ai_range; const struct comedi_lrange *ai_range;
}; };
static const struct rtdBoard rtd520Boards[] = { static const struct rtdBoard rtd520Boards[] = {
{ [BOARD_DM7520] = {
.name = "DM7520", .name = "DM7520",
.device_id = 0x7520,
.range10Start = 6, .range10Start = 6,
.rangeUniStart = 12, .rangeUniStart = 12,
.ai_range = &rtd_ai_7520_range, .ai_range = &rtd_ai_7520_range,
}, { },
[BOARD_PCI4520] = {
.name = "PCI4520", .name = "PCI4520",
.device_id = 0x4520,
.range10Start = 8, .range10Start = 8,
.rangeUniStart = 16, .rangeUniStart = 16,
.ai_range = &rtd_ai_4520_range, .ai_range = &rtd_ai_4520_range,
...@@ -1259,30 +1262,17 @@ static void rtd_pci_latency_quirk(struct comedi_device *dev, ...@@ -1259,30 +1262,17 @@ static void rtd_pci_latency_quirk(struct comedi_device *dev,
} }
} }
static const void *rtd_find_boardinfo(struct comedi_device *dev,
struct pci_dev *pcidev)
{
const struct rtdBoard *thisboard;
int i;
for (i = 0; i < ARRAY_SIZE(rtd520Boards); i++) {
thisboard = &rtd520Boards[i];
if (pcidev->device == thisboard->device_id)
return thisboard;
}
return NULL;
}
static int rtd_auto_attach(struct comedi_device *dev, static int rtd_auto_attach(struct comedi_device *dev,
unsigned long context_unused) unsigned long context)
{ {
struct pci_dev *pcidev = comedi_to_pci_dev(dev); struct pci_dev *pcidev = comedi_to_pci_dev(dev);
const struct rtdBoard *thisboard; const struct rtdBoard *thisboard = NULL;
struct rtdPrivate *devpriv; struct rtdPrivate *devpriv;
struct comedi_subdevice *s; struct comedi_subdevice *s;
int ret; int ret;
thisboard = rtd_find_boardinfo(dev, pcidev); if (context < ARRAY_SIZE(rtd520Boards))
thisboard = &rtd520Boards[context];
if (!thisboard) if (!thisboard)
return -ENODEV; return -ENODEV;
dev->board_ptr = thisboard; dev->board_ptr = thisboard;
...@@ -1422,8 +1412,8 @@ static int rtd520_pci_probe(struct pci_dev *dev, ...@@ -1422,8 +1412,8 @@ static int rtd520_pci_probe(struct pci_dev *dev,
} }
static DEFINE_PCI_DEVICE_TABLE(rtd520_pci_table) = { static DEFINE_PCI_DEVICE_TABLE(rtd520_pci_table) = {
{ PCI_DEVICE(PCI_VENDOR_ID_RTD, 0x7520) }, { PCI_VDEVICE(RTD, 0x7520), BOARD_DM7520 },
{ PCI_DEVICE(PCI_VENDOR_ID_RTD, 0x4520) }, { PCI_VDEVICE(RTD, 0x4520), BOARD_PCI4520 },
{ 0 } { 0 }
}; };
MODULE_DEVICE_TABLE(pci, rtd520_pci_table); MODULE_DEVICE_TABLE(pci, rtd520_pci_table);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment