ALSA: ALSA: ctxfi - Release PCM resources at each prepare call
authorTakashi Iwai <tiwai@suse.de>
Tue, 2 Jun 2009 12:12:17 +0000 (14:12 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 2 Jun 2009 13:54:46 +0000 (15:54 +0200)
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>
sound/pci/ctxfi/ctatc.c

index 1a4bb357eaef6c3884d5cb01c0e298c4c347e788..e14ed714721b422fb80e25aa2ca1e1fb14e7091e 100644 (file)
@@ -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;