Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=29998d24ab5ec488cd127488246cc749b0ac52d6
Commit:     29998d24ab5ec488cd127488246cc749b0ac52d6
Parent:     82467611ffc41fba534c95f8b4ae3887a90f5a66
Author:     Clemens Ladisch <[EMAIL PROTECTED]>
AuthorDate: Mon Jul 30 08:14:31 2007 +0200
Committer:  Jaroslav Kysela <[EMAIL PROTECTED]>
CommitDate: Tue Oct 16 15:58:13 2007 +0200

    [ALSA] check for linked substreams of different cards
    
    It is possible to have linked substreams that belong to different cards
    and/or different drivers.  This patch changes some drivers to make sure
    that they do not incorrectly try to handle substreams of a different
    card.
    
    Signed-off-by: Clemens Ladisch <[EMAIL PROTECTED]>
    Signed-off-by: Jaroslav Kysela <[EMAIL PROTECTED]>
---
 sound/pci/ca0106/ca0106_main.c |    3 +++
 sound/pci/emu10k1/p16v.c       |    3 +++
 sound/pci/ice1712/ice1724.c    |   10 ++++++----
 sound/pci/pcxhr/pcxhr.c        |    2 ++
 4 files changed, 14 insertions(+), 4 deletions(-)

diff --git a/sound/pci/ca0106/ca0106_main.c b/sound/pci/ca0106/ca0106_main.c
index 611fc15..c7f79be 100644
--- a/sound/pci/ca0106/ca0106_main.c
+++ b/sound/pci/ca0106/ca0106_main.c
@@ -853,6 +853,9 @@ static int snd_ca0106_pcm_trigger_playback(struct 
snd_pcm_substream *substream,
                break;
        }
         snd_pcm_group_for_each_entry(s, substream) {
+               if (snd_pcm_substream_chip(s) != emu ||
+                   s->stream != SNDRV_PCM_STREAM_PLAYBACK)
+                       continue;
                runtime = s->runtime;
                epcm = runtime->private_data;
                channel = epcm->channel_id;
diff --git a/sound/pci/emu10k1/p16v.c b/sound/pci/emu10k1/p16v.c
index 7ee19c6..6ace107 100644
--- a/sound/pci/emu10k1/p16v.c
+++ b/sound/pci/emu10k1/p16v.c
@@ -448,6 +448,9 @@ static int snd_p16v_pcm_trigger_playback(struct 
snd_pcm_substream *substream,
                break;
        }
         snd_pcm_group_for_each_entry(s, substream) {
+               if (snd_pcm_substream_chip(s) != emu ||
+                   s->stream != SNDRV_PCM_STREAM_PLAYBACK)
+                       continue;
                runtime = s->runtime;
                epcm = runtime->private_data;
                channel = substream->pcm->device-emu->p16v_device_offset;
diff --git a/sound/pci/ice1712/ice1724.c b/sound/pci/ice1712/ice1724.c
index 32560cf..23c9383 100644
--- a/sound/pci/ice1712/ice1724.c
+++ b/sound/pci/ice1712/ice1724.c
@@ -341,10 +341,12 @@ static int snd_vt1724_pcm_trigger(struct 
snd_pcm_substream *substream, int cmd)
 
        what = 0;
        snd_pcm_group_for_each_entry(s, substream) {
-               const struct vt1724_pcm_reg *reg;
-               reg = s->runtime->private_data;
-               what |= reg->start;
-               snd_pcm_trigger_done(s, substream);
+               if (snd_pcm_substream_chip(s) == ice) {
+                       const struct vt1724_pcm_reg *reg;
+                       reg = s->runtime->private_data;
+                       what |= reg->start;
+                       snd_pcm_trigger_done(s, substream);
+               }
        }
 
        switch (cmd) {
diff --git a/sound/pci/pcxhr/pcxhr.c b/sound/pci/pcxhr/pcxhr.c
index f7f6a68..1b787f4 100644
--- a/sound/pci/pcxhr/pcxhr.c
+++ b/sound/pci/pcxhr/pcxhr.c
@@ -646,6 +646,8 @@ static int pcxhr_trigger(struct snd_pcm_substream *subs, 
int cmd)
                if (snd_pcm_stream_linked(subs)) {
                        struct snd_pcxhr *chip = snd_pcm_substream_chip(subs);
                        snd_pcm_group_for_each_entry(s, subs) {
+                               if (snd_pcm_substream_chip(s) != chip)
+                                       continue;
                                stream = s->runtime->private_data;
                                stream->status =
                                        PCXHR_STREAM_STATUS_SCHEDULE_RUN;
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to