Lines Matching refs:sub
29 struct uniphier_aio_sub *sub = &aio->sub[compr->direction];
37 sub->compr_area = kzalloc(size, GFP_KERNEL);
38 if (!sub->compr_area)
41 if (sub->swm->dir == PORT_DIR_OUTPUT)
44 sub->compr_addr = dma_map_single(dev, sub->compr_area, size, dma_dir);
45 if (dma_mapping_error(dev, sub->compr_addr)) {
46 kfree(sub->compr_area);
47 sub->compr_area = NULL;
52 sub->compr_bytes = size;
62 struct uniphier_aio_sub *sub = &aio->sub[compr->direction];
65 if (sub->swm->dir == PORT_DIR_OUTPUT)
68 dma_unmap_single(dev, sub->compr_addr, sub->compr_bytes, dma_dir);
69 kfree(sub->compr_area);
70 sub->compr_area = NULL;
80 struct uniphier_aio_sub *sub = &aio->sub[cstream->direction];
83 if (sub->cstream)
86 sub->cstream = cstream;
87 sub->pass_through = 1;
88 sub->use_mmap = false;
94 ret = aio_init(sub);
106 struct uniphier_aio_sub *sub = &aio->sub[cstream->direction];
116 sub->cstream = NULL;
127 struct uniphier_aio_sub *sub = &aio->sub[cstream->direction];
129 *params = sub->cparams.codec;
140 struct uniphier_aio_sub *sub = &aio->sub[cstream->direction];
156 sub->iec_pc = IEC61937_PC_AAC;
158 sub->cparams = *params;
159 sub->setting = 1;
161 aio_port_reset(sub);
162 aio_src_reset(sub);
176 struct uniphier_aio_sub *sub = &aio->sub[cstream->direction];
178 sub->setting = 0;
189 struct uniphier_aio_sub *sub = &aio->sub[cstream->direction];
194 ret = aiodma_ch_set_param(sub);
198 spin_lock_irqsave(&sub->lock, flags);
199 ret = aiodma_rb_set_buffer(sub, sub->compr_addr,
200 sub->compr_addr + sub->compr_bytes,
202 spin_unlock_irqrestore(&sub->lock, flags);
206 ret = aio_port_set_param(sub, sub->pass_through, &sub->params);
209 ret = aio_oport_set_stream_type(sub, sub->iec_pc);
212 aio_port_set_enable(sub, 1);
214 ret = aio_if_set_param(sub, sub->pass_through);
228 struct uniphier_aio_sub *sub = &aio->sub[cstream->direction];
233 spin_lock_irqsave(&sub->lock, flags);
236 aiodma_rb_sync(sub, sub->compr_addr, sub->compr_bytes, bytes);
237 aiodma_ch_set_enable(sub, 1);
238 sub->running = 1;
242 sub->running = 0;
243 aiodma_ch_set_enable(sub, 0);
250 spin_unlock_irqrestore(&sub->lock, flags);
262 struct uniphier_aio_sub *sub = &aio->sub[cstream->direction];
267 spin_lock_irqsave(&sub->lock, flags);
269 aiodma_rb_sync(sub, sub->compr_addr, sub->compr_bytes, bytes);
271 if (sub->swm->dir == PORT_DIR_OUTPUT) {
272 pos = sub->rd_offs;
274 tstamp->copied_total = sub->rd_total / 2;
276 pos = sub->wr_offs;
277 tstamp->copied_total = sub->rd_total;
281 spin_unlock_irqrestore(&sub->lock, flags);
286 static int aio_compr_send_to_hw(struct uniphier_aio_sub *sub,
290 u32 *dstbuf = (u32 *)(sub->compr_area + sub->wr_offs);
307 sub->iec_header = true;
311 if (sub->iec_header && sub->iec_pc != pc) {
313 sub->iec_pc = pc;
314 ret = aio_oport_set_stream_type(sub, pc);
318 sub->iec_header = false;
337 struct uniphier_aio_sub *sub = &aio->sub[cstream->direction];
338 size_t cnt = min_t(size_t, count, aio_rb_space_to_end(sub) / 2);
347 if (sub->swm->dir == PORT_DIR_OUTPUT) {
348 dma_addr_t dmapos = sub->compr_addr + sub->wr_offs;
354 ret = aio_compr_send_to_hw(sub, buf, s);
357 dma_addr_t dmapos = sub->compr_addr + sub->rd_offs;
362 ret = copy_to_user(buf, sub->compr_area + sub->rd_offs, s);
368 spin_lock_irqsave(&sub->lock, flags);
370 sub->threshold = 2 * bytes;
371 aiodma_rb_set_threshold(sub, sub->compr_bytes, 2 * bytes);
373 if (sub->swm->dir == PORT_DIR_OUTPUT) {
374 sub->wr_offs += s;
375 if (sub->wr_offs >= sub->compr_bytes)
376 sub->wr_offs -= sub->compr_bytes;
378 sub->rd_offs += s;
379 if (sub->rd_offs >= sub->compr_bytes)
380 sub->rd_offs -= sub->compr_bytes;
382 aiodma_rb_sync(sub, sub->compr_addr, sub->compr_bytes, bytes);
384 spin_unlock_irqrestore(&sub->lock, flags);