diff options
Diffstat (limited to 'sound/pci/ctxfi/ctpcm.c')
-rw-r--r-- | sound/pci/ctxfi/ctpcm.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/sound/pci/ctxfi/ctpcm.c b/sound/pci/ctxfi/ctpcm.c index 870fa170f046..9e5c0c4da726 100644 --- a/sound/pci/ctxfi/ctpcm.c +++ b/sound/pci/ctxfi/ctpcm.c | |||
@@ -176,12 +176,26 @@ static int ct_pcm_playback_close(struct snd_pcm_substream *substream) | |||
176 | static int ct_pcm_hw_params(struct snd_pcm_substream *substream, | 176 | static int ct_pcm_hw_params(struct snd_pcm_substream *substream, |
177 | struct snd_pcm_hw_params *hw_params) | 177 | struct snd_pcm_hw_params *hw_params) |
178 | { | 178 | { |
179 | return snd_pcm_lib_malloc_pages(substream, | 179 | struct ct_atc *atc = snd_pcm_substream_chip(substream); |
180 | struct ct_atc_pcm *apcm = substream->runtime->private_data; | ||
181 | int err; | ||
182 | |||
183 | err = snd_pcm_lib_malloc_pages(substream, | ||
180 | params_buffer_bytes(hw_params)); | 184 | params_buffer_bytes(hw_params)); |
185 | if (err < 0) | ||
186 | return err; | ||
187 | /* clear previous resources */ | ||
188 | atc->pcm_release_resources(atc, apcm); | ||
189 | return err; | ||
181 | } | 190 | } |
182 | 191 | ||
183 | static int ct_pcm_hw_free(struct snd_pcm_substream *substream) | 192 | static int ct_pcm_hw_free(struct snd_pcm_substream *substream) |
184 | { | 193 | { |
194 | struct ct_atc *atc = snd_pcm_substream_chip(substream); | ||
195 | struct ct_atc_pcm *apcm = substream->runtime->private_data; | ||
196 | |||
197 | /* clear previous resources */ | ||
198 | atc->pcm_release_resources(atc, apcm); | ||
185 | /* Free snd-allocated pages */ | 199 | /* Free snd-allocated pages */ |
186 | return snd_pcm_lib_free_pages(substream); | 200 | return snd_pcm_lib_free_pages(substream); |
187 | } | 201 | } |