From 8c3714d60c0b681179000e3e1b5aae15d99e6218 Mon Sep 17 00:00:00 2001 From: Ian Abbott Date: Wed, 15 Aug 2012 15:02:45 +0100 Subject: [PATCH] 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 Signed-off-by: Greg Kroah-Hartman --- drivers/staging/comedi/drivers.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c index c0fdb00783ed..c8adc5e009c8 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); } -- 2.20.1