Lines Matching refs:pi

20 				struct pcm_info **pi, struct pcm_info **other)  in get_pcm_info()  argument
23 if (pi) in get_pcm_info()
24 *pi = &i2sdev->in; in get_pcm_info()
28 if (pi) in get_pcm_info()
29 *pi = &i2sdev->out; in get_pcm_info()
75 struct pcm_info *pi, *other; in i2sbus_pcm_open() local
89 get_pcm_info(i2sdev, in, &pi, &other); in i2sbus_pcm_open()
91 hw = &pi->substream->runtime->hw; in i2sbus_pcm_open()
94 if (pi->active) { in i2sbus_pcm_open()
196 err = snd_pcm_hw_constraint_integer(pi->substream->runtime, in i2sbus_pcm_open()
204 err = cii->codec->open(cii, pi->substream); in i2sbus_pcm_open()
213 pi->substream); in i2sbus_pcm_open()
233 struct pcm_info *pi; in i2sbus_pcm_close() local
238 get_pcm_info(i2sdev, in, &pi, NULL); in i2sbus_pcm_close()
242 tmp = cii->codec->close(cii, pi->substream); in i2sbus_pcm_close()
248 pi->substream = NULL; in i2sbus_pcm_close()
249 pi->active = 0; in i2sbus_pcm_close()
255 struct pcm_info *pi) in i2sbus_wait_for_stop() argument
262 if (pi->dbdma_ring.stopping) { in i2sbus_wait_for_stop()
264 pi->stop_completion = &done; in i2sbus_wait_for_stop()
268 pi->stop_completion = NULL; in i2sbus_wait_for_stop()
273 out_le32(&pi->dbdma->control, (RUN | PAUSE | 1) << 16); in i2sbus_wait_for_stop()
274 pi->dbdma_ring.stopping = 0; in i2sbus_wait_for_stop()
276 while (in_le32(&pi->dbdma->status) & ACTIVE) { in i2sbus_wait_for_stop()
289 struct pcm_info *pi; in i2sbus_wait_for_stop_both() local
291 get_pcm_info(i2sdev, 0, &pi, NULL); in i2sbus_wait_for_stop_both()
292 i2sbus_wait_for_stop(i2sdev, pi); in i2sbus_wait_for_stop_both()
293 get_pcm_info(i2sdev, 1, &pi, NULL); in i2sbus_wait_for_stop_both()
294 i2sbus_wait_for_stop(i2sdev, pi); in i2sbus_wait_for_stop_both()
307 struct pcm_info *pi; in i2sbus_hw_free() local
309 get_pcm_info(i2sdev, in, &pi, NULL); in i2sbus_hw_free()
310 if (pi->dbdma_ring.stopping) in i2sbus_hw_free()
311 i2sbus_wait_for_stop(i2sdev, pi); in i2sbus_hw_free()
340 struct pcm_info *pi, *other; in i2sbus_pcm_prepare() local
347 get_pcm_info(i2sdev, in, &pi, &other); in i2sbus_pcm_prepare()
349 if (pi->dbdma_ring.running) { in i2sbus_pcm_prepare()
353 if (pi->dbdma_ring.stopping) in i2sbus_pcm_prepare()
354 i2sbus_wait_for_stop(i2sdev, pi); in i2sbus_pcm_prepare()
356 if (!pi->substream || !pi->substream->runtime) { in i2sbus_pcm_prepare()
361 runtime = pi->substream->runtime; in i2sbus_pcm_prepare()
362 pi->active = 1; in i2sbus_pcm_prepare()
373 periodsize = snd_pcm_lib_period_bytes(pi->substream); in i2sbus_pcm_prepare()
374 nperiods = pi->substream->runtime->periods; in i2sbus_pcm_prepare()
375 pi->current_period = 0; in i2sbus_pcm_prepare()
378 command = pi->dbdma_ring.cmds; in i2sbus_pcm_prepare()
395 stopaddr = pi->dbdma_ring.bus_cmd_start + in i2sbus_pcm_prepare()
406 command->cmd_dep = cpu_to_le32(pi->dbdma_ring.bus_cmd_start); in i2sbus_pcm_prepare()
468 err = cii->codec->prepare(cii, &bi, pi->substream); in i2sbus_pcm_prepare()
542 struct pcm_info *pi; in i2sbus_pcm_trigger() local
548 get_pcm_info(i2sdev, in, &pi, NULL); in i2sbus_pcm_trigger()
553 if (pi->dbdma_ring.running) { in i2sbus_pcm_trigger()
559 cii->codec->start(cii, pi->substream); in i2sbus_pcm_trigger()
560 pi->dbdma_ring.running = 1; in i2sbus_pcm_trigger()
562 if (pi->dbdma_ring.stopping) { in i2sbus_pcm_trigger()
564 out_le32(&pi->dbdma->control, 1 << 16); in i2sbus_pcm_trigger()
565 if (in_le32(&pi->dbdma->status) & ACTIVE) { in i2sbus_pcm_trigger()
568 if (in_le32(&pi->dbdma->status) & ACTIVE) { in i2sbus_pcm_trigger()
569 pi->dbdma_ring.stopping = 0; in i2sbus_pcm_trigger()
576 out_le32(&pi->dbdma->control, (RUN | PAUSE | 1) << 16); in i2sbus_pcm_trigger()
579 out_le32(&pi->dbdma->br_sel, (1 << 16) | 1); in i2sbus_pcm_trigger()
582 out_le32(&pi->dbdma->cmdptr, pi->dbdma_ring.bus_cmd_start); in i2sbus_pcm_trigger()
585 pi->current_period = 0; in i2sbus_pcm_trigger()
586 pi->frame_count = in_le32(&i2sdev->intfregs->frame_count); in i2sbus_pcm_trigger()
589 out_le32(&pi->dbdma->control, (RUN << 16) | RUN); in i2sbus_pcm_trigger()
596 if (!pi->dbdma_ring.running) { in i2sbus_pcm_trigger()
600 pi->dbdma_ring.running = 0; in i2sbus_pcm_trigger()
603 out_le32(&pi->dbdma->control, (1 << 16) | 1); in i2sbus_pcm_trigger()
604 pi->dbdma_ring.stopping = 1; in i2sbus_pcm_trigger()
608 cii->codec->stop(cii, pi->substream); in i2sbus_pcm_trigger()
622 struct pcm_info *pi; in i2sbus_pcm_pointer() local
625 get_pcm_info(i2sdev, in, &pi, NULL); in i2sbus_pcm_pointer()
628 fc = fc - pi->frame_count; in i2sbus_pcm_pointer()
630 if (fc >= pi->substream->runtime->buffer_size) in i2sbus_pcm_pointer()
631 fc %= pi->substream->runtime->buffer_size; in i2sbus_pcm_pointer()
637 struct pcm_info *pi; in handle_interrupt() local
645 get_pcm_info(i2sdev, in, &pi, NULL); in handle_interrupt()
646 if (!pi->dbdma_ring.running && !pi->dbdma_ring.stopping) in handle_interrupt()
649 i = pi->current_period; in handle_interrupt()
650 runtime = pi->substream->runtime; in handle_interrupt()
651 while (pi->dbdma_ring.cmds[i].xfer_status) { in handle_interrupt()
652 if (le16_to_cpu(pi->dbdma_ring.cmds[i].xfer_status) & BT) in handle_interrupt()
659 pi->dbdma_ring.cmds[i].xfer_status = 0; in handle_interrupt()
663 pi->frame_count += runtime->buffer_size; in handle_interrupt()
665 pi->current_period = i; in handle_interrupt()
673 if (fc < pi->frame_count + nframes) in handle_interrupt()
674 pi->frame_count = fc - nframes; in handle_interrupt()
680 status = in_le32(&pi->dbdma->status); in handle_interrupt()
692 out_le32(&pi->dbdma->control, (RUN | PAUSE | 1) << 16); in handle_interrupt()
694 pi->dbdma_ring.stopping = 0; in handle_interrupt()
695 if (pi->stop_completion) in handle_interrupt()
696 complete(pi->stop_completion); in handle_interrupt()
699 if (!pi->dbdma_ring.running) in handle_interrupt()
703 snd_pcm_period_elapsed(pi->substream); in handle_interrupt()