From 9228cd9405c70e3b308372fba9d53af88734c244 Mon Sep 17 00:00:00 2001 From: Takashi Iwai Date: Thu, 6 Oct 2011 10:07:58 +0200 Subject: [PATCH] --- yaml --- r: 270387 b: refs/heads/master c: d5cf9911988287e819ce98ccd9f61ca82fbc90c6 h: refs/heads/master i: 270385: 608a48aea3d1920bce30bab747d9779ff1253d12 270383: 687e79cf45cff67984b1f9941672f806f717733d v: v3 --- [refs] | 2 +- trunk/sound/pci/hda/hda_intel.c | 9 ++++++--- 2 files changed, 7 insertions(+), 4 deletions(-) diff --git a/[refs] b/[refs] index e9fe388ea993..052c7e15ca99 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 97999e28c74c5908445735ac282e8b20deb67b81 +refs/heads/master: d5cf9911988287e819ce98ccd9f61ca82fbc90c6 diff --git a/trunk/sound/pci/hda/hda_intel.c b/trunk/sound/pci/hda/hda_intel.c index 8a5dc574b657..90713f0b526c 100644 --- a/trunk/sound/pci/hda/hda_intel.c +++ b/trunk/sound/pci/hda/hda_intel.c @@ -381,7 +381,7 @@ struct azx_dev { */ unsigned char stream_tag; /* assigned stream */ unsigned char index; /* stream index */ - int device; /* last device number assigned to */ + int assigned_key; /* last device# key assigned to */ unsigned int opened :1; unsigned int running :1; @@ -1613,6 +1613,9 @@ azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream) { int dev, i, nums; struct azx_dev *res = NULL; + /* make a non-zero unique key for the substream */ + int key = (substream->pcm->device << 16) | (substream->number << 2) | + (substream->stream + 1); if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { dev = chip->playback_index_offset; @@ -1624,12 +1627,12 @@ azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream) for (i = 0; i < nums; i++, dev++) if (!chip->azx_dev[dev].opened) { res = &chip->azx_dev[dev]; - if (res->device == substream->pcm->device) + if (res->assigned_key == key) break; } if (res) { res->opened = 1; - res->device = substream->pcm->device; + res->assigned_key = key; } return res; }