OSDN Git Service

ALSA: aaci: Use managed buffer allocation
authorTakashi Iwai <tiwai@suse.de>
Mon, 9 Dec 2019 09:48:34 +0000 (10:48 +0100)
committerTakashi Iwai <tiwai@suse.de>
Wed, 11 Dec 2019 06:24:56 +0000 (07:24 +0100)
Clean up the driver with the new managed buffer allocation API.
The superfluous snd_pcm_lib_malloc_pages() and
snd_pcm_lib_free_pages() calls are dropped, and the if block is
flattened accordingly.

Link: https://lore.kernel.org/r/20191209094943.14984-3-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/arm/aaci.c

index b5399b0..1e9ea0f 100644 (file)
@@ -483,11 +483,6 @@ static int aaci_pcm_hw_free(struct snd_pcm_substream *substream)
                snd_ac97_pcm_close(aacirun->pcm);
        aacirun->pcm_open = 0;
 
-       /*
-        * Clear out the DMA and any allocated buffers.
-        */
-       snd_pcm_lib_free_pages(substream);
-
        return 0;
 }
 
@@ -502,6 +497,7 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream,
                              struct snd_pcm_hw_params *params)
 {
        struct aaci_runtime *aacirun = substream->runtime->private_data;
+       struct aaci *aaci = substream->private_data;
        unsigned int channels = params_channels(params);
        unsigned int rate = params_rate(params);
        int dbl = rate > 48000;
@@ -517,25 +513,19 @@ static int aaci_pcm_hw_params(struct snd_pcm_substream *substream,
        if (dbl && channels != 2)
                return -EINVAL;
 
-       err = snd_pcm_lib_malloc_pages(substream,
-                                      params_buffer_bytes(params));
-       if (err >= 0) {
-               struct aaci *aaci = substream->private_data;
+       err = snd_ac97_pcm_open(aacirun->pcm, rate, channels,
+                               aacirun->pcm->r[dbl].slots);
 
-               err = snd_ac97_pcm_open(aacirun->pcm, rate, channels,
-                                       aacirun->pcm->r[dbl].slots);
+       aacirun->pcm_open = err == 0;
+       aacirun->cr = CR_FEN | CR_COMPACT | CR_SZ16;
+       aacirun->cr |= channels_to_slotmask[channels + dbl * 2];
 
-               aacirun->pcm_open = err == 0;
-               aacirun->cr = CR_FEN | CR_COMPACT | CR_SZ16;
-               aacirun->cr |= channels_to_slotmask[channels + dbl * 2];
-
-               /*
-                * fifo_bytes is the number of bytes we transfer to/from
-                * the FIFO, including padding.  So that's x4.  As we're
-                * in compact mode, the FIFO is half the size.
-                */
-               aacirun->fifo_bytes = aaci->fifo_depth * 4 / 2;
-       }
+       /*
+        * fifo_bytes is the number of bytes we transfer to/from
+        * the FIFO, including padding.  So that's x4.  As we're
+        * in compact mode, the FIFO is half the size.
+        */
+       aacirun->fifo_bytes = aaci->fifo_depth * 4 / 2;
 
        return err;
 }
@@ -937,9 +927,9 @@ static int aaci_init_pcm(struct aaci *aaci)
 
                snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_PLAYBACK, &aaci_playback_ops);
                snd_pcm_set_ops(pcm, SNDRV_PCM_STREAM_CAPTURE, &aaci_capture_ops);
-               snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV,
-                                                     aaci->card->dev,
-                                                     0, 64 * 1024);
+               snd_pcm_set_managed_buffer_all(pcm, SNDRV_DMA_TYPE_DEV,
+                                              aaci->card->dev,
+                                              0, 64 * 1024);
        }
 
        return ret;