Skip to content

Commit

Permalink
staging: comedi: me4000: use the pci id_table 'driver_data'
Browse files Browse the repository at this point in the history
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.

Since the PCI device ids are now only used in the id_table, remove the
defines and open code the device ids.

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>
  • Loading branch information
H Hartley Sweeten authored and Greg Kroah-Hartman committed Mar 11, 2013
1 parent cf7df58 commit 8c35550
Showing 1 changed file with 59 additions and 72 deletions.
131 changes: 59 additions & 72 deletions drivers/staging/comedi/drivers/me4000.c
Original file line number Diff line number Diff line change
Expand Up @@ -61,20 +61,6 @@ broken.
#include "me4000_fw.h"
#endif

#define PCI_DEVICE_ID_MEILHAUS_ME4650 0x4650
#define PCI_DEVICE_ID_MEILHAUS_ME4660 0x4660
#define PCI_DEVICE_ID_MEILHAUS_ME4660I 0x4661
#define PCI_DEVICE_ID_MEILHAUS_ME4660S 0x4662
#define PCI_DEVICE_ID_MEILHAUS_ME4660IS 0x4663
#define PCI_DEVICE_ID_MEILHAUS_ME4670 0x4670
#define PCI_DEVICE_ID_MEILHAUS_ME4670I 0x4671
#define PCI_DEVICE_ID_MEILHAUS_ME4670S 0x4672
#define PCI_DEVICE_ID_MEILHAUS_ME4670IS 0x4673
#define PCI_DEVICE_ID_MEILHAUS_ME4680 0x4680
#define PCI_DEVICE_ID_MEILHAUS_ME4680I 0x4681
#define PCI_DEVICE_ID_MEILHAUS_ME4680S 0x4682
#define PCI_DEVICE_ID_MEILHAUS_ME4680IS 0x4683

/*
* ME4000 Register map and bit defines
*/
Expand Down Expand Up @@ -220,9 +206,24 @@ struct me4000_info {
unsigned int ao_readback[4];
};

enum me4000_boardid {
BOARD_ME4650,
BOARD_ME4660,
BOARD_ME4660I,
BOARD_ME4660S,
BOARD_ME4660IS,
BOARD_ME4670,
BOARD_ME4670I,
BOARD_ME4670S,
BOARD_ME4670IS,
BOARD_ME4680,
BOARD_ME4680I,
BOARD_ME4680S,
BOARD_ME4680IS,
};

struct me4000_board {
const char *name;
unsigned short device_id;
int ao_nchan;
int ao_fifo;
int ai_nchan;
Expand All @@ -234,102 +235,101 @@ struct me4000_board {
};

static const struct me4000_board me4000_boards[] = {
{
[BOARD_ME4650] = {
.name = "ME-4650",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4650,
.ai_nchan = 16,
.dio_nchan = 32,
}, {
},
[BOARD_ME4660] = {
.name = "ME-4660",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4660,
.ai_nchan = 32,
.ai_diff_nchan = 16,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4660I] = {
.name = "ME-4660i",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4660I,
.ai_nchan = 32,
.ai_diff_nchan = 16,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4660S] = {
.name = "ME-4660s",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4660S,
.ai_nchan = 32,
.ai_diff_nchan = 16,
.ai_sh_nchan = 8,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4660IS] = {
.name = "ME-4660is",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4660IS,
.ai_nchan = 32,
.ai_diff_nchan = 16,
.ai_sh_nchan = 8,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4670] = {
.name = "ME-4670",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4670,
.ao_nchan = 4,
.ai_nchan = 32,
.ai_diff_nchan = 16,
.ex_trig_analog = 1,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4670I] = {
.name = "ME-4670i",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4670I,
.ao_nchan = 4,
.ai_nchan = 32,
.ai_diff_nchan = 16,
.ex_trig_analog = 1,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4670S] = {
.name = "ME-4670s",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4670S,
.ao_nchan = 4,
.ai_nchan = 32,
.ai_diff_nchan = 16,
.ai_sh_nchan = 8,
.ex_trig_analog = 1,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4670IS] = {
.name = "ME-4670is",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4670IS,
.ao_nchan = 4,
.ai_nchan = 32,
.ai_diff_nchan = 16,
.ai_sh_nchan = 8,
.ex_trig_analog = 1,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4680] = {
.name = "ME-4680",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4680,
.ao_nchan = 4,
.ao_fifo = 4,
.ai_nchan = 32,
.ai_diff_nchan = 16,
.ex_trig_analog = 1,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4680I] = {
.name = "ME-4680i",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4680I,
.ao_nchan = 4,
.ao_fifo = 4,
.ai_nchan = 32,
.ai_diff_nchan = 16,
.ex_trig_analog = 1,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4680S] = {
.name = "ME-4680s",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4680S,
.ao_nchan = 4,
.ao_fifo = 4,
.ai_nchan = 32,
Expand All @@ -338,9 +338,9 @@ static const struct me4000_board me4000_boards[] = {
.ex_trig_analog = 1,
.dio_nchan = 32,
.has_counter = 1,
}, {
},
[BOARD_ME4680IS] = {
.name = "ME-4680is",
.device_id = PCI_DEVICE_ID_MEILHAUS_ME4680IS,
.ao_nchan = 4,
.ao_fifo = 4,
.ai_nchan = 32,
Expand Down Expand Up @@ -1550,30 +1550,17 @@ static int me4000_cnt_insn_write(struct comedi_device *dev,
return 1;
}

static const void *me4000_find_boardinfo(struct comedi_device *dev,
struct pci_dev *pcidev)
{
const struct me4000_board *thisboard;
int i;

for (i = 0; i < ARRAY_SIZE(me4000_boards); i++) {
thisboard = &me4000_boards[i];
if (thisboard->device_id == pcidev->device)
return thisboard;
}
return NULL;
}

static int me4000_auto_attach(struct comedi_device *dev,
unsigned long context_unused)
unsigned long context)
{
struct pci_dev *pcidev = comedi_to_pci_dev(dev);
const struct me4000_board *thisboard;
const struct me4000_board *thisboard = NULL;
struct me4000_info *info;
struct comedi_subdevice *s;
int result;

thisboard = me4000_find_boardinfo(dev, pcidev);
if (context < ARRAY_SIZE(me4000_boards))
thisboard = &me4000_boards[context];
if (!thisboard)
return -ENODEV;
dev->board_ptr = thisboard;
Expand Down Expand Up @@ -1736,20 +1723,20 @@ static int me4000_pci_probe(struct pci_dev *dev,
}

static DEFINE_PCI_DEVICE_TABLE(me4000_pci_table) = {
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4650)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4660)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4660I)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4660S)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4660IS)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4670)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4670I)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4670S)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4670IS)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4680)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4680I)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4680S)},
{PCI_DEVICE(PCI_VENDOR_ID_MEILHAUS, PCI_DEVICE_ID_MEILHAUS_ME4680IS)},
{0}
{ PCI_VDEVICE(MEILHAUS, 0x4650), BOARD_ME4650 },
{ PCI_VDEVICE(MEILHAUS, 0x4660), BOARD_ME4660 },
{ PCI_VDEVICE(MEILHAUS, 0x4661), BOARD_ME4660I },
{ PCI_VDEVICE(MEILHAUS, 0x4662), BOARD_ME4660S },
{ PCI_VDEVICE(MEILHAUS, 0x4663), BOARD_ME4660IS },
{ PCI_VDEVICE(MEILHAUS, 0x4670), BOARD_ME4670 },
{ PCI_VDEVICE(MEILHAUS, 0x4671), BOARD_ME4670I },
{ PCI_VDEVICE(MEILHAUS, 0x4672), BOARD_ME4670S },
{ PCI_VDEVICE(MEILHAUS, 0x4673), BOARD_ME4670IS },
{ PCI_VDEVICE(MEILHAUS, 0x4680), BOARD_ME4680 },
{ PCI_VDEVICE(MEILHAUS, 0x4681), BOARD_ME4680I },
{ PCI_VDEVICE(MEILHAUS, 0x4682), BOARD_ME4680S },
{ PCI_VDEVICE(MEILHAUS, 0x4683), BOARD_ME4680IS },
{ 0 }
};
MODULE_DEVICE_TABLE(pci, me4000_pci_table);

Expand Down

0 comments on commit 8c35550

Please sign in to comment.