|
@@ -398,7 +398,8 @@ static int usbtmc_ioctl_abort_bulk_in(struct usbtmc_device_data *data)
|
|
|
return usbtmc_ioctl_abort_bulk_in_tag(data, data->bTag_last_read);
|
|
|
}
|
|
|
|
|
|
-static int usbtmc_ioctl_abort_bulk_out(struct usbtmc_device_data *data)
|
|
|
+static int usbtmc_ioctl_abort_bulk_out_tag(struct usbtmc_device_data *data,
|
|
|
+ u8 tag)
|
|
|
{
|
|
|
struct device *dev;
|
|
|
u8 *buffer;
|
|
@@ -415,8 +416,8 @@ static int usbtmc_ioctl_abort_bulk_out(struct usbtmc_device_data *data)
|
|
|
usb_rcvctrlpipe(data->usb_dev, 0),
|
|
|
USBTMC_REQUEST_INITIATE_ABORT_BULK_OUT,
|
|
|
USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
|
|
|
- data->bTag_last_write, data->bulk_out,
|
|
|
- buffer, 2, USBTMC_TIMEOUT);
|
|
|
+ tag, data->bulk_out,
|
|
|
+ buffer, 2, USB_CTRL_GET_TIMEOUT);
|
|
|
|
|
|
if (rv < 0) {
|
|
|
dev_err(dev, "usb_control_msg returned %d\n", rv);
|
|
@@ -435,12 +436,14 @@ static int usbtmc_ioctl_abort_bulk_out(struct usbtmc_device_data *data)
|
|
|
n = 0;
|
|
|
|
|
|
usbtmc_abort_bulk_out_check_status:
|
|
|
+ /* do not stress device with subsequent requests */
|
|
|
+ msleep(50);
|
|
|
rv = usb_control_msg(data->usb_dev,
|
|
|
usb_rcvctrlpipe(data->usb_dev, 0),
|
|
|
USBTMC_REQUEST_CHECK_ABORT_BULK_OUT_STATUS,
|
|
|
USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_ENDPOINT,
|
|
|
0, data->bulk_out, buffer, 0x08,
|
|
|
- USBTMC_TIMEOUT);
|
|
|
+ USB_CTRL_GET_TIMEOUT);
|
|
|
n++;
|
|
|
if (rv < 0) {
|
|
|
dev_err(dev, "usb_control_msg returned %d\n", rv);
|
|
@@ -474,6 +477,11 @@ exit:
|
|
|
return rv;
|
|
|
}
|
|
|
|
|
|
+static int usbtmc_ioctl_abort_bulk_out(struct usbtmc_device_data *data)
|
|
|
+{
|
|
|
+ return usbtmc_ioctl_abort_bulk_out_tag(data, data->bTag_last_write);
|
|
|
+}
|
|
|
+
|
|
|
static int usbtmc488_ioctl_read_stb(struct usbtmc_file_data *file_data,
|
|
|
void __user *arg)
|
|
|
{
|