USB: opticon: fix return value of tiocmset
authorJohan Hovold <jhovold@gmail.com>
Thu, 21 Mar 2013 11:37:42 +0000 (12:37 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 25 Mar 2013 20:54:31 +0000 (13:54 -0700)
Make sure we return 0 or a negative error number appropriate for
userspace on errors.

Currently 1 rather than 0 is returned on successful operation.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/usb/serial/opticon.c

index e13e1a4d3e1e0901d09195280ae6f7fd4cf386fc..6af5bb8100625b259fe70c04091ba544a65abed7 100644 (file)
@@ -120,7 +120,10 @@ static int send_control_msg(struct usb_serial_port *port, u8 requesttype,
                                0, 0, buffer, 1, 0);
        kfree(buffer);
 
-       return retval;
+       if (retval < 0)
+               return retval;
+
+       return 0;
 }
 
 static int opticon_open(struct tty_struct *tty, struct usb_serial_port *port)
@@ -329,10 +332,13 @@ static int opticon_tiocmset(struct tty_struct *tty,
 
        /* Send the new RTS state to the connected device */
        mutex_lock(&serial->disc_mutex);
-       if (!serial->disconnected)
+       if (!serial->disconnected) {
                ret = send_control_msg(port, CONTROL_RTS, !rts);
-       else
+               if (ret)
+                       ret = usb_translate_errors(ret);
+       } else {
                ret = -ENODEV;
+       }
        mutex_unlock(&serial->disc_mutex);
 
        return ret;