Skip to content

Commit

Permalink
USB: serial: hook up reset_resume callback
Browse files Browse the repository at this point in the history
The callback is now hooked up for any USB to serial driver that wants
it.  We only register the callback if any of the usb-serial structures
want it, this keeps the USB core happy.

Thanks to Alan Stern for the ideas on how to do this.

Cc: Alan Stern <stern@rowland.harvard.edu>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
  • Loading branch information
Greg Kroah-Hartman committed May 15, 2012
1 parent 09c94e6 commit 7186364
Show file tree
Hide file tree
Showing 2 changed files with 25 additions and 2 deletions.
24 changes: 23 additions & 1 deletion drivers/usb/serial/usb-serial.c
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* USB Serial Converter driver
*
* Copyright (C) 1999 - 2005 Greg Kroah-Hartman (greg@kroah.com)
* Copyright (C) 1999 - 2012 Greg Kroah-Hartman (greg@kroah.com)
* Copyright (C) 2000 Peter Berger (pberger@brimson.com)
* Copyright (C) 2000 Al Borchers (borchers@steinerpoint.com)
*
Expand Down Expand Up @@ -1166,6 +1166,20 @@ int usb_serial_resume(struct usb_interface *intf)
}
EXPORT_SYMBOL(usb_serial_resume);

static int usb_serial_reset_resume(struct usb_interface *intf)
{
struct usb_serial *serial = usb_get_intfdata(intf);
int rv;

serial->suspending = 0;
if (serial->type->reset_resume)
rv = serial->type->reset_resume(serial);
else
rv = usb_serial_generic_resume(serial);

return rv;
}

static const struct tty_operations serial_ops = {
.open = serial_open,
.close = serial_close,
Expand Down Expand Up @@ -1403,6 +1417,14 @@ int usb_serial_register_drivers(struct usb_serial_driver *const serial_drivers[]
udriver->resume = usb_serial_resume;
udriver->probe = usb_serial_probe;
udriver->disconnect = usb_serial_disconnect;

/* we only set the reset_resume field if the serial_driver has one */
for (sd = serial_drivers; *sd; ++sd) {
if ((*sd)->reset_resume)
udriver->reset_resume = usb_serial_reset_resume;
break;
}

rc = usb_register(udriver);
if (rc)
return rc;
Expand Down
3 changes: 2 additions & 1 deletion include/linux/usb/serial.h
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
/*
* USB Serial Converter stuff
*
* Copyright (C) 1999 - 2005
* Copyright (C) 1999 - 2012
* Greg Kroah-Hartman (greg@kroah.com)
*
* This program is free software; you can redistribute it and/or modify
Expand Down Expand Up @@ -249,6 +249,7 @@ struct usb_serial_driver {

int (*suspend)(struct usb_serial *serial, pm_message_t message);
int (*resume)(struct usb_serial *serial);
int (*reset_resume)(struct usb_serial *serial);

/* serial function calls */
/* Called by console and by the tty layer */
Expand Down

0 comments on commit 7186364

Please sign in to comment.