}
 }
 
-static int snd_solo_hw_params(struct snd_pcm_substream *ss,
-                             struct snd_pcm_hw_params *hw_params)
-{
-       return snd_pcm_lib_malloc_pages(ss, params_buffer_bytes(hw_params));
-}
-
-static int snd_solo_hw_free(struct snd_pcm_substream *ss)
-{
-       return snd_pcm_lib_free_pages(ss);
-}
-
 static const struct snd_pcm_hardware snd_solo_pcm_hw = {
        .info                   = (SNDRV_PCM_INFO_MMAP |
                                   SNDRV_PCM_INFO_INTERLEAVED |
        .open = snd_solo_pcm_open,
        .close = snd_solo_pcm_close,
        .ioctl = snd_pcm_lib_ioctl,
-       .hw_params = snd_solo_hw_params,
-       .hw_free = snd_solo_hw_free,
        .prepare = snd_solo_pcm_prepare,
        .trigger = snd_solo_pcm_trigger,
        .pointer = snd_solo_pcm_pointer,
             ss; ss = ss->next, i++)
                sprintf(ss->name, "Camera #%d Audio", i);
 
-       snd_pcm_lib_preallocate_pages_for_all(pcm,
-                                       SNDRV_DMA_TYPE_CONTINUOUS,
-                                       NULL,
-                                       G723_PERIOD_BYTES * PERIODS,
-                                       G723_PERIOD_BYTES * PERIODS);
+       snd_pcm_set_managed_buffer_all(pcm,
+                                      SNDRV_DMA_TYPE_CONTINUOUS,
+                                      NULL,
+                                      G723_PERIOD_BYTES * PERIODS,
+                                      G723_PERIOD_BYTES * PERIODS);
 
        solo_dev->snd_pcm = pcm;