cdc_acm: add reset_resume method
authorFrancesco Lavra <francescolavra@interfree.it>
Tue, 8 Dec 2009 08:54:11 +0000 (09:54 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 2 Mar 2010 22:53:07 +0000 (14:53 -0800)
Add reset resume logic to the cdc acm driver

Signed-off-by: Francesco Lavra <francescolavra@interfree.it>
Acked-by: Oliver Neukum <oliver@neukum.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/class/cdc-acm.c

index 34d4eb9..ef2e6f9 100644 (file)
@@ -1460,6 +1460,23 @@ err_out:
        return rv;
 }
 
+static int acm_reset_resume(struct usb_interface *intf)
+{
+       struct acm *acm = usb_get_intfdata(intf);
+       struct tty_struct *tty;
+
+       mutex_lock(&acm->mutex);
+       if (acm->port.count) {
+               tty = tty_port_tty_get(&acm->port);
+               if (tty) {
+                       tty_hangup(tty);
+                       tty_kref_put(tty);
+               }
+       }
+       mutex_unlock(&acm->mutex);
+       return acm_resume(intf);
+}
+
 #endif /* CONFIG_PM */
 
 #define NOKIA_PCSUITE_ACM_INFO(x) \
@@ -1602,6 +1619,7 @@ static struct usb_driver acm_driver = {
 #ifdef CONFIG_PM
        .suspend =      acm_suspend,
        .resume =       acm_resume,
+       .reset_resume = acm_reset_resume,
 #endif
        .id_table =     acm_ids,
 #ifdef CONFIG_PM