USB: ftdi_sio: fix latency-timeout endianess bug
authorJohan Hovold <jhovold@gmail.com>
Thu, 24 Dec 2009 11:42:08 +0000 (12:42 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 2 Mar 2010 22:53:37 +0000 (14:53 -0800)
Also fixes DMA transfer to stack for latency buffer.

Signed-off-by: Johan Hovold <jhovold@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/serial/ftdi_sio.c

index ec901ed5d93caaf0430406d6355ac7b0b0afb0a4..59b6cbf020a0e52c2652af881a0914ea2432668d 100644 (file)
@@ -1181,22 +1181,28 @@ static int read_latency_timer(struct usb_serial_port *port)
 {
        struct ftdi_private *priv = usb_get_serial_port_data(port);
        struct usb_device *udev = port->serial->dev;
-       unsigned short latency = 0;
+       unsigned char *buf;
        int rv = 0;
 
        dbg("%s", __func__);
 
+       buf = kmalloc(1, GFP_KERNEL);
+       if (!buf)
+               return -ENOMEM;
+
        rv = usb_control_msg(udev,
                             usb_rcvctrlpipe(udev, 0),
                             FTDI_SIO_GET_LATENCY_TIMER_REQUEST,
                             FTDI_SIO_GET_LATENCY_TIMER_REQUEST_TYPE,
                             0, priv->interface,
-                            (char *) &latency, 1, WDR_TIMEOUT);
-
+                            buf, 1, WDR_TIMEOUT);
        if (rv < 0)
                dev_err(&port->dev, "Unable to read latency timer: %i\n", rv);
        else
-               priv->latency = latency;
+               priv->latency = buf[0];
+
+       kfree(buf);
+
        return rv;
 }