if SND_HDA_INTEL
 
+config SND_HDA_PREALLOC_SIZE
+       int "Pre-allocated buffer size for HD-audio driver"
+       range 0 32768
+       default 64
+       help
+         Speficies the default pre-allocated buffer-size in kB for
+         HD-audio driver.  A larger buffer (e.g. 2048) is preferred
+         for systems with PulseAudio.  The default 64 is chosen just
+         from the compatibility reason.
+
+         Note that the pre-allocation size can be changed dynamically
+         via a proc file (/proc/asound/card*/pcm*/sub*/prealloc), too.
+
 config SND_HDA_HWDEP
        bool "Build hwdep interface for HD-audio driver"
        select SND_HWDEP
 
        }
 }
 
+#define MAX_PREALLOC_SIZE      (32 * 1024 * 1024)
+
 static int
 azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
                      struct hda_pcm *cpcm)
        struct snd_pcm *pcm;
        struct azx_pcm *apcm;
        int pcm_dev = cpcm->device;
+       unsigned int size;
        int s, err;
 
        if (pcm_dev >= HDA_MAX_PCMS) {
                        snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
        }
        /* buffer pre-allocation */
+       size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
+       if (size > MAX_PREALLOC_SIZE)
+               size = MAX_PREALLOC_SIZE;
        snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
                                              snd_dma_pci_data(chip->pci),
-                                             1024 * 64, 32 * 1024 * 1024);
+                                             size, MAX_PREALLOC_SIZE);
        return 0;
 }