2 * adutux - driver for ADU devices from Ontrak Control Systems
3 * This is an experimental driver. Use at your own risk.
4 * This driver is not supported by Ontrak Control Systems.
6 * Copyright (c) 2003 John Homppi (SCO, leave this notice here)
8 * This program is free software; you can redistribute it and/or
9 * modify it under the terms of the GNU General Public License as
10 * published by the Free Software Foundation; either version 2 of
11 * the License, or (at your option) any later version.
13 * derived from the Lego USB Tower driver 0.56:
14 * Copyright (c) 2003 David Glance <davidgsf@sourceforge.net>
15 * 2001 Juergen Stuber <stuber@loria.fr>
16 * that was derived from USB Skeleton driver - 0.5
17 * Copyright (c) 2001 Greg Kroah-Hartman (greg@kroah.com)
21 #include <linux/kernel.h>
22 #include <linux/errno.h>
23 #include <linux/init.h>
24 #include <linux/slab.h>
25 #include <linux/module.h>
26 #include <linux/usb.h>
27 #include <linux/mutex.h>
28 #include <asm/uaccess.h>
30 #ifdef CONFIG_USB_DEBUG
36 /* Use our own dbg macro */
38 #define dbg(lvl, format, arg...) \
41 printk(KERN_DEBUG __FILE__ " : " format " \n", ## arg); \
45 /* Version Information */
46 #define DRIVER_VERSION "v0.0.13"
47 #define DRIVER_AUTHOR "John Homppi"
48 #define DRIVER_DESC "adutux (see www.ontrak.net)"
50 /* Module parameters */
51 module_param(debug
, int, S_IRUGO
| S_IWUSR
);
52 MODULE_PARM_DESC(debug
, "Debug enabled or not");
54 /* Define these values to match your device */
55 #define ADU_VENDOR_ID 0x0a07
56 #define ADU_PRODUCT_ID 0x0064
58 /* table of devices that work with this driver */
59 static struct usb_device_id device_table
[] = {
60 { USB_DEVICE(ADU_VENDOR_ID
, ADU_PRODUCT_ID
) }, /* ADU100 */
61 { USB_DEVICE(ADU_VENDOR_ID
, ADU_PRODUCT_ID
+20) }, /* ADU120 */
62 { USB_DEVICE(ADU_VENDOR_ID
, ADU_PRODUCT_ID
+30) }, /* ADU130 */
63 { USB_DEVICE(ADU_VENDOR_ID
, ADU_PRODUCT_ID
+100) }, /* ADU200 */
64 { USB_DEVICE(ADU_VENDOR_ID
, ADU_PRODUCT_ID
+108) }, /* ADU208 */
65 { USB_DEVICE(ADU_VENDOR_ID
, ADU_PRODUCT_ID
+118) }, /* ADU218 */
66 { }/* Terminating entry */
69 MODULE_DEVICE_TABLE(usb
, device_table
);
71 #ifdef CONFIG_USB_DYNAMIC_MINORS
72 #define ADU_MINOR_BASE 0
74 #define ADU_MINOR_BASE 67
77 /* we can have up to this number of device plugged in at once */
78 #define MAX_DEVICES 16
80 #define COMMAND_TIMEOUT (2*HZ) /* 60 second timeout for a command */
83 * The locking scheme is a vanilla 3-lock:
84 * adu_device.buflock: A spinlock, covers what IRQs touch.
85 * adutux_mutex: A Static lock to cover open_count. It would also cover
86 * any globals, but we don't have them in 2.6.
87 * adu_device.mtx: A mutex to hold across sleepers like copy_from_user.
88 * It covers all of adu_device, except the open_count
89 * and what .buflock covers.
92 /* Structure to hold all of our device specific stuff */
95 struct usb_device
* udev
; /* save off the usb device pointer */
96 struct usb_interface
* interface
;
97 unsigned int minor
; /* the starting minor number for this device */
98 char serial_number
[8];
100 int open_count
; /* number of times this port has been opened */
102 char* read_buffer_primary
;
103 int read_buffer_length
;
104 char* read_buffer_secondary
;
109 wait_queue_head_t read_wait
;
110 wait_queue_head_t write_wait
;
112 char* interrupt_in_buffer
;
113 struct usb_endpoint_descriptor
* interrupt_in_endpoint
;
114 struct urb
* interrupt_in_urb
;
115 int read_urb_finished
;
117 char* interrupt_out_buffer
;
118 struct usb_endpoint_descriptor
* interrupt_out_endpoint
;
119 struct urb
* interrupt_out_urb
;
120 int out_urb_finished
;
123 static DEFINE_MUTEX(adutux_mutex
);
125 static struct usb_driver adu_driver
;
127 static void adu_debug_data(int level
, const char *function
, int size
,
128 const unsigned char *data
)
135 printk(KERN_DEBUG __FILE__
": %s - length = %d, data = ",
137 for (i
= 0; i
< size
; ++i
)
138 printk("%.2x ", data
[i
]);
143 * adu_abort_transfers
144 * aborts transfers and frees associated data structures
146 static void adu_abort_transfers(struct adu_device
*dev
)
150 dbg(2," %s : enter", __FUNCTION__
);
152 if (dev
->udev
== NULL
) {
153 dbg(1," %s : udev is null", __FUNCTION__
);
157 /* shutdown transfer */
159 /* XXX Anchor these instead */
160 spin_lock_irqsave(&dev
->buflock
, flags
);
161 if (!dev
->read_urb_finished
) {
162 spin_unlock_irqrestore(&dev
->buflock
, flags
);
163 usb_kill_urb(dev
->interrupt_in_urb
);
165 spin_unlock_irqrestore(&dev
->buflock
, flags
);
167 spin_lock_irqsave(&dev
->buflock
, flags
);
168 if (!dev
->out_urb_finished
) {
169 spin_unlock_irqrestore(&dev
->buflock
, flags
);
170 usb_kill_urb(dev
->interrupt_out_urb
);
172 spin_unlock_irqrestore(&dev
->buflock
, flags
);
175 dbg(2," %s : leave", __FUNCTION__
);
178 static void adu_delete(struct adu_device
*dev
)
180 dbg(2, "%s enter", __FUNCTION__
);
182 /* free data structures */
183 usb_free_urb(dev
->interrupt_in_urb
);
184 usb_free_urb(dev
->interrupt_out_urb
);
185 kfree(dev
->read_buffer_primary
);
186 kfree(dev
->read_buffer_secondary
);
187 kfree(dev
->interrupt_in_buffer
);
188 kfree(dev
->interrupt_out_buffer
);
191 dbg(2, "%s : leave", __FUNCTION__
);
194 static void adu_interrupt_in_callback(struct urb
*urb
)
196 struct adu_device
*dev
= urb
->context
;
197 int status
= urb
->status
;
199 dbg(4," %s : enter, status %d", __FUNCTION__
, status
);
200 adu_debug_data(5, __FUNCTION__
, urb
->actual_length
,
201 urb
->transfer_buffer
);
203 spin_lock(&dev
->buflock
);
206 if ((status
!= -ENOENT
) && (status
!= -ECONNRESET
) &&
207 (status
!= -ESHUTDOWN
)) {
208 dbg(1," %s : nonzero status received: %d",
209 __FUNCTION__
, status
);
214 if (urb
->actual_length
> 0 && dev
->interrupt_in_buffer
[0] != 0x00) {
215 if (dev
->read_buffer_length
<
216 (4 * le16_to_cpu(dev
->interrupt_in_endpoint
->wMaxPacketSize
)) -
217 (urb
->actual_length
)) {
218 memcpy (dev
->read_buffer_primary
+
219 dev
->read_buffer_length
,
220 dev
->interrupt_in_buffer
, urb
->actual_length
);
222 dev
->read_buffer_length
+= urb
->actual_length
;
223 dbg(2," %s reading %d ", __FUNCTION__
,
226 dbg(1," %s : read_buffer overflow", __FUNCTION__
);
231 dev
->read_urb_finished
= 1;
232 spin_unlock(&dev
->buflock
);
233 /* always wake up so we recover from errors */
234 wake_up_interruptible(&dev
->read_wait
);
235 adu_debug_data(5, __FUNCTION__
, urb
->actual_length
,
236 urb
->transfer_buffer
);
237 dbg(4," %s : leave, status %d", __FUNCTION__
, status
);
240 static void adu_interrupt_out_callback(struct urb
*urb
)
242 struct adu_device
*dev
= urb
->context
;
243 int status
= urb
->status
;
245 dbg(4," %s : enter, status %d", __FUNCTION__
, status
);
246 adu_debug_data(5,__FUNCTION__
, urb
->actual_length
, urb
->transfer_buffer
);
249 if ((status
!= -ENOENT
) &&
250 (status
!= -ECONNRESET
)) {
251 dbg(1, " %s :nonzero status received: %d",
252 __FUNCTION__
, status
);
257 spin_lock(&dev
->buflock
);
258 dev
->out_urb_finished
= 1;
259 wake_up(&dev
->write_wait
);
260 spin_unlock(&dev
->buflock
);
263 adu_debug_data(5, __FUNCTION__
, urb
->actual_length
,
264 urb
->transfer_buffer
);
265 dbg(4," %s : leave, status %d", __FUNCTION__
, status
);
268 static int adu_open(struct inode
*inode
, struct file
*file
)
270 struct adu_device
*dev
= NULL
;
271 struct usb_interface
*interface
;
275 dbg(2,"%s : enter", __FUNCTION__
);
277 subminor
= iminor(inode
);
279 if ((retval
= mutex_lock_interruptible(&adutux_mutex
))) {
280 dbg(2, "%s : mutex lock failed", __FUNCTION__
);
284 interface
= usb_find_interface(&adu_driver
, subminor
);
286 err("%s - error, can't find device for minor %d",
287 __FUNCTION__
, subminor
);
292 dev
= usb_get_intfdata(interface
);
293 if (!dev
|| !dev
->udev
) {
298 /* check that nobody else is using the device */
299 if (dev
->open_count
) {
305 dbg(2,"%s : open count %d", __FUNCTION__
, dev
->open_count
);
307 /* save device in the file's private structure */
308 file
->private_data
= dev
;
310 /* initialize in direction */
311 dev
->read_buffer_length
= 0;
313 /* fixup first read by having urb waiting for it */
314 usb_fill_int_urb(dev
->interrupt_in_urb
,dev
->udev
,
315 usb_rcvintpipe(dev
->udev
,
316 dev
->interrupt_in_endpoint
->bEndpointAddress
),
317 dev
->interrupt_in_buffer
,
318 le16_to_cpu(dev
->interrupt_in_endpoint
->wMaxPacketSize
),
319 adu_interrupt_in_callback
, dev
,
320 dev
->interrupt_in_endpoint
->bInterval
);
321 dev
->read_urb_finished
= 0;
322 if (usb_submit_urb(dev
->interrupt_in_urb
, GFP_KERNEL
))
323 dev
->read_urb_finished
= 1;
324 /* we ignore failure */
325 /* end of fixup for first read */
327 /* initialize out direction */
328 dev
->out_urb_finished
= 1;
333 mutex_unlock(&adutux_mutex
);
335 dbg(2,"%s : leave, return value %d ", __FUNCTION__
, retval
);
339 static void adu_release_internal(struct adu_device
*dev
)
341 dbg(2," %s : enter", __FUNCTION__
);
343 /* decrement our usage count for the device */
345 dbg(2," %s : open count %d", __FUNCTION__
, dev
->open_count
);
346 if (dev
->open_count
<= 0) {
347 adu_abort_transfers(dev
);
351 dbg(2," %s : leave", __FUNCTION__
);
354 static int adu_release(struct inode
*inode
, struct file
*file
)
356 struct adu_device
*dev
;
359 dbg(2," %s : enter", __FUNCTION__
);
362 dbg(1," %s : file is NULL", __FUNCTION__
);
367 dev
= file
->private_data
;
369 dbg(1," %s : object is NULL", __FUNCTION__
);
374 mutex_lock(&adutux_mutex
); /* not interruptible */
376 if (dev
->open_count
<= 0) {
377 dbg(1," %s : device not opened", __FUNCTION__
);
382 adu_release_internal(dev
);
383 if (dev
->udev
== NULL
) {
384 /* the device was unplugged before the file was released */
385 if (!dev
->open_count
) /* ... and we're the last user */
390 mutex_unlock(&adutux_mutex
);
391 dbg(2," %s : leave, return value %d", __FUNCTION__
, retval
);
395 static ssize_t
adu_read(struct file
*file
, __user
char *buffer
, size_t count
,
398 struct adu_device
*dev
;
399 size_t bytes_read
= 0;
400 size_t bytes_to_read
= count
;
404 int should_submit
= 0;
406 DECLARE_WAITQUEUE(wait
, current
);
408 dbg(2," %s : enter, count = %Zd, file=%p", __FUNCTION__
, count
, file
);
410 dev
= file
->private_data
;
411 dbg(2," %s : dev=%p", __FUNCTION__
, dev
);
413 if (mutex_lock_interruptible(&dev
->mtx
))
416 /* verify that the device wasn't unplugged */
417 if (dev
->udev
== NULL
) {
419 err("No device or device unplugged %d", retval
);
423 /* verify that some data was requested */
425 dbg(1," %s : read request of 0 bytes", __FUNCTION__
);
429 timeout
= COMMAND_TIMEOUT
;
430 dbg(2," %s : about to start looping", __FUNCTION__
);
431 while (bytes_to_read
) {
432 int data_in_secondary
= dev
->secondary_tail
- dev
->secondary_head
;
433 dbg(2," %s : while, data_in_secondary=%d, status=%d",
434 __FUNCTION__
, data_in_secondary
,
435 dev
->interrupt_in_urb
->status
);
437 if (data_in_secondary
) {
438 /* drain secondary buffer */
439 int amount
= bytes_to_read
< data_in_secondary
? bytes_to_read
: data_in_secondary
;
440 i
= copy_to_user(buffer
, dev
->read_buffer_secondary
+dev
->secondary_head
, amount
);
445 dev
->secondary_head
+= (amount
- i
);
446 bytes_read
+= (amount
- i
);
447 bytes_to_read
-= (amount
- i
);
449 retval
= bytes_read
? bytes_read
: -EFAULT
;
453 /* we check the primary buffer */
454 spin_lock_irqsave (&dev
->buflock
, flags
);
455 if (dev
->read_buffer_length
) {
456 /* we secure access to the primary */
458 dbg(2," %s : swap, read_buffer_length = %d",
459 __FUNCTION__
, dev
->read_buffer_length
);
460 tmp
= dev
->read_buffer_secondary
;
461 dev
->read_buffer_secondary
= dev
->read_buffer_primary
;
462 dev
->read_buffer_primary
= tmp
;
463 dev
->secondary_head
= 0;
464 dev
->secondary_tail
= dev
->read_buffer_length
;
465 dev
->read_buffer_length
= 0;
466 spin_unlock_irqrestore(&dev
->buflock
, flags
);
467 /* we have a free buffer so use it */
470 /* even the primary was empty - we may need to do IO */
471 if (!dev
->read_urb_finished
) {
472 /* somebody is doing IO */
473 spin_unlock_irqrestore(&dev
->buflock
, flags
);
474 dbg(2," %s : submitted already", __FUNCTION__
);
476 /* we must initiate input */
477 dbg(2," %s : initiate input", __FUNCTION__
);
478 dev
->read_urb_finished
= 0;
479 spin_unlock_irqrestore(&dev
->buflock
, flags
);
481 usb_fill_int_urb(dev
->interrupt_in_urb
,dev
->udev
,
482 usb_rcvintpipe(dev
->udev
,
483 dev
->interrupt_in_endpoint
->bEndpointAddress
),
484 dev
->interrupt_in_buffer
,
485 le16_to_cpu(dev
->interrupt_in_endpoint
->wMaxPacketSize
),
486 adu_interrupt_in_callback
,
488 dev
->interrupt_in_endpoint
->bInterval
);
489 retval
= usb_submit_urb(dev
->interrupt_in_urb
, GFP_KERNEL
);
491 dev
->read_urb_finished
= 1;
492 if (retval
== -ENOMEM
) {
493 retval
= bytes_read
? bytes_read
: -ENOMEM
;
495 dbg(2," %s : submit failed", __FUNCTION__
);
500 /* we wait for I/O to complete */
501 set_current_state(TASK_INTERRUPTIBLE
);
502 add_wait_queue(&dev
->read_wait
, &wait
);
503 spin_lock_irqsave(&dev
->buflock
, flags
);
504 if (!dev
->read_urb_finished
) {
505 spin_unlock_irqrestore(&dev
->buflock
, flags
);
506 timeout
= schedule_timeout(COMMAND_TIMEOUT
);
508 spin_unlock_irqrestore(&dev
->buflock
, flags
);
509 set_current_state(TASK_RUNNING
);
511 remove_wait_queue(&dev
->read_wait
, &wait
);
514 dbg(2," %s : timeout", __FUNCTION__
);
515 retval
= bytes_read
? bytes_read
: -ETIMEDOUT
;
519 if (signal_pending(current
)) {
520 dbg(2," %s : signal pending", __FUNCTION__
);
521 retval
= bytes_read
? bytes_read
: -EINTR
;
529 /* if the primary buffer is empty then use it */
530 spin_lock_irqsave(&dev
->buflock
, flags
);
531 if (should_submit
&& dev
->read_urb_finished
) {
532 dev
->read_urb_finished
= 0;
533 spin_unlock_irqrestore(&dev
->buflock
, flags
);
534 usb_fill_int_urb(dev
->interrupt_in_urb
,dev
->udev
,
535 usb_rcvintpipe(dev
->udev
,
536 dev
->interrupt_in_endpoint
->bEndpointAddress
),
537 dev
->interrupt_in_buffer
,
538 le16_to_cpu(dev
->interrupt_in_endpoint
->wMaxPacketSize
),
539 adu_interrupt_in_callback
,
541 dev
->interrupt_in_endpoint
->bInterval
);
542 if (usb_submit_urb(dev
->interrupt_in_urb
, GFP_KERNEL
) != 0)
543 dev
->read_urb_finished
= 1;
544 /* we ignore failure */
546 spin_unlock_irqrestore(&dev
->buflock
, flags
);
550 /* unlock the device */
551 mutex_unlock(&dev
->mtx
);
553 dbg(2," %s : leave, return value %d", __FUNCTION__
, retval
);
557 static ssize_t
adu_write(struct file
*file
, const __user
char *buffer
,
558 size_t count
, loff_t
*ppos
)
560 DECLARE_WAITQUEUE(waita
, current
);
561 struct adu_device
*dev
;
562 size_t bytes_written
= 0;
563 size_t bytes_to_write
;
568 dbg(2," %s : enter, count = %Zd", __FUNCTION__
, count
);
570 dev
= file
->private_data
;
572 retval
= mutex_lock_interruptible(&dev
->mtx
);
576 /* verify that the device wasn't unplugged */
577 if (dev
->udev
== NULL
) {
579 err("No device or device unplugged %d", retval
);
583 /* verify that we actually have some data to write */
585 dbg(1," %s : write request of 0 bytes", __FUNCTION__
);
590 add_wait_queue(&dev
->write_wait
, &waita
);
591 set_current_state(TASK_INTERRUPTIBLE
);
592 spin_lock_irqsave(&dev
->buflock
, flags
);
593 if (!dev
->out_urb_finished
) {
594 spin_unlock_irqrestore(&dev
->buflock
, flags
);
596 mutex_unlock(&dev
->mtx
);
597 if (signal_pending(current
)) {
598 dbg(1," %s : interrupted", __FUNCTION__
);
599 set_current_state(TASK_RUNNING
);
603 if (schedule_timeout(COMMAND_TIMEOUT
) == 0) {
604 dbg(1, "%s - command timed out.", __FUNCTION__
);
608 remove_wait_queue(&dev
->write_wait
, &waita
);
609 retval
= mutex_lock_interruptible(&dev
->mtx
);
611 retval
= bytes_written
? bytes_written
: retval
;
615 dbg(4," %s : in progress, count = %Zd", __FUNCTION__
, count
);
617 spin_unlock_irqrestore(&dev
->buflock
, flags
);
618 set_current_state(TASK_RUNNING
);
619 remove_wait_queue(&dev
->write_wait
, &waita
);
620 dbg(4," %s : sending, count = %Zd", __FUNCTION__
, count
);
622 /* write the data into interrupt_out_buffer from userspace */
623 buffer_size
= le16_to_cpu(dev
->interrupt_out_endpoint
->wMaxPacketSize
);
624 bytes_to_write
= count
> buffer_size
? buffer_size
: count
;
625 dbg(4," %s : buffer_size = %Zd, count = %Zd, bytes_to_write = %Zd",
626 __FUNCTION__
, buffer_size
, count
, bytes_to_write
);
628 if (copy_from_user(dev
->interrupt_out_buffer
, buffer
, bytes_to_write
) != 0) {
633 /* send off the urb */
635 dev
->interrupt_out_urb
,
637 usb_sndintpipe(dev
->udev
, dev
->interrupt_out_endpoint
->bEndpointAddress
),
638 dev
->interrupt_out_buffer
,
640 adu_interrupt_out_callback
,
642 dev
->interrupt_out_endpoint
->bInterval
);
643 dev
->interrupt_out_urb
->actual_length
= bytes_to_write
;
644 dev
->out_urb_finished
= 0;
645 retval
= usb_submit_urb(dev
->interrupt_out_urb
, GFP_KERNEL
);
647 dev
->out_urb_finished
= 1;
648 err("Couldn't submit interrupt_out_urb %d", retval
);
652 buffer
+= bytes_to_write
;
653 count
-= bytes_to_write
;
655 bytes_written
+= bytes_to_write
;
658 mutex_unlock(&dev
->mtx
);
659 return bytes_written
;
662 mutex_unlock(&dev
->mtx
);
664 dbg(2," %s : leave, return value %d", __FUNCTION__
, retval
);
668 remove_wait_queue(&dev
->write_wait
, &waita
);
672 /* file operations needed when we register this driver */
673 static const struct file_operations adu_fops
= {
674 .owner
= THIS_MODULE
,
678 .release
= adu_release
,
682 * usb class driver info in order to get a minor number from the usb core,
683 * and to have the device registered with devfs and the driver core
685 static struct usb_class_driver adu_class
= {
686 .name
= "usb/adutux%d",
688 .minor_base
= ADU_MINOR_BASE
,
694 * Called by the usb core when a new device is connected that it thinks
695 * this driver might be interested in.
697 static int adu_probe(struct usb_interface
*interface
,
698 const struct usb_device_id
*id
)
700 struct usb_device
*udev
= interface_to_usbdev(interface
);
701 struct adu_device
*dev
= NULL
;
702 struct usb_host_interface
*iface_desc
;
703 struct usb_endpoint_descriptor
*endpoint
;
704 int retval
= -ENODEV
;
709 dbg(2," %s : enter", __FUNCTION__
);
712 dev_err(&interface
->dev
, "udev is NULL.\n");
716 /* allocate memory for our device state and intialize it */
717 dev
= kzalloc(sizeof(struct adu_device
), GFP_KERNEL
);
719 dev_err(&interface
->dev
, "Out of memory\n");
724 mutex_init(&dev
->mtx
);
725 spin_lock_init(&dev
->buflock
);
727 init_waitqueue_head(&dev
->read_wait
);
728 init_waitqueue_head(&dev
->write_wait
);
730 iface_desc
= &interface
->altsetting
[0];
732 /* set up the endpoint information */
733 for (i
= 0; i
< iface_desc
->desc
.bNumEndpoints
; ++i
) {
734 endpoint
= &iface_desc
->endpoint
[i
].desc
;
736 if (usb_endpoint_is_int_in(endpoint
))
737 dev
->interrupt_in_endpoint
= endpoint
;
739 if (usb_endpoint_is_int_out(endpoint
))
740 dev
->interrupt_out_endpoint
= endpoint
;
742 if (dev
->interrupt_in_endpoint
== NULL
) {
743 dev_err(&interface
->dev
, "interrupt in endpoint not found\n");
746 if (dev
->interrupt_out_endpoint
== NULL
) {
747 dev_err(&interface
->dev
, "interrupt out endpoint not found\n");
751 in_end_size
= le16_to_cpu(dev
->interrupt_in_endpoint
->wMaxPacketSize
);
752 out_end_size
= le16_to_cpu(dev
->interrupt_out_endpoint
->wMaxPacketSize
);
754 dev
->read_buffer_primary
= kmalloc((4 * in_end_size
), GFP_KERNEL
);
755 if (!dev
->read_buffer_primary
) {
756 dev_err(&interface
->dev
, "Couldn't allocate read_buffer_primary\n");
761 /* debug code prime the buffer */
762 memset(dev
->read_buffer_primary
, 'a', in_end_size
);
763 memset(dev
->read_buffer_primary
+ in_end_size
, 'b', in_end_size
);
764 memset(dev
->read_buffer_primary
+ (2 * in_end_size
), 'c', in_end_size
);
765 memset(dev
->read_buffer_primary
+ (3 * in_end_size
), 'd', in_end_size
);
767 dev
->read_buffer_secondary
= kmalloc((4 * in_end_size
), GFP_KERNEL
);
768 if (!dev
->read_buffer_secondary
) {
769 dev_err(&interface
->dev
, "Couldn't allocate read_buffer_secondary\n");
774 /* debug code prime the buffer */
775 memset(dev
->read_buffer_secondary
, 'e', in_end_size
);
776 memset(dev
->read_buffer_secondary
+ in_end_size
, 'f', in_end_size
);
777 memset(dev
->read_buffer_secondary
+ (2 * in_end_size
), 'g', in_end_size
);
778 memset(dev
->read_buffer_secondary
+ (3 * in_end_size
), 'h', in_end_size
);
780 dev
->interrupt_in_buffer
= kmalloc(in_end_size
, GFP_KERNEL
);
781 if (!dev
->interrupt_in_buffer
) {
782 dev_err(&interface
->dev
, "Couldn't allocate interrupt_in_buffer\n");
786 /* debug code prime the buffer */
787 memset(dev
->interrupt_in_buffer
, 'i', in_end_size
);
789 dev
->interrupt_in_urb
= usb_alloc_urb(0, GFP_KERNEL
);
790 if (!dev
->interrupt_in_urb
) {
791 dev_err(&interface
->dev
, "Couldn't allocate interrupt_in_urb\n");
794 dev
->interrupt_out_buffer
= kmalloc(out_end_size
, GFP_KERNEL
);
795 if (!dev
->interrupt_out_buffer
) {
796 dev_err(&interface
->dev
, "Couldn't allocate interrupt_out_buffer\n");
799 dev
->interrupt_out_urb
= usb_alloc_urb(0, GFP_KERNEL
);
800 if (!dev
->interrupt_out_urb
) {
801 dev_err(&interface
->dev
, "Couldn't allocate interrupt_out_urb\n");
805 if (!usb_string(udev
, udev
->descriptor
.iSerialNumber
, dev
->serial_number
,
806 sizeof(dev
->serial_number
))) {
807 dev_err(&interface
->dev
, "Could not retrieve serial number\n");
810 dbg(2," %s : serial_number=%s", __FUNCTION__
, dev
->serial_number
);
812 /* we can register the device now, as it is ready */
813 usb_set_intfdata(interface
, dev
);
815 retval
= usb_register_dev(interface
, &adu_class
);
818 /* something prevented us from registering this driver */
819 dev_err(&interface
->dev
, "Not able to get a minor for this device.\n");
820 usb_set_intfdata(interface
, NULL
);
824 dev
->minor
= interface
->minor
;
826 /* let the user know what node this device is now attached to */
827 dev_info(&interface
->dev
, "ADU%d %s now attached to /dev/usb/adutux%d\n",
828 udev
->descriptor
.idProduct
, dev
->serial_number
,
829 (dev
->minor
- ADU_MINOR_BASE
));
831 dbg(2," %s : leave, return value %p (dev)", __FUNCTION__
, dev
);
843 * Called by the usb core when the device is removed from the system.
845 static void adu_disconnect(struct usb_interface
*interface
)
847 struct adu_device
*dev
;
850 dbg(2," %s : enter", __FUNCTION__
);
852 dev
= usb_get_intfdata(interface
);
854 mutex_lock(&dev
->mtx
); /* not interruptible */
855 dev
->udev
= NULL
; /* poison */
857 usb_deregister_dev(interface
, &adu_class
);
858 mutex_unlock(&dev
->mtx
);
860 mutex_lock(&adutux_mutex
);
861 usb_set_intfdata(interface
, NULL
);
863 /* if the device is not opened, then we clean up right now */
864 dbg(2," %s : open count %d", __FUNCTION__
, dev
->open_count
);
865 if (!dev
->open_count
)
868 mutex_unlock(&adutux_mutex
);
870 dev_info(&interface
->dev
, "ADU device adutux%d now disconnected\n",
871 (minor
- ADU_MINOR_BASE
));
873 dbg(2," %s : leave", __FUNCTION__
);
876 /* usb specific object needed to register this driver with the usb subsystem */
877 static struct usb_driver adu_driver
= {
880 .disconnect
= adu_disconnect
,
881 .id_table
= device_table
,
884 static int __init
adu_init(void)
888 dbg(2," %s : enter", __FUNCTION__
);
890 /* register this driver with the USB subsystem */
891 result
= usb_register(&adu_driver
);
893 err("usb_register failed for the "__FILE__
" driver. "
894 "Error number %d", result
);
898 info("adutux " DRIVER_DESC
" " DRIVER_VERSION
);
899 info("adutux is an experimental driver. Use at your own risk");
902 dbg(2," %s : leave, return value %d", __FUNCTION__
, result
);
907 static void __exit
adu_exit(void)
909 dbg(2," %s : enter", __FUNCTION__
);
910 /* deregister this driver with the USB subsystem */
911 usb_deregister(&adu_driver
);
912 dbg(2," %s : leave", __FUNCTION__
);
915 module_init(adu_init
);
916 module_exit(adu_exit
);
918 MODULE_AUTHOR(DRIVER_AUTHOR
);
919 MODULE_DESCRIPTION(DRIVER_DESC
);
920 MODULE_LICENSE("GPL");