On Sun, Mar 18, 2012 at 08:09:25PM -0700, Gerard Snitselaar wrote: > s626_attach is referencing s626_pci_table which is annotated > __devinitconst. Put pci vendor/device ids in the s626_board struct and > use s626_boards instead similar to what is done in gsc_hpdi. > > v2: I had moved the PCI id defines to s626.h earlier, but later > decided to leave them in s626.c and forgot to move them up above where > they are being used in s626_boards. > > Signed-off-by: Gerard Snitselaar <dev@xxxxxxxxxxxxxx> > --- > drivers/staging/comedi/drivers/s626.c | 27 +++++++++++++++++++-------- > 1 files changed, 19 insertions(+), 8 deletions(-) > > diff --git a/drivers/staging/comedi/drivers/s626.c b/drivers/staging/comedi/drivers/s626.c > index 23fc64b..e531f1c 100644 > --- a/drivers/staging/comedi/drivers/s626.c > +++ b/drivers/staging/comedi/drivers/s626.c > @@ -83,8 +83,17 @@ MODULE_AUTHOR("Gianluca Palli <gpalli@xxxxxxxxxxxxx>"); > MODULE_DESCRIPTION("Sensoray 626 Comedi driver module"); > MODULE_LICENSE("GPL"); > > +#define PCI_VENDOR_ID_S626 0x1131 > +#define PCI_DEVICE_ID_S626 0x7146 > +#define PCI_SUBVENDOR_ID_S626 0x6000 > +#define PCI_SUBDEVICE_ID_S626 0x0272 > + > struct s626_board { > const char *name; > + int vendor_id; > + int device_id; > + int subvendor_id; > + int subdevice_id; > int ai_chans; > int ai_bits; > int ao_chans; > @@ -97,6 +106,10 @@ struct s626_board { > static const struct s626_board s626_boards[] = { > { > .name = "s626", > + .vendor_id = PCI_VENDOR_ID_S626, > + .device_id = PCI_DEVICE_ID_S626, > + .subvendor_id = PCI_SUBVENDOR_ID_S626, > + .subdevice_id = PCI_SUBDEVICE_ID_S626, > .ai_chans = S626_ADC_CHANNELS, > .ai_bits = 14, > .ao_chans = S626_DAC_CHANNELS, > @@ -108,8 +121,6 @@ static const struct s626_board s626_boards[] = { > }; > > #define thisboard ((const struct s626_board *)dev->board_ptr) > -#define PCI_VENDOR_ID_S626 0x1131 > -#define PCI_DEVICE_ID_S626 0x7146 > > /* > * For devices with vendor:device id == 0x1131:0x7146 you must specify > @@ -117,7 +128,7 @@ static const struct s626_board s626_boards[] = { > * Philips SAA7146 media/dvb based cards. > */ > static DEFINE_PCI_DEVICE_TABLE(s626_pci_table) = { > - {PCI_VENDOR_ID_S626, PCI_DEVICE_ID_S626, 0x6000, 0x0272, 0, 0, 0}, > + {PCI_VENDOR_ID_S626, PCI_DEVICE_ID_S626, PCI_SUBVENDOR_ID_S626, PCI_SUBDEVICE_ID_S626, 0, 0, 0}, > {0} > }; > > @@ -554,17 +565,17 @@ static int s626_attach(struct comedi_device *dev, struct comedi_devconfig *it) > resource_size_t resourceStart; > dma_addr_t appdma; > struct comedi_subdevice *s; > - const struct pci_device_id *ids; > struct pci_dev *pdev = NULL; > > if (alloc_private(dev, sizeof(struct s626_private)) < 0) > return -ENOMEM; > > - for (i = 0; i < (ARRAY_SIZE(s626_pci_table) - 1) && !pdev; i++) { > - ids = &s626_pci_table[i]; > + for (i = 0; i < ARRAY_SIZE(s626_boards) && !pdev; i++) { > do { > - pdev = pci_get_subsys(ids->vendor, ids->device, > - ids->subvendor, ids->subdevice, > + pdev = pci_get_subsys(s626_boards[i].vendor_id, > + s626_boards[i].device_id, > + s626_boards[i].subvendor_id, > + s626_boards[i].subdevice_id, > pdev); Ick, why is this loop even needed? We are only here if the pci device is present in the system so this shouldn't be needed at all, right? Or is this a bit more complex than I am making it out to be? greg k-h _______________________________________________ devel mailing list devel@xxxxxxxxxxxxxxxxxxxxxx http://driverdev.linuxdriverproject.org/mailman/listinfo/devel