V4L/DVB (10519): em28xx: Fix for em28xx audio startup
authorRobert Krakora <rob.krakora@messagenetsystems.com>
Sun, 8 Feb 2009 16:10:39 +0000 (13:10 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Mon, 30 Mar 2009 15:42:44 +0000 (12:42 -0300)
Essentially if a snd_em28xx_capture_trigger() stop followed by a snd_em28xx_capture_trigger() start would not yield any
data because there was some logic put in with an adev->shutdown variable which did not seem warranted in my humble opinion.
It would cause snd_em28xx_capture_trigger start never to start up the audio stream until the device was closed and
reopened again. Upon re-opening the device adev->shutdown is reset and audio data would again flow.

Signed-off-by: Robert Krakora <rob.krakora@messagenetsystems.com>
Signed-off-by: Douglas Schilling Landgraf <dougsland@redhat.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/video/em28xx/em28xx-audio.c
drivers/media/video/em28xx/em28xx.h

index c698d3c9690fc13942e5360074d118ef4e5a439a..52c6657d61cf043cffc13f4970324833f14042f4 100644 (file)
@@ -152,9 +152,6 @@ static void em28xx_audio_isocirq(struct urb *urb)
        }
        urb->status = 0;
 
-       if (dev->adev.shutdown)
-               return;
-
        status = usb_submit_urb(urb, GFP_ATOMIC);
        if (status < 0) {
                em28xx_errdev("resubmit of audio urb failed (error=%i)\n",
@@ -340,13 +337,6 @@ static int snd_em28xx_pcm_close(struct snd_pcm_substream *substream)
        em28xx_audio_analog_set(dev);
        mutex_unlock(&dev->lock);
 
-       if (dev->adev.users == 0 && dev->adev.shutdown == 1) {
-               dprintk("audio users: %d\n", dev->adev.users);
-               dprintk("disabling audio stream!\n");
-               dev->adev.shutdown = 0;
-               dprintk("released lock\n");
-               em28xx_cmd(dev, EM28XX_CAPTURE_STREAM_EN, 0);
-       }
        return 0;
 }
 
@@ -399,7 +389,7 @@ static int snd_em28xx_capture_trigger(struct snd_pcm_substream *substream,
                em28xx_cmd(dev, EM28XX_CAPTURE_STREAM_EN, 1);
                return 0;
        case SNDRV_PCM_TRIGGER_STOP:
-               dev->adev.shutdown = 1;
+               em28xx_cmd(dev, EM28XX_CAPTURE_STREAM_EN, 0);
                return 0;
        default:
                return -EINVAL;
index 3d94afb55b5602d6b17119193b5a336212e41d55..11f0db650261311579c760567849c8ee5aecd0e5 100644 (file)
@@ -423,7 +423,7 @@ struct em28xx_audio {
        unsigned int hwptr_done_capture;
        struct snd_card            *sndcard;
 
-       int users, shutdown;
+       int users;
        enum em28xx_stream_state capture_stream;
        spinlock_t slock;
 };