aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/staging/comedi/drivers.c
diff options
context:
space:
mode:
authorH Hartley Sweeten <hartleys@visionengravers.com>2012-05-11 19:15:39 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2012-05-14 16:48:47 -0400
commitd4899c6ff86ea9836c89250cb2127aa64765b35a (patch)
treec77672087fe5d0cde437e64c2bfb08f80b036d96 /drivers/staging/comedi/drivers.c
parent5a81b4a0b673bf34823191a83318377c0e66e713 (diff)
staging: comedi: Add helper macro for comedi pci driver boilerplate
Introduce the module_comedi_pci_driver macro, and the associated register/unregister functions, which is a convenience macro for comedi pci driver modules similar to module_platform_driver. It is intended to be used by drivers where the init/exit section does nothing but register/unregister the comedi driver and associated pci driver. By using this macro it is possible to eliminate a few lines of boilerplate code per comedi pci driver. Add a check to make sure that the pci_driver->name is set. Once all the comedi pci drivers have been fixed this will be removed. Also, when registering the pci driver check for failure and unregister the comedi driver. Signed-off-by: H Hartley Sweeten <hsweeten@visionengravers.com> Cc: Ian Abbott <abbotti@mev.co.uk> Cc: Mori Hess <fmhess@users.sourceforge.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/staging/comedi/drivers.c')
-rw-r--r--drivers/staging/comedi/drivers.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/drivers/staging/comedi/drivers.c b/drivers/staging/comedi/drivers.c
index 49681a1a6fa..3a829508096 100644
--- a/drivers/staging/comedi/drivers.c
+++ b/drivers/staging/comedi/drivers.c
@@ -950,6 +950,37 @@ void comedi_pci_auto_unconfig(struct pci_dev *pcidev)
950} 950}
951EXPORT_SYMBOL_GPL(comedi_pci_auto_unconfig); 951EXPORT_SYMBOL_GPL(comedi_pci_auto_unconfig);
952 952
953int comedi_pci_driver_register(struct comedi_driver *comedi_driver,
954 struct pci_driver *pci_driver)
955{
956 int ret;
957
958 ret = comedi_driver_register(comedi_driver);
959 if (ret < 0)
960 return ret;
961
962 /* FIXME: Remove this test after auditing all comedi pci drivers */
963 if (!pci_driver->name)
964 pci_driver->name = comedi_driver->driver_name;
965
966 ret = pci_register_driver(pci_driver);
967 if (ret < 0) {
968 comedi_driver_unregister(comedi_driver);
969 return ret;
970 }
971
972 return 0;
973}
974EXPORT_SYMBOL_GPL(comedi_pci_driver_register);
975
976void comedi_pci_driver_unregister(struct comedi_driver *comedi_driver,
977 struct pci_driver *pci_driver)
978{
979 pci_unregister_driver(pci_driver);
980 comedi_driver_unregister(comedi_driver);
981}
982EXPORT_SYMBOL_GPL(comedi_pci_driver_unregister);
983
953static int comedi_old_usb_auto_config(struct usb_interface *intf, 984static int comedi_old_usb_auto_config(struct usb_interface *intf,
954 struct comedi_driver *driver) 985 struct comedi_driver *driver)
955{ 986{