2 * printer.c -- Printer gadget driver
4 * Copyright (C) 2003-2005 David Brownell
5 * Copyright (C) 2006 Craig W. Nadler
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License as published by
9 * the Free Software Foundation; either version 2 of the License, or
10 * (at your option) any later version.
13 #include <linux/module.h>
14 #include <linux/kernel.h>
15 #include <linux/delay.h>
16 #include <linux/ioport.h>
17 #include <linux/sched.h>
18 #include <linux/slab.h>
19 #include <linux/mutex.h>
20 #include <linux/errno.h>
21 #include <linux/init.h>
22 #include <linux/timer.h>
23 #include <linux/list.h>
24 #include <linux/interrupt.h>
25 #include <linux/utsname.h>
26 #include <linux/device.h>
27 #include <linux/moduleparam.h>
29 #include <linux/poll.h>
30 #include <linux/types.h>
31 #include <linux/ctype.h>
32 #include <linux/cdev.h>
34 #include <asm/byteorder.h>
36 #include <linux/irq.h>
37 #include <asm/system.h>
38 #include <linux/uaccess.h>
39 #include <asm/unaligned.h>
41 #include <linux/usb/ch9.h>
42 #include <linux/usb/gadget.h>
43 #include <linux/usb/g_printer.h>
45 #include "gadget_chips.h"
49 * Kbuild is not very cooperative with respect to linking separately
50 * compiled library objects into one module. So for now we won't use
51 * separate compilation ... ensuring init/exit sections work to shrink
52 * the runtime footprint, and giving us at least some parts of what
53 * a "gcc --combine ... part1.c part2.c part3.c ... " build would.
55 #include "usbstring.c"
57 #include "epautoconf.c"
59 /*-------------------------------------------------------------------------*/
61 #define DRIVER_DESC "Printer Gadget"
62 #define DRIVER_VERSION "2007 OCT 06"
64 static DEFINE_MUTEX(printer_mutex
);
65 static const char shortname
[] = "printer";
66 static const char driver_desc
[] = DRIVER_DESC
;
68 static dev_t g_printer_devno
;
70 static struct class *usb_gadget_class
;
72 /*-------------------------------------------------------------------------*/
75 spinlock_t lock
; /* lock this structure */
76 /* lock buffer lists during read/write calls */
77 struct mutex lock_printer_io
;
78 struct usb_gadget
*gadget
;
79 struct usb_request
*req
; /* for control responses */
82 struct usb_ep
*in_ep
, *out_ep
;
84 struct list_head rx_reqs
; /* List of free RX structs */
85 struct list_head rx_reqs_active
; /* List of Active RX xfers */
86 struct list_head rx_buffers
; /* List of completed xfers */
87 /* wait until there is data to be read. */
88 wait_queue_head_t rx_wait
;
89 struct list_head tx_reqs
; /* List of free TX structs */
90 struct list_head tx_reqs_active
; /* List of Active TX xfers */
91 /* Wait until there are write buffers available to use. */
92 wait_queue_head_t tx_wait
;
93 /* Wait until all write buffers have been sent. */
94 wait_queue_head_t tx_flush_wait
;
95 struct usb_request
*current_rx_req
;
96 size_t current_rx_bytes
;
100 struct cdev printer_cdev
;
102 u8 printer_cdev_open
;
103 wait_queue_head_t wait
;
106 static struct printer_dev usb_printer_gadget
;
108 /*-------------------------------------------------------------------------*/
110 /* DO NOT REUSE THESE IDs with a protocol-incompatible driver!! Ever!!
111 * Instead: allocate your own, using normal USB-IF procedures.
114 /* Thanks to NetChip Technologies for donating this product ID.
116 #define PRINTER_VENDOR_NUM 0x0525 /* NetChip */
117 #define PRINTER_PRODUCT_NUM 0xa4a8 /* Linux-USB Printer Gadget */
119 /* Some systems will want different product identifiers published in the
120 * device descriptor, either numbers or strings or both. These string
121 * parameters are in UTF-8 (superset of ASCII's 7 bit characters).
124 static ushort idVendor
;
125 module_param(idVendor
, ushort
, S_IRUGO
);
126 MODULE_PARM_DESC(idVendor
, "USB Vendor ID");
128 static ushort idProduct
;
129 module_param(idProduct
, ushort
, S_IRUGO
);
130 MODULE_PARM_DESC(idProduct
, "USB Product ID");
132 static ushort bcdDevice
;
133 module_param(bcdDevice
, ushort
, S_IRUGO
);
134 MODULE_PARM_DESC(bcdDevice
, "USB Device version (BCD)");
136 static char *iManufacturer
;
137 module_param(iManufacturer
, charp
, S_IRUGO
);
138 MODULE_PARM_DESC(iManufacturer
, "USB Manufacturer string");
140 static char *iProduct
;
141 module_param(iProduct
, charp
, S_IRUGO
);
142 MODULE_PARM_DESC(iProduct
, "USB Product string");
144 static char *iSerialNum
;
145 module_param(iSerialNum
, charp
, S_IRUGO
);
146 MODULE_PARM_DESC(iSerialNum
, "1");
148 static char *iPNPstring
;
149 module_param(iPNPstring
, charp
, S_IRUGO
);
150 MODULE_PARM_DESC(iPNPstring
, "MFG:linux;MDL:g_printer;CLS:PRINTER;SN:1;");
152 /* Number of requests to allocate per endpoint, not used for ep0. */
153 static unsigned qlen
= 10;
154 module_param(qlen
, uint
, S_IRUGO
|S_IWUSR
);
158 #ifdef CONFIG_USB_GADGET_DUALSPEED
159 #define DEVSPEED USB_SPEED_HIGH
160 #else /* full speed (low speed doesn't do bulk) */
161 #define DEVSPEED USB_SPEED_FULL
164 /*-------------------------------------------------------------------------*/
166 #define xprintk(d, level, fmt, args...) \
167 printk(level "%s: " fmt, DRIVER_DESC, ## args)
170 #define DBG(dev, fmt, args...) \
171 xprintk(dev, KERN_DEBUG, fmt, ## args)
173 #define DBG(dev, fmt, args...) \
178 #define VDBG(dev, fmt, args...) \
179 xprintk(dev, KERN_DEBUG, fmt, ## args)
181 #define VDBG(dev, fmt, args...) \
185 #define ERROR(dev, fmt, args...) \
186 xprintk(dev, KERN_ERR, fmt, ## args)
187 #define WARNING(dev, fmt, args...) \
188 xprintk(dev, KERN_WARNING, fmt, ## args)
189 #define INFO(dev, fmt, args...) \
190 xprintk(dev, KERN_INFO, fmt, ## args)
192 /*-------------------------------------------------------------------------*/
194 /* USB DRIVER HOOKUP (to the hardware driver, below us), mostly
195 * ep0 implementation: descriptors, config management, setup().
196 * also optional class-specific notification interrupt transfer.
200 * DESCRIPTORS ... most are static, but strings and (full) configuration
201 * descriptors are built on demand.
204 #define STRING_MANUFACTURER 1
205 #define STRING_PRODUCT 2
206 #define STRING_SERIALNUM 3
208 /* holds our biggest descriptor */
209 #define USB_DESC_BUFSIZE 256
210 #define USB_BUFSIZE 8192
212 /* This device advertises one configuration. */
213 #define DEV_CONFIG_VALUE 1
214 #define PRINTER_INTERFACE 0
216 static struct usb_device_descriptor device_desc
= {
217 .bLength
= sizeof device_desc
,
218 .bDescriptorType
= USB_DT_DEVICE
,
219 .bcdUSB
= cpu_to_le16(0x0200),
220 .bDeviceClass
= USB_CLASS_PER_INTERFACE
,
221 .bDeviceSubClass
= 0,
222 .bDeviceProtocol
= 0,
223 .idVendor
= cpu_to_le16(PRINTER_VENDOR_NUM
),
224 .idProduct
= cpu_to_le16(PRINTER_PRODUCT_NUM
),
225 .iManufacturer
= STRING_MANUFACTURER
,
226 .iProduct
= STRING_PRODUCT
,
227 .iSerialNumber
= STRING_SERIALNUM
,
228 .bNumConfigurations
= 1
231 static struct usb_otg_descriptor otg_desc
= {
232 .bLength
= sizeof otg_desc
,
233 .bDescriptorType
= USB_DT_OTG
,
234 .bmAttributes
= USB_OTG_SRP
237 static struct usb_config_descriptor config_desc
= {
238 .bLength
= sizeof config_desc
,
239 .bDescriptorType
= USB_DT_CONFIG
,
241 /* compute wTotalLength on the fly */
243 .bConfigurationValue
= DEV_CONFIG_VALUE
,
245 .bmAttributes
= USB_CONFIG_ATT_ONE
| USB_CONFIG_ATT_SELFPOWER
,
246 .bMaxPower
= CONFIG_USB_GADGET_VBUS_DRAW
/ 2,
249 static struct usb_interface_descriptor intf_desc
= {
250 .bLength
= sizeof intf_desc
,
251 .bDescriptorType
= USB_DT_INTERFACE
,
252 .bInterfaceNumber
= PRINTER_INTERFACE
,
254 .bInterfaceClass
= USB_CLASS_PRINTER
,
255 .bInterfaceSubClass
= 1, /* Printer Sub-Class */
256 .bInterfaceProtocol
= 2, /* Bi-Directional */
260 static struct usb_endpoint_descriptor fs_ep_in_desc
= {
261 .bLength
= USB_DT_ENDPOINT_SIZE
,
262 .bDescriptorType
= USB_DT_ENDPOINT
,
263 .bEndpointAddress
= USB_DIR_IN
,
264 .bmAttributes
= USB_ENDPOINT_XFER_BULK
267 static struct usb_endpoint_descriptor fs_ep_out_desc
= {
268 .bLength
= USB_DT_ENDPOINT_SIZE
,
269 .bDescriptorType
= USB_DT_ENDPOINT
,
270 .bEndpointAddress
= USB_DIR_OUT
,
271 .bmAttributes
= USB_ENDPOINT_XFER_BULK
274 static const struct usb_descriptor_header
*fs_printer_function
[11] = {
275 (struct usb_descriptor_header
*) &otg_desc
,
276 (struct usb_descriptor_header
*) &intf_desc
,
277 (struct usb_descriptor_header
*) &fs_ep_in_desc
,
278 (struct usb_descriptor_header
*) &fs_ep_out_desc
,
282 #ifdef CONFIG_USB_GADGET_DUALSPEED
285 * usb 2.0 devices need to expose both high speed and full speed
286 * descriptors, unless they only run at full speed.
289 static struct usb_endpoint_descriptor hs_ep_in_desc
= {
290 .bLength
= USB_DT_ENDPOINT_SIZE
,
291 .bDescriptorType
= USB_DT_ENDPOINT
,
292 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
293 .wMaxPacketSize
= cpu_to_le16(512)
296 static struct usb_endpoint_descriptor hs_ep_out_desc
= {
297 .bLength
= USB_DT_ENDPOINT_SIZE
,
298 .bDescriptorType
= USB_DT_ENDPOINT
,
299 .bmAttributes
= USB_ENDPOINT_XFER_BULK
,
300 .wMaxPacketSize
= cpu_to_le16(512)
303 static struct usb_qualifier_descriptor dev_qualifier
= {
304 .bLength
= sizeof dev_qualifier
,
305 .bDescriptorType
= USB_DT_DEVICE_QUALIFIER
,
306 .bcdUSB
= cpu_to_le16(0x0200),
307 .bDeviceClass
= USB_CLASS_PRINTER
,
308 .bNumConfigurations
= 1
311 static const struct usb_descriptor_header
*hs_printer_function
[11] = {
312 (struct usb_descriptor_header
*) &otg_desc
,
313 (struct usb_descriptor_header
*) &intf_desc
,
314 (struct usb_descriptor_header
*) &hs_ep_in_desc
,
315 (struct usb_descriptor_header
*) &hs_ep_out_desc
,
319 /* maxpacket and other transfer characteristics vary by speed. */
320 #define ep_desc(g, hs, fs) (((g)->speed == USB_SPEED_HIGH)?(hs):(fs))
324 /* if there's no high speed support, maxpacket doesn't change. */
325 #define ep_desc(g, hs, fs) (((void)(g)), (fs))
327 #endif /* !CONFIG_USB_GADGET_DUALSPEED */
329 /*-------------------------------------------------------------------------*/
331 /* descriptors that are built on-demand */
333 static char manufacturer
[50];
334 static char product_desc
[40] = DRIVER_DESC
;
335 static char serial_num
[40] = "1";
336 static char pnp_string
[1024] =
337 "XXMFG:linux;MDL:g_printer;CLS:PRINTER;SN:1;";
339 /* static strings, in UTF-8 */
340 static struct usb_string strings
[] = {
341 { STRING_MANUFACTURER
, manufacturer
, },
342 { STRING_PRODUCT
, product_desc
, },
343 { STRING_SERIALNUM
, serial_num
, },
344 { } /* end of list */
347 static struct usb_gadget_strings stringtab
= {
348 .language
= 0x0409, /* en-us */
352 /*-------------------------------------------------------------------------*/
354 static struct usb_request
*
355 printer_req_alloc(struct usb_ep
*ep
, unsigned len
, gfp_t gfp_flags
)
357 struct usb_request
*req
;
359 req
= usb_ep_alloc_request(ep
, gfp_flags
);
363 req
->buf
= kmalloc(len
, gfp_flags
);
364 if (req
->buf
== NULL
) {
365 usb_ep_free_request(ep
, req
);
374 printer_req_free(struct usb_ep
*ep
, struct usb_request
*req
)
376 if (ep
!= NULL
&& req
!= NULL
) {
378 usb_ep_free_request(ep
, req
);
382 /*-------------------------------------------------------------------------*/
384 static void rx_complete(struct usb_ep
*ep
, struct usb_request
*req
)
386 struct printer_dev
*dev
= ep
->driver_data
;
387 int status
= req
->status
;
390 spin_lock_irqsave(&dev
->lock
, flags
);
392 list_del_init(&req
->list
); /* Remode from Active List */
396 /* normal completion */
398 if (req
->actual
> 0) {
399 list_add_tail(&req
->list
, &dev
->rx_buffers
);
400 DBG(dev
, "G_Printer : rx length %d\n", req
->actual
);
402 list_add(&req
->list
, &dev
->rx_reqs
);
406 /* software-driven interface shutdown */
407 case -ECONNRESET
: /* unlink */
408 case -ESHUTDOWN
: /* disconnect etc */
409 VDBG(dev
, "rx shutdown, code %d\n", status
);
410 list_add(&req
->list
, &dev
->rx_reqs
);
413 /* for hardware automagic (such as pxa) */
414 case -ECONNABORTED
: /* endpoint reset */
415 DBG(dev
, "rx %s reset\n", ep
->name
);
416 list_add(&req
->list
, &dev
->rx_reqs
);
424 DBG(dev
, "rx status %d\n", status
);
425 list_add(&req
->list
, &dev
->rx_reqs
);
429 wake_up_interruptible(&dev
->rx_wait
);
430 spin_unlock_irqrestore(&dev
->lock
, flags
);
433 static void tx_complete(struct usb_ep
*ep
, struct usb_request
*req
)
435 struct printer_dev
*dev
= ep
->driver_data
;
437 switch (req
->status
) {
439 VDBG(dev
, "tx err %d\n", req
->status
);
441 case -ECONNRESET
: /* unlink */
442 case -ESHUTDOWN
: /* disconnect etc */
448 spin_lock(&dev
->lock
);
449 /* Take the request struct off the active list and put it on the
452 list_del_init(&req
->list
);
453 list_add(&req
->list
, &dev
->tx_reqs
);
454 wake_up_interruptible(&dev
->tx_wait
);
455 if (likely(list_empty(&dev
->tx_reqs_active
)))
456 wake_up_interruptible(&dev
->tx_flush_wait
);
458 spin_unlock(&dev
->lock
);
461 /*-------------------------------------------------------------------------*/
464 printer_open(struct inode
*inode
, struct file
*fd
)
466 struct printer_dev
*dev
;
470 mutex_lock(&printer_mutex
);
471 dev
= container_of(inode
->i_cdev
, struct printer_dev
, printer_cdev
);
473 spin_lock_irqsave(&dev
->lock
, flags
);
475 if (!dev
->printer_cdev_open
) {
476 dev
->printer_cdev_open
= 1;
477 fd
->private_data
= dev
;
479 /* Change the printer status to show that it's on-line. */
480 dev
->printer_status
|= PRINTER_SELECTED
;
483 spin_unlock_irqrestore(&dev
->lock
, flags
);
485 DBG(dev
, "printer_open returned %x\n", ret
);
486 mutex_unlock(&printer_mutex
);
491 printer_close(struct inode
*inode
, struct file
*fd
)
493 struct printer_dev
*dev
= fd
->private_data
;
496 spin_lock_irqsave(&dev
->lock
, flags
);
497 dev
->printer_cdev_open
= 0;
498 fd
->private_data
= NULL
;
499 /* Change printer status to show that the printer is off-line. */
500 dev
->printer_status
&= ~PRINTER_SELECTED
;
501 spin_unlock_irqrestore(&dev
->lock
, flags
);
503 DBG(dev
, "printer_close\n");
508 /* This function must be called with interrupts turned off. */
510 setup_rx_reqs(struct printer_dev
*dev
)
512 struct usb_request
*req
;
514 while (likely(!list_empty(&dev
->rx_reqs
))) {
517 req
= container_of(dev
->rx_reqs
.next
,
518 struct usb_request
, list
);
519 list_del_init(&req
->list
);
521 /* The USB Host sends us whatever amount of data it wants to
522 * so we always set the length field to the full USB_BUFSIZE.
523 * If the amount of data is more than the read() caller asked
524 * for it will be stored in the request buffer until it is
525 * asked for by read().
527 req
->length
= USB_BUFSIZE
;
528 req
->complete
= rx_complete
;
530 error
= usb_ep_queue(dev
->out_ep
, req
, GFP_ATOMIC
);
532 DBG(dev
, "rx submit --> %d\n", error
);
533 list_add(&req
->list
, &dev
->rx_reqs
);
536 list_add(&req
->list
, &dev
->rx_reqs_active
);
542 printer_read(struct file
*fd
, char __user
*buf
, size_t len
, loff_t
*ptr
)
544 struct printer_dev
*dev
= fd
->private_data
;
548 struct usb_request
*req
;
549 /* This is a pointer to the current USB rx request. */
550 struct usb_request
*current_rx_req
;
551 /* This is the number of bytes in the current rx buffer. */
552 size_t current_rx_bytes
;
553 /* This is a pointer to the current rx buffer. */
559 DBG(dev
, "printer_read trying to read %d bytes\n", (int)len
);
561 mutex_lock(&dev
->lock_printer_io
);
562 spin_lock_irqsave(&dev
->lock
, flags
);
564 /* We will use this flag later to check if a printer reset happened
565 * after we turn interrupts back on.
567 dev
->reset_printer
= 0;
572 current_rx_req
= dev
->current_rx_req
;
573 current_rx_bytes
= dev
->current_rx_bytes
;
574 current_rx_buf
= dev
->current_rx_buf
;
575 dev
->current_rx_req
= NULL
;
576 dev
->current_rx_bytes
= 0;
577 dev
->current_rx_buf
= NULL
;
579 /* Check if there is any data in the read buffers. Please note that
580 * current_rx_bytes is the number of bytes in the current rx buffer.
581 * If it is zero then check if there are any other rx_buffers that
582 * are on the completed list. We are only out of data if all rx
585 if ((current_rx_bytes
== 0) &&
586 (likely(list_empty(&dev
->rx_buffers
)))) {
587 /* Turn interrupts back on before sleeping. */
588 spin_unlock_irqrestore(&dev
->lock
, flags
);
591 * If no data is available check if this is a NON-Blocking
594 if (fd
->f_flags
& (O_NONBLOCK
|O_NDELAY
)) {
595 mutex_unlock(&dev
->lock_printer_io
);
599 /* Sleep until data is available */
600 wait_event_interruptible(dev
->rx_wait
,
601 (likely(!list_empty(&dev
->rx_buffers
))));
602 spin_lock_irqsave(&dev
->lock
, flags
);
605 /* We have data to return then copy it to the caller's buffer.*/
606 while ((current_rx_bytes
|| likely(!list_empty(&dev
->rx_buffers
)))
608 if (current_rx_bytes
== 0) {
609 req
= container_of(dev
->rx_buffers
.next
,
610 struct usb_request
, list
);
611 list_del_init(&req
->list
);
613 if (req
->actual
&& req
->buf
) {
614 current_rx_req
= req
;
615 current_rx_bytes
= req
->actual
;
616 current_rx_buf
= req
->buf
;
618 list_add(&req
->list
, &dev
->rx_reqs
);
623 /* Don't leave irqs off while doing memory copies */
624 spin_unlock_irqrestore(&dev
->lock
, flags
);
626 if (len
> current_rx_bytes
)
627 size
= current_rx_bytes
;
631 size
-= copy_to_user(buf
, current_rx_buf
, size
);
632 bytes_copied
+= size
;
636 spin_lock_irqsave(&dev
->lock
, flags
);
638 /* We've disconnected or reset so return. */
639 if (dev
->reset_printer
) {
640 list_add(¤t_rx_req
->list
, &dev
->rx_reqs
);
641 spin_unlock_irqrestore(&dev
->lock
, flags
);
642 mutex_unlock(&dev
->lock_printer_io
);
646 /* If we not returning all the data left in this RX request
647 * buffer then adjust the amount of data left in the buffer.
648 * Othewise if we are done with this RX request buffer then
649 * requeue it to get any incoming data from the USB host.
651 if (size
< current_rx_bytes
) {
652 current_rx_bytes
-= size
;
653 current_rx_buf
+= size
;
655 list_add(¤t_rx_req
->list
, &dev
->rx_reqs
);
656 current_rx_bytes
= 0;
657 current_rx_buf
= NULL
;
658 current_rx_req
= NULL
;
662 dev
->current_rx_req
= current_rx_req
;
663 dev
->current_rx_bytes
= current_rx_bytes
;
664 dev
->current_rx_buf
= current_rx_buf
;
666 spin_unlock_irqrestore(&dev
->lock
, flags
);
667 mutex_unlock(&dev
->lock_printer_io
);
669 DBG(dev
, "printer_read returned %d bytes\n", (int)bytes_copied
);
678 printer_write(struct file
*fd
, const char __user
*buf
, size_t len
, loff_t
*ptr
)
680 struct printer_dev
*dev
= fd
->private_data
;
682 size_t size
; /* Amount of data in a TX request. */
683 size_t bytes_copied
= 0;
684 struct usb_request
*req
;
686 DBG(dev
, "printer_write trying to send %d bytes\n", (int)len
);
691 mutex_lock(&dev
->lock_printer_io
);
692 spin_lock_irqsave(&dev
->lock
, flags
);
694 /* Check if a printer reset happens while we have interrupts on */
695 dev
->reset_printer
= 0;
697 /* Check if there is any available write buffers */
698 if (likely(list_empty(&dev
->tx_reqs
))) {
699 /* Turn interrupts back on before sleeping. */
700 spin_unlock_irqrestore(&dev
->lock
, flags
);
703 * If write buffers are available check if this is
704 * a NON-Blocking call or not.
706 if (fd
->f_flags
& (O_NONBLOCK
|O_NDELAY
)) {
707 mutex_unlock(&dev
->lock_printer_io
);
711 /* Sleep until a write buffer is available */
712 wait_event_interruptible(dev
->tx_wait
,
713 (likely(!list_empty(&dev
->tx_reqs
))));
714 spin_lock_irqsave(&dev
->lock
, flags
);
717 while (likely(!list_empty(&dev
->tx_reqs
)) && len
) {
719 if (len
> USB_BUFSIZE
)
724 req
= container_of(dev
->tx_reqs
.next
, struct usb_request
,
726 list_del_init(&req
->list
);
728 req
->complete
= tx_complete
;
731 /* Check if we need to send a zero length packet. */
733 /* They will be more TX requests so no yet. */
736 /* If the data amount is not a multple of the
737 * maxpacket size then send a zero length packet.
739 req
->zero
= ((len
% dev
->in_ep
->maxpacket
) == 0);
741 /* Don't leave irqs off while doing memory copies */
742 spin_unlock_irqrestore(&dev
->lock
, flags
);
744 if (copy_from_user(req
->buf
, buf
, size
)) {
745 list_add(&req
->list
, &dev
->tx_reqs
);
746 mutex_unlock(&dev
->lock_printer_io
);
750 bytes_copied
+= size
;
754 spin_lock_irqsave(&dev
->lock
, flags
);
756 /* We've disconnected or reset so free the req and buffer */
757 if (dev
->reset_printer
) {
758 list_add(&req
->list
, &dev
->tx_reqs
);
759 spin_unlock_irqrestore(&dev
->lock
, flags
);
760 mutex_unlock(&dev
->lock_printer_io
);
764 if (usb_ep_queue(dev
->in_ep
, req
, GFP_ATOMIC
)) {
765 list_add(&req
->list
, &dev
->tx_reqs
);
766 spin_unlock_irqrestore(&dev
->lock
, flags
);
767 mutex_unlock(&dev
->lock_printer_io
);
771 list_add(&req
->list
, &dev
->tx_reqs_active
);
775 spin_unlock_irqrestore(&dev
->lock
, flags
);
776 mutex_unlock(&dev
->lock_printer_io
);
778 DBG(dev
, "printer_write sent %d bytes\n", (int)bytes_copied
);
788 printer_fsync(struct file
*fd
, loff_t start
, loff_t end
, int datasync
)
790 struct printer_dev
*dev
= fd
->private_data
;
791 struct inode
*inode
= fd
->f_path
.dentry
->d_inode
;
795 mutex_lock(&inode
->i_mutex
);
796 spin_lock_irqsave(&dev
->lock
, flags
);
797 tx_list_empty
= (likely(list_empty(&dev
->tx_reqs
)));
798 spin_unlock_irqrestore(&dev
->lock
, flags
);
800 if (!tx_list_empty
) {
801 /* Sleep until all data has been sent */
802 wait_event_interruptible(dev
->tx_flush_wait
,
803 (likely(list_empty(&dev
->tx_reqs_active
))));
805 mutex_unlock(&inode
->i_mutex
);
811 printer_poll(struct file
*fd
, poll_table
*wait
)
813 struct printer_dev
*dev
= fd
->private_data
;
817 mutex_lock(&dev
->lock_printer_io
);
818 spin_lock_irqsave(&dev
->lock
, flags
);
820 spin_unlock_irqrestore(&dev
->lock
, flags
);
821 mutex_unlock(&dev
->lock_printer_io
);
823 poll_wait(fd
, &dev
->rx_wait
, wait
);
824 poll_wait(fd
, &dev
->tx_wait
, wait
);
826 spin_lock_irqsave(&dev
->lock
, flags
);
827 if (likely(!list_empty(&dev
->tx_reqs
)))
828 status
|= POLLOUT
| POLLWRNORM
;
830 if (likely(dev
->current_rx_bytes
) ||
831 likely(!list_empty(&dev
->rx_buffers
)))
832 status
|= POLLIN
| POLLRDNORM
;
834 spin_unlock_irqrestore(&dev
->lock
, flags
);
840 printer_ioctl(struct file
*fd
, unsigned int code
, unsigned long arg
)
842 struct printer_dev
*dev
= fd
->private_data
;
846 DBG(dev
, "printer_ioctl: cmd=0x%4.4x, arg=%lu\n", code
, arg
);
850 spin_lock_irqsave(&dev
->lock
, flags
);
853 case GADGET_GET_PRINTER_STATUS
:
854 status
= (int)dev
->printer_status
;
856 case GADGET_SET_PRINTER_STATUS
:
857 dev
->printer_status
= (u8
)arg
;
860 /* could not handle ioctl */
861 DBG(dev
, "printer_ioctl: ERROR cmd=0x%4.4xis not supported\n",
866 spin_unlock_irqrestore(&dev
->lock
, flags
);
871 /* used after endpoint configuration */
872 static const struct file_operations printer_io_operations
= {
873 .owner
= THIS_MODULE
,
874 .open
= printer_open
,
875 .read
= printer_read
,
876 .write
= printer_write
,
877 .fsync
= printer_fsync
,
878 .poll
= printer_poll
,
879 .unlocked_ioctl
= printer_ioctl
,
880 .release
= printer_close
,
881 .llseek
= noop_llseek
,
884 /*-------------------------------------------------------------------------*/
887 set_printer_interface(struct printer_dev
*dev
)
891 dev
->in_ep
->desc
= ep_desc(dev
->gadget
, &hs_ep_in_desc
, &fs_ep_in_desc
);
892 dev
->in_ep
->driver_data
= dev
;
894 dev
->out_ep
->desc
= ep_desc(dev
->gadget
, &hs_ep_out_desc
,
896 dev
->out_ep
->driver_data
= dev
;
898 result
= usb_ep_enable(dev
->in_ep
);
900 DBG(dev
, "enable %s --> %d\n", dev
->in_ep
->name
, result
);
904 result
= usb_ep_enable(dev
->out_ep
);
906 DBG(dev
, "enable %s --> %d\n", dev
->in_ep
->name
, result
);
911 /* on error, disable any endpoints */
913 (void) usb_ep_disable(dev
->in_ep
);
914 (void) usb_ep_disable(dev
->out_ep
);
915 dev
->in_ep
->desc
= NULL
;
916 dev
->out_ep
->desc
= NULL
;
919 /* caller is responsible for cleanup on error */
923 static void printer_reset_interface(struct printer_dev
*dev
)
925 if (dev
->interface
< 0)
928 DBG(dev
, "%s\n", __func__
);
930 if (dev
->in_ep
->desc
)
931 usb_ep_disable(dev
->in_ep
);
933 if (dev
->out_ep
->desc
)
934 usb_ep_disable(dev
->out_ep
);
936 dev
->in_ep
->desc
= NULL
;
937 dev
->out_ep
->desc
= NULL
;
941 /* change our operational config. must agree with the code
942 * that returns config descriptors, and altsetting code.
945 printer_set_config(struct printer_dev
*dev
, unsigned number
)
948 struct usb_gadget
*gadget
= dev
->gadget
;
951 case DEV_CONFIG_VALUE
:
962 usb_gadget_vbus_draw(dev
->gadget
,
963 dev
->gadget
->is_otg
? 8 : 100);
967 power
= 2 * config_desc
.bMaxPower
;
968 usb_gadget_vbus_draw(dev
->gadget
, power
);
970 dev
->config
= number
;
971 INFO(dev
, "%s config #%d: %d mA, %s\n",
972 usb_speed_string(gadget
->speed
),
973 number
, power
, driver_desc
);
979 config_buf(enum usb_device_speed speed
, u8
*buf
, u8 type
, unsigned index
,
983 const struct usb_descriptor_header
**function
;
984 #ifdef CONFIG_USB_GADGET_DUALSPEED
985 int hs
= (speed
== USB_SPEED_HIGH
);
987 if (type
== USB_DT_OTHER_SPEED_CONFIG
)
991 function
= hs_printer_function
;
993 function
= fs_printer_function
;
996 function
= fs_printer_function
;
999 if (index
>= device_desc
.bNumConfigurations
)
1002 /* for now, don't advertise srp-only devices */
1006 len
= usb_gadget_config_buf(&config_desc
, buf
, USB_DESC_BUFSIZE
,
1010 ((struct usb_config_descriptor
*) buf
)->bDescriptorType
= type
;
1014 /* Change our operational Interface. */
1016 set_interface(struct printer_dev
*dev
, unsigned number
)
1020 /* Free the current interface */
1021 switch (dev
->interface
) {
1022 case PRINTER_INTERFACE
:
1023 printer_reset_interface(dev
);
1028 case PRINTER_INTERFACE
:
1029 result
= set_printer_interface(dev
);
1031 printer_reset_interface(dev
);
1033 dev
->interface
= PRINTER_INTERFACE
;
1042 INFO(dev
, "Using interface %x\n", number
);
1047 static void printer_setup_complete(struct usb_ep
*ep
, struct usb_request
*req
)
1049 if (req
->status
|| req
->actual
!= req
->length
)
1050 DBG((struct printer_dev
*) ep
->driver_data
,
1051 "setup complete --> %d, %d/%d\n",
1052 req
->status
, req
->actual
, req
->length
);
1055 static void printer_soft_reset(struct printer_dev
*dev
)
1057 struct usb_request
*req
;
1059 INFO(dev
, "Received Printer Reset Request\n");
1061 if (usb_ep_disable(dev
->in_ep
))
1062 DBG(dev
, "Failed to disable USB in_ep\n");
1063 if (usb_ep_disable(dev
->out_ep
))
1064 DBG(dev
, "Failed to disable USB out_ep\n");
1066 if (dev
->current_rx_req
!= NULL
) {
1067 list_add(&dev
->current_rx_req
->list
, &dev
->rx_reqs
);
1068 dev
->current_rx_req
= NULL
;
1070 dev
->current_rx_bytes
= 0;
1071 dev
->current_rx_buf
= NULL
;
1072 dev
->reset_printer
= 1;
1074 while (likely(!(list_empty(&dev
->rx_buffers
)))) {
1075 req
= container_of(dev
->rx_buffers
.next
, struct usb_request
,
1077 list_del_init(&req
->list
);
1078 list_add(&req
->list
, &dev
->rx_reqs
);
1081 while (likely(!(list_empty(&dev
->rx_reqs_active
)))) {
1082 req
= container_of(dev
->rx_buffers
.next
, struct usb_request
,
1084 list_del_init(&req
->list
);
1085 list_add(&req
->list
, &dev
->rx_reqs
);
1088 while (likely(!(list_empty(&dev
->tx_reqs_active
)))) {
1089 req
= container_of(dev
->tx_reqs_active
.next
,
1090 struct usb_request
, list
);
1091 list_del_init(&req
->list
);
1092 list_add(&req
->list
, &dev
->tx_reqs
);
1095 if (usb_ep_enable(dev
->in_ep
))
1096 DBG(dev
, "Failed to enable USB in_ep\n");
1097 if (usb_ep_enable(dev
->out_ep
))
1098 DBG(dev
, "Failed to enable USB out_ep\n");
1100 wake_up_interruptible(&dev
->rx_wait
);
1101 wake_up_interruptible(&dev
->tx_wait
);
1102 wake_up_interruptible(&dev
->tx_flush_wait
);
1105 /*-------------------------------------------------------------------------*/
1108 * The setup() callback implements all the ep0 functionality that's not
1109 * handled lower down.
1112 printer_setup(struct usb_gadget
*gadget
, const struct usb_ctrlrequest
*ctrl
)
1114 struct printer_dev
*dev
= get_gadget_data(gadget
);
1115 struct usb_request
*req
= dev
->req
;
1116 int value
= -EOPNOTSUPP
;
1117 u16 wIndex
= le16_to_cpu(ctrl
->wIndex
);
1118 u16 wValue
= le16_to_cpu(ctrl
->wValue
);
1119 u16 wLength
= le16_to_cpu(ctrl
->wLength
);
1121 DBG(dev
, "ctrl req%02x.%02x v%04x i%04x l%d\n",
1122 ctrl
->bRequestType
, ctrl
->bRequest
, wValue
, wIndex
, wLength
);
1124 req
->complete
= printer_setup_complete
;
1126 switch (ctrl
->bRequestType
&USB_TYPE_MASK
) {
1128 case USB_TYPE_STANDARD
:
1129 switch (ctrl
->bRequest
) {
1131 case USB_REQ_GET_DESCRIPTOR
:
1132 if (ctrl
->bRequestType
!= USB_DIR_IN
)
1134 switch (wValue
>> 8) {
1137 device_desc
.bMaxPacketSize0
=
1138 gadget
->ep0
->maxpacket
;
1139 value
= min(wLength
, (u16
) sizeof device_desc
);
1140 memcpy(req
->buf
, &device_desc
, value
);
1142 #ifdef CONFIG_USB_GADGET_DUALSPEED
1143 case USB_DT_DEVICE_QUALIFIER
:
1144 if (!gadget
->is_dualspeed
)
1147 * assumes ep0 uses the same value for both
1150 dev_qualifier
.bMaxPacketSize0
=
1151 gadget
->ep0
->maxpacket
;
1152 value
= min(wLength
,
1153 (u16
) sizeof dev_qualifier
);
1154 memcpy(req
->buf
, &dev_qualifier
, value
);
1157 case USB_DT_OTHER_SPEED_CONFIG
:
1158 if (!gadget
->is_dualspeed
)
1161 #endif /* CONFIG_USB_GADGET_DUALSPEED */
1163 value
= config_buf(gadget
->speed
, req
->buf
,
1168 value
= min(wLength
, (u16
) value
);
1172 value
= usb_gadget_get_string(&stringtab
,
1173 wValue
& 0xff, req
->buf
);
1175 value
= min(wLength
, (u16
) value
);
1180 case USB_REQ_SET_CONFIGURATION
:
1181 if (ctrl
->bRequestType
!= 0)
1183 if (gadget
->a_hnp_support
)
1184 DBG(dev
, "HNP available\n");
1185 else if (gadget
->a_alt_hnp_support
)
1186 DBG(dev
, "HNP needs a different root port\n");
1187 value
= printer_set_config(dev
, wValue
);
1189 value
= set_interface(dev
, PRINTER_INTERFACE
);
1191 case USB_REQ_GET_CONFIGURATION
:
1192 if (ctrl
->bRequestType
!= USB_DIR_IN
)
1194 *(u8
*)req
->buf
= dev
->config
;
1195 value
= min(wLength
, (u16
) 1);
1198 case USB_REQ_SET_INTERFACE
:
1199 if (ctrl
->bRequestType
!= USB_RECIP_INTERFACE
||
1203 value
= set_interface(dev
, PRINTER_INTERFACE
);
1205 case USB_REQ_GET_INTERFACE
:
1206 if (ctrl
->bRequestType
!=
1207 (USB_DIR_IN
|USB_RECIP_INTERFACE
)
1211 *(u8
*)req
->buf
= dev
->interface
;
1212 value
= min(wLength
, (u16
) 1);
1220 case USB_TYPE_CLASS
:
1221 switch (ctrl
->bRequest
) {
1222 case 0: /* Get the IEEE-1284 PNP String */
1223 /* Only one printer interface is supported. */
1224 if ((wIndex
>>8) != PRINTER_INTERFACE
)
1227 value
= (pnp_string
[0]<<8)|pnp_string
[1];
1228 memcpy(req
->buf
, pnp_string
, value
);
1229 DBG(dev
, "1284 PNP String: %x %s\n", value
,
1233 case 1: /* Get Port Status */
1234 /* Only one printer interface is supported. */
1235 if (wIndex
!= PRINTER_INTERFACE
)
1238 *(u8
*)req
->buf
= dev
->printer_status
;
1239 value
= min(wLength
, (u16
) 1);
1242 case 2: /* Soft Reset */
1243 /* Only one printer interface is supported. */
1244 if (wIndex
!= PRINTER_INTERFACE
)
1247 printer_soft_reset(dev
);
1260 "unknown ctrl req%02x.%02x v%04x i%04x l%d\n",
1261 ctrl
->bRequestType
, ctrl
->bRequest
,
1262 wValue
, wIndex
, wLength
);
1266 /* respond with data transfer before status phase? */
1268 req
->length
= value
;
1269 req
->zero
= value
< wLength
;
1270 value
= usb_ep_queue(gadget
->ep0
, req
, GFP_ATOMIC
);
1272 DBG(dev
, "ep_queue --> %d\n", value
);
1274 printer_setup_complete(gadget
->ep0
, req
);
1278 /* host either stalls (value < 0) or reports success */
1283 printer_disconnect(struct usb_gadget
*gadget
)
1285 struct printer_dev
*dev
= get_gadget_data(gadget
);
1286 unsigned long flags
;
1288 DBG(dev
, "%s\n", __func__
);
1290 spin_lock_irqsave(&dev
->lock
, flags
);
1292 printer_reset_interface(dev
);
1294 spin_unlock_irqrestore(&dev
->lock
, flags
);
1298 printer_unbind(struct usb_gadget
*gadget
)
1300 struct printer_dev
*dev
= get_gadget_data(gadget
);
1301 struct usb_request
*req
;
1304 DBG(dev
, "%s\n", __func__
);
1306 /* Remove sysfs files */
1307 device_destroy(usb_gadget_class
, g_printer_devno
);
1309 /* Remove Character Device */
1310 cdev_del(&dev
->printer_cdev
);
1312 /* we must already have been disconnected ... no i/o may be active */
1313 WARN_ON(!list_empty(&dev
->tx_reqs_active
));
1314 WARN_ON(!list_empty(&dev
->rx_reqs_active
));
1316 /* Free all memory for this driver. */
1317 while (!list_empty(&dev
->tx_reqs
)) {
1318 req
= container_of(dev
->tx_reqs
.next
, struct usb_request
,
1320 list_del(&req
->list
);
1321 printer_req_free(dev
->in_ep
, req
);
1324 if (dev
->current_rx_req
!= NULL
)
1325 printer_req_free(dev
->out_ep
, dev
->current_rx_req
);
1327 while (!list_empty(&dev
->rx_reqs
)) {
1328 req
= container_of(dev
->rx_reqs
.next
,
1329 struct usb_request
, list
);
1330 list_del(&req
->list
);
1331 printer_req_free(dev
->out_ep
, req
);
1334 while (!list_empty(&dev
->rx_buffers
)) {
1335 req
= container_of(dev
->rx_buffers
.next
,
1336 struct usb_request
, list
);
1337 list_del(&req
->list
);
1338 printer_req_free(dev
->out_ep
, req
);
1342 printer_req_free(gadget
->ep0
, dev
->req
);
1346 set_gadget_data(gadget
, NULL
);
1350 printer_bind(struct usb_gadget
*gadget
)
1352 struct printer_dev
*dev
;
1353 struct usb_ep
*in_ep
, *out_ep
;
1354 int status
= -ENOMEM
;
1358 struct usb_request
*req
;
1360 dev
= &usb_printer_gadget
;
1363 /* Setup the sysfs files for the printer gadget. */
1364 dev
->pdev
= device_create(usb_gadget_class
, NULL
, g_printer_devno
,
1366 if (IS_ERR(dev
->pdev
)) {
1367 ERROR(dev
, "Failed to create device: g_printer\n");
1372 * Register a character device as an interface to a user mode
1373 * program that handles the printer specific functionality.
1375 cdev_init(&dev
->printer_cdev
, &printer_io_operations
);
1376 dev
->printer_cdev
.owner
= THIS_MODULE
;
1377 status
= cdev_add(&dev
->printer_cdev
, g_printer_devno
, 1);
1379 ERROR(dev
, "Failed to open char device\n");
1383 gcnum
= usb_gadget_controller_number(gadget
);
1385 device_desc
.bcdDevice
= cpu_to_le16(0x0200 + gcnum
);
1387 dev_warn(&gadget
->dev
, "controller '%s' not recognized\n",
1389 /* unrecognized, but safe unless bulk is REALLY quirky */
1390 device_desc
.bcdDevice
=
1391 cpu_to_le16(0xFFFF);
1393 snprintf(manufacturer
, sizeof(manufacturer
), "%s %s with %s",
1394 init_utsname()->sysname
, init_utsname()->release
,
1397 device_desc
.idVendor
=
1398 cpu_to_le16(PRINTER_VENDOR_NUM
);
1399 device_desc
.idProduct
=
1400 cpu_to_le16(PRINTER_PRODUCT_NUM
);
1402 /* support optional vendor/distro customization */
1405 dev_err(&gadget
->dev
, "idVendor needs idProduct!\n");
1408 device_desc
.idVendor
= cpu_to_le16(idVendor
);
1409 device_desc
.idProduct
= cpu_to_le16(idProduct
);
1411 device_desc
.bcdDevice
= cpu_to_le16(bcdDevice
);
1415 strlcpy(manufacturer
, iManufacturer
, sizeof manufacturer
);
1418 strlcpy(product_desc
, iProduct
, sizeof product_desc
);
1421 strlcpy(serial_num
, iSerialNum
, sizeof serial_num
);
1424 strlcpy(&pnp_string
[2], iPNPstring
, (sizeof pnp_string
)-2);
1426 len
= strlen(pnp_string
);
1427 pnp_string
[0] = (len
>> 8) & 0xFF;
1428 pnp_string
[1] = len
& 0xFF;
1430 /* all we really need is bulk IN/OUT */
1431 usb_ep_autoconfig_reset(gadget
);
1432 in_ep
= usb_ep_autoconfig(gadget
, &fs_ep_in_desc
);
1435 dev_err(&gadget
->dev
, "can't autoconfigure on %s\n",
1439 in_ep
->driver_data
= in_ep
; /* claim */
1441 out_ep
= usb_ep_autoconfig(gadget
, &fs_ep_out_desc
);
1444 out_ep
->driver_data
= out_ep
; /* claim */
1446 #ifdef CONFIG_USB_GADGET_DUALSPEED
1447 /* assumes that all endpoints are dual-speed */
1448 hs_ep_in_desc
.bEndpointAddress
= fs_ep_in_desc
.bEndpointAddress
;
1449 hs_ep_out_desc
.bEndpointAddress
= fs_ep_out_desc
.bEndpointAddress
;
1450 #endif /* DUALSPEED */
1452 usb_gadget_set_selfpowered(gadget
);
1454 if (gadget
->is_otg
) {
1455 otg_desc
.bmAttributes
|= USB_OTG_HNP
,
1456 config_desc
.bmAttributes
|= USB_CONFIG_ATT_WAKEUP
;
1459 spin_lock_init(&dev
->lock
);
1460 mutex_init(&dev
->lock_printer_io
);
1461 INIT_LIST_HEAD(&dev
->tx_reqs
);
1462 INIT_LIST_HEAD(&dev
->tx_reqs_active
);
1463 INIT_LIST_HEAD(&dev
->rx_reqs
);
1464 INIT_LIST_HEAD(&dev
->rx_reqs_active
);
1465 INIT_LIST_HEAD(&dev
->rx_buffers
);
1466 init_waitqueue_head(&dev
->rx_wait
);
1467 init_waitqueue_head(&dev
->tx_wait
);
1468 init_waitqueue_head(&dev
->tx_flush_wait
);
1471 dev
->interface
= -1;
1472 dev
->printer_cdev_open
= 0;
1473 dev
->printer_status
= PRINTER_NOT_ERROR
;
1474 dev
->current_rx_req
= NULL
;
1475 dev
->current_rx_bytes
= 0;
1476 dev
->current_rx_buf
= NULL
;
1479 dev
->out_ep
= out_ep
;
1481 /* preallocate control message data and buffer */
1482 dev
->req
= printer_req_alloc(gadget
->ep0
, USB_DESC_BUFSIZE
,
1489 for (i
= 0; i
< QLEN
; i
++) {
1490 req
= printer_req_alloc(dev
->in_ep
, USB_BUFSIZE
, GFP_KERNEL
);
1492 while (!list_empty(&dev
->tx_reqs
)) {
1493 req
= container_of(dev
->tx_reqs
.next
,
1494 struct usb_request
, list
);
1495 list_del(&req
->list
);
1496 printer_req_free(dev
->in_ep
, req
);
1500 list_add(&req
->list
, &dev
->tx_reqs
);
1503 for (i
= 0; i
< QLEN
; i
++) {
1504 req
= printer_req_alloc(dev
->out_ep
, USB_BUFSIZE
, GFP_KERNEL
);
1506 while (!list_empty(&dev
->rx_reqs
)) {
1507 req
= container_of(dev
->rx_reqs
.next
,
1508 struct usb_request
, list
);
1509 list_del(&req
->list
);
1510 printer_req_free(dev
->out_ep
, req
);
1514 list_add(&req
->list
, &dev
->rx_reqs
);
1517 dev
->req
->complete
= printer_setup_complete
;
1519 /* finish hookup to lower layer ... */
1520 dev
->gadget
= gadget
;
1521 set_gadget_data(gadget
, dev
);
1522 gadget
->ep0
->driver_data
= dev
;
1524 INFO(dev
, "%s, version: " DRIVER_VERSION
"\n", driver_desc
);
1525 INFO(dev
, "using %s, OUT %s IN %s\n", gadget
->name
, out_ep
->name
,
1531 printer_unbind(gadget
);
1535 /*-------------------------------------------------------------------------*/
1537 static struct usb_gadget_driver printer_driver
= {
1540 .function
= (char *) driver_desc
,
1541 .unbind
= printer_unbind
,
1543 .setup
= printer_setup
,
1544 .disconnect
= printer_disconnect
,
1547 .name
= (char *) shortname
,
1548 .owner
= THIS_MODULE
,
1552 MODULE_DESCRIPTION(DRIVER_DESC
);
1553 MODULE_AUTHOR("Craig Nadler");
1554 MODULE_LICENSE("GPL");
1561 usb_gadget_class
= class_create(THIS_MODULE
, "usb_printer_gadget");
1562 if (IS_ERR(usb_gadget_class
)) {
1563 status
= PTR_ERR(usb_gadget_class
);
1564 ERROR(dev
, "unable to create usb_gadget class %d\n", status
);
1568 status
= alloc_chrdev_region(&g_printer_devno
, 0, 1,
1569 "USB printer gadget");
1571 ERROR(dev
, "alloc_chrdev_region %d\n", status
);
1572 class_destroy(usb_gadget_class
);
1576 status
= usb_gadget_probe_driver(&printer_driver
, printer_bind
);
1578 class_destroy(usb_gadget_class
);
1579 unregister_chrdev_region(g_printer_devno
, 1);
1580 DBG(dev
, "usb_gadget_probe_driver %x\n", status
);
1592 mutex_lock(&usb_printer_gadget
.lock_printer_io
);
1593 status
= usb_gadget_unregister_driver(&printer_driver
);
1595 ERROR(dev
, "usb_gadget_unregister_driver %x\n", status
);
1597 unregister_chrdev_region(g_printer_devno
, 1);
1598 class_destroy(usb_gadget_class
);
1599 mutex_unlock(&usb_printer_gadget
.lock_printer_io
);
1601 module_exit(cleanup
);