WIP FPC-III support
[linux/fpc-iii.git] / sound / pci / hda / hda_controller.c
blob80016b7b6849e987c9de3f53152fa809d64d3c09
1 // SPDX-License-Identifier: GPL-2.0-or-later
2 /*
4 * Implementation of primary alsa driver code base for Intel HD Audio.
6 * Copyright(c) 2004 Intel Corporation. All rights reserved.
8 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
9 * PeiSen Hou <pshou@realtek.com.tw>
12 #include <linux/clocksource.h>
13 #include <linux/delay.h>
14 #include <linux/interrupt.h>
15 #include <linux/kernel.h>
16 #include <linux/module.h>
17 #include <linux/pm_runtime.h>
18 #include <linux/slab.h>
20 #ifdef CONFIG_X86
21 /* for art-tsc conversion */
22 #include <asm/tsc.h>
23 #endif
25 #include <sound/core.h>
26 #include <sound/initval.h>
27 #include "hda_controller.h"
29 #define CREATE_TRACE_POINTS
30 #include "hda_controller_trace.h"
32 /* DSP lock helpers */
33 #define dsp_lock(dev) snd_hdac_dsp_lock(azx_stream(dev))
34 #define dsp_unlock(dev) snd_hdac_dsp_unlock(azx_stream(dev))
35 #define dsp_is_locked(dev) snd_hdac_stream_is_locked(azx_stream(dev))
37 /* assign a stream for the PCM */
38 static inline struct azx_dev *
39 azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
41 struct hdac_stream *s;
43 s = snd_hdac_stream_assign(azx_bus(chip), substream);
44 if (!s)
45 return NULL;
46 return stream_to_azx_dev(s);
49 /* release the assigned stream */
50 static inline void azx_release_device(struct azx_dev *azx_dev)
52 snd_hdac_stream_release(azx_stream(azx_dev));
55 static inline struct hda_pcm_stream *
56 to_hda_pcm_stream(struct snd_pcm_substream *substream)
58 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
59 return &apcm->info->stream[substream->stream];
62 static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream,
63 u64 nsec)
65 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
66 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
67 u64 codec_frames, codec_nsecs;
69 if (!hinfo->ops.get_delay)
70 return nsec;
72 codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream);
73 codec_nsecs = div_u64(codec_frames * 1000000000LL,
74 substream->runtime->rate);
76 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
77 return nsec + codec_nsecs;
79 return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0;
83 * PCM ops
86 static int azx_pcm_close(struct snd_pcm_substream *substream)
88 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
89 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
90 struct azx *chip = apcm->chip;
91 struct azx_dev *azx_dev = get_azx_dev(substream);
93 trace_azx_pcm_close(chip, azx_dev);
94 mutex_lock(&chip->open_mutex);
95 azx_release_device(azx_dev);
96 if (hinfo->ops.close)
97 hinfo->ops.close(hinfo, apcm->codec, substream);
98 snd_hda_power_down(apcm->codec);
99 mutex_unlock(&chip->open_mutex);
100 snd_hda_codec_pcm_put(apcm->info);
101 return 0;
104 static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
105 struct snd_pcm_hw_params *hw_params)
107 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
108 struct azx *chip = apcm->chip;
109 struct azx_dev *azx_dev = get_azx_dev(substream);
110 int ret = 0;
112 trace_azx_pcm_hw_params(chip, azx_dev);
113 dsp_lock(azx_dev);
114 if (dsp_is_locked(azx_dev)) {
115 ret = -EBUSY;
116 goto unlock;
119 azx_dev->core.bufsize = 0;
120 azx_dev->core.period_bytes = 0;
121 azx_dev->core.format_val = 0;
123 unlock:
124 dsp_unlock(azx_dev);
125 return ret;
128 static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
130 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
131 struct azx_dev *azx_dev = get_azx_dev(substream);
132 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
134 /* reset BDL address */
135 dsp_lock(azx_dev);
136 if (!dsp_is_locked(azx_dev))
137 snd_hdac_stream_cleanup(azx_stream(azx_dev));
139 snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
141 azx_stream(azx_dev)->prepared = 0;
142 dsp_unlock(azx_dev);
143 return 0;
146 static int azx_pcm_prepare(struct snd_pcm_substream *substream)
148 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
149 struct azx *chip = apcm->chip;
150 struct azx_dev *azx_dev = get_azx_dev(substream);
151 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
152 struct snd_pcm_runtime *runtime = substream->runtime;
153 unsigned int format_val, stream_tag;
154 int err;
155 struct hda_spdif_out *spdif =
156 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
157 unsigned short ctls = spdif ? spdif->ctls : 0;
159 trace_azx_pcm_prepare(chip, azx_dev);
160 dsp_lock(azx_dev);
161 if (dsp_is_locked(azx_dev)) {
162 err = -EBUSY;
163 goto unlock;
166 snd_hdac_stream_reset(azx_stream(azx_dev));
167 format_val = snd_hdac_calc_stream_format(runtime->rate,
168 runtime->channels,
169 runtime->format,
170 hinfo->maxbps,
171 ctls);
172 if (!format_val) {
173 dev_err(chip->card->dev,
174 "invalid format_val, rate=%d, ch=%d, format=%d\n",
175 runtime->rate, runtime->channels, runtime->format);
176 err = -EINVAL;
177 goto unlock;
180 err = snd_hdac_stream_set_params(azx_stream(azx_dev), format_val);
181 if (err < 0)
182 goto unlock;
184 snd_hdac_stream_setup(azx_stream(azx_dev));
186 stream_tag = azx_dev->core.stream_tag;
187 /* CA-IBG chips need the playback stream starting from 1 */
188 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
189 stream_tag > chip->capture_streams)
190 stream_tag -= chip->capture_streams;
191 err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
192 azx_dev->core.format_val, substream);
194 unlock:
195 if (!err)
196 azx_stream(azx_dev)->prepared = 1;
197 dsp_unlock(azx_dev);
198 return err;
201 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
203 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
204 struct azx *chip = apcm->chip;
205 struct hdac_bus *bus = azx_bus(chip);
206 struct azx_dev *azx_dev;
207 struct snd_pcm_substream *s;
208 struct hdac_stream *hstr;
209 bool start;
210 int sbits = 0;
211 int sync_reg;
213 azx_dev = get_azx_dev(substream);
214 trace_azx_pcm_trigger(chip, azx_dev, cmd);
216 hstr = azx_stream(azx_dev);
217 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
218 sync_reg = AZX_REG_OLD_SSYNC;
219 else
220 sync_reg = AZX_REG_SSYNC;
222 if (dsp_is_locked(azx_dev) || !hstr->prepared)
223 return -EPIPE;
225 switch (cmd) {
226 case SNDRV_PCM_TRIGGER_START:
227 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
228 case SNDRV_PCM_TRIGGER_RESUME:
229 start = true;
230 break;
231 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
232 case SNDRV_PCM_TRIGGER_SUSPEND:
233 case SNDRV_PCM_TRIGGER_STOP:
234 start = false;
235 break;
236 default:
237 return -EINVAL;
240 snd_pcm_group_for_each_entry(s, substream) {
241 if (s->pcm->card != substream->pcm->card)
242 continue;
243 azx_dev = get_azx_dev(s);
244 sbits |= 1 << azx_dev->core.index;
245 snd_pcm_trigger_done(s, substream);
248 spin_lock(&bus->reg_lock);
250 /* first, set SYNC bits of corresponding streams */
251 snd_hdac_stream_sync_trigger(hstr, true, sbits, sync_reg);
253 snd_pcm_group_for_each_entry(s, substream) {
254 if (s->pcm->card != substream->pcm->card)
255 continue;
256 azx_dev = get_azx_dev(s);
257 if (start) {
258 azx_dev->insufficient = 1;
259 snd_hdac_stream_start(azx_stream(azx_dev), true);
260 } else {
261 snd_hdac_stream_stop(azx_stream(azx_dev));
264 spin_unlock(&bus->reg_lock);
266 snd_hdac_stream_sync(hstr, start, sbits);
268 spin_lock(&bus->reg_lock);
269 /* reset SYNC bits */
270 snd_hdac_stream_sync_trigger(hstr, false, sbits, sync_reg);
271 if (start)
272 snd_hdac_stream_timecounter_init(hstr, sbits);
273 spin_unlock(&bus->reg_lock);
274 return 0;
277 unsigned int azx_get_pos_lpib(struct azx *chip, struct azx_dev *azx_dev)
279 return snd_hdac_stream_get_pos_lpib(azx_stream(azx_dev));
281 EXPORT_SYMBOL_GPL(azx_get_pos_lpib);
283 unsigned int azx_get_pos_posbuf(struct azx *chip, struct azx_dev *azx_dev)
285 return snd_hdac_stream_get_pos_posbuf(azx_stream(azx_dev));
287 EXPORT_SYMBOL_GPL(azx_get_pos_posbuf);
289 unsigned int azx_get_position(struct azx *chip,
290 struct azx_dev *azx_dev)
292 struct snd_pcm_substream *substream = azx_dev->core.substream;
293 unsigned int pos;
294 int stream = substream->stream;
295 int delay = 0;
297 if (chip->get_position[stream])
298 pos = chip->get_position[stream](chip, azx_dev);
299 else /* use the position buffer as default */
300 pos = azx_get_pos_posbuf(chip, azx_dev);
302 if (pos >= azx_dev->core.bufsize)
303 pos = 0;
305 if (substream->runtime) {
306 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
307 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
309 if (chip->get_delay[stream])
310 delay += chip->get_delay[stream](chip, azx_dev, pos);
311 if (hinfo->ops.get_delay)
312 delay += hinfo->ops.get_delay(hinfo, apcm->codec,
313 substream);
314 substream->runtime->delay = delay;
317 trace_azx_get_position(chip, azx_dev, pos, delay);
318 return pos;
320 EXPORT_SYMBOL_GPL(azx_get_position);
322 static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
324 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
325 struct azx *chip = apcm->chip;
326 struct azx_dev *azx_dev = get_azx_dev(substream);
327 return bytes_to_frames(substream->runtime,
328 azx_get_position(chip, azx_dev));
332 * azx_scale64: Scale base by mult/div while not overflowing sanely
334 * Derived from scale64_check_overflow in kernel/time/timekeeping.c
336 * The tmestamps for a 48Khz stream can overflow after (2^64/10^9)/48K which
337 * is about 384307 ie ~4.5 days.
339 * This scales the calculation so that overflow will happen but after 2^64 /
340 * 48000 secs, which is pretty large!
342 * In caln below:
343 * base may overflow, but since there isn’t any additional division
344 * performed on base it’s OK
345 * rem can’t overflow because both are 32-bit values
348 #ifdef CONFIG_X86
349 static u64 azx_scale64(u64 base, u32 num, u32 den)
351 u64 rem;
353 rem = do_div(base, den);
355 base *= num;
356 rem *= num;
358 do_div(rem, den);
360 return base + rem;
363 static int azx_get_sync_time(ktime_t *device,
364 struct system_counterval_t *system, void *ctx)
366 struct snd_pcm_substream *substream = ctx;
367 struct azx_dev *azx_dev = get_azx_dev(substream);
368 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
369 struct azx *chip = apcm->chip;
370 struct snd_pcm_runtime *runtime;
371 u64 ll_counter, ll_counter_l, ll_counter_h;
372 u64 tsc_counter, tsc_counter_l, tsc_counter_h;
373 u32 wallclk_ctr, wallclk_cycles;
374 bool direction;
375 u32 dma_select;
376 u32 timeout;
377 u32 retry_count = 0;
379 runtime = substream->runtime;
381 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
382 direction = 1;
383 else
384 direction = 0;
386 /* 0th stream tag is not used, so DMA ch 0 is for 1st stream tag */
387 do {
388 timeout = 100;
389 dma_select = (direction << GTSCC_CDMAS_DMA_DIR_SHIFT) |
390 (azx_dev->core.stream_tag - 1);
391 snd_hdac_chip_writel(azx_bus(chip), GTSCC, dma_select);
393 /* Enable the capture */
394 snd_hdac_chip_updatel(azx_bus(chip), GTSCC, 0, GTSCC_TSCCI_MASK);
396 while (timeout) {
397 if (snd_hdac_chip_readl(azx_bus(chip), GTSCC) &
398 GTSCC_TSCCD_MASK)
399 break;
401 timeout--;
404 if (!timeout) {
405 dev_err(chip->card->dev, "GTSCC capture Timedout!\n");
406 return -EIO;
409 /* Read wall clock counter */
410 wallclk_ctr = snd_hdac_chip_readl(azx_bus(chip), WALFCC);
412 /* Read TSC counter */
413 tsc_counter_l = snd_hdac_chip_readl(azx_bus(chip), TSCCL);
414 tsc_counter_h = snd_hdac_chip_readl(azx_bus(chip), TSCCU);
416 /* Read Link counter */
417 ll_counter_l = snd_hdac_chip_readl(azx_bus(chip), LLPCL);
418 ll_counter_h = snd_hdac_chip_readl(azx_bus(chip), LLPCU);
420 /* Ack: registers read done */
421 snd_hdac_chip_writel(azx_bus(chip), GTSCC, GTSCC_TSCCD_SHIFT);
423 tsc_counter = (tsc_counter_h << TSCCU_CCU_SHIFT) |
424 tsc_counter_l;
426 ll_counter = (ll_counter_h << LLPC_CCU_SHIFT) | ll_counter_l;
427 wallclk_cycles = wallclk_ctr & WALFCC_CIF_MASK;
430 * An error occurs near frame "rollover". The clocks in
431 * frame value indicates whether this error may have
432 * occurred. Here we use the value of 10 i.e.,
433 * HDA_MAX_CYCLE_OFFSET
435 if (wallclk_cycles < HDA_MAX_CYCLE_VALUE - HDA_MAX_CYCLE_OFFSET
436 && wallclk_cycles > HDA_MAX_CYCLE_OFFSET)
437 break;
440 * Sleep before we read again, else we may again get
441 * value near to MAX_CYCLE. Try to sleep for different
442 * amount of time so we dont hit the same number again
444 udelay(retry_count++);
446 } while (retry_count != HDA_MAX_CYCLE_READ_RETRY);
448 if (retry_count == HDA_MAX_CYCLE_READ_RETRY) {
449 dev_err_ratelimited(chip->card->dev,
450 "Error in WALFCC cycle count\n");
451 return -EIO;
454 *device = ns_to_ktime(azx_scale64(ll_counter,
455 NSEC_PER_SEC, runtime->rate));
456 *device = ktime_add_ns(*device, (wallclk_cycles * NSEC_PER_SEC) /
457 ((HDA_MAX_CYCLE_VALUE + 1) * runtime->rate));
459 *system = convert_art_to_tsc(tsc_counter);
461 return 0;
464 #else
465 static int azx_get_sync_time(ktime_t *device,
466 struct system_counterval_t *system, void *ctx)
468 return -ENXIO;
470 #endif
472 static int azx_get_crosststamp(struct snd_pcm_substream *substream,
473 struct system_device_crosststamp *xtstamp)
475 return get_device_system_crosststamp(azx_get_sync_time,
476 substream, NULL, xtstamp);
479 static inline bool is_link_time_supported(struct snd_pcm_runtime *runtime,
480 struct snd_pcm_audio_tstamp_config *ts)
482 if (runtime->hw.info & SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME)
483 if (ts->type_requested == SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED)
484 return true;
486 return false;
489 static int azx_get_time_info(struct snd_pcm_substream *substream,
490 struct timespec64 *system_ts, struct timespec64 *audio_ts,
491 struct snd_pcm_audio_tstamp_config *audio_tstamp_config,
492 struct snd_pcm_audio_tstamp_report *audio_tstamp_report)
494 struct azx_dev *azx_dev = get_azx_dev(substream);
495 struct snd_pcm_runtime *runtime = substream->runtime;
496 struct system_device_crosststamp xtstamp;
497 int ret;
498 u64 nsec;
500 if ((substream->runtime->hw.info & SNDRV_PCM_INFO_HAS_LINK_ATIME) &&
501 (audio_tstamp_config->type_requested == SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK)) {
503 snd_pcm_gettime(substream->runtime, system_ts);
505 nsec = timecounter_read(&azx_dev->core.tc);
506 nsec = div_u64(nsec, 3); /* can be optimized */
507 if (audio_tstamp_config->report_delay)
508 nsec = azx_adjust_codec_delay(substream, nsec);
510 *audio_ts = ns_to_timespec64(nsec);
512 audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK;
513 audio_tstamp_report->accuracy_report = 1; /* rest of structure is valid */
514 audio_tstamp_report->accuracy = 42; /* 24 MHz WallClock == 42ns resolution */
516 } else if (is_link_time_supported(runtime, audio_tstamp_config)) {
518 ret = azx_get_crosststamp(substream, &xtstamp);
519 if (ret)
520 return ret;
522 switch (runtime->tstamp_type) {
523 case SNDRV_PCM_TSTAMP_TYPE_MONOTONIC:
524 return -EINVAL;
526 case SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW:
527 *system_ts = ktime_to_timespec64(xtstamp.sys_monoraw);
528 break;
530 default:
531 *system_ts = ktime_to_timespec64(xtstamp.sys_realtime);
532 break;
536 *audio_ts = ktime_to_timespec64(xtstamp.device);
538 audio_tstamp_report->actual_type =
539 SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED;
540 audio_tstamp_report->accuracy_report = 1;
541 /* 24 MHz WallClock == 42ns resolution */
542 audio_tstamp_report->accuracy = 42;
544 } else {
545 audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT;
548 return 0;
551 static const struct snd_pcm_hardware azx_pcm_hw = {
552 .info = (SNDRV_PCM_INFO_MMAP |
553 SNDRV_PCM_INFO_INTERLEAVED |
554 SNDRV_PCM_INFO_BLOCK_TRANSFER |
555 SNDRV_PCM_INFO_MMAP_VALID |
556 /* No full-resume yet implemented */
557 /* SNDRV_PCM_INFO_RESUME |*/
558 SNDRV_PCM_INFO_PAUSE |
559 SNDRV_PCM_INFO_SYNC_START |
560 SNDRV_PCM_INFO_HAS_WALL_CLOCK | /* legacy */
561 SNDRV_PCM_INFO_HAS_LINK_ATIME |
562 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
563 .formats = SNDRV_PCM_FMTBIT_S16_LE,
564 .rates = SNDRV_PCM_RATE_48000,
565 .rate_min = 48000,
566 .rate_max = 48000,
567 .channels_min = 2,
568 .channels_max = 2,
569 .buffer_bytes_max = AZX_MAX_BUF_SIZE,
570 .period_bytes_min = 128,
571 .period_bytes_max = AZX_MAX_BUF_SIZE / 2,
572 .periods_min = 2,
573 .periods_max = AZX_MAX_FRAG,
574 .fifo_size = 0,
577 static int azx_pcm_open(struct snd_pcm_substream *substream)
579 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
580 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
581 struct azx *chip = apcm->chip;
582 struct azx_dev *azx_dev;
583 struct snd_pcm_runtime *runtime = substream->runtime;
584 int err;
585 int buff_step;
587 snd_hda_codec_pcm_get(apcm->info);
588 mutex_lock(&chip->open_mutex);
589 azx_dev = azx_assign_device(chip, substream);
590 trace_azx_pcm_open(chip, azx_dev);
591 if (azx_dev == NULL) {
592 err = -EBUSY;
593 goto unlock;
595 runtime->private_data = azx_dev;
597 runtime->hw = azx_pcm_hw;
598 if (chip->gts_present)
599 runtime->hw.info |= SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME;
600 runtime->hw.channels_min = hinfo->channels_min;
601 runtime->hw.channels_max = hinfo->channels_max;
602 runtime->hw.formats = hinfo->formats;
603 runtime->hw.rates = hinfo->rates;
604 snd_pcm_limit_hw_rates(runtime);
605 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
607 /* avoid wrap-around with wall-clock */
608 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME,
610 178000000);
612 /* by some reason, the playback stream stalls on PulseAudio with
613 * tsched=1 when a capture stream triggers. Until we figure out the
614 * real cause, disable tsched mode by telling the PCM info flag.
616 if (chip->driver_caps & AZX_DCAPS_AMD_WORKAROUND)
617 runtime->hw.info |= SNDRV_PCM_INFO_BATCH;
619 if (chip->align_buffer_size)
620 /* constrain buffer sizes to be multiple of 128
621 bytes. This is more efficient in terms of memory
622 access but isn't required by the HDA spec and
623 prevents users from specifying exact period/buffer
624 sizes. For example for 44.1kHz, a period size set
625 to 20ms will be rounded to 19.59ms. */
626 buff_step = 128;
627 else
628 /* Don't enforce steps on buffer sizes, still need to
629 be multiple of 4 bytes (HDA spec). Tested on Intel
630 HDA controllers, may not work on all devices where
631 option needs to be disabled */
632 buff_step = 4;
634 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
635 buff_step);
636 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
637 buff_step);
638 snd_hda_power_up(apcm->codec);
639 if (hinfo->ops.open)
640 err = hinfo->ops.open(hinfo, apcm->codec, substream);
641 else
642 err = -ENODEV;
643 if (err < 0) {
644 azx_release_device(azx_dev);
645 goto powerdown;
647 snd_pcm_limit_hw_rates(runtime);
648 /* sanity check */
649 if (snd_BUG_ON(!runtime->hw.channels_min) ||
650 snd_BUG_ON(!runtime->hw.channels_max) ||
651 snd_BUG_ON(!runtime->hw.formats) ||
652 snd_BUG_ON(!runtime->hw.rates)) {
653 azx_release_device(azx_dev);
654 if (hinfo->ops.close)
655 hinfo->ops.close(hinfo, apcm->codec, substream);
656 err = -EINVAL;
657 goto powerdown;
660 /* disable LINK_ATIME timestamps for capture streams
661 until we figure out how to handle digital inputs */
662 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
663 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK; /* legacy */
664 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_LINK_ATIME;
667 snd_pcm_set_sync(substream);
668 mutex_unlock(&chip->open_mutex);
669 return 0;
671 powerdown:
672 snd_hda_power_down(apcm->codec);
673 unlock:
674 mutex_unlock(&chip->open_mutex);
675 snd_hda_codec_pcm_put(apcm->info);
676 return err;
679 static int azx_pcm_mmap(struct snd_pcm_substream *substream,
680 struct vm_area_struct *area)
682 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
683 struct azx *chip = apcm->chip;
684 if (chip->ops->pcm_mmap_prepare)
685 chip->ops->pcm_mmap_prepare(substream, area);
686 return snd_pcm_lib_default_mmap(substream, area);
689 static const struct snd_pcm_ops azx_pcm_ops = {
690 .open = azx_pcm_open,
691 .close = azx_pcm_close,
692 .hw_params = azx_pcm_hw_params,
693 .hw_free = azx_pcm_hw_free,
694 .prepare = azx_pcm_prepare,
695 .trigger = azx_pcm_trigger,
696 .pointer = azx_pcm_pointer,
697 .get_time_info = azx_get_time_info,
698 .mmap = azx_pcm_mmap,
701 static void azx_pcm_free(struct snd_pcm *pcm)
703 struct azx_pcm *apcm = pcm->private_data;
704 if (apcm) {
705 list_del(&apcm->list);
706 apcm->info->pcm = NULL;
707 kfree(apcm);
711 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
713 int snd_hda_attach_pcm_stream(struct hda_bus *_bus, struct hda_codec *codec,
714 struct hda_pcm *cpcm)
716 struct hdac_bus *bus = &_bus->core;
717 struct azx *chip = bus_to_azx(bus);
718 struct snd_pcm *pcm;
719 struct azx_pcm *apcm;
720 int pcm_dev = cpcm->device;
721 unsigned int size;
722 int s, err;
723 int type = SNDRV_DMA_TYPE_DEV_SG;
725 list_for_each_entry(apcm, &chip->pcm_list, list) {
726 if (apcm->pcm->device == pcm_dev) {
727 dev_err(chip->card->dev, "PCM %d already exists\n",
728 pcm_dev);
729 return -EBUSY;
732 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
733 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
734 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
735 &pcm);
736 if (err < 0)
737 return err;
738 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
739 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
740 if (apcm == NULL) {
741 snd_device_free(chip->card, pcm);
742 return -ENOMEM;
744 apcm->chip = chip;
745 apcm->pcm = pcm;
746 apcm->codec = codec;
747 apcm->info = cpcm;
748 pcm->private_data = apcm;
749 pcm->private_free = azx_pcm_free;
750 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
751 pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
752 list_add_tail(&apcm->list, &chip->pcm_list);
753 cpcm->pcm = pcm;
754 for (s = 0; s < 2; s++) {
755 if (cpcm->stream[s].substreams)
756 snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
758 /* buffer pre-allocation */
759 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
760 if (size > MAX_PREALLOC_SIZE)
761 size = MAX_PREALLOC_SIZE;
762 if (chip->uc_buffer)
763 type = SNDRV_DMA_TYPE_DEV_UC_SG;
764 snd_pcm_set_managed_buffer_all(pcm, type, chip->card->dev,
765 size, MAX_PREALLOC_SIZE);
766 return 0;
769 static unsigned int azx_command_addr(u32 cmd)
771 unsigned int addr = cmd >> 28;
773 if (addr >= AZX_MAX_CODECS) {
774 snd_BUG();
775 addr = 0;
778 return addr;
781 /* receive a response */
782 static int azx_rirb_get_response(struct hdac_bus *bus, unsigned int addr,
783 unsigned int *res)
785 struct azx *chip = bus_to_azx(bus);
786 struct hda_bus *hbus = &chip->bus;
787 int err;
789 again:
790 err = snd_hdac_bus_get_response(bus, addr, res);
791 if (!err)
792 return 0;
794 if (hbus->no_response_fallback)
795 return -EIO;
797 if (!bus->polling_mode) {
798 dev_warn(chip->card->dev,
799 "azx_get_response timeout, switching to polling mode: last cmd=0x%08x\n",
800 bus->last_cmd[addr]);
801 bus->polling_mode = 1;
802 goto again;
805 if (chip->msi) {
806 dev_warn(chip->card->dev,
807 "No response from codec, disabling MSI: last cmd=0x%08x\n",
808 bus->last_cmd[addr]);
809 if (chip->ops->disable_msi_reset_irq &&
810 chip->ops->disable_msi_reset_irq(chip) < 0)
811 return -EIO;
812 goto again;
815 if (chip->probing) {
816 /* If this critical timeout happens during the codec probing
817 * phase, this is likely an access to a non-existing codec
818 * slot. Better to return an error and reset the system.
820 return -EIO;
823 /* no fallback mechanism? */
824 if (!chip->fallback_to_single_cmd)
825 return -EIO;
827 /* a fatal communication error; need either to reset or to fallback
828 * to the single_cmd mode
830 if (hbus->allow_bus_reset && !hbus->response_reset && !hbus->in_reset) {
831 hbus->response_reset = 1;
832 dev_err(chip->card->dev,
833 "No response from codec, resetting bus: last cmd=0x%08x\n",
834 bus->last_cmd[addr]);
835 return -EAGAIN; /* give a chance to retry */
838 dev_err(chip->card->dev,
839 "azx_get_response timeout, switching to single_cmd mode: last cmd=0x%08x\n",
840 bus->last_cmd[addr]);
841 chip->single_cmd = 1;
842 hbus->response_reset = 0;
843 snd_hdac_bus_stop_cmd_io(bus);
844 return -EIO;
848 * Use the single immediate command instead of CORB/RIRB for simplicity
850 * Note: according to Intel, this is not preferred use. The command was
851 * intended for the BIOS only, and may get confused with unsolicited
852 * responses. So, we shouldn't use it for normal operation from the
853 * driver.
854 * I left the codes, however, for debugging/testing purposes.
857 /* receive a response */
858 static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
860 int timeout = 50;
862 while (timeout--) {
863 /* check IRV busy bit */
864 if (azx_readw(chip, IRS) & AZX_IRS_VALID) {
865 /* reuse rirb.res as the response return value */
866 azx_bus(chip)->rirb.res[addr] = azx_readl(chip, IR);
867 return 0;
869 udelay(1);
871 if (printk_ratelimit())
872 dev_dbg(chip->card->dev, "get_response timeout: IRS=0x%x\n",
873 azx_readw(chip, IRS));
874 azx_bus(chip)->rirb.res[addr] = -1;
875 return -EIO;
878 /* send a command */
879 static int azx_single_send_cmd(struct hdac_bus *bus, u32 val)
881 struct azx *chip = bus_to_azx(bus);
882 unsigned int addr = azx_command_addr(val);
883 int timeout = 50;
885 bus->last_cmd[azx_command_addr(val)] = val;
886 while (timeout--) {
887 /* check ICB busy bit */
888 if (!((azx_readw(chip, IRS) & AZX_IRS_BUSY))) {
889 /* Clear IRV valid bit */
890 azx_writew(chip, IRS, azx_readw(chip, IRS) |
891 AZX_IRS_VALID);
892 azx_writel(chip, IC, val);
893 azx_writew(chip, IRS, azx_readw(chip, IRS) |
894 AZX_IRS_BUSY);
895 return azx_single_wait_for_response(chip, addr);
897 udelay(1);
899 if (printk_ratelimit())
900 dev_dbg(chip->card->dev,
901 "send_cmd timeout: IRS=0x%x, val=0x%x\n",
902 azx_readw(chip, IRS), val);
903 return -EIO;
906 /* receive a response */
907 static int azx_single_get_response(struct hdac_bus *bus, unsigned int addr,
908 unsigned int *res)
910 if (res)
911 *res = bus->rirb.res[addr];
912 return 0;
916 * The below are the main callbacks from hda_codec.
918 * They are just the skeleton to call sub-callbacks according to the
919 * current setting of chip->single_cmd.
922 /* send a command */
923 static int azx_send_cmd(struct hdac_bus *bus, unsigned int val)
925 struct azx *chip = bus_to_azx(bus);
927 if (chip->disabled)
928 return 0;
929 if (chip->single_cmd)
930 return azx_single_send_cmd(bus, val);
931 else
932 return snd_hdac_bus_send_cmd(bus, val);
935 /* get a response */
936 static int azx_get_response(struct hdac_bus *bus, unsigned int addr,
937 unsigned int *res)
939 struct azx *chip = bus_to_azx(bus);
941 if (chip->disabled)
942 return 0;
943 if (chip->single_cmd)
944 return azx_single_get_response(bus, addr, res);
945 else
946 return azx_rirb_get_response(bus, addr, res);
949 static const struct hdac_bus_ops bus_core_ops = {
950 .command = azx_send_cmd,
951 .get_response = azx_get_response,
954 #ifdef CONFIG_SND_HDA_DSP_LOADER
956 * DSP loading code (e.g. for CA0132)
959 /* use the first stream for loading DSP */
960 static struct azx_dev *
961 azx_get_dsp_loader_dev(struct azx *chip)
963 struct hdac_bus *bus = azx_bus(chip);
964 struct hdac_stream *s;
966 list_for_each_entry(s, &bus->stream_list, list)
967 if (s->index == chip->playback_index_offset)
968 return stream_to_azx_dev(s);
970 return NULL;
973 int snd_hda_codec_load_dsp_prepare(struct hda_codec *codec, unsigned int format,
974 unsigned int byte_size,
975 struct snd_dma_buffer *bufp)
977 struct hdac_bus *bus = &codec->bus->core;
978 struct azx *chip = bus_to_azx(bus);
979 struct azx_dev *azx_dev;
980 struct hdac_stream *hstr;
981 bool saved = false;
982 int err;
984 azx_dev = azx_get_dsp_loader_dev(chip);
985 hstr = azx_stream(azx_dev);
986 spin_lock_irq(&bus->reg_lock);
987 if (hstr->opened) {
988 chip->saved_azx_dev = *azx_dev;
989 saved = true;
991 spin_unlock_irq(&bus->reg_lock);
993 err = snd_hdac_dsp_prepare(hstr, format, byte_size, bufp);
994 if (err < 0) {
995 spin_lock_irq(&bus->reg_lock);
996 if (saved)
997 *azx_dev = chip->saved_azx_dev;
998 spin_unlock_irq(&bus->reg_lock);
999 return err;
1002 hstr->prepared = 0;
1003 return err;
1005 EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_prepare);
1007 void snd_hda_codec_load_dsp_trigger(struct hda_codec *codec, bool start)
1009 struct hdac_bus *bus = &codec->bus->core;
1010 struct azx *chip = bus_to_azx(bus);
1011 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
1013 snd_hdac_dsp_trigger(azx_stream(azx_dev), start);
1015 EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_trigger);
1017 void snd_hda_codec_load_dsp_cleanup(struct hda_codec *codec,
1018 struct snd_dma_buffer *dmab)
1020 struct hdac_bus *bus = &codec->bus->core;
1021 struct azx *chip = bus_to_azx(bus);
1022 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
1023 struct hdac_stream *hstr = azx_stream(azx_dev);
1025 if (!dmab->area || !hstr->locked)
1026 return;
1028 snd_hdac_dsp_cleanup(hstr, dmab);
1029 spin_lock_irq(&bus->reg_lock);
1030 if (hstr->opened)
1031 *azx_dev = chip->saved_azx_dev;
1032 hstr->locked = false;
1033 spin_unlock_irq(&bus->reg_lock);
1035 EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_cleanup);
1036 #endif /* CONFIG_SND_HDA_DSP_LOADER */
1039 * reset and start the controller registers
1041 void azx_init_chip(struct azx *chip, bool full_reset)
1043 if (snd_hdac_bus_init_chip(azx_bus(chip), full_reset)) {
1044 /* correct RINTCNT for CXT */
1045 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
1046 azx_writew(chip, RINTCNT, 0xc0);
1049 EXPORT_SYMBOL_GPL(azx_init_chip);
1051 void azx_stop_all_streams(struct azx *chip)
1053 struct hdac_bus *bus = azx_bus(chip);
1054 struct hdac_stream *s;
1056 list_for_each_entry(s, &bus->stream_list, list)
1057 snd_hdac_stream_stop(s);
1059 EXPORT_SYMBOL_GPL(azx_stop_all_streams);
1061 void azx_stop_chip(struct azx *chip)
1063 snd_hdac_bus_stop_chip(azx_bus(chip));
1065 EXPORT_SYMBOL_GPL(azx_stop_chip);
1068 * interrupt handler
1070 static void stream_update(struct hdac_bus *bus, struct hdac_stream *s)
1072 struct azx *chip = bus_to_azx(bus);
1073 struct azx_dev *azx_dev = stream_to_azx_dev(s);
1075 /* check whether this IRQ is really acceptable */
1076 if (!chip->ops->position_check ||
1077 chip->ops->position_check(chip, azx_dev)) {
1078 spin_unlock(&bus->reg_lock);
1079 snd_pcm_period_elapsed(azx_stream(azx_dev)->substream);
1080 spin_lock(&bus->reg_lock);
1084 irqreturn_t azx_interrupt(int irq, void *dev_id)
1086 struct azx *chip = dev_id;
1087 struct hdac_bus *bus = azx_bus(chip);
1088 u32 status;
1089 bool active, handled = false;
1090 int repeat = 0; /* count for avoiding endless loop */
1092 #ifdef CONFIG_PM
1093 if (azx_has_pm_runtime(chip))
1094 if (!pm_runtime_active(chip->card->dev))
1095 return IRQ_NONE;
1096 #endif
1098 spin_lock(&bus->reg_lock);
1100 if (chip->disabled)
1101 goto unlock;
1103 do {
1104 status = azx_readl(chip, INTSTS);
1105 if (status == 0 || status == 0xffffffff)
1106 break;
1108 handled = true;
1109 active = false;
1110 if (snd_hdac_bus_handle_stream_irq(bus, status, stream_update))
1111 active = true;
1113 status = azx_readb(chip, RIRBSTS);
1114 if (status & RIRB_INT_MASK) {
1116 * Clearing the interrupt status here ensures that no
1117 * interrupt gets masked after the RIRB wp is read in
1118 * snd_hdac_bus_update_rirb. This avoids a possible
1119 * race condition where codec response in RIRB may
1120 * remain unserviced by IRQ, eventually falling back
1121 * to polling mode in azx_rirb_get_response.
1123 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1124 active = true;
1125 if (status & RIRB_INT_RESPONSE) {
1126 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
1127 udelay(80);
1128 snd_hdac_bus_update_rirb(bus);
1131 } while (active && ++repeat < 10);
1133 unlock:
1134 spin_unlock(&bus->reg_lock);
1136 return IRQ_RETVAL(handled);
1138 EXPORT_SYMBOL_GPL(azx_interrupt);
1141 * Codec initerface
1145 * Probe the given codec address
1147 static int probe_codec(struct azx *chip, int addr)
1149 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1150 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1151 struct hdac_bus *bus = azx_bus(chip);
1152 int err;
1153 unsigned int res = -1;
1155 mutex_lock(&bus->cmd_mutex);
1156 chip->probing = 1;
1157 azx_send_cmd(bus, cmd);
1158 err = azx_get_response(bus, addr, &res);
1159 chip->probing = 0;
1160 mutex_unlock(&bus->cmd_mutex);
1161 if (err < 0 || res == -1)
1162 return -EIO;
1163 dev_dbg(chip->card->dev, "codec #%d probed OK\n", addr);
1164 return 0;
1167 void snd_hda_bus_reset(struct hda_bus *bus)
1169 struct azx *chip = bus_to_azx(&bus->core);
1171 bus->in_reset = 1;
1172 azx_stop_chip(chip);
1173 azx_init_chip(chip, true);
1174 if (bus->core.chip_init)
1175 snd_hda_bus_reset_codecs(bus);
1176 bus->in_reset = 0;
1179 /* HD-audio bus initialization */
1180 int azx_bus_init(struct azx *chip, const char *model)
1182 struct hda_bus *bus = &chip->bus;
1183 int err;
1185 err = snd_hdac_bus_init(&bus->core, chip->card->dev, &bus_core_ops);
1186 if (err < 0)
1187 return err;
1189 bus->card = chip->card;
1190 mutex_init(&bus->prepare_mutex);
1191 bus->pci = chip->pci;
1192 bus->modelname = model;
1193 bus->mixer_assigned = -1;
1194 bus->core.snoop = azx_snoop(chip);
1195 if (chip->get_position[0] != azx_get_pos_lpib ||
1196 chip->get_position[1] != azx_get_pos_lpib)
1197 bus->core.use_posbuf = true;
1198 bus->core.bdl_pos_adj = chip->bdl_pos_adj;
1199 if (chip->driver_caps & AZX_DCAPS_CORBRP_SELF_CLEAR)
1200 bus->core.corbrp_self_clear = true;
1202 if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY)
1203 bus->core.align_bdle_4k = true;
1205 /* enable sync_write flag for stable communication as default */
1206 bus->core.sync_write = 1;
1208 return 0;
1210 EXPORT_SYMBOL_GPL(azx_bus_init);
1212 /* Probe codecs */
1213 int azx_probe_codecs(struct azx *chip, unsigned int max_slots)
1215 struct hdac_bus *bus = azx_bus(chip);
1216 int c, codecs, err;
1218 codecs = 0;
1219 if (!max_slots)
1220 max_slots = AZX_DEFAULT_CODECS;
1222 /* First try to probe all given codec slots */
1223 for (c = 0; c < max_slots; c++) {
1224 if ((bus->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1225 if (probe_codec(chip, c) < 0) {
1226 /* Some BIOSen give you wrong codec addresses
1227 * that don't exist
1229 dev_warn(chip->card->dev,
1230 "Codec #%d probe error; disabling it...\n", c);
1231 bus->codec_mask &= ~(1 << c);
1232 /* More badly, accessing to a non-existing
1233 * codec often screws up the controller chip,
1234 * and disturbs the further communications.
1235 * Thus if an error occurs during probing,
1236 * better to reset the controller chip to
1237 * get back to the sanity state.
1239 azx_stop_chip(chip);
1240 azx_init_chip(chip, true);
1245 /* Then create codec instances */
1246 for (c = 0; c < max_slots; c++) {
1247 if ((bus->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1248 struct hda_codec *codec;
1249 err = snd_hda_codec_new(&chip->bus, chip->card, c, &codec);
1250 if (err < 0)
1251 continue;
1252 codec->jackpoll_interval = chip->jackpoll_interval;
1253 codec->beep_mode = chip->beep_mode;
1254 codecs++;
1257 if (!codecs) {
1258 dev_err(chip->card->dev, "no codecs initialized\n");
1259 return -ENXIO;
1261 return 0;
1263 EXPORT_SYMBOL_GPL(azx_probe_codecs);
1265 /* configure each codec instance */
1266 int azx_codec_configure(struct azx *chip)
1268 struct hda_codec *codec, *next;
1270 /* use _safe version here since snd_hda_codec_configure() deregisters
1271 * the device upon error and deletes itself from the bus list.
1273 list_for_each_codec_safe(codec, next, &chip->bus) {
1274 snd_hda_codec_configure(codec);
1277 if (!azx_bus(chip)->num_codecs)
1278 return -ENODEV;
1279 return 0;
1281 EXPORT_SYMBOL_GPL(azx_codec_configure);
1283 static int stream_direction(struct azx *chip, unsigned char index)
1285 if (index >= chip->capture_index_offset &&
1286 index < chip->capture_index_offset + chip->capture_streams)
1287 return SNDRV_PCM_STREAM_CAPTURE;
1288 return SNDRV_PCM_STREAM_PLAYBACK;
1291 /* initialize SD streams */
1292 int azx_init_streams(struct azx *chip)
1294 int i;
1295 int stream_tags[2] = { 0, 0 };
1297 /* initialize each stream (aka device)
1298 * assign the starting bdl address to each stream (device)
1299 * and initialize
1301 for (i = 0; i < chip->num_streams; i++) {
1302 struct azx_dev *azx_dev = kzalloc(sizeof(*azx_dev), GFP_KERNEL);
1303 int dir, tag;
1305 if (!azx_dev)
1306 return -ENOMEM;
1308 dir = stream_direction(chip, i);
1309 /* stream tag must be unique throughout
1310 * the stream direction group,
1311 * valid values 1...15
1312 * use separate stream tag if the flag
1313 * AZX_DCAPS_SEPARATE_STREAM_TAG is used
1315 if (chip->driver_caps & AZX_DCAPS_SEPARATE_STREAM_TAG)
1316 tag = ++stream_tags[dir];
1317 else
1318 tag = i + 1;
1319 snd_hdac_stream_init(azx_bus(chip), azx_stream(azx_dev),
1320 i, dir, tag);
1323 return 0;
1325 EXPORT_SYMBOL_GPL(azx_init_streams);
1327 void azx_free_streams(struct azx *chip)
1329 struct hdac_bus *bus = azx_bus(chip);
1330 struct hdac_stream *s;
1332 while (!list_empty(&bus->stream_list)) {
1333 s = list_first_entry(&bus->stream_list, struct hdac_stream, list);
1334 list_del(&s->list);
1335 kfree(stream_to_azx_dev(s));
1338 EXPORT_SYMBOL_GPL(azx_free_streams);