[ALSA] pcxhr - Minor optimization in trigger callback
authorTakashi Iwai <tiwai@suse.de>
Wed, 28 Mar 2007 15:19:29 +0000 (17:19 +0200)
committerJaroslav Kysela <perex@suse.cz>
Fri, 11 May 2007 14:55:54 +0000 (16:55 +0200)
Minor optimization in trigger start callback.  This fixes a nasty
compile warning, too.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Jaroslav Kysela <perex@suse.cz>
sound/pci/pcxhr/pcxhr.c

index e1bdeed3a46579b9df852e66c0b69e91ca885876..f7f6a687f033d16dab9b8d0b4534f79ba68e7832 100644 (file)
@@ -639,19 +639,21 @@ static int pcxhr_trigger(struct snd_pcm_substream *subs, int cmd)
 {
        struct pcxhr_stream *stream;
        struct snd_pcm_substream *s;
-       int i;
 
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_START:
                snd_printdd("SNDRV_PCM_TRIGGER_START\n");
-               i = 0;
-               snd_pcm_group_for_each_entry(s, subs) {
-                       stream = s->runtime->private_data;
-                       stream->status = PCXHR_STREAM_STATUS_SCHEDULE_RUN;
-                       snd_pcm_trigger_done(s, subs);
-                       i++;
-               }
-               if (i==1) {
+               if (snd_pcm_stream_linked(subs)) {
+                       struct snd_pcxhr *chip = snd_pcm_substream_chip(subs);
+                       snd_pcm_group_for_each_entry(s, subs) {
+                               stream = s->runtime->private_data;
+                               stream->status =
+                                       PCXHR_STREAM_STATUS_SCHEDULE_RUN;
+                               snd_pcm_trigger_done(s, subs);
+                       }
+                       tasklet_hi_schedule(&chip->mgr->trigger_taskq);
+               } else {
+                       stream = subs->runtime->private_data;
                        snd_printdd("Only one Substream %c %d\n",
                                    stream->pipe->is_capture ? 'C' : 'P',
                                    stream->pipe->first_audio);
@@ -663,9 +665,6 @@ static int pcxhr_trigger(struct snd_pcm_substream *subs, int cmd)
                        if (pcxhr_set_stream_state(stream))
                                return -EINVAL;
                        stream->status = PCXHR_STREAM_STATUS_RUNNING;
-               } else {
-                       struct snd_pcxhr *chip = snd_pcm_substream_chip(subs);
-                       tasklet_hi_schedule(&chip->mgr->trigger_taskq);
                }
                break;
        case SNDRV_PCM_TRIGGER_STOP: