USB: usbtmc: Use usb_clear_halt() instead of custom code.
authorSarah Sharp <sarah.a.sharp@linux.intel.com>
Thu, 3 Dec 2009 19:35:59 +0000 (11:35 -0800)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 11 Dec 2009 19:55:27 +0000 (11:55 -0800)
Make the USB Test & Measurement driver use usb_clear_halt() instead of
usb_control_msg() to clear a stalled endpoint.  This will allow devices to
be tested under an xHCI host controller.  The endpoint stall will not be
cleared in the internal xHCI hardware state unless usb_clear_halt() is
used.

Signed-off-by: Sarah Sharp <sarah.a.sharp@linux.intel.com>
Cc: Steve Holland <sdh4@iastate.edu>
Cc: Oliver Neukum <oliver@neukum.org>
Cc: Jouni Ryno <Jouni.Ryno@fmi.fi>
Cc: Gergely Imreh <imrehg@gmail.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/class/usbtmc.c

index 619cc99..7c5f4e3 100644 (file)
@@ -347,13 +347,8 @@ usbtmc_abort_bulk_out_check_status:
        goto exit;
 
 usbtmc_abort_bulk_out_clear_halt:
-       rv = usb_control_msg(data->usb_dev,
-                            usb_sndctrlpipe(data->usb_dev, 0),
-                            USB_REQ_CLEAR_FEATURE,
-                            USB_DIR_OUT | USB_TYPE_STANDARD |
-                            USB_RECIP_ENDPOINT,
-                            USB_ENDPOINT_HALT, data->bulk_out, buffer,
-                            0, USBTMC_TIMEOUT);
+       rv = usb_clear_halt(data->usb_dev,
+                           usb_sndbulkpipe(data->usb_dev, data->bulk_out));
 
        if (rv < 0) {
                dev_err(dev, "usb_control_msg returned %d\n", rv);
@@ -708,14 +703,8 @@ usbtmc_clear_check_status:
 
 usbtmc_clear_bulk_out_halt:
 
-       rv = usb_control_msg(data->usb_dev,
-                            usb_sndctrlpipe(data->usb_dev, 0),
-                            USB_REQ_CLEAR_FEATURE,
-                            USB_DIR_OUT | USB_TYPE_STANDARD |
-                            USB_RECIP_ENDPOINT,
-                            USB_ENDPOINT_HALT,
-                            data->bulk_out, buffer, 0,
-                            USBTMC_TIMEOUT);
+       rv = usb_clear_halt(data->usb_dev,
+                           usb_sndbulkpipe(data->usb_dev, data->bulk_out));
        if (rv < 0) {
                dev_err(dev, "usb_control_msg returned %d\n", rv);
                goto exit;
@@ -736,13 +725,8 @@ static int usbtmc_ioctl_clear_out_halt(struct usbtmc_device_data *data)
        if (!buffer)
                return -ENOMEM;
 
-       rv = usb_control_msg(data->usb_dev,
-                            usb_sndctrlpipe(data->usb_dev, 0),
-                            USB_REQ_CLEAR_FEATURE,
-                            USB_DIR_OUT | USB_TYPE_STANDARD |
-                            USB_RECIP_ENDPOINT,
-                            USB_ENDPOINT_HALT, data->bulk_out,
-                            buffer, 0, USBTMC_TIMEOUT);
+       rv = usb_clear_halt(data->usb_dev,
+                           usb_sndbulkpipe(data->usb_dev, data->bulk_out));
 
        if (rv < 0) {
                dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n",
@@ -765,12 +749,8 @@ static int usbtmc_ioctl_clear_in_halt(struct usbtmc_device_data *data)
        if (!buffer)
                return -ENOMEM;
 
-       rv = usb_control_msg(data->usb_dev, usb_sndctrlpipe(data->usb_dev, 0),
-                            USB_REQ_CLEAR_FEATURE,
-                            USB_DIR_OUT | USB_TYPE_STANDARD |
-                            USB_RECIP_ENDPOINT,
-                            USB_ENDPOINT_HALT, data->bulk_in, buffer, 0,
-                            USBTMC_TIMEOUT);
+       rv = usb_clear_halt(data->usb_dev,
+                           usb_rcvbulkpipe(data->usb_dev, data->bulk_in));
 
        if (rv < 0) {
                dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n",