Lines Matching +full:fifo +full:- +full:size

1 // SPDX-License-Identifier: GPL-2.0
10 #include <sound/soc-dai.h>
12 #include "aiu-fifo.h"
27 struct snd_soc_pcm_runtime *rtd = ss->private_data; in aiu_fifo_dai()
36 struct aiu_fifo *fifo = dai->playback_dma_data; in aiu_fifo_pointer() local
37 struct snd_pcm_runtime *runtime = substream->runtime; in aiu_fifo_pointer()
40 addr = snd_soc_component_read(component, fifo->mem_offset + AIU_MEM_RD); in aiu_fifo_pointer()
42 return bytes_to_frames(runtime, addr - (unsigned int)runtime->dma_addr); in aiu_fifo_pointer()
47 struct snd_soc_component *component = dai->component; in aiu_fifo_enable()
48 struct aiu_fifo *fifo = dai->playback_dma_data; in aiu_fifo_enable() local
53 fifo->mem_offset + AIU_MEM_CONTROL, in aiu_fifo_enable()
72 return -EINVAL; in aiu_fifo_trigger()
81 struct snd_soc_component *component = dai->component; in aiu_fifo_prepare()
82 struct aiu_fifo *fifo = dai->playback_dma_data; in aiu_fifo_prepare() local
85 fifo->mem_offset + AIU_MEM_CONTROL, in aiu_fifo_prepare()
89 fifo->mem_offset + AIU_MEM_CONTROL, in aiu_fifo_prepare()
98 struct snd_pcm_runtime *runtime = substream->runtime; in aiu_fifo_hw_params()
99 struct snd_soc_component *component = dai->component; in aiu_fifo_hw_params()
100 struct aiu_fifo *fifo = dai->playback_dma_data; in aiu_fifo_hw_params() local
103 /* Setup the fifo boundaries */ in aiu_fifo_hw_params()
104 end = runtime->dma_addr + runtime->dma_bytes - fifo->fifo_block; in aiu_fifo_hw_params()
105 snd_soc_component_write(component, fifo->mem_offset + AIU_MEM_START, in aiu_fifo_hw_params()
106 runtime->dma_addr); in aiu_fifo_hw_params()
107 snd_soc_component_write(component, fifo->mem_offset + AIU_MEM_RD, in aiu_fifo_hw_params()
108 runtime->dma_addr); in aiu_fifo_hw_params()
109 snd_soc_component_write(component, fifo->mem_offset + AIU_MEM_END, in aiu_fifo_hw_params()
112 /* Setup the fifo to read all the memory - no skip */ in aiu_fifo_hw_params()
114 fifo->mem_offset + AIU_MEM_MASKS, in aiu_fifo_hw_params()
134 struct aiu_fifo *fifo = dai->playback_dma_data; in aiu_fifo_startup() local
137 snd_soc_set_runtime_hwparams(substream, fifo->pcm); in aiu_fifo_startup()
140 * Make sure the buffer and period size are multiple of the fifo burst in aiu_fifo_startup()
141 * size in aiu_fifo_startup()
143 ret = snd_pcm_hw_constraint_step(substream->runtime, 0, in aiu_fifo_startup()
145 fifo->fifo_block); in aiu_fifo_startup()
149 ret = snd_pcm_hw_constraint_step(substream->runtime, 0, in aiu_fifo_startup()
151 fifo->fifo_block); in aiu_fifo_startup()
155 ret = clk_prepare_enable(fifo->pclk); in aiu_fifo_startup()
159 ret = request_irq(fifo->irq, aiu_fifo_isr, 0, dev_name(dai->dev), in aiu_fifo_startup()
162 clk_disable_unprepare(fifo->pclk); in aiu_fifo_startup()
170 struct aiu_fifo *fifo = dai->playback_dma_data; in aiu_fifo_shutdown() local
172 free_irq(fifo->irq, substream); in aiu_fifo_shutdown()
173 clk_disable_unprepare(fifo->pclk); in aiu_fifo_shutdown()
179 struct snd_card *card = rtd->card->snd_card; in aiu_fifo_pcm_new()
180 struct aiu_fifo *fifo = dai->playback_dma_data; in aiu_fifo_pcm_new() local
181 size_t size = fifo->pcm->buffer_bytes_max; in aiu_fifo_pcm_new() local
183 snd_pcm_set_managed_buffer_all(rtd->pcm, SNDRV_DMA_TYPE_DEV, in aiu_fifo_pcm_new()
184 card->dev, size, size); in aiu_fifo_pcm_new()
191 struct aiu_fifo *fifo; in aiu_fifo_dai_probe() local
193 fifo = kzalloc(sizeof(*fifo), GFP_KERNEL); in aiu_fifo_dai_probe()
194 if (!fifo) in aiu_fifo_dai_probe()
195 return -ENOMEM; in aiu_fifo_dai_probe()
197 dai->playback_dma_data = fifo; in aiu_fifo_dai_probe()
204 kfree(dai->playback_dma_data); in aiu_fifo_dai_remove()