Commit 0191a2a2 authored by Frank Schaefer's avatar Frank Schaefer Committed by Mauro Carvalho Chehab

[media] em28xx: fix check for audio only usb interfaces when changing the usb alternate setting

Previously, we've been assuming that the video endpoints are always at usb
interface 0. Hence, if vendor audio endpoints are provided at a separate
interface, they were supposed to be at interface number > 0.
Instead of checking for (interface number > 0) to determine if an interface
is a pure audio interface, dev->is_audio_only should be checked.
Signed-off-by: default avatarFrank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: default avatarMauro Carvalho Chehab <m.chehab@samsung.com>
parent 961717b4
......@@ -266,7 +266,7 @@ static int snd_em28xx_capture_open(struct snd_pcm_substream *substream)
dprintk("opening device and trying to acquire exclusive lock\n");
runtime->hw = snd_em28xx_hw_capture;
if ((dev->alt == 0 || dev->ifnum) && dev->adev.users == 0) {
if ((dev->alt == 0 || dev->is_audio_only) && dev->adev.users == 0) {
int nonblock = !!(substream->f_flags & O_NONBLOCK);
if (nonblock) {
......@@ -274,10 +274,21 @@ static int snd_em28xx_capture_open(struct snd_pcm_substream *substream)
return -EAGAIN;
} else
mutex_lock(&dev->lock);
if (dev->ifnum)
if (dev->is_audio_only)
/* vendor audio is on a separate interface */
dev->alt = 1;
else
/* vendor audio is on the same interface as video */
dev->alt = 7;
/*
* FIXME: The intention seems to be to select the alt
* setting with the largest wMaxPacketSize for the video
* endpoint.
* At least dev->alt should be used instead, but we
* should probably not touch it at all if it is
* already >0, because wMaxPacketSize of the audio
* endpoints seems to be the same for all.
*/
dprintk("changing alternate number on interface %d to %d\n",
dev->ifnum, dev->alt);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment