summaryrefslogtreecommitdiff
path: root/drivers/staging/comedi/drivers.c
diff options
context:
space:
mode:
authorIan Abbott <abbotti@mev.co.uk>2012-08-15 14:02:45 (GMT)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-08-15 22:30:56 (GMT)
commit8c3714d60c0b681179000e3e1b5aae15d99e6218 (patch)
treee28e801fe905f2c52b5abb9bfa598eeaf5e273f0 /drivers/staging/comedi/drivers.c
parent3131de834e8ff8f6f1581d838a51cf30e8d22b61 (diff)
downloadlinux-fsl-qoriq-8c3714d60c0b681179000e3e1b5aae15d99e6218.tar.xz
staging: comedi: make attach handler optional
Some low-level Comedi drivers no longer support manual configuration of devices with the COMEDI_DEVCONFIG ioctl (used by the comedi_config program). For those drivers, the 'attach_pci' or 'attach_usb' handler will be set in the struct comedi_driver to configure devices automatically (via comedi_pci_auto_config() or comedi_usb_auto_config()). Their 'attach' handlers are redundant but the the comedi core module currently requires it to be set. Make the 'attach' handler optional and issue a warning if something wants to call it. Signed-off-by: Ian Abbott <abbotti@mev.co.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/drivers.c')
-rw-r--r--drivers/staging/comedi/drivers.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c
index c0fdb00..c8adc5e 100644
--- a/drivers/staging/comedi/drivers.c
+++ b/drivers/staging/comedi/drivers.c
@@ -186,6 +186,14 @@ int comedi_device_attach(struct comedi_device *dev, struct comedi_devconfig *it)
}
return -EIO;
}
+ if (driv->attach == NULL) {
+ /* driver does not support manual configuration */
+ dev_warn(dev->class_dev,
+ "driver '%s' does not support attach using comedi_config\n",
+ driv->driver_name);
+ module_put(driv->module);
+ return -ENOSYS;
+ }
/* initialize dev->driver here so
* comedi_error() can be called from attach */
dev->driver = driv;
@@ -885,13 +893,18 @@ static int comedi_auto_config_wrapper(struct comedi_device *dev, void *context)
dev->board_ptr = comedi_recognize(driv, it->board_name);
if (dev->board_ptr == NULL) {
printk(KERN_WARNING
- "comedi: auto config failed to find board entry"
- " '%s' for driver '%s'\n", it->board_name,
- driv->driver_name);
+ "comedi: auto config failed to find board entry '%s' for driver '%s'\n",
+ it->board_name, driv->driver_name);
comedi_report_boards(driv);
return -EINVAL;
}
}
+ if (!driv->attach) {
+ printk(KERN_WARNING
+ "comedi: BUG! driver '%s' using old-style auto config but has no attach handler\n",
+ driv->driver_name);
+ return -EINVAL;
+ }
return driv->attach(dev, it);
}