ALSA: x86: Allow no-period-wakeup setup
authorTakashi Iwai <tiwai@suse.de>
Tue, 7 Feb 2017 07:09:12 +0000 (08:09 +0100)
committerTakashi Iwai <tiwai@suse.de>
Fri, 10 Feb 2017 09:21:44 +0000 (10:21 +0100)
In the current implementation, the driver may update the BDs even at
PCM pointer callback.  This allows us to skip the period interrupt
effectively.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/x86/intel_hdmi_audio.c

index d2136498defe02601fc2556ab4b99fa840583fe9..80b1ab9b1c57b4ff5745630612d19d2893e1f1ce 100644 (file)
@@ -133,7 +133,8 @@ static const struct channel_map_table map_tables[] = {
 static const struct snd_pcm_hardware had_pcm_hardware = {
        .info = (SNDRV_PCM_INFO_INTERLEAVED |
                SNDRV_PCM_INFO_MMAP |
-               SNDRV_PCM_INFO_MMAP_VALID),
+               SNDRV_PCM_INFO_MMAP_VALID |
+               SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
        .formats = SNDRV_PCM_FMTBIT_S24,
        .rates = SNDRV_PCM_RATE_32000 |
                SNDRV_PCM_RATE_44100 |
@@ -840,7 +841,9 @@ static void had_prog_bd(struct snd_pcm_substream *substream,
        int ofs = intelhaddata->pcmbuf_filled * intelhaddata->period_bytes;
        u32 addr = substream->runtime->dma_addr + ofs;
 
-       addr |= AUD_BUF_VALID | AUD_BUF_INTR_EN;
+       addr |= AUD_BUF_VALID;
+       if (!substream->runtime->no_period_wakeup)
+               addr |= AUD_BUF_INTR_EN;
        had_write_register(intelhaddata, AUD_BUF_ADDR(idx), addr);
        had_write_register(intelhaddata, AUD_BUF_LEN(idx),
                           intelhaddata->period_bytes);