• David Brownell's avatar
    usb gadget: composite gadget core · 40982be5
    David Brownell authored
    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: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    40982be5
composite.c 27.4 KB