staging: comedi: addi_common: allow driver to set the board_ptr
authorH Hartley Sweeten <hsweeten@visionengravers.com>
Tue, 5 Mar 2013 17:23:10 +0000 (10:23 -0700)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 11 Mar 2013 17:05:22 +0000 (10:05 -0700)
The addi_apci_035, addi_apci_1500, addi_apci_1564, and addi_apci_3xxx
drivers still use the addi_common code. Allow those drivers to set
the dev->board_ptr before calling addi_auto_attach().

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>
drivers/staging/comedi/drivers/addi-data/addi_common.c

index 1051fa5ce8f7e571c810d7f0b602a40f712df1f6..e9a4b43fda713bfad394b9081997583a7cd67e33 100644 (file)
@@ -105,16 +105,19 @@ static int addi_auto_attach(struct comedi_device *dev,
                                      unsigned long context_unused)
 {
        struct pci_dev *pcidev = comedi_to_pci_dev(dev);
-       const struct addi_board *this_board;
+       const struct addi_board *this_board = comedi_board(dev);
        struct addi_private *devpriv;
        struct comedi_subdevice *s;
        int ret, n_subdevices;
        unsigned int dw_Dummy;
 
-       this_board = addi_find_boardinfo(dev, pcidev);
-       if (!this_board)
-               return -ENODEV;
-       dev->board_ptr = this_board;
+       if (!this_board) {
+               /* The driver did not set the board_ptr, try finding it. */
+               this_board = addi_find_boardinfo(dev, pcidev);
+               if (!this_board)
+                       return -ENODEV;
+               dev->board_ptr = this_board;
+       }
        dev->board_name = this_board->pc_DriverName;
 
        devpriv = kzalloc(sizeof(*devpriv), GFP_KERNEL);