Lines Matching refs:chip

23 	struct lola *chip = snd_pcm_substream_chip(substream);
24 return &chip->pcm[substream->stream];
34 static unsigned int lola_get_lrc(struct lola *chip)
36 return lola_readl(chip, BAR1, LRC);
39 static unsigned int lola_get_tstamp(struct lola *chip, bool quick_no_sync)
41 unsigned int tstamp = lola_get_lrc(chip) >> 8;
42 if (chip->granularity) {
44 tstamp += (wait_banks + 1) * chip->granularity - 1;
45 tstamp -= tstamp % chip->granularity;
51 static void lola_stream_clear_pending_irq(struct lola *chip,
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);
96 static int lola_stream_wait_for_fifo(struct lola *chip,
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);
115 static int lola_sync_wait_for_fifo(struct lola *chip,
133 reg = lola_dsd_read(chip, str->dsd, STS);
146 dev_warn(chip->card->dev, "FIFO not ready (pending %d)\n", pending - 1);
151 static void lola_sync_pause(struct lola *chip,
156 lola_sync_wait_for_fifo(chip, substream, false);
163 lola_dsd_write(chip, str->dsd, CTL, LOLA_DSD_CTL_SRUN |
166 lola_sync_wait_for_fifo(chip, substream, true);
169 static void lola_stream_reset(struct lola *chip, struct lola_stream *str)
173 lola_sync_pause(chip, str->substream);
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);
212 struct lola *chip = snd_pcm_substream_chip(substream);
217 mutex_lock(&chip->open_mutex);
219 mutex_unlock(&chip->open_mutex);
227 if (chip->sample_rate) {
229 runtime->hw.rate_min = chip->sample_rate;
230 runtime->hw.rate_max = chip->sample_rate;
232 runtime->hw.rate_min = chip->sample_rate_min;
233 runtime->hw.rate_max = chip->sample_rate_max;
235 chip->ref_count_rate++;
237 /* period size = multiple of chip->granularity (8, 16 or 32 frames)*/
239 chip->granularity);
241 chip->granularity);
242 mutex_unlock(&chip->open_mutex);
261 struct lola *chip = snd_pcm_substream_chip(substream);
264 mutex_lock(&chip->open_mutex);
269 if (--chip->ref_count_rate == 0) {
271 chip->sample_rate = 0;
273 mutex_unlock(&chip->open_mutex);
290 struct lola *chip = snd_pcm_substream_chip(substream);
294 mutex_lock(&chip->open_mutex);
295 lola_stream_reset(chip, str);
297 mutex_unlock(&chip->open_mutex);
340 static int lola_setup_periods(struct lola *chip, struct lola_pcm *pcm,
362 dev_err(chip->card->dev, "Too many BDL entries: buffer=%d, period=%d\n",
391 static int lola_set_stream_config(struct lola *chip,
401 err = lola_codec_read(chip, str->nid, LOLA_VERB_SET_STREAM_FORMAT,
404 dev_err(chip->card->dev, "Cannot set stream format 0x%x\n",
412 err = lola_codec_read(chip, str[i].nid,
416 dev_err(chip->card->dev,
427 static int lola_setup_controller(struct lola *chip, struct lola_pcm *pcm,
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,
448 return lola_stream_wait_for_fifo(chip, str, true);
453 struct lola *chip = snd_pcm_substream_chip(substream);
460 mutex_lock(&chip->open_mutex);
461 lola_stream_reset(chip, str);
464 mutex_unlock(&chip->open_mutex);
471 mutex_unlock(&chip->open_mutex);
481 err = lola_setup_periods(chip, pcm, substream, str);
485 err = lola_set_sample_rate(chip, runtime->rate);
488 chip->sample_rate = runtime->rate; /* sample rate gets locked */
490 err = lola_set_stream_config(chip, str, runtime->channels);
494 err = lola_setup_controller(chip, pcm, str);
496 lola_stream_reset(chip, str);
505 struct lola *chip = snd_pcm_substream_chip(substream);
532 tstamp = lola_get_tstamp(chip, !sync_streams);
533 spin_lock(&chip->reg_lock);
539 lola_stream_start(chip, str, tstamp);
541 lola_stream_stop(chip, str, tstamp);
546 spin_unlock(&chip->reg_lock);
552 struct lola *chip = snd_pcm_substream_chip(substream);
554 unsigned int pos = lola_dsd_read(chip, str->dsd, LPIB);
561 void lola_pcm_update(struct lola *chip, struct lola_pcm *pcm, unsigned int bits)
585 int lola_create_pcm(struct lola *chip)
592 &chip->pci->dev,
593 PAGE_SIZE, &chip->pcm[i].bdl);
598 err = snd_pcm_new(chip->card, "Digigram Lola", 0,
599 chip->pcm[SNDRV_PCM_STREAM_PLAYBACK].num_streams,
600 chip->pcm[SNDRV_PCM_STREAM_CAPTURE].num_streams,
605 pcm->private_data = chip;
607 if (chip->pcm[i].num_streams)
612 &chip->pci->dev,
617 void lola_free_pcm(struct lola *chip)
619 snd_dma_free_pages(&chip->pcm[0].bdl);
620 snd_dma_free_pages(&chip->pcm[1].bdl);
626 static int lola_init_stream(struct lola *chip, struct lola_stream *str,
637 err = lola_read_param(chip, nid, LOLA_PAR_AUDIO_WIDGET_CAP, &val);
639 dev_err(chip->card->dev, "Can't read wcaps for 0x%x\n", nid);
645 dev_err(chip->card->dev,
655 dev_err(chip->card->dev,
662 chip->input_src_caps_mask |= (1 << idx);
665 err = lola_read_param(chip, nid, LOLA_PAR_STREAM_FORMATS, &val);
667 dev_err(chip->card->dev, "Can't read FORMATS 0x%x\n", nid);
674 dev_err(chip->card->dev,
681 int lola_init_pcm(struct lola *chip, int dir, int *nidp)
683 struct lola_pcm *pcm = &chip->pcm[dir];
688 err = lola_init_stream(chip, &pcm->streams[i], i, nid, dir);