Lines Matching refs:dmadata
26 struct txx9aclc_dmadata dmadata[2];
33 struct txx9aclc_dmadata *dmadata);
55 struct txx9aclc_dmadata *dmadata = runtime->private_data;
68 dmadata->substream = substream;
69 dmadata->pos = 0;
77 struct txx9aclc_dmadata *dmadata = runtime->private_data;
79 dmadata->dma_addr = runtime->dma_addr;
80 dmadata->buffer_bytes = snd_pcm_lib_buffer_bytes(substream);
81 dmadata->period_bytes = snd_pcm_lib_period_bytes(substream);
83 if (dmadata->buffer_bytes == dmadata->period_bytes) {
84 dmadata->frag_bytes = dmadata->period_bytes >> 1;
85 dmadata->frags = 2;
87 dmadata->frag_bytes = dmadata->period_bytes;
88 dmadata->frags = dmadata->buffer_bytes / dmadata->period_bytes;
90 dmadata->frag_count = 0;
91 dmadata->pos = 0;
97 struct txx9aclc_dmadata *dmadata = arg;
101 spin_lock_irqsave(&dmadata->dma_lock, flags);
102 if (dmadata->frag_count >= 0) {
103 dmadata->dmacount--;
104 if (!WARN_ON(dmadata->dmacount < 0))
105 queue_work(system_highpri_wq, &dmadata->work);
107 spin_unlock_irqrestore(&dmadata->dma_lock, flags);
111 txx9aclc_dma_submit(struct txx9aclc_dmadata *dmadata, dma_addr_t buf_dma_addr)
113 struct dma_chan *chan = dmadata->dma_chan;
119 dmadata->frag_bytes, buf_dma_addr & (PAGE_SIZE - 1));
122 dmadata->substream->stream == SNDRV_PCM_STREAM_PLAYBACK ?
130 desc->callback_param = dmadata;
139 struct txx9aclc_dmadata *dmadata =
141 struct dma_chan *chan = dmadata->dma_chan;
143 struct snd_pcm_substream *substream = dmadata->substream;
149 spin_lock_irqsave(&dmadata->dma_lock, flags);
150 if (dmadata->frag_count < 0) {
154 spin_unlock_irqrestore(&dmadata->dma_lock, flags);
158 desc = txx9aclc_dma_submit(dmadata,
159 dmadata->dma_addr + i * dmadata->frag_bytes);
163 dmadata->dmacount = NR_DMA_CHAIN;
165 spin_lock_irqsave(&dmadata->dma_lock, flags);
167 dmadata->frag_count = NR_DMA_CHAIN % dmadata->frags;
168 spin_unlock_irqrestore(&dmadata->dma_lock, flags);
171 if (WARN_ON(dmadata->dmacount >= NR_DMA_CHAIN)) {
172 spin_unlock_irqrestore(&dmadata->dma_lock, flags);
175 while (dmadata->dmacount < NR_DMA_CHAIN) {
176 dmadata->dmacount++;
177 spin_unlock_irqrestore(&dmadata->dma_lock, flags);
178 desc = txx9aclc_dma_submit(dmadata,
179 dmadata->dma_addr +
180 dmadata->frag_count * dmadata->frag_bytes);
185 spin_lock_irqsave(&dmadata->dma_lock, flags);
186 dmadata->frag_count++;
187 dmadata->frag_count %= dmadata->frags;
188 dmadata->pos += dmadata->frag_bytes;
189 dmadata->pos %= dmadata->buffer_bytes;
190 if ((dmadata->frag_count * dmadata->frag_bytes) %
191 dmadata->period_bytes == 0)
194 spin_unlock_irqrestore(&dmadata->dma_lock, flags);
200 struct txx9aclc_dmadata *dmadata = substream->runtime->private_data;
208 spin_lock_irqsave(&dmadata->dma_lock, flags);
211 dmadata->frag_count = -1;
212 queue_work(system_highpri_wq, &dmadata->work);
226 spin_unlock_irqrestore(&dmadata->dma_lock, flags);
234 struct txx9aclc_dmadata *dmadata = substream->runtime->private_data;
236 return bytes_to_frames(substream->runtime, dmadata->pos);
243 struct txx9aclc_dmadata *dmadata = &dev->dmadata[substream->stream];
254 substream->runtime->private_data = dmadata;
261 struct txx9aclc_dmadata *dmadata = substream->runtime->private_data;
262 struct dma_chan *chan = dmadata->dma_chan;
264 dmadata->frag_count = -1;
284 dev->dmadata[0].stream = SNDRV_PCM_STREAM_PLAYBACK;
285 dev->dmadata[1].stream = SNDRV_PCM_STREAM_CAPTURE;
292 dev->dmadata[i].dma_res = r;
293 ret = txx9aclc_dma_init(dev, &dev->dmadata[i]);
304 if (dev->dmadata[i].dma_chan)
305 dma_release_channel(dev->dmadata[i].dma_chan);
306 dev->dmadata[i].dma_chan = NULL;
313 struct txx9aclc_dmadata *dmadata = param;
317 devname = kasprintf(GFP_KERNEL, "%s.%d", dmadata->dma_res->name,
318 (int)dmadata->dma_res->start);
320 chan->private = &dmadata->dma_slave;
328 struct txx9aclc_dmadata *dmadata)
331 struct txx9dmac_slave *ds = &dmadata->dma_slave;
334 spin_lock_init(&dmadata->dma_lock);
337 if (dmadata->stream == SNDRV_PCM_STREAM_PLAYBACK) {
348 dmadata->dma_chan = dma_request_channel(mask, filter, dmadata);
349 if (!dmadata->dma_chan) {
352 dmadata->stream == SNDRV_PCM_STREAM_PLAYBACK ?
356 INIT_WORK(&dmadata->work, txx9aclc_dma_work);
379 struct txx9aclc_dmadata *dmadata = &dev->dmadata[i];
380 struct dma_chan *chan = dmadata->dma_chan;
383 dmadata->frag_count = -1;
387 dev->dmadata[i].dma_chan = NULL;