USB: add Printer Gadget Driver
[linux-2.6] / drivers / usb / gadget / Kconfig
1 #
2 # USB Gadget support on a system involves
3 #    (a) a peripheral controller, and
4 #    (b) the gadget driver using it.
5 #
6 # NOTE:  Gadget support ** DOES NOT ** depend on host-side CONFIG_USB !!
7 #
8 #  - Host systems (like PCs) need CONFIG_USB (with "A" jacks).
9 #  - Peripherals (like PDAs) need CONFIG_USB_GADGET (with "B" jacks).
10 #  - Some systems have both kinds of controllers.
11 #
12 # With help from a special transceiver and a "Mini-AB" jack, systems with
13 # both kinds of controller can also support "USB On-the-Go" (CONFIG_USB_OTG).
14 #
15 menu "USB Gadget Support"
16
17 config USB_GADGET
18         tristate "Support for USB Gadgets"
19         help
20            USB is a master/slave protocol, organized with one master
21            host (such as a PC) controlling up to 127 peripheral devices.
22            The USB hardware is asymmetric, which makes it easier to set up:
23            you can't connect a "to-the-host" connector to a peripheral.
24
25            Linux can run in the host, or in the peripheral.  In both cases
26            you need a low level bus controller driver, and some software
27            talking to it.  Peripheral controllers are often discrete silicon,
28            or are integrated with the CPU in a microcontroller.  The more
29            familiar host side controllers have names like "EHCI", "OHCI",
30            or "UHCI", and are usually integrated into southbridges on PC
31            motherboards.
32
33            Enable this configuration option if you want to run Linux inside
34            a USB peripheral device.  Configure one hardware driver for your
35            peripheral/device side bus controller, and a "gadget driver" for
36            your peripheral protocol.  (If you use modular gadget drivers,
37            you may configure more than one.)
38
39            If in doubt, say "N" and don't enable these drivers; most people
40            don't have this kind of hardware (except maybe inside Linux PDAs).
41
42            For more information, see <http://www.linux-usb.org/gadget> and
43            the kernel DocBook documentation for this API.
44
45 config USB_GADGET_DEBUG
46         boolean "Debugging messages"
47         depends on USB_GADGET && DEBUG_KERNEL && EXPERIMENTAL
48         help
49            Many controller and gadget drivers will print some debugging
50            messages if you use this option to ask for those messages.
51
52            Avoid enabling these messages, even if you're actively
53            debugging such a driver.  Many drivers will emit so many
54            messages that the driver timings are affected, which will
55            either create new failure modes or remove the one you're
56            trying to track down.  Never enable these messages for a
57            production build.
58
59 config USB_GADGET_DEBUG_FILES
60         boolean "Debugging information files"
61         depends on USB_GADGET && PROC_FS
62         help
63            Some of the drivers in the "gadget" framework can expose
64            debugging information in files such as /proc/driver/udc
65            (for a peripheral controller).  The information in these
66            files may help when you're troubleshooting or bringing up a
67            driver on a new board.   Enable these files by choosing "Y"
68            here.  If in doubt, or to conserve kernel memory, say "N".
69
70 config USB_GADGET_DEBUG_FS
71         boolean "Debugging information files in debugfs"
72         depends on USB_GADGET && DEBUG_FS
73         help
74            Some of the drivers in the "gadget" framework can expose
75            debugging information in files under /sys/kernel/debug/.
76            The information in these files may help when you're
77            troubleshooting or bringing up a driver on a new board.
78            Enable these files by choosing "Y" here.  If in doubt, or
79            to conserve kernel memory, say "N".
80
81 config  USB_GADGET_SELECTED
82         boolean
83
84 #
85 # USB Peripheral Controller Support
86 #
87 choice
88         prompt "USB Peripheral Controller"
89         depends on USB_GADGET
90         help
91            A USB device uses a controller to talk to its host.
92            Systems should have only one such upstream link.
93            Many controller drivers are platform-specific; these
94            often need board-specific hooks.
95
96 config USB_GADGET_AMD5536UDC
97         boolean "AMD5536 UDC"
98         depends on PCI
99         select USB_GADGET_DUALSPEED
100         help
101            The AMD5536 UDC is part of the AMD Geode CS5536, an x86 southbridge.
102            It is a USB Highspeed DMA capable USB device controller. Beside ep0
103            it provides 4 IN and 4 OUT endpoints (bulk or interrupt type).
104            The UDC port supports OTG operation, and may be used as a host port
105            if it's not being used to implement peripheral or OTG roles.
106
107            Say "y" to link the driver statically, or "m" to build a
108            dynamically linked module called "amd5536udc" and force all
109            gadget drivers to also be dynamically linked.
110
111 config USB_AMD5536UDC
112         tristate
113         depends on USB_GADGET_AMD5536UDC
114         default USB_GADGET
115         select USB_GADGET_SELECTED
116
117 config USB_GADGET_ATMEL_USBA
118         boolean "Atmel USBA"
119         select USB_GADGET_DUALSPEED
120         depends on AVR32
121         help
122           USBA is the integrated high-speed USB Device controller on
123           the AT32AP700x processors from Atmel.
124
125 config USB_ATMEL_USBA
126         tristate
127         depends on USB_GADGET_ATMEL_USBA
128         default USB_GADGET
129         select USB_GADGET_SELECTED
130
131 config USB_GADGET_FSL_USB2
132         boolean "Freescale Highspeed USB DR Peripheral Controller"
133         depends on MPC834x || PPC_MPC831x
134         select USB_GADGET_DUALSPEED
135         help
136            Some of Freescale PowerPC processors have a High Speed
137            Dual-Role(DR) USB controller, which supports device mode.
138
139            The number of programmable endpoints is different through
140            SOC revisions.
141
142            Say "y" to link the driver statically, or "m" to build a
143            dynamically linked module called "fsl_usb2_udc" and force
144            all gadget drivers to also be dynamically linked.
145
146 config USB_FSL_USB2
147         tristate
148         depends on USB_GADGET_FSL_USB2
149         default USB_GADGET
150         select USB_GADGET_SELECTED
151
152 config USB_GADGET_NET2280
153         boolean "NetChip 228x"
154         depends on PCI
155         select USB_GADGET_DUALSPEED
156         help
157            NetChip 2280 / 2282 is a PCI based USB peripheral controller which
158            supports both full and high speed USB 2.0 data transfers.  
159            
160            It has six configurable endpoints, as well as endpoint zero
161            (for control transfers) and several endpoints with dedicated
162            functions.
163
164            Say "y" to link the driver statically, or "m" to build a
165            dynamically linked module called "net2280" and force all
166            gadget drivers to also be dynamically linked.
167
168 config USB_NET2280
169         tristate
170         depends on USB_GADGET_NET2280
171         default USB_GADGET
172         select USB_GADGET_SELECTED
173
174 config USB_GADGET_PXA2XX
175         boolean "PXA 25x or IXP 4xx"
176         depends on (ARCH_PXA && PXA25x) || ARCH_IXP4XX
177         help
178            Intel's PXA 25x series XScale ARM-5TE processors include
179            an integrated full speed USB 1.1 device controller.  The
180            controller in the IXP 4xx series is register-compatible.
181
182            It has fifteen fixed-function endpoints, as well as endpoint
183            zero (for control transfers).
184
185            Say "y" to link the driver statically, or "m" to build a
186            dynamically linked module called "pxa2xx_udc" and force all
187            gadget drivers to also be dynamically linked.
188
189 config USB_PXA2XX
190         tristate
191         depends on USB_GADGET_PXA2XX
192         default USB_GADGET
193         select USB_GADGET_SELECTED
194
195 # if there's only one gadget driver, using only two bulk endpoints,
196 # don't waste memory for the other endpoints
197 config USB_PXA2XX_SMALL
198         depends on USB_GADGET_PXA2XX
199         bool
200         default n if USB_ETH_RNDIS
201         default y if USB_ZERO
202         default y if USB_ETH
203         default y if USB_G_SERIAL
204
205 config USB_GADGET_M66592
206         boolean "Renesas M66592 USB Peripheral Controller"
207         select USB_GADGET_DUALSPEED
208         help
209            M66592 is a discrete USB peripheral controller chip that
210            supports both full and high speed USB 2.0 data transfers.
211            It has seven configurable endpoints, and endpoint zero.
212
213            Say "y" to link the driver statically, or "m" to build a
214            dynamically linked module called "m66592_udc" and force all
215            gadget drivers to also be dynamically linked.
216
217 config USB_M66592
218         tristate
219         depends on USB_GADGET_M66592
220         default USB_GADGET
221         select USB_GADGET_SELECTED
222
223 config SUPERH_BUILT_IN_M66592
224         boolean "Enable SuperH built-in USB like the M66592"
225         depends on USB_GADGET_M66592 && CPU_SUBTYPE_SH7722
226         help
227            SH7722 has USB like the M66592.
228
229            The transfer rate is very slow when use "Ethernet Gadget".
230            However, this problem is improved if change a value of
231            NET_IP_ALIGN to 4.
232
233 config USB_GADGET_GOKU
234         boolean "Toshiba TC86C001 'Goku-S'"
235         depends on PCI
236         help
237            The Toshiba TC86C001 is a PCI device which includes controllers
238            for full speed USB devices, IDE, I2C, SIO, plus a USB host (OHCI).
239            
240            The device controller has three configurable (bulk or interrupt)
241            endpoints, plus endpoint zero (for control transfers).
242
243            Say "y" to link the driver statically, or "m" to build a
244            dynamically linked module called "goku_udc" and to force all
245            gadget drivers to also be dynamically linked.
246
247 config USB_GOKU
248         tristate
249         depends on USB_GADGET_GOKU
250         default USB_GADGET
251         select USB_GADGET_SELECTED
252
253
254 config USB_GADGET_LH7A40X
255         boolean "LH7A40X"
256         depends on ARCH_LH7A40X
257         help
258     This driver provides USB Device Controller driver for LH7A40x
259
260 config USB_LH7A40X
261         tristate
262         depends on USB_GADGET_LH7A40X
263         default USB_GADGET
264         select USB_GADGET_SELECTED
265
266 config USB_GADGET_OMAP
267         boolean "OMAP USB Device Controller"
268         depends on ARCH_OMAP
269         select ISP1301_OMAP if MACH_OMAP_H2 || MACH_OMAP_H3
270         help
271            Many Texas Instruments OMAP processors have flexible full
272            speed USB device controllers, with support for up to 30
273            endpoints (plus endpoint zero).  This driver supports the
274            controller in the OMAP 1611, and should work with controllers
275            in other OMAP processors too, given minor tweaks.
276
277            Say "y" to link the driver statically, or "m" to build a
278            dynamically linked module called "omap_udc" and force all
279            gadget drivers to also be dynamically linked.
280
281 config USB_OMAP
282         tristate
283         depends on USB_GADGET_OMAP
284         default USB_GADGET
285         select USB_GADGET_SELECTED
286
287 config USB_OTG
288         boolean "OTG Support"
289         depends on USB_GADGET_OMAP && ARCH_OMAP_OTG && USB_OHCI_HCD
290         help
291            The most notable feature of USB OTG is support for a
292            "Dual-Role" device, which can act as either a device
293            or a host.  The initial role choice can be changed
294            later, when two dual-role devices talk to each other.
295
296            Select this only if your OMAP board has a Mini-AB connector.
297
298 config USB_GADGET_S3C2410
299         boolean "S3C2410 USB Device Controller"
300         depends on ARCH_S3C2410
301         help
302           Samsung's S3C2410 is an ARM-4 processor with an integrated
303           full speed USB 1.1 device controller.  It has 4 configurable
304           endpoints, as well as endpoint zero (for control transfers).
305
306           This driver has been tested on the S3C2410, S3C2412, and
307           S3C2440 processors.
308
309 config USB_S3C2410
310         tristate
311         depends on USB_GADGET_S3C2410
312         default USB_GADGET
313         select USB_GADGET_SELECTED
314
315 config USB_S3C2410_DEBUG
316         boolean "S3C2410 udc debug messages"
317         depends on USB_GADGET_S3C2410
318
319 config USB_GADGET_AT91
320         boolean "AT91 USB Device Port"
321         depends on ARCH_AT91 && !ARCH_AT91SAM9RL && !ARCH_AT91CAP9
322         select USB_GADGET_SELECTED
323         help
324            Many Atmel AT91 processors (such as the AT91RM2000) have a
325            full speed USB Device Port with support for five configurable
326            endpoints (plus endpoint zero).
327
328            Say "y" to link the driver statically, or "m" to build a
329            dynamically linked module called "at91_udc" and force all
330            gadget drivers to also be dynamically linked.
331
332 config USB_AT91
333         tristate
334         depends on USB_GADGET_AT91
335         default USB_GADGET
336
337 config USB_GADGET_DUMMY_HCD
338         boolean "Dummy HCD (DEVELOPMENT)"
339         depends on (USB=y || (USB=m && USB_GADGET=m)) && EXPERIMENTAL
340         select USB_GADGET_DUALSPEED
341         help
342           This host controller driver emulates USB, looping all data transfer
343           requests back to a USB "gadget driver" in the same host.  The host
344           side is the master; the gadget side is the slave.  Gadget drivers
345           can be high, full, or low speed; and they have access to endpoints
346           like those from NET2280, PXA2xx, or SA1100 hardware.
347           
348           This may help in some stages of creating a driver to embed in a
349           Linux device, since it lets you debug several parts of the gadget
350           driver without its hardware or drivers being involved.
351           
352           Since such a gadget side driver needs to interoperate with a host
353           side Linux-USB device driver, this may help to debug both sides
354           of a USB protocol stack.
355
356           Say "y" to link the driver statically, or "m" to build a
357           dynamically linked module called "dummy_hcd" and force all
358           gadget drivers to also be dynamically linked.
359
360 config USB_DUMMY_HCD
361         tristate
362         depends on USB_GADGET_DUMMY_HCD
363         default USB_GADGET
364         select USB_GADGET_SELECTED
365
366 # NOTE:  Please keep dummy_hcd LAST so that "real hardware" appears
367 # first and will be selected by default.
368
369 endchoice
370
371 config USB_GADGET_DUALSPEED
372         bool
373         depends on USB_GADGET
374         default n
375         help
376           Means that gadget drivers should include extra descriptors
377           and code to handle dual-speed controllers.
378
379 #
380 # USB Gadget Drivers
381 #
382 choice
383         tristate "USB Gadget Drivers"
384         depends on USB_GADGET && USB_GADGET_SELECTED
385         default USB_ETH
386         help
387           A Linux "Gadget Driver" talks to the USB Peripheral Controller
388           driver through the abstract "gadget" API.  Some other operating
389           systems call these "client" drivers, of which "class drivers"
390           are a subset (implementing a USB device class specification).
391           A gadget driver implements one or more USB functions using
392           the peripheral hardware.
393
394           Gadget drivers are hardware-neutral, or "platform independent",
395           except that they sometimes must understand quirks or limitations
396           of the particular controllers they work with.  For example, when
397           a controller doesn't support alternate configurations or provide
398           enough of the right types of endpoints, the gadget driver might
399           not be able work with that controller, or might need to implement
400           a less common variant of a device class protocol.
401
402 # this first set of drivers all depend on bulk-capable hardware.
403
404 config USB_ZERO
405         tristate "Gadget Zero (DEVELOPMENT)"
406         depends on EXPERIMENTAL
407         help
408           Gadget Zero is a two-configuration device.  It either sinks and
409           sources bulk data; or it loops back a configurable number of
410           transfers.  It also implements control requests, for "chapter 9"
411           conformance.  The driver needs only two bulk-capable endpoints, so
412           it can work on top of most device-side usb controllers.  It's
413           useful for testing, and is also a working example showing how
414           USB "gadget drivers" can be written.
415
416           Make this be the first driver you try using on top of any new
417           USB peripheral controller driver.  Then you can use host-side
418           test software, like the "usbtest" driver, to put your hardware
419           and its driver through a basic set of functional tests.
420
421           Gadget Zero also works with the host-side "usb-skeleton" driver,
422           and with many kinds of host-side test software.  You may need
423           to tweak product and vendor IDs before host software knows about
424           this device, and arrange to select an appropriate configuration.
425
426           Say "y" to link the driver statically, or "m" to build a
427           dynamically linked module called "g_zero".
428
429 config USB_ZERO_HNPTEST
430         boolean "HNP Test Device"
431         depends on USB_ZERO && USB_OTG
432         help
433           You can configure this device to enumerate using the device
434           identifiers of the USB-OTG test device.  That means that when
435           this gadget connects to another OTG device, with this one using
436           the "B-Peripheral" role, that device will use HNP to let this
437           one serve as the USB host instead (in the "B-Host" role).
438
439 config USB_ETH
440         tristate "Ethernet Gadget (with CDC Ethernet support)"
441         depends on NET
442         help
443           This driver implements Ethernet style communication, in either
444           of two ways:
445           
446            - The "Communication Device Class" (CDC) Ethernet Control Model.
447              That protocol is often avoided with pure Ethernet adapters, in
448              favor of simpler vendor-specific hardware, but is widely
449              supported by firmware for smart network devices.
450
451            - On hardware can't implement that protocol, a simple CDC subset
452              is used, placing fewer demands on USB.
453
454           RNDIS support is a third option, more demanding than that subset.
455
456           Within the USB device, this gadget driver exposes a network device
457           "usbX", where X depends on what other networking devices you have.
458           Treat it like a two-node Ethernet link:  host, and gadget.
459
460           The Linux-USB host-side "usbnet" driver interoperates with this
461           driver, so that deep I/O queues can be supported.  On 2.4 kernels,
462           use "CDCEther" instead, if you're using the CDC option. That CDC
463           mode should also interoperate with standard CDC Ethernet class
464           drivers on other host operating systems.
465
466           Say "y" to link the driver statically, or "m" to build a
467           dynamically linked module called "g_ether".
468
469 config USB_ETH_RNDIS
470         bool "RNDIS support (EXPERIMENTAL)"
471         depends on USB_ETH && EXPERIMENTAL
472         default y
473         help
474            Microsoft Windows XP bundles the "Remote NDIS" (RNDIS) protocol,
475            and Microsoft provides redistributable binary RNDIS drivers for
476            older versions of Windows.
477
478            If you say "y" here, the Ethernet gadget driver will try to provide
479            a second device configuration, supporting RNDIS to talk to such
480            Microsoft USB hosts.
481            
482            To make MS-Windows work with this, use Documentation/usb/linux.inf
483            as the "driver info file".  For versions of MS-Windows older than
484            XP, you'll need to download drivers from Microsoft's website; a URL
485            is given in comments found in that info file.
486
487 config USB_GADGETFS
488         tristate "Gadget Filesystem (EXPERIMENTAL)"
489         depends on EXPERIMENTAL
490         help
491           This driver provides a filesystem based API that lets user mode
492           programs implement a single-configuration USB device, including
493           endpoint I/O and control requests that don't relate to enumeration.
494           All endpoints, transfer speeds, and transfer types supported by
495           the hardware are available, through read() and write() calls.
496
497           Say "y" to link the driver statically, or "m" to build a
498           dynamically linked module called "gadgetfs".
499
500 config USB_FILE_STORAGE
501         tristate "File-backed Storage Gadget"
502         depends on BLOCK
503         help
504           The File-backed Storage Gadget acts as a USB Mass Storage
505           disk drive.  As its storage repository it can use a regular
506           file or a block device (in much the same way as the "loop"
507           device driver), specified as a module parameter.
508
509           Say "y" to link the driver statically, or "m" to build a
510           dynamically linked module called "g_file_storage".
511
512 config USB_FILE_STORAGE_TEST
513         bool "File-backed Storage Gadget testing version"
514         depends on USB_FILE_STORAGE
515         default n
516         help
517           Say "y" to generate the larger testing version of the
518           File-backed Storage Gadget, useful for probing the
519           behavior of USB Mass Storage hosts.  Not needed for
520           normal operation.
521
522 config USB_G_SERIAL
523         tristate "Serial Gadget (with CDC ACM support)"
524         help
525           The Serial Gadget talks to the Linux-USB generic serial driver.
526           This driver supports a CDC-ACM module option, which can be used
527           to interoperate with MS-Windows hosts or with the Linux-USB
528           "cdc-acm" driver.
529
530           Say "y" to link the driver statically, or "m" to build a
531           dynamically linked module called "g_serial".
532
533           For more information, see Documentation/usb/gadget_serial.txt
534           which includes instructions and a "driver info file" needed to
535           make MS-Windows work with this driver.
536
537 config USB_MIDI_GADGET
538         tristate "MIDI Gadget (EXPERIMENTAL)"
539         depends on SND && EXPERIMENTAL
540         select SND_RAWMIDI
541         help
542           The MIDI Gadget acts as a USB Audio device, with one MIDI
543           input and one MIDI output. These MIDI jacks appear as
544           a sound "card" in the ALSA sound system. Other MIDI
545           connections can then be made on the gadget system, using
546           ALSA's aconnect utility etc.
547
548           Say "y" to link the driver statically, or "m" to build a
549           dynamically linked module called "g_midi".
550
551 config USB_G_PRINTER
552         tristate "Printer Gadget"
553         help
554           The Printer Gadget channels data between the USB host and a
555           userspace program driving the print engine. The user space
556           program reads and writes the device file /dev/g_printer to
557           receive or send printer data. It can use ioctl calls to
558           the device file to get or set printer status.
559
560           Say "y" to link the driver statically, or "m" to build a
561           dynamically linked module called "g_printer".
562
563           For more information, see Documentation/usb/gadget_printer.txt
564           which includes sample code for accessing the device file.
565
566 # put drivers that need isochronous transfer support (for audio
567 # or video class gadget drivers), or specific hardware, here.
568
569 # - none yet
570
571 endchoice
572
573 endmenu