• Takashi Iwai's avatar
    usb: gadget: Add support for USB MIDI 2.0 function driver · 8b645922
    Takashi Iwai authored
    This patch adds the support for USB MIDI 2.0 gadget function driver.
    The driver emulates a USB MIDI 2.0 interface with one or more UMP
    Endpoints, where each of UMP Endpoint is a pair of MIDI Endpoints for
    handling MIDI 2.0 UMP packets.  When the function driver is bound, the
    driver creates an ALSA card object with UMP rawmidi devices.  This is
    a kind of loop-back where the incoming and upcoming UMP packets
    from/to the MIDI 2.0 UMP Endpoints are transferred as-is.  In
    addition, legacy (MIDI 1.0) rawmidi devices are created, so that
    legacy applications can work in the gadget side, too.
    
    When a USB MIDI 2.0 gadget interface appears, the connected host can
    use it with the snd-usb-audio driver where MIDI 2.0 support is
    enabled.  Both gadget and connected hosts will have the similar UMP
    Endpoint and Function Block (or Group Terminal Block) information.
    Slight differences are the direction and UI-hint bits; it's due to the
    nature of gadget driver, and the input/output direction is swapped in
    both sides (the input for gadget is the output for host, and vice
    versa).
    
    The driver supports the brand-new UMP v1.1 feature, including the UMP
    Stream message handling for providing UMP Endpoint and Function Block
    information as well as dealing with the MIDI protocol switch.  The
    driver responds to UMP Stream messages by itself.  OTOH, MIDI-CI
    message handling isn't implemented in the kernel driver; it should be
    processed in the user-space through the loopback UMP device.
    
    As of this patch, the whole configuration is fixed, providing only one
    bidirectional UMP Endpoint containing a single FB/GTB with a single
    UMP Group.  The configuration will be dynamically changeable in the
    following patches.
    
    The traditional MIDI 1.0 is still provided in the altset 0 (which is
    mandatory per spec).  But it's only about the configuration, and no
    actual I/O will be running for the altset 0 as of this patch.  The
    proper support MIDI 1.0 altset will follow in later patches, too.
    Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
    Link: https://lore.kernel.org/r/20230725062206.9674-2-tiwai@suse.deSigned-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
    8b645922
Makefile 1.89 KB