summaryrefslogtreecommitdiff
path: root/sound/pci/ctxfi
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-06-02 14:12:17 +0200
committerTakashi Iwai <tiwai@suse.de>2009-06-02 15:54:46 +0200
commit822fa19b5c23746577687a0ec48eae0ec1cd22a0 (patch)
tree62c40ba1705313a09649f954aef5b8a1da100560 /sound/pci/ctxfi
parent8a4259bf89d23bfd58d87e275ef6da29cea6b3c5 (diff)
ALSA: ALSA: ctxfi - Release PCM resources at each prepare call
The prepare callback can be called multiple times, thus it needs to release and acquire the resource again by itself at the second or later call. Simply add pcm_release_resources() at the beginning of each prepare callback in ctatc.c. Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/ctxfi')
-rw-r--r--sound/pci/ctxfi/ctatc.c9
1 files changed, 9 insertions, 0 deletions
diff --git a/sound/pci/ctxfi/ctatc.c b/sound/pci/ctxfi/ctatc.c
index 1a4bb357eaef..e14ed714721b 100644
--- a/sound/pci/ctxfi/ctatc.c
+++ b/sound/pci/ctxfi/ctatc.c
@@ -254,6 +254,9 @@ static int atc_pcm_playback_prepare(struct ct_atc *atc, struct ct_atc_pcm *apcm)
return 0;
}
+ /* first release old resources */
+ atc->pcm_release_resources(atc, apcm);
+
/* Get SRC resource */
desc.multi = apcm->substream->runtime->channels;
desc.msr = atc->msr;
@@ -496,6 +499,9 @@ atc_pcm_capture_get_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm)
int n_srcimp = 0, n_amixer = 0, n_srcc = 0, n_sum = 0;
struct src_node_conf_t src_node_conf[2] = {{0} };
+ /* first release old resources */
+ atc->pcm_release_resources(atc, apcm);
+
/* The numbers of converting SRCs and SRCIMPs should be determined
* by pitch value. */
@@ -767,6 +773,9 @@ static int spdif_passthru_playback_get_resources(struct ct_atc *atc,
int n_amixer = apcm->substream->runtime->channels, i = 0;
unsigned int pitch = 0, rsr = atc->pll_rate;
+ /* first release old resources */
+ atc->pcm_release_resources(atc, apcm);
+
/* Get SRC resource */
desc.multi = apcm->substream->runtime->channels;
desc.msr = 1;