1 /*****************************************************************************
2 * File: drivers/usb/misc/vstusb.c
4 * Purpose: Support for the bulk USB Vernier Spectrophotometers
6 * Author: Johnnie Peters
8 * Beaverton, OR, USA 97005
10 * Modified by: EQware Engineering, Inc.
11 * Oregon City, OR, USA 97045
13 * Copyright: 2007, 2008
14 * Vernier Software & Technology
15 * Beaverton, OR, USA 97005
17 * Web: www.vernier.com
19 * This program is free software; you can redistribute it and/or modify
20 * it under the terms of the GNU General Public License version 2 as
21 * published by the Free Software Foundation.
23 *****************************************************************************/
24 #include <linux/kernel.h>
25 #include <linux/errno.h>
26 #include <linux/init.h>
27 #include <linux/slab.h>
28 #include <linux/module.h>
29 #include <linux/mutex.h>
30 #include <linux/uaccess.h>
31 #include <linux/usb.h>
33 #include <linux/usb/vstusb.h>
35 #define DRIVER_VERSION "VST USB Driver Version 1.5"
36 #define DRIVER_DESC "Vernier Software Technology Bulk USB Driver"
38 #ifdef CONFIG_USB_DYNAMIC_MINORS
39 #define VSTUSB_MINOR_BASE 0
41 #define VSTUSB_MINOR_BASE 199
44 #define USB_VENDOR_OCEANOPTICS 0x2457
45 #define USB_VENDOR_VERNIER 0x08F7 /* Vernier Software & Technology */
47 #define USB_PRODUCT_USB2000 0x1002
48 #define USB_PRODUCT_ADC1000_FW 0x1003 /* firmware download (renumerates) */
49 #define USB_PRODUCT_ADC1000 0x1004
50 #define USB_PRODUCT_HR2000_FW 0x1009 /* firmware download (renumerates) */
51 #define USB_PRODUCT_HR2000 0x100A
52 #define USB_PRODUCT_HR4000_FW 0x1011 /* firmware download (renumerates) */
53 #define USB_PRODUCT_HR4000 0x1012
54 #define USB_PRODUCT_USB650 0x1014 /* "Red Tide" */
55 #define USB_PRODUCT_QE65000 0x1018
56 #define USB_PRODUCT_USB4000 0x1022
57 #define USB_PRODUCT_USB325 0x1024 /* "Vernier Spectrometer" */
59 #define USB_PRODUCT_LABPRO 0x0001
60 #define USB_PRODUCT_LABQUEST 0x0005
62 #define VST_MAXBUFFER (64*1024)
64 static struct usb_device_id id_table
[] = {
65 { USB_DEVICE(USB_VENDOR_OCEANOPTICS
, USB_PRODUCT_USB2000
)},
66 { USB_DEVICE(USB_VENDOR_OCEANOPTICS
, USB_PRODUCT_HR4000
)},
67 { USB_DEVICE(USB_VENDOR_OCEANOPTICS
, USB_PRODUCT_USB650
)},
68 { USB_DEVICE(USB_VENDOR_OCEANOPTICS
, USB_PRODUCT_USB4000
)},
69 { USB_DEVICE(USB_VENDOR_OCEANOPTICS
, USB_PRODUCT_USB325
)},
70 { USB_DEVICE(USB_VENDOR_VERNIER
, USB_PRODUCT_LABQUEST
)},
71 { USB_DEVICE(USB_VENDOR_VERNIER
, USB_PRODUCT_LABPRO
)},
75 MODULE_DEVICE_TABLE(usb
, id_table
);
77 struct vstusb_device
{
80 struct usb_device
*usb_dev
;
83 struct usb_anchor submitted
;
89 #define to_vst_dev(d) container_of(d, struct vstusb_device, kref)
91 static struct usb_driver vstusb_driver
;
93 static void vstusb_delete(struct kref
*kref
)
95 struct vstusb_device
*vstdev
= to_vst_dev(kref
);
97 usb_put_dev(vstdev
->usb_dev
);
101 static int vstusb_open(struct inode
*inode
, struct file
*file
)
103 struct vstusb_device
*vstdev
;
104 struct usb_interface
*interface
;
106 interface
= usb_find_interface(&vstusb_driver
, iminor(inode
));
109 printk(KERN_ERR KBUILD_MODNAME
110 ": %s - error, can't find device for minor %d\n",
111 __func__
, iminor(inode
));
115 vstdev
= usb_get_intfdata(interface
);
120 /* lock this device */
121 mutex_lock(&vstdev
->lock
);
123 /* can only open one time */
124 if ((!vstdev
->present
) || (vstdev
->isopen
)) {
125 mutex_unlock(&vstdev
->lock
);
129 /* increment our usage count */
130 kref_get(&vstdev
->kref
);
134 /* save device in the file's private structure */
135 file
->private_data
= vstdev
;
137 dev_dbg(&vstdev
->usb_dev
->dev
, "%s: opened\n", __func__
);
139 mutex_unlock(&vstdev
->lock
);
144 static int vstusb_release(struct inode
*inode
, struct file
*file
)
146 struct vstusb_device
*vstdev
;
148 vstdev
= file
->private_data
;
153 mutex_lock(&vstdev
->lock
);
157 dev_dbg(&vstdev
->usb_dev
->dev
, "%s: released\n", __func__
);
159 mutex_unlock(&vstdev
->lock
);
161 kref_put(&vstdev
->kref
, vstusb_delete
);
166 static void usb_api_blocking_completion(struct urb
*urb
)
168 struct completion
*completeit
= urb
->context
;
170 complete(completeit
);
173 static int vstusb_fill_and_send_urb(struct urb
*urb
,
174 struct usb_device
*usb_dev
,
175 unsigned int pipe
, void *data
,
176 unsigned int len
, struct completion
*done
)
178 struct usb_host_endpoint
*ep
;
179 struct usb_host_endpoint
**hostep
;
184 hostep
= usb_pipein(pipe
) ? usb_dev
->ep_in
: usb_dev
->ep_out
;
185 pipend
= usb_pipeendpoint(pipe
);
188 if (!ep
|| (len
== 0))
191 if ((ep
->desc
.bmAttributes
& USB_ENDPOINT_XFERTYPE_MASK
)
192 == USB_ENDPOINT_XFER_INT
) {
193 pipe
= (pipe
& ~(3 << 30)) | (PIPE_INTERRUPT
<< 30);
194 usb_fill_int_urb(urb
, usb_dev
, pipe
, data
, len
,
195 (usb_complete_t
)usb_api_blocking_completion
,
196 NULL
, ep
->desc
.bInterval
);
198 usb_fill_bulk_urb(urb
, usb_dev
, pipe
, data
, len
,
199 (usb_complete_t
)usb_api_blocking_completion
,
202 init_completion(done
);
204 urb
->actual_length
= 0;
205 status
= usb_submit_urb(urb
, GFP_KERNEL
);
210 static int vstusb_complete_urb(struct urb
*urb
, struct completion
*done
,
211 int timeout
, int *actual_length
)
213 unsigned long expire
;
216 expire
= timeout
? msecs_to_jiffies(timeout
) : MAX_SCHEDULE_TIMEOUT
;
217 if (!wait_for_completion_interruptible_timeout(done
, expire
)) {
219 status
= urb
->status
== -ENOENT
? -ETIMEDOUT
: urb
->status
;
221 dev_dbg(&urb
->dev
->dev
,
222 "%s timed out on ep%d%s len=%d/%d, urb status = %d\n",
224 usb_pipeendpoint(urb
->pipe
),
225 usb_pipein(urb
->pipe
) ? "in" : "out",
227 urb
->transfer_buffer_length
,
231 if (signal_pending(current
)) {
232 /* if really an error */
233 if (urb
->status
&& !((urb
->status
== -ENOENT
) ||
234 (urb
->status
== -ECONNRESET
) ||
235 (urb
->status
== -ESHUTDOWN
))) {
242 dev_dbg(&urb
->dev
->dev
,
243 "%s: signal pending on ep%d%s len=%d/%d,"
246 usb_pipeendpoint(urb
->pipe
),
247 usb_pipein(urb
->pipe
) ? "in" : "out",
249 urb
->transfer_buffer_length
,
253 status
= urb
->status
;
258 *actual_length
= urb
->actual_length
;
263 static ssize_t
vstusb_read(struct file
*file
, char __user
*buffer
,
264 size_t count
, loff_t
*ppos
)
266 struct vstusb_device
*vstdev
;
272 struct usb_device
*dev
;
276 DECLARE_COMPLETION_ONSTACK(done
);
278 vstdev
= file
->private_data
;
283 /* verify that we actually want to read some data */
284 if ((count
== 0) || (count
> VST_MAXBUFFER
))
287 /* lock this object */
288 if (mutex_lock_interruptible(&vstdev
->lock
))
292 if (!vstdev
->present
) {
293 mutex_unlock(&vstdev
->lock
);
294 printk(KERN_ERR KBUILD_MODNAME
295 ": %s: device not present\n", __func__
);
299 /* pull out the necessary data */
300 dev
= vstdev
->usb_dev
;
301 pipe
= usb_rcvbulkpipe(dev
, vstdev
->rd_pipe
);
302 timeout
= vstdev
->rd_timeout_ms
;
304 buf
= kmalloc(count
, GFP_KERNEL
);
306 mutex_unlock(&vstdev
->lock
);
310 urb
= usb_alloc_urb(0, GFP_KERNEL
);
313 mutex_unlock(&vstdev
->lock
);
317 usb_anchor_urb(urb
, &vstdev
->submitted
);
318 retval
= vstusb_fill_and_send_urb(urb
, dev
, pipe
, buf
, count
, &done
);
319 mutex_unlock(&vstdev
->lock
);
321 usb_unanchor_urb(urb
);
322 dev_err(&dev
->dev
, "%s: error %d filling and sending urb %d\n",
323 __func__
, retval
, pipe
);
327 retval
= vstusb_complete_urb(urb
, &done
, timeout
, &cnt
);
329 dev_err(&dev
->dev
, "%s: error %d completing urb %d\n",
330 __func__
, retval
, pipe
);
334 if (copy_to_user(buffer
, buf
, cnt
)) {
335 dev_err(&dev
->dev
, "%s: can't copy_to_user\n", __func__
);
339 dev_dbg(&dev
->dev
, "%s: read %d bytes from pipe %d\n",
340 __func__
, cnt
, pipe
);
349 static ssize_t
vstusb_write(struct file
*file
, const char __user
*buffer
,
350 size_t count
, loff_t
*ppos
)
352 struct vstusb_device
*vstdev
;
358 struct usb_device
*dev
;
362 DECLARE_COMPLETION_ONSTACK(done
);
364 vstdev
= file
->private_data
;
369 /* verify that we actually have some data to write */
370 if ((count
== 0) || (count
> VST_MAXBUFFER
))
373 /* lock this object */
374 if (mutex_lock_interruptible(&vstdev
->lock
))
378 if (!vstdev
->present
) {
379 mutex_unlock(&vstdev
->lock
);
380 printk(KERN_ERR KBUILD_MODNAME
381 ": %s: device not present\n", __func__
);
385 /* pull out the necessary data */
386 dev
= vstdev
->usb_dev
;
387 pipe
= usb_sndbulkpipe(dev
, vstdev
->wr_pipe
);
388 timeout
= vstdev
->wr_timeout_ms
;
390 buf
= kmalloc(count
, GFP_KERNEL
);
392 mutex_unlock(&vstdev
->lock
);
396 urb
= usb_alloc_urb(0, GFP_KERNEL
);
399 mutex_unlock(&vstdev
->lock
);
403 if (copy_from_user(buf
, buffer
, count
)) {
404 dev_err(&dev
->dev
, "%s: can't copy_from_user\n", __func__
);
409 usb_anchor_urb(urb
, &vstdev
->submitted
);
410 retval
= vstusb_fill_and_send_urb(urb
, dev
, pipe
, buf
, count
, &done
);
411 mutex_unlock(&vstdev
->lock
);
413 usb_unanchor_urb(urb
);
414 dev_err(&dev
->dev
, "%s: error %d filling and sending urb %d\n",
415 __func__
, retval
, pipe
);
419 retval
= vstusb_complete_urb(urb
, &done
, timeout
, &cnt
);
421 dev_err(&dev
->dev
, "%s: error %d completing urb %d\n",
422 __func__
, retval
, pipe
);
426 dev_dbg(&dev
->dev
, "%s: sent %d bytes to pipe %d\n",
427 __func__
, cnt
, pipe
);
436 static long vstusb_ioctl(struct file
*file
, unsigned int cmd
, unsigned long arg
)
440 void __user
*data
= (void __user
*)arg
;
441 struct vstusb_args usb_data
;
443 struct vstusb_device
*vstdev
;
444 void *buffer
= NULL
; /* must be initialized. buffer is
445 * referenced on exit but not all
446 * ioctls allocate it */
448 struct urb
*urb
= NULL
; /* must be initialized. urb is
449 * referenced on exit but not all
450 * ioctls allocate it */
451 struct usb_device
*dev
;
455 DECLARE_COMPLETION_ONSTACK(done
);
457 vstdev
= file
->private_data
;
459 if (_IOC_TYPE(cmd
) != VST_IOC_MAGIC
) {
460 dev_warn(&vstdev
->usb_dev
->dev
,
461 "%s: ioctl command %x, bad ioctl magic %x, "
462 "expected %x\n", __func__
, cmd
,
463 _IOC_TYPE(cmd
), VST_IOC_MAGIC
);
470 if (copy_from_user(&usb_data
, data
, sizeof(struct vstusb_args
))) {
471 dev_err(&vstdev
->usb_dev
->dev
, "%s: can't copy_from_user\n",
476 /* lock this object */
477 if (mutex_lock_interruptible(&vstdev
->lock
)) {
478 retval
= -ERESTARTSYS
;
483 if (!vstdev
->present
) {
484 mutex_unlock(&vstdev
->lock
);
485 dev_err(&vstdev
->usb_dev
->dev
, "%s: device not present\n",
491 /* pull out the necessary data */
492 dev
= vstdev
->usb_dev
;
496 case IOCTL_VSTUSB_CONFIG_RW
:
498 vstdev
->rd_pipe
= usb_data
.rd_pipe
;
499 vstdev
->rd_timeout_ms
= usb_data
.rd_timeout_ms
;
500 vstdev
->wr_pipe
= usb_data
.wr_pipe
;
501 vstdev
->wr_timeout_ms
= usb_data
.wr_timeout_ms
;
503 mutex_unlock(&vstdev
->lock
);
505 dev_dbg(&dev
->dev
, "%s: setting pipes/timeouts, "
506 "rdpipe = %d, rdtimeout = %d, "
507 "wrpipe = %d, wrtimeout = %d\n", __func__
,
508 vstdev
->rd_pipe
, vstdev
->rd_timeout_ms
,
509 vstdev
->wr_pipe
, vstdev
->wr_timeout_ms
);
512 case IOCTL_VSTUSB_SEND_PIPE
:
514 if ((usb_data
.count
== 0) || (usb_data
.count
> VST_MAXBUFFER
)) {
515 mutex_unlock(&vstdev
->lock
);
520 buffer
= kmalloc(usb_data
.count
, GFP_KERNEL
);
521 if (buffer
== NULL
) {
522 mutex_unlock(&vstdev
->lock
);
527 urb
= usb_alloc_urb(0, GFP_KERNEL
);
529 mutex_unlock(&vstdev
->lock
);
534 timeout
= usb_data
.timeout_ms
;
536 pipe
= usb_sndbulkpipe(dev
, usb_data
.pipe
);
538 if (copy_from_user(buffer
, usb_data
.buffer
, usb_data
.count
)) {
539 dev_err(&dev
->dev
, "%s: can't copy_from_user\n",
541 mutex_unlock(&vstdev
->lock
);
546 usb_anchor_urb(urb
, &vstdev
->submitted
);
547 retval
= vstusb_fill_and_send_urb(urb
, dev
, pipe
, buffer
,
548 usb_data
.count
, &done
);
549 mutex_unlock(&vstdev
->lock
);
551 usb_unanchor_urb(urb
);
553 "%s: error %d filling and sending urb %d\n",
554 __func__
, retval
, pipe
);
558 retval
= vstusb_complete_urb(urb
, &done
, timeout
, &cnt
);
560 dev_err(&dev
->dev
, "%s: error %d completing urb %d\n",
561 __func__
, retval
, pipe
);
565 case IOCTL_VSTUSB_RECV_PIPE
:
567 if ((usb_data
.count
== 0) || (usb_data
.count
> VST_MAXBUFFER
)) {
568 mutex_unlock(&vstdev
->lock
);
573 buffer
= kmalloc(usb_data
.count
, GFP_KERNEL
);
574 if (buffer
== NULL
) {
575 mutex_unlock(&vstdev
->lock
);
580 urb
= usb_alloc_urb(0, GFP_KERNEL
);
582 mutex_unlock(&vstdev
->lock
);
587 timeout
= usb_data
.timeout_ms
;
589 pipe
= usb_rcvbulkpipe(dev
, usb_data
.pipe
);
591 usb_anchor_urb(urb
, &vstdev
->submitted
);
592 retval
= vstusb_fill_and_send_urb(urb
, dev
, pipe
, buffer
,
593 usb_data
.count
, &done
);
594 mutex_unlock(&vstdev
->lock
);
596 usb_unanchor_urb(urb
);
598 "%s: error %d filling and sending urb %d\n",
599 __func__
, retval
, pipe
);
603 retval
= vstusb_complete_urb(urb
, &done
, timeout
, &cnt
);
605 dev_err(&dev
->dev
, "%s: error %d completing urb %d\n",
606 __func__
, retval
, pipe
);
610 if (copy_to_user(usb_data
.buffer
, buffer
, cnt
)) {
611 dev_err(&dev
->dev
, "%s: can't copy_to_user\n",
617 usb_data
.count
= cnt
;
618 if (copy_to_user(data
, &usb_data
, sizeof(struct vstusb_args
))) {
619 dev_err(&dev
->dev
, "%s: can't copy_to_user\n",
623 dev_dbg(&dev
->dev
, "%s: recv %zd bytes from pipe %d\n",
624 __func__
, usb_data
.count
, usb_data
.pipe
);
630 mutex_unlock(&vstdev
->lock
);
631 dev_warn(&dev
->dev
, "ioctl_vstusb: invalid ioctl cmd %x\n",
642 static const struct file_operations vstusb_fops
= {
643 .owner
= THIS_MODULE
,
645 .write
= vstusb_write
,
646 .unlocked_ioctl
= vstusb_ioctl
,
647 .compat_ioctl
= vstusb_ioctl
,
649 .release
= vstusb_release
,
652 static struct usb_class_driver usb_vstusb_class
= {
653 .name
= "usb/vstusb%d",
654 .fops
= &vstusb_fops
,
655 .minor_base
= VSTUSB_MINOR_BASE
,
658 static int vstusb_probe(struct usb_interface
*intf
,
659 const struct usb_device_id
*id
)
661 struct usb_device
*dev
= interface_to_usbdev(intf
);
662 struct vstusb_device
*vstdev
;
666 /* allocate memory for our device state and intialize it */
668 vstdev
= kzalloc(sizeof(*vstdev
), GFP_KERNEL
);
672 /* must do usb_get_dev() prior to kref_init() since the kref_put()
673 * release function will do a usb_put_dev() */
675 kref_init(&vstdev
->kref
);
676 mutex_init(&vstdev
->lock
);
678 i
= dev
->descriptor
.bcdDevice
;
680 dev_dbg(&intf
->dev
, "Version %1d%1d.%1d%1d found at address %d\n",
681 (i
& 0xF000) >> 12, (i
& 0xF00) >> 8,
682 (i
& 0xF0) >> 4, (i
& 0xF), dev
->devnum
);
686 vstdev
->usb_dev
= dev
;
687 init_usb_anchor(&vstdev
->submitted
);
689 usb_set_intfdata(intf
, vstdev
);
690 retval
= usb_register_dev(intf
, &usb_vstusb_class
);
693 "%s: Not able to get a minor for this device.\n",
695 usb_set_intfdata(intf
, NULL
);
696 kref_put(&vstdev
->kref
, vstusb_delete
);
700 /* let the user know what node this device is now attached to */
702 "VST USB Device #%d now attached to major %d minor %d\n",
703 (intf
->minor
- VSTUSB_MINOR_BASE
), USB_MAJOR
, intf
->minor
);
705 dev_info(&intf
->dev
, "%s, %s\n", DRIVER_DESC
, DRIVER_VERSION
);
710 static void vstusb_disconnect(struct usb_interface
*intf
)
712 struct vstusb_device
*vstdev
= usb_get_intfdata(intf
);
714 usb_deregister_dev(intf
, &usb_vstusb_class
);
715 usb_set_intfdata(intf
, NULL
);
719 mutex_lock(&vstdev
->lock
);
722 usb_kill_anchored_urbs(&vstdev
->submitted
);
724 mutex_unlock(&vstdev
->lock
);
726 kref_put(&vstdev
->kref
, vstusb_delete
);
731 static int vstusb_suspend(struct usb_interface
*intf
, pm_message_t message
)
733 struct vstusb_device
*vstdev
= usb_get_intfdata(intf
);
738 mutex_lock(&vstdev
->lock
);
739 time
= usb_wait_anchor_empty_timeout(&vstdev
->submitted
, 1000);
741 usb_kill_anchored_urbs(&vstdev
->submitted
);
742 mutex_unlock(&vstdev
->lock
);
747 static int vstusb_resume(struct usb_interface
*intf
)
752 static struct usb_driver vstusb_driver
= {
754 .probe
= vstusb_probe
,
755 .disconnect
= vstusb_disconnect
,
756 .suspend
= vstusb_suspend
,
757 .resume
= vstusb_resume
,
758 .id_table
= id_table
,
761 static int __init
vstusb_init(void)
765 rc
= usb_register(&vstusb_driver
);
767 printk(KERN_ERR
"%s: failed to register (%d)", __func__
, rc
);
772 static void __exit
vstusb_exit(void)
774 usb_deregister(&vstusb_driver
);
777 module_init(vstusb_init
);
778 module_exit(vstusb_exit
);
780 MODULE_AUTHOR("Dennis O'Brien/Stephen Ware");
781 MODULE_DESCRIPTION(DRIVER_VERSION
);
782 MODULE_LICENSE("GPL");