Lines Matching refs:dmadata

29 	struct txx9aclc_dmadata dmadata[2];  member
36 struct txx9aclc_dmadata *dmadata);
59 struct txx9aclc_dmadata *dmadata = runtime->private_data; in txx9aclc_pcm_hw_params() local
77 dmadata->substream = substream; in txx9aclc_pcm_hw_params()
78 dmadata->pos = 0; in txx9aclc_pcm_hw_params()
90 struct txx9aclc_dmadata *dmadata = runtime->private_data; in txx9aclc_pcm_prepare() local
92 dmadata->dma_addr = runtime->dma_addr; in txx9aclc_pcm_prepare()
93 dmadata->buffer_bytes = snd_pcm_lib_buffer_bytes(substream); in txx9aclc_pcm_prepare()
94 dmadata->period_bytes = snd_pcm_lib_period_bytes(substream); in txx9aclc_pcm_prepare()
96 if (dmadata->buffer_bytes == dmadata->period_bytes) { in txx9aclc_pcm_prepare()
97 dmadata->frag_bytes = dmadata->period_bytes >> 1; in txx9aclc_pcm_prepare()
98 dmadata->frags = 2; in txx9aclc_pcm_prepare()
100 dmadata->frag_bytes = dmadata->period_bytes; in txx9aclc_pcm_prepare()
101 dmadata->frags = dmadata->buffer_bytes / dmadata->period_bytes; in txx9aclc_pcm_prepare()
103 dmadata->frag_count = 0; in txx9aclc_pcm_prepare()
104 dmadata->pos = 0; in txx9aclc_pcm_prepare()
110 struct txx9aclc_dmadata *dmadata = arg; in txx9aclc_dma_complete() local
114 spin_lock_irqsave(&dmadata->dma_lock, flags); in txx9aclc_dma_complete()
115 if (dmadata->frag_count >= 0) { in txx9aclc_dma_complete()
116 dmadata->dmacount--; in txx9aclc_dma_complete()
117 if (!WARN_ON(dmadata->dmacount < 0)) in txx9aclc_dma_complete()
118 tasklet_schedule(&dmadata->tasklet); in txx9aclc_dma_complete()
120 spin_unlock_irqrestore(&dmadata->dma_lock, flags); in txx9aclc_dma_complete()
124 txx9aclc_dma_submit(struct txx9aclc_dmadata *dmadata, dma_addr_t buf_dma_addr) in txx9aclc_dma_submit() argument
126 struct dma_chan *chan = dmadata->dma_chan; in txx9aclc_dma_submit()
132 dmadata->frag_bytes, buf_dma_addr & (PAGE_SIZE - 1)); in txx9aclc_dma_submit()
135 dmadata->substream->stream == SNDRV_PCM_STREAM_PLAYBACK ? in txx9aclc_dma_submit()
143 desc->callback_param = dmadata; in txx9aclc_dma_submit()
152 struct txx9aclc_dmadata *dmadata = (struct txx9aclc_dmadata *)data; in txx9aclc_dma_tasklet() local
153 struct dma_chan *chan = dmadata->dma_chan; in txx9aclc_dma_tasklet()
155 struct snd_pcm_substream *substream = dmadata->substream; in txx9aclc_dma_tasklet()
161 spin_lock_irqsave(&dmadata->dma_lock, flags); in txx9aclc_dma_tasklet()
162 if (dmadata->frag_count < 0) { in txx9aclc_dma_tasklet()
166 spin_unlock_irqrestore(&dmadata->dma_lock, flags); in txx9aclc_dma_tasklet()
170 desc = txx9aclc_dma_submit(dmadata, in txx9aclc_dma_tasklet()
171 dmadata->dma_addr + i * dmadata->frag_bytes); in txx9aclc_dma_tasklet()
175 dmadata->dmacount = NR_DMA_CHAIN; in txx9aclc_dma_tasklet()
177 spin_lock_irqsave(&dmadata->dma_lock, flags); in txx9aclc_dma_tasklet()
179 dmadata->frag_count = NR_DMA_CHAIN % dmadata->frags; in txx9aclc_dma_tasklet()
180 spin_unlock_irqrestore(&dmadata->dma_lock, flags); in txx9aclc_dma_tasklet()
183 if (WARN_ON(dmadata->dmacount >= NR_DMA_CHAIN)) { in txx9aclc_dma_tasklet()
184 spin_unlock_irqrestore(&dmadata->dma_lock, flags); in txx9aclc_dma_tasklet()
187 while (dmadata->dmacount < NR_DMA_CHAIN) { in txx9aclc_dma_tasklet()
188 dmadata->dmacount++; in txx9aclc_dma_tasklet()
189 spin_unlock_irqrestore(&dmadata->dma_lock, flags); in txx9aclc_dma_tasklet()
190 desc = txx9aclc_dma_submit(dmadata, in txx9aclc_dma_tasklet()
191 dmadata->dma_addr + in txx9aclc_dma_tasklet()
192 dmadata->frag_count * dmadata->frag_bytes); in txx9aclc_dma_tasklet()
197 spin_lock_irqsave(&dmadata->dma_lock, flags); in txx9aclc_dma_tasklet()
198 dmadata->frag_count++; in txx9aclc_dma_tasklet()
199 dmadata->frag_count %= dmadata->frags; in txx9aclc_dma_tasklet()
200 dmadata->pos += dmadata->frag_bytes; in txx9aclc_dma_tasklet()
201 dmadata->pos %= dmadata->buffer_bytes; in txx9aclc_dma_tasklet()
202 if ((dmadata->frag_count * dmadata->frag_bytes) % in txx9aclc_dma_tasklet()
203 dmadata->period_bytes == 0) in txx9aclc_dma_tasklet()
206 spin_unlock_irqrestore(&dmadata->dma_lock, flags); in txx9aclc_dma_tasklet()
211 struct txx9aclc_dmadata *dmadata = substream->runtime->private_data; in txx9aclc_pcm_trigger() local
219 spin_lock_irqsave(&dmadata->dma_lock, flags); in txx9aclc_pcm_trigger()
222 dmadata->frag_count = -1; in txx9aclc_pcm_trigger()
223 tasklet_schedule(&dmadata->tasklet); in txx9aclc_pcm_trigger()
237 spin_unlock_irqrestore(&dmadata->dma_lock, flags); in txx9aclc_pcm_trigger()
244 struct txx9aclc_dmadata *dmadata = substream->runtime->private_data; in txx9aclc_pcm_pointer() local
246 return bytes_to_frames(substream->runtime, dmadata->pos); in txx9aclc_pcm_pointer()
252 struct txx9aclc_dmadata *dmadata = &dev->dmadata[substream->stream]; in txx9aclc_pcm_open() local
263 substream->runtime->private_data = dmadata; in txx9aclc_pcm_open()
269 struct txx9aclc_dmadata *dmadata = substream->runtime->private_data; in txx9aclc_pcm_close() local
270 struct dma_chan *chan = dmadata->dma_chan; in txx9aclc_pcm_close()
272 dmadata->frag_count = -1; in txx9aclc_pcm_close()
303 dev->dmadata[0].stream = SNDRV_PCM_STREAM_PLAYBACK; in txx9aclc_pcm_new()
304 dev->dmadata[1].stream = SNDRV_PCM_STREAM_CAPTURE; in txx9aclc_pcm_new()
311 dev->dmadata[i].dma_res = r; in txx9aclc_pcm_new()
312 ret = txx9aclc_dma_init(dev, &dev->dmadata[i]); in txx9aclc_pcm_new()
321 if (dev->dmadata[i].dma_chan) in txx9aclc_pcm_new()
322 dma_release_channel(dev->dmadata[i].dma_chan); in txx9aclc_pcm_new()
323 dev->dmadata[i].dma_chan = NULL; in txx9aclc_pcm_new()
330 struct txx9aclc_dmadata *dmadata = param; in filter() local
334 devname = kasprintf(GFP_KERNEL, "%s.%d", dmadata->dma_res->name, in filter()
335 (int)dmadata->dma_res->start); in filter()
337 chan->private = &dmadata->dma_slave; in filter()
345 struct txx9aclc_dmadata *dmadata) in txx9aclc_dma_init() argument
348 struct txx9dmac_slave *ds = &dmadata->dma_slave; in txx9aclc_dma_init()
351 spin_lock_init(&dmadata->dma_lock); in txx9aclc_dma_init()
354 if (dmadata->stream == SNDRV_PCM_STREAM_PLAYBACK) { in txx9aclc_dma_init()
365 dmadata->dma_chan = dma_request_channel(mask, filter, dmadata); in txx9aclc_dma_init()
366 if (!dmadata->dma_chan) { in txx9aclc_dma_init()
369 dmadata->stream == SNDRV_PCM_STREAM_PLAYBACK ? in txx9aclc_dma_init()
373 tasklet_init(&dmadata->tasklet, txx9aclc_dma_tasklet, in txx9aclc_dma_init()
374 (unsigned long)dmadata); in txx9aclc_dma_init()
397 struct txx9aclc_dmadata *dmadata = &dev->dmadata[i]; in txx9aclc_pcm_remove() local
398 struct dma_chan *chan = dmadata->dma_chan; in txx9aclc_pcm_remove()
401 dmadata->frag_count = -1; in txx9aclc_pcm_remove()
405 dev->dmadata[i].dma_chan = NULL; in txx9aclc_pcm_remove()