linux/drivers/staging/line6
Markus Grabner 0ca5488806 staging: line6: separate handling of buffer allocation and stream startup
There are several features of the Line6 USB driver which require PCM
data to be exchanged with the device:
*) PCM playback and capture via ALSA
*) software monitoring (for devices without hardware monitoring)
*) optional impulse response measurement
However, from the device's point of view, there is just a single
capture and playback stream, which must be shared between these
subsystems. It is therefore necessary to maintain the state of the
subsystems with respect to PCM usage. We define several constants of
the form LINE6_BIT_PCM_<subsystem>_<direction>_<resource> with the
following meanings:
*) <subsystem> is one of
-) ALSA: PCM playback and capture via ALSA
-) MONITOR: software monitoring
-) IMPULSE: optional impulse response measurement
*) <direction> is one of
-) PLAYBACK: audio output (from host to device)
-) CAPTURE: audio input (from device to host)
*) <resource> is one of
-) BUFFER: buffer required by PCM data stream
-) STREAM: actual PCM data stream

The subsystems call line6_pcm_acquire() to acquire the (shared)
resources needed for a particular operation (e.g., allocate the buffer
for ALSA playback or start the capture stream for software monitoring).
When a resource is no longer needed, it is released by calling
line6_pcm_release(). Buffer allocation and stream startup are handled
separately to allow the ALSA kernel driver to perform them at
appropriate places (since the callback which starts a PCM stream is not
allowed to sleep).

Signed-off-by: Markus Grabner <grabner@icg.tugraz.at>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2012-02-09 09:14:35 -08:00
..
audio.c
audio.h
capture.c staging: line6: separate handling of buffer allocation and stream startup 2012-02-09 09:14:35 -08:00
capture.h staging: line6: separate handling of buffer allocation and stream startup 2012-02-09 09:14:35 -08:00
config.h
control.c
control.h
driver.c staging: line6: separate handling of buffer allocation and stream startup 2012-02-09 09:14:35 -08:00
driver.h staging/line6: refactor device information and add POD HD 500 2011-12-08 12:33:49 -08:00
dumprequest.c
dumprequest.h
Kconfig
Makefile staging: line6: add Pod HD300 support 2011-11-26 16:14:11 -08:00
midi.c staging/line6: refactor device information and add POD HD 500 2011-12-08 12:33:49 -08:00
midi.h Staging: line6/midi.c: Fixed call of obsolete function strict_strtoul 2011-12-08 12:32:55 -08:00
midibuf.c
midibuf.h
pcm.c staging: line6: separate handling of buffer allocation and stream startup 2012-02-09 09:14:35 -08:00
pcm.h staging: line6: separate handling of buffer allocation and stream startup 2012-02-09 09:14:35 -08:00
playback.c staging: line6: separate handling of buffer allocation and stream startup 2012-02-09 09:14:35 -08:00
playback.h staging: line6: separate handling of buffer allocation and stream startup 2012-02-09 09:14:35 -08:00
pod.c staging: line6: eliminate useless NULL checks 2011-12-09 19:26:09 -08:00
pod.h
podhd.c staging: line6: eliminate useless NULL checks 2011-12-09 19:26:09 -08:00
podhd.h staging: line6: add Pod HD300 support 2011-11-26 16:14:11 -08:00
revision.h staging: line6: fixed ALSA/PCM interaction 2011-12-09 19:26:09 -08:00
toneport.c staging: line6: separate handling of buffer allocation and stream startup 2012-02-09 09:14:35 -08:00
toneport.h
usbdefs.h staging: line6: separate handling of buffer allocation and stream startup 2012-02-09 09:14:35 -08:00
variax.c staging: line6: eliminate useless NULL checks 2011-12-09 19:26:09 -08:00
variax.h