usb gadget: composite gadget core
authorDavid Brownell <dbrownell@users.sourceforge.net>
Fri, 20 Jun 2008 00:52:58 +0000 (17:52 -0700)
committerGreg Kroah-Hartman <gregkh@suse.de>
Mon, 21 Jul 2008 22:16:01 +0000 (15:16 -0700)
commit40982be52d8f64c3e10adce17e66ab755a4fa26b
tree15abb3e3e99a5e8043648bf6b8b1214a75a43476
parenta4c39c41bf3592684e36fa0dbbd4ab1a31f969b9
usb gadget: composite gadget core

Add <linux/usb/composite.h> interfaces for composite gadget drivers, and
basic implementation support behind it:

  - struct usb_function ... groups one or more interfaces into a function
    managed as one unit within a configuration, to which it's added by
    usb_add_function().

  - struct usb_configuration ... groups one or more such functions into
    a configuration managed as one unit by a driver, to which it's added
    by usb_add_config().  These operate at either high or full/low speeds
    and at a given bMaxPower.

  - struct usb_composite_driver ... groups one or more such configurations
    into a gadget driver, which may be registered or unregistered.

  - struct usb_composite_dev ... a usb_composite_driver manages this; it
    wraps the usb_gadget exposed by the controller driver.

This also includes some basic kerneldoc.

How to use it (the short version):  provide a usb_composite_driver with a
bind() that calls usb_add_config() for each of the needed configurations.
The configurations in turn have bind() calls, which will usb_add_function()
for each function required.  Each function's bind() allocates resources
needed to perform its tasks, like endpoints; sometimes configurations will
allocate resources too.

Separate patches will convert most gadget drivers to this infrastructure.

Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Documentation/DocBook/gadget.tmpl
drivers/usb/gadget/composite.c [new file with mode: 0644]
include/linux/usb/composite.h [new file with mode: 0644]