[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: Frank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
This commit is contained in:
Frank Schaefer 2014-01-13 19:02:07 -03:00 коммит произвёл Mauro Carvalho Chehab
Родитель 961717b41b
Коммит 0191a2a28c
1 изменённых файлов: 13 добавлений и 2 удалений

Просмотреть файл

@ -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);