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 | } |