]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/usb/serial/option.c
Merge branch 'next' (accumulated 3.16 merge window patches) into master
[karo-tx-linux.git] / drivers / usb / serial / option.c
index 948a19f0cdf7cf71b9f3fc5f782d07cb0428496f..59c3108cc13663e71dd97d2656e74940e7f27e48 100644 (file)
@@ -1731,7 +1731,6 @@ static struct usb_serial_driver option_1port_device = {
        .write             = usb_wwan_write,
        .write_room        = usb_wwan_write_room,
        .chars_in_buffer   = usb_wwan_chars_in_buffer,
-       .set_termios       = usb_wwan_set_termios,
        .tiocmget          = usb_wwan_tiocmget,
        .tiocmset          = usb_wwan_tiocmset,
        .ioctl             = usb_wwan_ioctl,
@@ -1906,6 +1905,7 @@ static void option_instat_callback(struct urb *urb)
 
        /* Resubmit urb so we continue receiving IRQ data */
        if (status != -ESHUTDOWN && status != -ENOENT) {
+               usb_mark_last_busy(port->serial->dev);
                err = usb_submit_urb(urb, GFP_ATOMIC);
                if (err)
                        dev_dbg(dev, "%s: resubmit intr urb failed. (%d)\n",
@@ -1925,6 +1925,7 @@ static int option_send_setup(struct usb_serial_port *port)
        struct option_private *priv = intfdata->private;
        struct usb_wwan_port_private *portdata;
        int val = 0;
+       int res;
 
        portdata = usb_get_serial_port_data(port);
 
@@ -1933,9 +1934,17 @@ static int option_send_setup(struct usb_serial_port *port)
        if (portdata->rts_state)
                val |= 0x02;
 
-       return usb_control_msg(serial->dev, usb_rcvctrlpipe(serial->dev, 0),
+       res = usb_autopm_get_interface(serial->interface);
+       if (res)
+               return res;
+
+       res = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
                                0x22, 0x21, val, priv->bInterfaceNumber, NULL,
                                0, USB_CTRL_SET_TIMEOUT);
+
+       usb_autopm_put_interface(serial->interface);
+
+       return res;
 }
 
 MODULE_AUTHOR(DRIVER_AUTHOR);