Lines Matching refs:str

52 					  struct lola_stream *str)  in lola_stream_clear_pending_irq()  argument
54 unsigned int val = lola_dsd_read(chip, str->dsd, STS); in lola_stream_clear_pending_irq()
57 lola_dsd_write(chip, str->dsd, STS, val); in lola_stream_clear_pending_irq()
60 static void lola_stream_start(struct lola *chip, struct lola_stream *str, in lola_stream_start() argument
63 lola_stream_clear_pending_irq(chip, str); in lola_stream_start()
64 lola_dsd_write(chip, str->dsd, CTL, in lola_stream_start()
72 static void lola_stream_stop(struct lola *chip, struct lola_stream *str, in lola_stream_stop() argument
75 lola_dsd_write(chip, str->dsd, CTL, in lola_stream_stop()
80 lola_stream_clear_pending_irq(chip, str); in lola_stream_stop()
83 static void wait_for_srst_clear(struct lola *chip, struct lola_stream *str) in wait_for_srst_clear() argument
88 val = lola_dsd_read(chip, str->dsd, CTL); in wait_for_srst_clear()
93 dev_warn(chip->card->dev, "SRST not clear (stream %d)\n", str->dsd); in wait_for_srst_clear()
97 struct lola_stream *str, in lola_stream_wait_for_fifo() argument
103 unsigned int reg = lola_dsd_read(chip, str->dsd, STS); in lola_stream_wait_for_fifo()
108 dev_warn(chip->card->dev, "FIFO not ready (stream %d)\n", str->dsd); in lola_stream_wait_for_fifo()
127 struct lola_stream *str; in lola_sync_wait_for_fifo() local
130 str = lola_get_stream(s); in lola_sync_wait_for_fifo()
131 if (str->prepared && str->paused) { in lola_sync_wait_for_fifo()
133 reg = lola_dsd_read(chip, str->dsd, STS); in lola_sync_wait_for_fifo()
135 pending = str->dsd + 1; in lola_sync_wait_for_fifo()
139 str->paused = 0; in lola_sync_wait_for_fifo()
158 struct lola_stream *str; in lola_sync_pause() local
161 str = lola_get_stream(s); in lola_sync_pause()
162 if (str->paused && str->prepared) in lola_sync_pause()
163 lola_dsd_write(chip, str->dsd, CTL, LOLA_DSD_CTL_SRUN | in lola_sync_pause()
169 static void lola_stream_reset(struct lola *chip, struct lola_stream *str) in lola_stream_reset() argument
171 if (str->prepared) { in lola_stream_reset()
172 if (str->paused) in lola_stream_reset()
173 lola_sync_pause(chip, str->substream); in lola_stream_reset()
174 str->prepared = 0; in lola_stream_reset()
175 lola_dsd_write(chip, str->dsd, CTL, in lola_stream_reset()
177 lola_stream_wait_for_fifo(chip, str, false); in lola_stream_reset()
178 lola_stream_clear_pending_irq(chip, str); in lola_stream_reset()
179 lola_dsd_write(chip, str->dsd, CTL, LOLA_DSD_CTL_SRST); in lola_stream_reset()
180 lola_dsd_write(chip, str->dsd, LVI, 0); in lola_stream_reset()
181 lola_dsd_write(chip, str->dsd, BDPU, 0); in lola_stream_reset()
182 lola_dsd_write(chip, str->dsd, BDPL, 0); in lola_stream_reset()
183 wait_for_srst_clear(chip, str); in lola_stream_reset()
214 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_open() local
218 if (str->opened) { in lola_pcm_open()
222 str->substream = substream; in lola_pcm_open()
223 str->master = NULL; in lola_pcm_open()
224 str->opened = 1; in lola_pcm_open()
226 runtime->hw.channels_max = pcm->num_streams - str->index; in lola_pcm_open()
247 struct lola_stream *str) in lola_cleanup_slave_streams() argument
250 for (i = str->index + 1; i < pcm->num_streams; i++) { in lola_cleanup_slave_streams()
252 if (s->master != str) in lola_cleanup_slave_streams()
262 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_close() local
265 if (str->substream == substream) { in lola_pcm_close()
266 str->substream = NULL; in lola_pcm_close()
267 str->opened = 0; in lola_pcm_close()
280 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_hw_params() local
282 str->bufsize = 0; in lola_pcm_hw_params()
283 str->period_bytes = 0; in lola_pcm_hw_params()
284 str->format_verb = 0; in lola_pcm_hw_params()
292 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_hw_free() local
295 lola_stream_reset(chip, str); in lola_pcm_hw_free()
296 lola_cleanup_slave_streams(pcm, str); in lola_pcm_hw_free()
305 struct lola_stream *str, __le32 **bdlp, in setup_bdle() argument
314 if (str->frags >= LOLA_MAX_BDL_ENTRIES) in setup_bdle()
330 str->frags++; in setup_bdle()
342 struct lola_stream *str) in lola_setup_periods() argument
347 period_bytes = str->period_bytes; in lola_setup_periods()
348 periods = str->bufsize / period_bytes; in lola_setup_periods()
351 bdl = (__le32 *)(pcm->bdl->area + LOLA_BDL_ENTRY_SIZE * str->index); in lola_setup_periods()
353 str->frags = 0; in lola_setup_periods()
355 ofs = setup_bdle(substream, str, &bdl, ofs, period_bytes); in lola_setup_periods()
363 str->bufsize, period_bytes); in lola_setup_periods()
392 struct lola_stream *str, in lola_set_stream_config() argument
401 err = lola_codec_read(chip, str->nid, LOLA_VERB_SET_STREAM_FORMAT, in lola_set_stream_config()
402 str->format_verb, 0, &val, NULL); in lola_set_stream_config()
405 str->format_verb); in lola_set_stream_config()
411 verb = (str->index << 6) | i; in lola_set_stream_config()
412 err = lola_codec_read(chip, str[i].nid, in lola_set_stream_config()
428 struct lola_stream *str) in lola_setup_controller() argument
432 if (str->prepared) in lola_setup_controller()
436 bdl = pcm->bdl->addr + LOLA_BDL_ENTRY_SIZE * str->index; in lola_setup_controller()
437 lola_dsd_write(chip, str->dsd, BDPL, (u32)bdl); in lola_setup_controller()
438 lola_dsd_write(chip, str->dsd, BDPU, upper_32_bits(bdl)); in lola_setup_controller()
440 lola_dsd_write(chip, str->dsd, LVI, str->frags - 1); in lola_setup_controller()
441 lola_stream_clear_pending_irq(chip, str); in lola_setup_controller()
443 lola_dsd_write(chip, str->dsd, CTL, in lola_setup_controller()
446 str->prepared = 1; in lola_setup_controller()
448 return lola_stream_wait_for_fifo(chip, str, true); in lola_setup_controller()
455 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_prepare() local
461 lola_stream_reset(chip, str); in lola_pcm_prepare()
462 lola_cleanup_slave_streams(pcm, str); in lola_pcm_prepare()
463 if (str->index + runtime->channels > pcm->num_streams) { in lola_pcm_prepare()
468 str[i].master = str; in lola_pcm_prepare()
469 str[i].opened = 1; in lola_pcm_prepare()
477 str->bufsize = bufsize; in lola_pcm_prepare()
478 str->period_bytes = period_bytes; in lola_pcm_prepare()
479 str->format_verb = format_verb; in lola_pcm_prepare()
481 err = lola_setup_periods(chip, pcm, substream, str); in lola_pcm_prepare()
490 err = lola_set_stream_config(chip, str, runtime->channels); in lola_pcm_prepare()
494 err = lola_setup_controller(chip, pcm, str); in lola_pcm_prepare()
496 lola_stream_reset(chip, str); in lola_pcm_prepare()
506 struct lola_stream *str; in lola_pcm_trigger() local
537 str = lola_get_stream(s); in lola_pcm_trigger()
539 lola_stream_start(chip, str, tstamp); in lola_pcm_trigger()
541 lola_stream_stop(chip, str, tstamp); in lola_pcm_trigger()
542 str->running = start; in lola_pcm_trigger()
543 str->paused = !start; in lola_pcm_trigger()
553 struct lola_stream *str = lola_get_stream(substream); in lola_pcm_pointer() local
554 unsigned int pos = lola_dsd_read(chip, str->dsd, LPIB); in lola_pcm_pointer()
556 if (pos >= str->bufsize) in lola_pcm_pointer()
568 struct lola_stream *str = &pcm->streams[i]; in lola_pcm_update() local
569 if (str->substream && str->running) in lola_pcm_update()
570 snd_pcm_period_elapsed(str->substream); in lola_pcm_update()
621 static int lola_init_stream(struct lola *chip, struct lola_stream *str, in lola_init_stream() argument
627 str->nid = nid; in lola_init_stream()
628 str->index = idx; in lola_init_stream()
629 str->dsd = idx; in lola_init_stream()
631 str->dsd += MAX_STREAM_IN_COUNT; in lola_init_stream()
667 str->can_float = true; in lola_init_stream()