[media] em28xx-audio: make sure audio is unmuted on open()
authorFrank Schaefer <fschaefer.oss@googlemail.com>
Fri, 17 Jan 2014 17:18:43 +0000 (14:18 -0300)
committerMauro Carvalho Chehab <m.chehab@samsung.com>
Fri, 14 Mar 2014 13:17:18 +0000 (10:17 -0300)
In all cases, when the first capture is called, we need to
call the code that unmutes the volume.

Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
Signed-off-by: Mauro Carvalho Chehab <m.chehab@samsung.com>
drivers/media/usb/em28xx/em28xx-audio.c

index f75c0a5494d6ff50347c84eb2f90c6ab9f373e4e..c1937ea1fca3cc3b6957fca08e865c6e8bf95808 100644 (file)
@@ -273,26 +273,28 @@ static int snd_em28xx_capture_open(struct snd_pcm_substream *substream)
                mutex_lock(&dev->lock);
 
        runtime->hw = snd_em28xx_hw_capture;
-       if ((dev->alt == 0 || dev->is_audio_only) && dev->adev.users == 0) {
-               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);
-               usb_set_interface(dev->udev, dev->ifnum, dev->alt);
+
+       if (dev->adev.users == 0) {
+               if (dev->alt == 0 || dev->is_audio_only) {
+                       if (dev->is_audio_only)
+                               /* audio is on a separate interface */
+                               dev->alt = 1;
+                       else
+                               /* 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);
+                       usb_set_interface(dev->udev, dev->ifnum, dev->alt);
+               }
 
                /* Sets volume, mute, etc */
                dev->mute = 0;