[media] gspca - main: Add endpoint direction test in alt_xfer
authorPatrice Chotard <patrice.chotard@sfr.fr>
Mon, 21 Mar 2011 19:58:56 +0000 (16:58 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 22 Mar 2011 19:38:26 +0000 (16:38 -0300)
This patch fixes a bug in gspca, more precisely in alt_xfer().

This function looks for an input transfer endpoint in an alternate setting.
By default it returns the first endpoint corresponding to the transfer type
indicated in parameter.
But with some USB devices, the first endpoint corresponding to the transfer
type is not always an INPUT endpoint but an OUTPUT one.

This patch adds the endpoint direction test to be sure to return an INPUT endpoint

Signed-off-by: Patrice CHOTARD <patricechotard@free.fr>
Signed-off-by: Jean-François Moine <moinejf@free.fr>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/gspca/gspca.c

index 62881740a0bdbe024102715103474ef4c48c3836..9c6a643caf01c3d64aa64993947456c746c29266 100644 (file)
@@ -630,7 +630,8 @@ static struct usb_host_endpoint *alt_xfer(struct usb_host_interface *alt,
                ep = &alt->endpoint[i];
                attr = ep->desc.bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
                if (attr == xfer
-                   && ep->desc.wMaxPacketSize != 0)
+                   && ep->desc.wMaxPacketSize != 0
+                   && usb_endpoint_dir_in(&ep->desc))
                        return ep;
        }
        return NULL;