Lines Matching refs:str
65 struct lola_stream *str) in lola_stream_clear_pending_irq() argument
67 unsigned int val = lola_dsd_read(chip, str->dsd, STS); in lola_stream_clear_pending_irq()
70 lola_dsd_write(chip, str->dsd, STS, val); in lola_stream_clear_pending_irq()
73 static void lola_stream_start(struct lola *chip, struct lola_stream *str, in lola_stream_start() argument
76 lola_stream_clear_pending_irq(chip, str); in lola_stream_start()
77 lola_dsd_write(chip, str->dsd, CTL, in lola_stream_start()
85 static void lola_stream_stop(struct lola *chip, struct lola_stream *str, in lola_stream_stop() argument
88 lola_dsd_write(chip, str->dsd, CTL, in lola_stream_stop()
93 lola_stream_clear_pending_irq(chip, str); in lola_stream_stop()
96 static void wait_for_srst_clear(struct lola *chip, struct lola_stream *str) in wait_for_srst_clear() argument
101 val = lola_dsd_read(chip, str->dsd, CTL); in wait_for_srst_clear()
106 printk(KERN_WARNING SFX "SRST not clear (stream %d)\n", str->dsd); in wait_for_srst_clear()
110 struct lola_stream *str, in lola_stream_wait_for_fifo() argument
116 unsigned int reg = lola_dsd_read(chip, str->dsd, STS); in lola_stream_wait_for_fifo()
121 printk(KERN_WARNING SFX "FIFO not ready (stream %d)\n", str->dsd); in lola_stream_wait_for_fifo()
140 struct lola_stream *str; in lola_sync_wait_for_fifo() local
143 str = lola_get_stream(s); in lola_sync_wait_for_fifo()
144 if (str->prepared && str->paused) { in lola_sync_wait_for_fifo()
146 reg = lola_dsd_read(chip, str->dsd, STS); in lola_sync_wait_for_fifo()
148 pending = str->dsd + 1; in lola_sync_wait_for_fifo()
152 str->paused = 0; in lola_sync_wait_for_fifo()
171 struct lola_stream *str; in lola_sync_pause() local
174 str = lola_get_stream(s); in lola_sync_pause()
175 if (str->paused && str->prepared) in lola_sync_pause()
176 lola_dsd_write(chip, str->dsd, CTL, LOLA_DSD_CTL_SRUN | in lola_sync_pause()
182 static void lola_stream_reset(struct lola *chip, struct lola_stream *str) in lola_stream_reset() argument
184 if (str->prepared) { in lola_stream_reset()
185 if (str->paused) in lola_stream_reset()
186 lola_sync_pause(chip, str->substream); in lola_stream_reset()
187 str->prepared = 0; in lola_stream_reset()
188 lola_dsd_write(chip, str->dsd, CTL, in lola_stream_reset()
190 lola_stream_wait_for_fifo(chip, str, false); in lola_stream_reset()
191 lola_stream_clear_pending_irq(chip, str); in lola_stream_reset()
192 lola_dsd_write(chip, str->dsd, CTL, LOLA_DSD_CTL_SRST); in lola_stream_reset()
193 lola_dsd_write(chip, str->dsd, LVI, 0); in lola_stream_reset()
194 lola_dsd_write(chip, str->dsd, BDPU, 0); in lola_stream_reset()
195 lola_dsd_write(chip, str->dsd, BDPL, 0); in lola_stream_reset()
196 wait_for_srst_clear(chip, str); in lola_stream_reset()
227 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_open() local
231 if (str->opened) { in lola_pcm_open()
235 str->substream = substream; in lola_pcm_open()
236 str->master = NULL; in lola_pcm_open()
237 str->opened = 1; in lola_pcm_open()
239 runtime->hw.channels_max = pcm->num_streams - str->index; in lola_pcm_open()
260 struct lola_stream *str) in lola_cleanup_slave_streams() argument
263 for (i = str->index + 1; i < pcm->num_streams; i++) { in lola_cleanup_slave_streams()
265 if (s->master != str) in lola_cleanup_slave_streams()
275 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_close() local
278 if (str->substream == substream) { in lola_pcm_close()
279 str->substream = NULL; in lola_pcm_close()
280 str->opened = 0; in lola_pcm_close()
293 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_hw_params() local
295 str->bufsize = 0; in lola_pcm_hw_params()
296 str->period_bytes = 0; in lola_pcm_hw_params()
297 str->format_verb = 0; in lola_pcm_hw_params()
306 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_hw_free() local
309 lola_stream_reset(chip, str); in lola_pcm_hw_free()
310 lola_cleanup_slave_streams(pcm, str); in lola_pcm_hw_free()
319 struct lola_stream *str, u32 **bdlp, in setup_bdle() argument
328 if (str->frags >= LOLA_MAX_BDL_ENTRIES) in setup_bdle()
344 str->frags++; in setup_bdle()
356 struct lola_stream *str) in lola_setup_periods() argument
361 period_bytes = str->period_bytes; in lola_setup_periods()
362 periods = str->bufsize / period_bytes; in lola_setup_periods()
365 bdl = (u32 *)(pcm->bdl.area + LOLA_BDL_ENTRY_SIZE * str->index); in lola_setup_periods()
367 str->frags = 0; in lola_setup_periods()
369 ofs = setup_bdle(substream, str, &bdl, ofs, period_bytes); in lola_setup_periods()
377 str->bufsize, period_bytes); in lola_setup_periods()
406 struct lola_stream *str, in lola_set_stream_config() argument
415 err = lola_codec_read(chip, str->nid, LOLA_VERB_SET_STREAM_FORMAT, in lola_set_stream_config()
416 str->format_verb, 0, &val, NULL); in lola_set_stream_config()
419 str->format_verb); in lola_set_stream_config()
425 verb = (str->index << 6) | i; in lola_set_stream_config()
426 err = lola_codec_read(chip, str[i].nid, in lola_set_stream_config()
441 struct lola_stream *str) in lola_setup_controller() argument
445 if (str->prepared) in lola_setup_controller()
449 bdl = pcm->bdl.addr + LOLA_BDL_ENTRY_SIZE * str->index; in lola_setup_controller()
450 lola_dsd_write(chip, str->dsd, BDPL, (u32)bdl); in lola_setup_controller()
451 lola_dsd_write(chip, str->dsd, BDPU, upper_32_bits(bdl)); in lola_setup_controller()
453 lola_dsd_write(chip, str->dsd, LVI, str->frags - 1); in lola_setup_controller()
454 lola_stream_clear_pending_irq(chip, str); in lola_setup_controller()
456 lola_dsd_write(chip, str->dsd, CTL, in lola_setup_controller()
459 str->prepared = 1; in lola_setup_controller()
461 return lola_stream_wait_for_fifo(chip, str, true); in lola_setup_controller()
468 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_prepare() local
474 lola_stream_reset(chip, str); in lola_pcm_prepare()
475 lola_cleanup_slave_streams(pcm, str); in lola_pcm_prepare()
476 if (str->index + runtime->channels > pcm->num_streams) { in lola_pcm_prepare()
481 str[i].master = str; in lola_pcm_prepare()
482 str[i].opened = 1; in lola_pcm_prepare()
490 str->bufsize = bufsize; in lola_pcm_prepare()
491 str->period_bytes = period_bytes; in lola_pcm_prepare()
492 str->format_verb = format_verb; in lola_pcm_prepare()
494 err = lola_setup_periods(chip, pcm, substream, str); in lola_pcm_prepare()
503 err = lola_set_stream_config(chip, str, runtime->channels); in lola_pcm_prepare()
507 err = lola_setup_controller(chip, pcm, str); in lola_pcm_prepare()
509 lola_stream_reset(chip, str); in lola_pcm_prepare()
519 struct lola_stream *str; in lola_pcm_trigger() local
550 str = lola_get_stream(s); in lola_pcm_trigger()
552 lola_stream_start(chip, str, tstamp); in lola_pcm_trigger()
554 lola_stream_stop(chip, str, tstamp); in lola_pcm_trigger()
555 str->running = start; in lola_pcm_trigger()
556 str->paused = !start; in lola_pcm_trigger()
566 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_pointer() local
567 unsigned int pos = lola_dsd_read(chip, str->dsd, LPIB); in lola_pcm_pointer()
569 if (pos >= str->bufsize) in lola_pcm_pointer()
580 struct lola_stream *str = &pcm->streams[i]; in lola_pcm_update() local
581 if (str->substream && str->running) in lola_pcm_update()
582 snd_pcm_period_elapsed(str->substream); in lola_pcm_update()
641 static int lola_init_stream(struct lola *chip, struct lola_stream *str, in lola_init_stream() argument
647 str->nid = nid; in lola_init_stream()
648 str->index = idx; in lola_init_stream()
649 str->dsd = idx; in lola_init_stream()
651 str->dsd += MAX_STREAM_IN_COUNT; in lola_init_stream()
685 str->can_float = true; in lola_init_stream()