ALSA: gus: Use managed buffer allocation
Clean up the driver with the new managed buffer allocation API. The hw_free callback became superfluous and got dropped. Link: https://lore.kernel.org/r/20191209094943.14984-16-tiwai@suse.de Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
07ed72ba4d
commit
a57214e548
|
@ -423,11 +423,8 @@ static int snd_gf1_pcm_playback_hw_params(struct snd_pcm_substream *substream,
|
||||||
struct snd_gus_card *gus = snd_pcm_substream_chip(substream);
|
struct snd_gus_card *gus = snd_pcm_substream_chip(substream);
|
||||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||||
struct gus_pcm_private *pcmp = runtime->private_data;
|
struct gus_pcm_private *pcmp = runtime->private_data;
|
||||||
int err;
|
|
||||||
|
if (runtime->buffer_changed) {
|
||||||
if ((err = snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params))) < 0)
|
|
||||||
return err;
|
|
||||||
if (err > 0) { /* change */
|
|
||||||
struct snd_gf1_mem_block *block;
|
struct snd_gf1_mem_block *block;
|
||||||
if (pcmp->memory > 0) {
|
if (pcmp->memory > 0) {
|
||||||
snd_gf1_mem_free(&gus->gf1.mem_alloc, pcmp->memory);
|
snd_gf1_mem_free(&gus->gf1.mem_alloc, pcmp->memory);
|
||||||
|
@ -471,7 +468,6 @@ static int snd_gf1_pcm_playback_hw_free(struct snd_pcm_substream *substream)
|
||||||
struct snd_pcm_runtime *runtime = substream->runtime;
|
struct snd_pcm_runtime *runtime = substream->runtime;
|
||||||
struct gus_pcm_private *pcmp = runtime->private_data;
|
struct gus_pcm_private *pcmp = runtime->private_data;
|
||||||
|
|
||||||
snd_pcm_lib_free_pages(substream);
|
|
||||||
if (pcmp->pvoices[0]) {
|
if (pcmp->pvoices[0]) {
|
||||||
snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[0]);
|
snd_gf1_free_voice(pcmp->gus, pcmp->pvoices[0]);
|
||||||
pcmp->pvoices[0] = NULL;
|
pcmp->pvoices[0] = NULL;
|
||||||
|
@ -574,12 +570,7 @@ static int snd_gf1_pcm_capture_hw_params(struct snd_pcm_substream *substream,
|
||||||
gus->gf1.pcm_rcntrl_reg |= 4;
|
gus->gf1.pcm_rcntrl_reg |= 4;
|
||||||
if (snd_pcm_format_unsigned(params_format(hw_params)))
|
if (snd_pcm_format_unsigned(params_format(hw_params)))
|
||||||
gus->gf1.pcm_rcntrl_reg |= 0x80;
|
gus->gf1.pcm_rcntrl_reg |= 0x80;
|
||||||
return snd_pcm_lib_malloc_pages(substream, params_buffer_bytes(hw_params));
|
return 0;
|
||||||
}
|
|
||||||
|
|
||||||
static int snd_gf1_pcm_capture_hw_free(struct snd_pcm_substream *substream)
|
|
||||||
{
|
|
||||||
return snd_pcm_lib_free_pages(substream);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int snd_gf1_pcm_capture_prepare(struct snd_pcm_substream *substream)
|
static int snd_gf1_pcm_capture_prepare(struct snd_pcm_substream *substream)
|
||||||
|
@ -846,7 +837,6 @@ static const struct snd_pcm_ops snd_gf1_pcm_capture_ops = {
|
||||||
.close = snd_gf1_pcm_capture_close,
|
.close = snd_gf1_pcm_capture_close,
|
||||||
.ioctl = snd_pcm_lib_ioctl,
|
.ioctl = snd_pcm_lib_ioctl,
|
||||||
.hw_params = snd_gf1_pcm_capture_hw_params,
|
.hw_params = snd_gf1_pcm_capture_hw_params,
|
||||||
.hw_free = snd_gf1_pcm_capture_hw_free,
|
|
||||||
.prepare = snd_gf1_pcm_capture_prepare,
|
.prepare = snd_gf1_pcm_capture_prepare,
|
||||||
.trigger = snd_gf1_pcm_capture_trigger,
|
.trigger = snd_gf1_pcm_capture_trigger,
|
||||||
.pointer = snd_gf1_pcm_capture_pointer,
|
.pointer = snd_gf1_pcm_capture_pointer,
|
||||||
|
@ -875,9 +865,9 @@ int snd_gf1_pcm_new(struct snd_gus_card *gus, int pcm_dev, int control_index)
|
||||||
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_gf1_pcm_playback_ops);
|
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &snd_gf1_pcm_playback_ops);
|
||||||
|
|
||||||
for (substream = pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream; substream; substream = substream->next)
|
for (substream = pcm->streams[SNDRV_PCM_STREAM_PLAYBACK].substream; substream; substream = substream->next)
|
||||||
snd_pcm_lib_preallocate_pages(substream, SNDRV_DMA_TYPE_DEV,
|
snd_pcm_set_managed_buffer(substream, SNDRV_DMA_TYPE_DEV,
|
||||||
card->dev,
|
card->dev,
|
||||||
64*1024, gus->gf1.dma1 > 3 ? 128*1024 : 64*1024);
|
64*1024, gus->gf1.dma1 > 3 ? 128*1024 : 64*1024);
|
||||||
|
|
||||||
pcm->info_flags = 0;
|
pcm->info_flags = 0;
|
||||||
pcm->dev_subclass = SNDRV_PCM_SUBCLASS_GENERIC_MIX;
|
pcm->dev_subclass = SNDRV_PCM_SUBCLASS_GENERIC_MIX;
|
||||||
|
@ -885,9 +875,9 @@ int snd_gf1_pcm_new(struct snd_gus_card *gus, int pcm_dev, int control_index)
|
||||||
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_gf1_pcm_capture_ops);
|
snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &snd_gf1_pcm_capture_ops);
|
||||||
if (gus->gf1.dma2 == gus->gf1.dma1)
|
if (gus->gf1.dma2 == gus->gf1.dma1)
|
||||||
pcm->info_flags |= SNDRV_PCM_INFO_HALF_DUPLEX;
|
pcm->info_flags |= SNDRV_PCM_INFO_HALF_DUPLEX;
|
||||||
snd_pcm_lib_preallocate_pages(pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream,
|
snd_pcm_set_managed_buffer(pcm->streams[SNDRV_PCM_STREAM_CAPTURE].substream,
|
||||||
SNDRV_DMA_TYPE_DEV, card->dev,
|
SNDRV_DMA_TYPE_DEV, card->dev,
|
||||||
64*1024, gus->gf1.dma2 > 3 ? 128*1024 : 64*1024);
|
64*1024, gus->gf1.dma2 > 3 ? 128*1024 : 64*1024);
|
||||||
}
|
}
|
||||||
strcpy(pcm->name, pcm->id);
|
strcpy(pcm->name, pcm->id);
|
||||||
if (gus->interwave) {
|
if (gus->interwave) {
|
||||||
|
|
Loading…
Reference in New Issue