UBUNTU: SAUCE: Increase the default prealloc buffer for HDA audio devices (non-modem)
authorBrad Figg <brad.figg@canonical.com>
Mon, 7 Dec 2009 20:24:47 +0000 (12:24 -0800)
committerLeann Ogasawara <leann.ogasawara@canonical.com>
Mon, 28 Mar 2011 13:48:24 +0000 (06:48 -0700)
This allows for buffering of up to 4 seconds of audio. This is
intended to improve the audio experience. This patch is being
carried by Fedora but is not upstream.

Signed-off-by: Brad Figg <brad.figg@canonical.com>
Signed-off-by: Andy Whitcroft <apw@canonical.com>

sound/pci/hda/hda_intel.c

index fcedad9..b25fa8a 100644 (file)
@@ -2021,6 +2021,7 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
        struct azx_pcm *apcm;
        int pcm_dev = cpcm->device;
        int s, err;
+       size_t prealloc_min = 64*1024;  /* 64KB */
 
        if (pcm_dev >= HDA_MAX_PCMS) {
                snd_printk(KERN_ERR SFX "Invalid PCM device number %d\n",
@@ -2054,10 +2055,21 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
                if (cpcm->stream[s].substreams)
                        snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
        }
+
        /* buffer pre-allocation */
+
+       /* subtle, don't allocate a big buffer for modems...
+        * also, don't just test 32BIT_MASK, since azx supports
+        * 64-bit DMA in some cases.
+        */
+       /* lennart wants a 2.2MB buffer for 2sec of 48khz */
+       if (pcm->dev_class == SNDRV_PCM_CLASS_GENERIC &&
+           chip->pci->dma_mask >= DMA_32BIT_MASK)
+               prealloc_min = 4 * 1024 * 1024; /* 4MB */
+
        snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
                                              snd_dma_pci_data(chip->pci),
-                                             1024 * 64, 32 * 1024 * 1024);
+                                             prealloc_min, 32 * 1024 * 1024);
        return 0;
 }