ALSA: snd-usb: implement new endpoint streaming model
authorDaniel Mack <zonque@gmail.com>
Thu, 12 Apr 2012 11:51:11 +0000 (13:51 +0200)
committerTakashi Iwai <tiwai@suse.de>
Fri, 13 Apr 2012 08:23:42 +0000 (10:23 +0200)
commit8fdff6a319e7dac757c558bd283dc4577e68cde7
tree7f6858f46ac95f771776148af228a0db98dbde38
parent596580d0ee1d17af70920a7bb06c963418014dd1
ALSA: snd-usb: implement new endpoint streaming model

This patch adds a new generic streaming logic for audio over USB.

It defines a model (snd_usb_endpoint) that handles everything that
is related to an USB endpoint and its streaming. There are functions to
activate and deactivate an endpoint (which call usb_set_interface()),
and to start and stop its URBs. It also has function pointers to be
called when data was received or is about to be sent, and pointer to
a sync slave (another snd_usb_endpoint) that is informed when data has
been received.

A snd_usb_endpoint knows about its state and implements a refcounting,
so only the first user will actually start the URBs and only the last
one to stop it will tear them down again.

With this sort of abstraction, the actual streaming is decoupled from
the pcm handling, which makes the "implicit feedback" mechanisms easy to
implement.

In order to split changes properly, this patch only adds the new
implementation but leaves the old one around, so the the driver doesn't
change its behaviour. The switch to actually use the new code is
submitted separately.

Signed-off-by: Daniel Mack <zonque@gmail.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/card.h
sound/usb/endpoint.c
sound/usb/endpoint.h
sound/usb/usbaudio.h