diff options
Diffstat (limited to 'include/linux/usb/serial.h')
| -rw-r--r-- | include/linux/usb/serial.h | 36 | 
1 files changed, 34 insertions, 2 deletions
| diff --git a/include/linux/usb/serial.h b/include/linux/usb/serial.h index 4267a9c717ba..fbb666b1b670 100644 --- a/include/linux/usb/serial.h +++ b/include/linux/usb/serial.h @@ -300,8 +300,10 @@ struct usb_serial_driver {  #define to_usb_serial_driver(d) \  	container_of(d, struct usb_serial_driver, driver) -extern int  usb_serial_register(struct usb_serial_driver *driver); -extern void usb_serial_deregister(struct usb_serial_driver *driver); +extern int usb_serial_register_drivers(struct usb_driver *udriver, +		struct usb_serial_driver * const serial_drivers[]); +extern void usb_serial_deregister_drivers(struct usb_driver *udriver, +		struct usb_serial_driver * const serial_drivers[]);  extern void usb_serial_port_softint(struct usb_serial_port *port);  extern int usb_serial_probe(struct usb_interface *iface, @@ -389,5 +391,35 @@ do {									\  		printk(KERN_DEBUG "%s: " format "\n", __FILE__, ##arg);	\  } while (0) +/* + * Macro for reporting errors in write path to avoid inifinite loop + * when port is used as a console. + */ +#define dev_err_console(usport, fmt, ...)				\ +do {									\ +	static bool __print_once;					\ +	struct usb_serial_port *__port = (usport);			\ +									\ +	if (!__port->port.console || !__print_once) {			\ +		__print_once = true;					\ +		dev_err(&__port->dev, fmt, ##__VA_ARGS__);		\ +	}								\ +} while (0) + +/* + * module_usb_serial_driver() - Helper macro for registering a USB Serial driver + * @__usb_driver: usb_driver struct to register + * @__serial_drivers: list of usb_serial drivers to register + * + * Helper macro for USB serial 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_usb_serial_driver(__usb_driver, __serial_drivers)	\ +	module_driver(__usb_driver, usb_serial_register_drivers,	\ +		       usb_serial_deregister_drivers, __serial_drivers) +  #endif /* __LINUX_USB_SERIAL_H */ | 
