Lines Matching refs:str

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