aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/ctxfi/ctatc.c
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2009-06-02 08:12:17 -0400
committerTakashi Iwai <tiwai@suse.de>2009-06-02 09:54:46 -0400
commit822fa19b5c23746577687a0ec48eae0ec1cd22a0 (patch)
tree62c40ba1705313a09649f954aef5b8a1da100560 /sound/pci/ctxfi/ctatc.c
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/ctatc.c')
-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)
254 return 0; 254 return 0;
255 } 255 }
256 256
257 /* first release old resources */
258 atc->pcm_release_resources(atc, apcm);
259
257 /* Get SRC resource */ 260 /* Get SRC resource */
258 desc.multi = apcm->substream->runtime->channels; 261 desc.multi = apcm->substream->runtime->channels;
259 desc.msr = atc->msr; 262 desc.msr = atc->msr;
@@ -496,6 +499,9 @@ atc_pcm_capture_get_resources(struct ct_atc *atc, struct ct_atc_pcm *apcm)
496 int n_srcimp = 0, n_amixer = 0, n_srcc = 0, n_sum = 0; 499 int n_srcimp = 0, n_amixer = 0, n_srcc = 0, n_sum = 0;
497 struct src_node_conf_t src_node_conf[2] = {{0} }; 500 struct src_node_conf_t src_node_conf[2] = {{0} };
498 501
502 /* first release old resources */
503 atc->pcm_release_resources(atc, apcm);
504
499 /* The numbers of converting SRCs and SRCIMPs should be determined 505 /* The numbers of converting SRCs and SRCIMPs should be determined
500 * by pitch value. */ 506 * by pitch value. */
501 507
@@ -767,6 +773,9 @@ static int spdif_passthru_playback_get_resources(struct ct_atc *atc,
767 int n_amixer = apcm->substream->runtime->channels, i = 0; 773 int n_amixer = apcm->substream->runtime->channels, i = 0;
768 unsigned int pitch = 0, rsr = atc->pll_rate; 774 unsigned int pitch = 0, rsr = atc->pll_rate;
769 775
776 /* first release old resources */
777 atc->pcm_release_resources(atc, apcm);
778
770 /* Get SRC resource */ 779 /* Get SRC resource */
771 desc.multi = apcm->substream->runtime->channels; 780 desc.multi = apcm->substream->runtime->channels;
772 desc.msr = 1; 781 desc.msr = 1;