diff options
Diffstat (limited to 'drivers/usb/class/usbtmc.c')
| -rw-r--r-- | drivers/usb/class/usbtmc.c | 59 |
1 files changed, 23 insertions, 36 deletions
diff --git a/drivers/usb/class/usbtmc.c b/drivers/usb/class/usbtmc.c index 2473cf0c6b1d..3e7c1b800ebb 100644 --- a/drivers/usb/class/usbtmc.c +++ b/drivers/usb/class/usbtmc.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /** | 1 | /** |
| 2 | * drivers/usb/class/usbtmc.c - USB Test & Measurment class driver | 2 | * drivers/usb/class/usbtmc.c - USB Test & Measurement class driver |
| 3 | * | 3 | * |
| 4 | * Copyright (C) 2007 Stefan Kopp, Gechingen, Germany | 4 | * Copyright (C) 2007 Stefan Kopp, Gechingen, Germany |
| 5 | * Copyright (C) 2008 Novell, Inc. | 5 | * Copyright (C) 2008 Novell, Inc. |
| @@ -25,6 +25,7 @@ | |||
| 25 | #include <linux/fs.h> | 25 | #include <linux/fs.h> |
| 26 | #include <linux/uaccess.h> | 26 | #include <linux/uaccess.h> |
| 27 | #include <linux/kref.h> | 27 | #include <linux/kref.h> |
| 28 | #include <linux/slab.h> | ||
| 28 | #include <linux/mutex.h> | 29 | #include <linux/mutex.h> |
| 29 | #include <linux/usb.h> | 30 | #include <linux/usb.h> |
| 30 | #include <linux/usb/tmc.h> | 31 | #include <linux/usb/tmc.h> |
| @@ -48,7 +49,7 @@ | |||
| 48 | */ | 49 | */ |
| 49 | #define USBTMC_MAX_READS_TO_CLEAR_BULK_IN 100 | 50 | #define USBTMC_MAX_READS_TO_CLEAR_BULK_IN 100 |
| 50 | 51 | ||
| 51 | static struct usb_device_id usbtmc_devices[] = { | 52 | static const struct usb_device_id usbtmc_devices[] = { |
| 52 | { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), }, | 53 | { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 0), }, |
| 53 | { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 1), }, | 54 | { USB_INTERFACE_INFO(USB_CLASS_APP_SPEC, 3, 1), }, |
| 54 | { 0, } /* terminating entry */ | 55 | { 0, } /* terminating entry */ |
| @@ -347,13 +348,8 @@ usbtmc_abort_bulk_out_check_status: | |||
| 347 | goto exit; | 348 | goto exit; |
| 348 | 349 | ||
| 349 | usbtmc_abort_bulk_out_clear_halt: | 350 | usbtmc_abort_bulk_out_clear_halt: |
| 350 | rv = usb_control_msg(data->usb_dev, | 351 | rv = usb_clear_halt(data->usb_dev, |
| 351 | usb_sndctrlpipe(data->usb_dev, 0), | 352 | usb_sndbulkpipe(data->usb_dev, data->bulk_out)); |
| 352 | USB_REQ_CLEAR_FEATURE, | ||
| 353 | USB_DIR_OUT | USB_TYPE_STANDARD | | ||
| 354 | USB_RECIP_ENDPOINT, | ||
| 355 | USB_ENDPOINT_HALT, data->bulk_out, buffer, | ||
| 356 | 0, USBTMC_TIMEOUT); | ||
| 357 | 353 | ||
| 358 | if (rv < 0) { | 354 | if (rv < 0) { |
| 359 | dev_err(dev, "usb_control_msg returned %d\n", rv); | 355 | dev_err(dev, "usb_control_msg returned %d\n", rv); |
| @@ -562,10 +558,16 @@ static ssize_t usbtmc_write(struct file *filp, const char __user *buf, | |||
| 562 | n_bytes = roundup(12 + this_part, 4); | 558 | n_bytes = roundup(12 + this_part, 4); |
| 563 | memset(buffer + 12 + this_part, 0, n_bytes - (12 + this_part)); | 559 | memset(buffer + 12 + this_part, 0, n_bytes - (12 + this_part)); |
| 564 | 560 | ||
| 565 | retval = usb_bulk_msg(data->usb_dev, | 561 | do { |
| 566 | usb_sndbulkpipe(data->usb_dev, | 562 | retval = usb_bulk_msg(data->usb_dev, |
| 567 | data->bulk_out), | 563 | usb_sndbulkpipe(data->usb_dev, |
| 568 | buffer, n_bytes, &actual, USBTMC_TIMEOUT); | 564 | data->bulk_out), |
| 565 | buffer, n_bytes, | ||
| 566 | &actual, USBTMC_TIMEOUT); | ||
| 567 | if (retval != 0) | ||
| 568 | break; | ||
| 569 | n_bytes -= actual; | ||
| 570 | } while (n_bytes); | ||
| 569 | 571 | ||
| 570 | data->bTag_last_write = data->bTag; | 572 | data->bTag_last_write = data->bTag; |
| 571 | data->bTag++; | 573 | data->bTag++; |
| @@ -702,14 +704,8 @@ usbtmc_clear_check_status: | |||
| 702 | 704 | ||
| 703 | usbtmc_clear_bulk_out_halt: | 705 | usbtmc_clear_bulk_out_halt: |
| 704 | 706 | ||
| 705 | rv = usb_control_msg(data->usb_dev, | 707 | rv = usb_clear_halt(data->usb_dev, |
| 706 | usb_sndctrlpipe(data->usb_dev, 0), | 708 | usb_sndbulkpipe(data->usb_dev, data->bulk_out)); |
| 707 | USB_REQ_CLEAR_FEATURE, | ||
| 708 | USB_DIR_OUT | USB_TYPE_STANDARD | | ||
| 709 | USB_RECIP_ENDPOINT, | ||
| 710 | USB_ENDPOINT_HALT, | ||
| 711 | data->bulk_out, buffer, 0, | ||
| 712 | USBTMC_TIMEOUT); | ||
| 713 | if (rv < 0) { | 709 | if (rv < 0) { |
| 714 | dev_err(dev, "usb_control_msg returned %d\n", rv); | 710 | dev_err(dev, "usb_control_msg returned %d\n", rv); |
| 715 | goto exit; | 711 | goto exit; |
| @@ -730,13 +726,8 @@ static int usbtmc_ioctl_clear_out_halt(struct usbtmc_device_data *data) | |||
| 730 | if (!buffer) | 726 | if (!buffer) |
| 731 | return -ENOMEM; | 727 | return -ENOMEM; |
| 732 | 728 | ||
| 733 | rv = usb_control_msg(data->usb_dev, | 729 | rv = usb_clear_halt(data->usb_dev, |
| 734 | usb_sndctrlpipe(data->usb_dev, 0), | 730 | usb_sndbulkpipe(data->usb_dev, data->bulk_out)); |
| 735 | USB_REQ_CLEAR_FEATURE, | ||
| 736 | USB_DIR_OUT | USB_TYPE_STANDARD | | ||
| 737 | USB_RECIP_ENDPOINT, | ||
| 738 | USB_ENDPOINT_HALT, data->bulk_out, | ||
| 739 | buffer, 0, USBTMC_TIMEOUT); | ||
| 740 | 731 | ||
| 741 | if (rv < 0) { | 732 | if (rv < 0) { |
| 742 | dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n", | 733 | dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n", |
| @@ -759,12 +750,8 @@ static int usbtmc_ioctl_clear_in_halt(struct usbtmc_device_data *data) | |||
| 759 | if (!buffer) | 750 | if (!buffer) |
| 760 | return -ENOMEM; | 751 | return -ENOMEM; |
| 761 | 752 | ||
| 762 | rv = usb_control_msg(data->usb_dev, usb_sndctrlpipe(data->usb_dev, 0), | 753 | rv = usb_clear_halt(data->usb_dev, |
| 763 | USB_REQ_CLEAR_FEATURE, | 754 | usb_rcvbulkpipe(data->usb_dev, data->bulk_in)); |
| 764 | USB_DIR_OUT | USB_TYPE_STANDARD | | ||
| 765 | USB_RECIP_ENDPOINT, | ||
| 766 | USB_ENDPOINT_HALT, data->bulk_in, buffer, 0, | ||
| 767 | USBTMC_TIMEOUT); | ||
| 768 | 755 | ||
| 769 | if (rv < 0) { | 756 | if (rv < 0) { |
| 770 | dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n", | 757 | dev_err(&data->usb_dev->dev, "usb_control_msg returned %d\n", |
| @@ -1109,13 +1096,13 @@ static void usbtmc_disconnect(struct usb_interface *intf) | |||
| 1109 | kref_put(&data->kref, usbtmc_delete); | 1096 | kref_put(&data->kref, usbtmc_delete); |
| 1110 | } | 1097 | } |
| 1111 | 1098 | ||
| 1112 | static int usbtmc_suspend (struct usb_interface *intf, pm_message_t message) | 1099 | static int usbtmc_suspend(struct usb_interface *intf, pm_message_t message) |
| 1113 | { | 1100 | { |
| 1114 | /* this driver does not have pending URBs */ | 1101 | /* this driver does not have pending URBs */ |
| 1115 | return 0; | 1102 | return 0; |
| 1116 | } | 1103 | } |
| 1117 | 1104 | ||
| 1118 | static int usbtmc_resume (struct usb_interface *intf) | 1105 | static int usbtmc_resume(struct usb_interface *intf) |
| 1119 | { | 1106 | { |
| 1120 | return 0; | 1107 | return 0; |
| 1121 | } | 1108 | } |
