Lines Matching refs:dev
109 static inline void adu_debug_data(struct device *dev, const char *function, in adu_debug_data() argument
112 dev_dbg(dev, "%s - length = %d, data = %*ph\n", in adu_debug_data()
120 static void adu_abort_transfers(struct adu_device *dev) in adu_abort_transfers() argument
124 if (dev->udev == NULL) in adu_abort_transfers()
130 spin_lock_irqsave(&dev->buflock, flags); in adu_abort_transfers()
131 if (!dev->read_urb_finished) { in adu_abort_transfers()
132 spin_unlock_irqrestore(&dev->buflock, flags); in adu_abort_transfers()
133 usb_kill_urb(dev->interrupt_in_urb); in adu_abort_transfers()
135 spin_unlock_irqrestore(&dev->buflock, flags); in adu_abort_transfers()
137 spin_lock_irqsave(&dev->buflock, flags); in adu_abort_transfers()
138 if (!dev->out_urb_finished) { in adu_abort_transfers()
139 spin_unlock_irqrestore(&dev->buflock, flags); in adu_abort_transfers()
140 usb_kill_urb(dev->interrupt_out_urb); in adu_abort_transfers()
142 spin_unlock_irqrestore(&dev->buflock, flags); in adu_abort_transfers()
145 static void adu_delete(struct adu_device *dev) in adu_delete() argument
148 usb_free_urb(dev->interrupt_in_urb); in adu_delete()
149 usb_free_urb(dev->interrupt_out_urb); in adu_delete()
150 kfree(dev->read_buffer_primary); in adu_delete()
151 kfree(dev->read_buffer_secondary); in adu_delete()
152 kfree(dev->interrupt_in_buffer); in adu_delete()
153 kfree(dev->interrupt_out_buffer); in adu_delete()
154 kfree(dev); in adu_delete()
159 struct adu_device *dev = urb->context; in adu_interrupt_in_callback() local
162 adu_debug_data(&dev->udev->dev, __func__, in adu_interrupt_in_callback()
165 spin_lock(&dev->buflock); in adu_interrupt_in_callback()
170 dev_dbg(&dev->udev->dev, in adu_interrupt_in_callback()
177 if (urb->actual_length > 0 && dev->interrupt_in_buffer[0] != 0x00) { in adu_interrupt_in_callback()
178 if (dev->read_buffer_length < in adu_interrupt_in_callback()
179 (4 * usb_endpoint_maxp(dev->interrupt_in_endpoint)) - in adu_interrupt_in_callback()
181 memcpy (dev->read_buffer_primary + in adu_interrupt_in_callback()
182 dev->read_buffer_length, in adu_interrupt_in_callback()
183 dev->interrupt_in_buffer, urb->actual_length); in adu_interrupt_in_callback()
185 dev->read_buffer_length += urb->actual_length; in adu_interrupt_in_callback()
186 dev_dbg(&dev->udev->dev,"%s reading %d\n", __func__, in adu_interrupt_in_callback()
189 dev_dbg(&dev->udev->dev,"%s : read_buffer overflow\n", in adu_interrupt_in_callback()
195 dev->read_urb_finished = 1; in adu_interrupt_in_callback()
196 spin_unlock(&dev->buflock); in adu_interrupt_in_callback()
198 wake_up_interruptible(&dev->read_wait); in adu_interrupt_in_callback()
203 struct adu_device *dev = urb->context; in adu_interrupt_out_callback() local
206 adu_debug_data(&dev->udev->dev, __func__, in adu_interrupt_out_callback()
212 dev_dbg(&dev->udev->dev, in adu_interrupt_out_callback()
219 spin_lock(&dev->buflock); in adu_interrupt_out_callback()
220 dev->out_urb_finished = 1; in adu_interrupt_out_callback()
221 wake_up(&dev->write_wait); in adu_interrupt_out_callback()
222 spin_unlock(&dev->buflock); in adu_interrupt_out_callback()
227 struct adu_device *dev = NULL; in adu_open() local
246 dev = usb_get_intfdata(interface); in adu_open()
247 if (!dev || !dev->udev) { in adu_open()
253 if (dev->open_count) { in adu_open()
258 ++dev->open_count; in adu_open()
259 dev_dbg(&dev->udev->dev, "%s: open count %d\n", __func__, in adu_open()
260 dev->open_count); in adu_open()
263 file->private_data = dev; in adu_open()
266 dev->read_buffer_length = 0; in adu_open()
269 usb_fill_int_urb(dev->interrupt_in_urb, dev->udev, in adu_open()
270 usb_rcvintpipe(dev->udev, in adu_open()
271 dev->interrupt_in_endpoint->bEndpointAddress), in adu_open()
272 dev->interrupt_in_buffer, in adu_open()
273 usb_endpoint_maxp(dev->interrupt_in_endpoint), in adu_open()
274 adu_interrupt_in_callback, dev, in adu_open()
275 dev->interrupt_in_endpoint->bInterval); in adu_open()
276 dev->read_urb_finished = 0; in adu_open()
277 if (usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL)) in adu_open()
278 dev->read_urb_finished = 1; in adu_open()
283 dev->out_urb_finished = 1; in adu_open()
293 static void adu_release_internal(struct adu_device *dev) in adu_release_internal() argument
296 --dev->open_count; in adu_release_internal()
297 dev_dbg(&dev->udev->dev, "%s : open count %d\n", __func__, in adu_release_internal()
298 dev->open_count); in adu_release_internal()
299 if (dev->open_count <= 0) { in adu_release_internal()
300 adu_abort_transfers(dev); in adu_release_internal()
301 dev->open_count = 0; in adu_release_internal()
307 struct adu_device *dev; in adu_release() local
315 dev = file->private_data; in adu_release()
316 if (dev == NULL) { in adu_release()
323 if (dev->open_count <= 0) { in adu_release()
324 dev_dbg(&dev->udev->dev, "%s : device not opened\n", __func__); in adu_release()
329 adu_release_internal(dev); in adu_release()
330 if (dev->udev == NULL) { in adu_release()
332 if (!dev->open_count) /* ... and we're the last user */ in adu_release()
333 adu_delete(dev); in adu_release()
344 struct adu_device *dev; in adu_read() local
354 dev = file->private_data; in adu_read()
355 if (mutex_lock_interruptible(&dev->mtx)) in adu_read()
359 if (dev->udev == NULL) { in adu_read()
367 dev_dbg(&dev->udev->dev, "%s : read request of 0 bytes\n", in adu_read()
373 dev_dbg(&dev->udev->dev, "%s : about to start looping\n", __func__); in adu_read()
375 int data_in_secondary = dev->secondary_tail - dev->secondary_head; in adu_read()
376 dev_dbg(&dev->udev->dev, in adu_read()
379 dev->interrupt_in_urb->status); in adu_read()
384 i = copy_to_user(buffer, dev->read_buffer_secondary+dev->secondary_head, amount); in adu_read()
389 dev->secondary_head += (amount - i); in adu_read()
398 spin_lock_irqsave (&dev->buflock, flags); in adu_read()
399 if (dev->read_buffer_length) { in adu_read()
402 dev_dbg(&dev->udev->dev, in adu_read()
404 __func__, dev->read_buffer_length); in adu_read()
405 tmp = dev->read_buffer_secondary; in adu_read()
406 dev->read_buffer_secondary = dev->read_buffer_primary; in adu_read()
407 dev->read_buffer_primary = tmp; in adu_read()
408 dev->secondary_head = 0; in adu_read()
409 dev->secondary_tail = dev->read_buffer_length; in adu_read()
410 dev->read_buffer_length = 0; in adu_read()
411 spin_unlock_irqrestore(&dev->buflock, flags); in adu_read()
416 if (!dev->read_urb_finished) { in adu_read()
418 spin_unlock_irqrestore(&dev->buflock, flags); in adu_read()
419 dev_dbg(&dev->udev->dev, in adu_read()
424 dev_dbg(&dev->udev->dev, in adu_read()
427 dev->read_urb_finished = 0; in adu_read()
428 spin_unlock_irqrestore(&dev->buflock, flags); in adu_read()
430 usb_fill_int_urb(dev->interrupt_in_urb, dev->udev, in adu_read()
431 usb_rcvintpipe(dev->udev, in adu_read()
432 dev->interrupt_in_endpoint->bEndpointAddress), in adu_read()
433 dev->interrupt_in_buffer, in adu_read()
434 usb_endpoint_maxp(dev->interrupt_in_endpoint), in adu_read()
436 dev, in adu_read()
437 dev->interrupt_in_endpoint->bInterval); in adu_read()
438 retval = usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL); in adu_read()
440 dev->read_urb_finished = 1; in adu_read()
444 dev_dbg(&dev->udev->dev, in adu_read()
453 add_wait_queue(&dev->read_wait, &wait); in adu_read()
454 spin_lock_irqsave(&dev->buflock, flags); in adu_read()
455 if (!dev->read_urb_finished) { in adu_read()
456 spin_unlock_irqrestore(&dev->buflock, flags); in adu_read()
459 spin_unlock_irqrestore(&dev->buflock, flags); in adu_read()
462 remove_wait_queue(&dev->read_wait, &wait); in adu_read()
465 dev_dbg(&dev->udev->dev, in adu_read()
472 dev_dbg(&dev->udev->dev, in adu_read()
484 spin_lock_irqsave(&dev->buflock, flags); in adu_read()
485 if (should_submit && dev->read_urb_finished) { in adu_read()
486 dev->read_urb_finished = 0; in adu_read()
487 spin_unlock_irqrestore(&dev->buflock, flags); in adu_read()
488 usb_fill_int_urb(dev->interrupt_in_urb, dev->udev, in adu_read()
489 usb_rcvintpipe(dev->udev, in adu_read()
490 dev->interrupt_in_endpoint->bEndpointAddress), in adu_read()
491 dev->interrupt_in_buffer, in adu_read()
492 usb_endpoint_maxp(dev->interrupt_in_endpoint), in adu_read()
494 dev, in adu_read()
495 dev->interrupt_in_endpoint->bInterval); in adu_read()
496 if (usb_submit_urb(dev->interrupt_in_urb, GFP_KERNEL) != 0) in adu_read()
497 dev->read_urb_finished = 1; in adu_read()
500 spin_unlock_irqrestore(&dev->buflock, flags); in adu_read()
505 mutex_unlock(&dev->mtx); in adu_read()
514 struct adu_device *dev; in adu_write() local
521 dev = file->private_data; in adu_write()
523 retval = mutex_lock_interruptible(&dev->mtx); in adu_write()
528 if (dev->udev == NULL) { in adu_write()
536 dev_dbg(&dev->udev->dev, "%s : write request of 0 bytes\n", in adu_write()
542 add_wait_queue(&dev->write_wait, &waita); in adu_write()
544 spin_lock_irqsave(&dev->buflock, flags); in adu_write()
545 if (!dev->out_urb_finished) { in adu_write()
546 spin_unlock_irqrestore(&dev->buflock, flags); in adu_write()
548 mutex_unlock(&dev->mtx); in adu_write()
550 dev_dbg(&dev->udev->dev, "%s : interrupted\n", in adu_write()
557 dev_dbg(&dev->udev->dev, in adu_write()
562 remove_wait_queue(&dev->write_wait, &waita); in adu_write()
563 retval = mutex_lock_interruptible(&dev->mtx); in adu_write()
569 dev_dbg(&dev->udev->dev, in adu_write()
573 spin_unlock_irqrestore(&dev->buflock, flags); in adu_write()
575 remove_wait_queue(&dev->write_wait, &waita); in adu_write()
576 dev_dbg(&dev->udev->dev, "%s : sending, count = %Zd\n", in adu_write()
580 buffer_size = usb_endpoint_maxp(dev->interrupt_out_endpoint); in adu_write()
582 dev_dbg(&dev->udev->dev, in adu_write()
586 if (copy_from_user(dev->interrupt_out_buffer, buffer, bytes_to_write) != 0) { in adu_write()
593 dev->interrupt_out_urb, in adu_write()
594 dev->udev, in adu_write()
595 usb_sndintpipe(dev->udev, dev->interrupt_out_endpoint->bEndpointAddress), in adu_write()
596 dev->interrupt_out_buffer, in adu_write()
599 dev, in adu_write()
600 dev->interrupt_out_endpoint->bInterval); in adu_write()
601 dev->interrupt_out_urb->actual_length = bytes_to_write; in adu_write()
602 dev->out_urb_finished = 0; in adu_write()
603 retval = usb_submit_urb(dev->interrupt_out_urb, GFP_KERNEL); in adu_write()
605 dev->out_urb_finished = 1; in adu_write()
606 dev_err(&dev->udev->dev, "Couldn't submit " in adu_write()
617 mutex_unlock(&dev->mtx); in adu_write()
621 mutex_unlock(&dev->mtx); in adu_write()
626 remove_wait_queue(&dev->write_wait, &waita); in adu_write()
660 struct adu_device *dev = NULL; in adu_probe() local
669 dev_err(&interface->dev, "udev is NULL.\n"); in adu_probe()
674 dev = kzalloc(sizeof(struct adu_device), GFP_KERNEL); in adu_probe()
675 if (dev == NULL) { in adu_probe()
676 dev_err(&interface->dev, "Out of memory\n"); in adu_probe()
681 mutex_init(&dev->mtx); in adu_probe()
682 spin_lock_init(&dev->buflock); in adu_probe()
683 dev->udev = udev; in adu_probe()
684 init_waitqueue_head(&dev->read_wait); in adu_probe()
685 init_waitqueue_head(&dev->write_wait); in adu_probe()
694 dev->interrupt_in_endpoint = endpoint; in adu_probe()
697 dev->interrupt_out_endpoint = endpoint; in adu_probe()
699 if (dev->interrupt_in_endpoint == NULL) { in adu_probe()
700 dev_err(&interface->dev, "interrupt in endpoint not found\n"); in adu_probe()
703 if (dev->interrupt_out_endpoint == NULL) { in adu_probe()
704 dev_err(&interface->dev, "interrupt out endpoint not found\n"); in adu_probe()
708 in_end_size = usb_endpoint_maxp(dev->interrupt_in_endpoint); in adu_probe()
709 out_end_size = usb_endpoint_maxp(dev->interrupt_out_endpoint); in adu_probe()
711 dev->read_buffer_primary = kmalloc((4 * in_end_size), GFP_KERNEL); in adu_probe()
712 if (!dev->read_buffer_primary) { in adu_probe()
713 dev_err(&interface->dev, "Couldn't allocate read_buffer_primary\n"); in adu_probe()
719 memset(dev->read_buffer_primary, 'a', in_end_size); in adu_probe()
720 memset(dev->read_buffer_primary + in_end_size, 'b', in_end_size); in adu_probe()
721 memset(dev->read_buffer_primary + (2 * in_end_size), 'c', in_end_size); in adu_probe()
722 memset(dev->read_buffer_primary + (3 * in_end_size), 'd', in_end_size); in adu_probe()
724 dev->read_buffer_secondary = kmalloc((4 * in_end_size), GFP_KERNEL); in adu_probe()
725 if (!dev->read_buffer_secondary) { in adu_probe()
726 dev_err(&interface->dev, "Couldn't allocate read_buffer_secondary\n"); in adu_probe()
732 memset(dev->read_buffer_secondary, 'e', in_end_size); in adu_probe()
733 memset(dev->read_buffer_secondary + in_end_size, 'f', in_end_size); in adu_probe()
734 memset(dev->read_buffer_secondary + (2 * in_end_size), 'g', in_end_size); in adu_probe()
735 memset(dev->read_buffer_secondary + (3 * in_end_size), 'h', in_end_size); in adu_probe()
737 dev->interrupt_in_buffer = kmalloc(in_end_size, GFP_KERNEL); in adu_probe()
738 if (!dev->interrupt_in_buffer) { in adu_probe()
739 dev_err(&interface->dev, "Couldn't allocate interrupt_in_buffer\n"); in adu_probe()
744 memset(dev->interrupt_in_buffer, 'i', in_end_size); in adu_probe()
746 dev->interrupt_in_urb = usb_alloc_urb(0, GFP_KERNEL); in adu_probe()
747 if (!dev->interrupt_in_urb) { in adu_probe()
748 dev_err(&interface->dev, "Couldn't allocate interrupt_in_urb\n"); in adu_probe()
751 dev->interrupt_out_buffer = kmalloc(out_end_size, GFP_KERNEL); in adu_probe()
752 if (!dev->interrupt_out_buffer) { in adu_probe()
753 dev_err(&interface->dev, "Couldn't allocate interrupt_out_buffer\n"); in adu_probe()
756 dev->interrupt_out_urb = usb_alloc_urb(0, GFP_KERNEL); in adu_probe()
757 if (!dev->interrupt_out_urb) { in adu_probe()
758 dev_err(&interface->dev, "Couldn't allocate interrupt_out_urb\n"); in adu_probe()
762 if (!usb_string(udev, udev->descriptor.iSerialNumber, dev->serial_number, in adu_probe()
763 sizeof(dev->serial_number))) { in adu_probe()
764 dev_err(&interface->dev, "Could not retrieve serial number\n"); in adu_probe()
767 dev_dbg(&interface->dev,"serial_number=%s", dev->serial_number); in adu_probe()
770 usb_set_intfdata(interface, dev); in adu_probe()
776 dev_err(&interface->dev, "Not able to get a minor for this device.\n"); in adu_probe()
781 dev->minor = interface->minor; in adu_probe()
784 dev_info(&interface->dev, "ADU%d %s now attached to /dev/usb/adutux%d\n", in adu_probe()
785 le16_to_cpu(udev->descriptor.idProduct), dev->serial_number, in adu_probe()
786 (dev->minor - ADU_MINOR_BASE)); in adu_probe()
791 adu_delete(dev); in adu_probe()
802 struct adu_device *dev; in adu_disconnect() local
805 dev = usb_get_intfdata(interface); in adu_disconnect()
807 mutex_lock(&dev->mtx); /* not interruptible */ in adu_disconnect()
808 dev->udev = NULL; /* poison */ in adu_disconnect()
809 minor = dev->minor; in adu_disconnect()
811 mutex_unlock(&dev->mtx); in adu_disconnect()
817 if (!dev->open_count) in adu_disconnect()
818 adu_delete(dev); in adu_disconnect()