mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-18 06:50:08 +00:00
staging: comedi: Add helper macro for comedi usb driver boilerplate
Introduce the module_comedi_usb_driver macro, and the associated register/unregister functions, which is a convenience macro for comedi usb 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 usb driver. By using this macro it is possible to eliminate a few lines of boilerplate code per comedi usb driver. Also, when registering the usb 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>
This commit is contained in:
parent
d896e0e4f4
commit
64255031bd
@ -329,6 +329,25 @@ void comedi_pci_driver_unregister(struct comedi_driver *, struct pci_driver *);
|
||||
module_driver(__comedi_driver, comedi_pci_driver_register, \
|
||||
comedi_pci_driver_unregister, &(__pci_driver))
|
||||
|
||||
struct usb_driver;
|
||||
|
||||
int comedi_usb_driver_register(struct comedi_driver *, struct usb_driver *);
|
||||
void comedi_usb_driver_unregister(struct comedi_driver *, struct usb_driver *);
|
||||
|
||||
/**
|
||||
* module_comedi_usb_driver() - Helper macro for registering a comedi USB driver
|
||||
* @__comedi_driver: comedi_driver struct
|
||||
* @__usb_driver: usb_driver struct
|
||||
*
|
||||
* Helper macro for comedi USB drivers which do not do anything special
|
||||
* in module init/exit. This eliminates a lot of boilerplate. Each
|
||||
* module may only use this macro once, and calling it replaces
|
||||
* module_init() and module_exit()
|
||||
*/
|
||||
#define module_comedi_usb_driver(__comedi_driver, __usb_driver) \
|
||||
module_driver(__comedi_driver, comedi_usb_driver_register, \
|
||||
comedi_usb_driver_unregister, &(__usb_driver))
|
||||
|
||||
void init_polling(void);
|
||||
void cleanup_polling(void);
|
||||
void start_polling(struct comedi_device *);
|
||||
|
@ -1016,3 +1016,30 @@ void comedi_usb_auto_unconfig(struct usb_interface *intf)
|
||||
comedi_auto_unconfig(&intf->dev);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(comedi_usb_auto_unconfig);
|
||||
|
||||
int comedi_usb_driver_register(struct comedi_driver *comedi_driver,
|
||||
struct usb_driver *usb_driver)
|
||||
{
|
||||
int ret;
|
||||
|
||||
ret = comedi_driver_register(comedi_driver);
|
||||
if (ret < 0)
|
||||
return ret;
|
||||
|
||||
ret = usb_register(usb_driver);
|
||||
if (ret < 0) {
|
||||
comedi_driver_unregister(comedi_driver);
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(comedi_usb_driver_register);
|
||||
|
||||
void comedi_usb_driver_unregister(struct comedi_driver *comedi_driver,
|
||||
struct usb_driver *usb_driver)
|
||||
{
|
||||
usb_deregister(usb_driver);
|
||||
comedi_driver_unregister(comedi_driver);
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(comedi_usb_driver_unregister);
|
||||
|
Loading…
Reference in New Issue
Block a user