Merge branch 'stable-3.2' into pandora-3.2
[pandora-kernel.git] / drivers / usb / serial / mct_u232.c
index 96a62dd..ed8694b 100644 (file)
@@ -251,7 +251,7 @@ static int mct_u232_set_baud_rate(struct tty_struct *tty,
                return -ENOMEM;
 
        divisor = mct_u232_calculate_baud_rate(serial, value, &speed);
-       put_unaligned_le32(cpu_to_le32(divisor), buf);
+       put_unaligned_le32(divisor, buf);
        rc = usb_control_msg(serial->dev, usb_sndctrlpipe(serial->dev, 0),
                                MCT_U232_SET_BAUD_RATE_REQUEST,
                                MCT_U232_SET_REQUEST_TYPE,
@@ -385,9 +385,13 @@ static int mct_u232_get_modem_stat(struct usb_serial *serial,
                        MCT_U232_GET_REQUEST_TYPE,
                        0, 0, buf, MCT_U232_GET_MODEM_STAT_SIZE,
                        WDR_TIMEOUT);
-       if (rc < 0) {
+       if (rc < MCT_U232_GET_MODEM_STAT_SIZE) {
                dev_err(&serial->dev->dev,
                        "Get MODEM STATus failed (error = %d)\n", rc);
+
+               if (rc >= 0)
+                       rc = -EIO;
+
                *msr = 0;
        } else {
                *msr = buf[0];
@@ -443,6 +447,12 @@ static int mct_u232_startup(struct usb_serial *serial)
        struct mct_u232_private *priv;
        struct usb_serial_port *port, *rport;
 
+       /* check first to simplify error handling */
+       if (!serial->port[1] || !serial->port[1]->interrupt_in_urb) {
+               dev_err(&port->dev, "expected endpoint missing\n");
+               return -ENODEV;
+       }
+
        priv = kzalloc(sizeof(struct mct_u232_private), GFP_KERNEL);
        if (!priv)
                return -ENOMEM;