ALSA: usb-audio: sync ep init fix for audioformat mismatch
authorEldad Zack <eldad@fogrefinery.com>
Mon, 3 Dec 2012 19:30:09 +0000 (20:30 +0100)
committerTakashi Iwai <tiwai@suse.de>
Tue, 4 Dec 2012 07:14:31 +0000 (08:14 +0100)
commit0d9741c0e058e2857fe3fed37975515dc8dcd21d
treec4a399e00c0132e82c0d95b9537d27738a4241c3
parentf5f165418cabf2218eb466c0e94693b8b1aee88b
ALSA: usb-audio: sync ep init fix for audioformat mismatch

Commit 947d299686aa9cc8aecf749d54e8475c6e498956 , "ALSA: snd-usb:
properly initialize the sync endpoint", while correcting the
initialization of the sync endpoint when opening just the data
endpoint, prevents devices that has a sync endpoint, with a channel
number different than that of the data endpoint, from functioning.
Due to a different channel and period bytes count, attempting to
initialize the sync endpoint will fail at the usb host driver.
For example, when using xhci:

 cannot submit urb 0, error -90: internal error

With this patch, if a sync endpoint has multiple audioformats, a
matching audioformat is preferred. An audioformat must be found
with at least one channel and support the requested sample rate
and PCM format, otherwise the stream will not be opened.

If the number of channels differ between the selected audioformat
and the requested format, adjust the period bytes count accordingly.
It is safe to perform the calculation on the basis of the channel
count, since the requested PCM audio format and the rate must be
supported by the selected audioformat.

Cc: Jeffrey Barish <jeff_barish@earthlink.net>
Cc: Daniel Mack <zonque@gmail.com>
Signed-off-by: Eldad Zack <eldad@fogrefinery.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/usb/pcm.c