Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87246f7f authored by Takashi Iwai's avatar Takashi Iwai
Browse files

ALSA: intel_hdmi: Use the new non-cached allocation



The HDMI LPE audio driver requires the non-cached page allocations for
its buffers.  With the recent support of SNDRV_DMA_TYPE_DEV_UC type,
we can reduce lots of codes in the driver side and let the memalloc
core doing it properly.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
parent 4985ddbf
Loading
Loading
Loading
Loading
+3 −26
Original line number Diff line number Diff line
@@ -30,7 +30,6 @@
#include <linux/pm_runtime.h>
#include <linux/dma-mapping.h>
#include <linux/delay.h>
#include <asm/set_memory.h>
#include <sound/core.h>
#include <sound/asoundef.h>
#include <sound/pcm.h>
@@ -1141,8 +1140,7 @@ static int had_pcm_hw_params(struct snd_pcm_substream *substream,
			     struct snd_pcm_hw_params *hw_params)
{
	struct snd_intelhad *intelhaddata;
	unsigned long addr;
	int pages, buf_size, retval;
	int buf_size, retval;

	intelhaddata = snd_pcm_substream_chip(substream);
	buf_size = params_buffer_bytes(hw_params);
@@ -1151,17 +1149,6 @@ static int had_pcm_hw_params(struct snd_pcm_substream *substream,
		return retval;
	dev_dbg(intelhaddata->dev, "%s:allocated memory = %d\n",
		__func__, buf_size);
	/* mark the pages as uncached region */
	addr = (unsigned long) substream->runtime->dma_area;
	pages = (substream->runtime->dma_bytes + PAGE_SIZE - 1) / PAGE_SIZE;
	retval = set_memory_uc(addr, pages);
	if (retval) {
		dev_err(intelhaddata->dev, "set_memory_uc failed.Error:%d\n",
			retval);
		return retval;
	}
	memset(substream->runtime->dma_area, 0, buf_size);

	return retval;
}

@@ -1171,22 +1158,12 @@ static int had_pcm_hw_params(struct snd_pcm_substream *substream,
static int had_pcm_hw_free(struct snd_pcm_substream *substream)
{
	struct snd_intelhad *intelhaddata;
	unsigned long addr;
	u32 pages;

	intelhaddata = snd_pcm_substream_chip(substream);
	had_do_reset(intelhaddata);

	/* mark back the pages as cached/writeback region before the free */
	if (substream->runtime->dma_area != NULL) {
		addr = (unsigned long) substream->runtime->dma_area;
		pages = (substream->runtime->dma_bytes + PAGE_SIZE - 1) /
								PAGE_SIZE;
		set_memory_wb(addr, pages);
	return snd_pcm_lib_free_pages(substream);
}
	return 0;
}

/*
 * ALSA PCM trigger callback
@@ -1860,7 +1837,7 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev)
		 * try to allocate 600k buffer as default which is large enough
		 */
		snd_pcm_lib_preallocate_pages_for_all(pcm,
						      SNDRV_DMA_TYPE_DEV, NULL,
						      SNDRV_DMA_TYPE_DEV_UC, NULL,
						      HAD_DEFAULT_BUFFER, HAD_MAX_BUFFER);

		/* create controls */