ALSA: hda - Workaround for crackled sound on AMD controller (1022:1457)
[linux-2.6-block.git] / sound / pci / hda / hda_controller.c
CommitLineData
c942fddf 1// SPDX-License-Identifier: GPL-2.0-or-later
05e84878
DR
2/*
3 *
4 * Implementation of primary alsa driver code base for Intel HD Audio.
5 *
6 * Copyright(c) 2004 Intel Corporation. All rights reserved.
7 *
8 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
9 * PeiSen Hou <pshou@realtek.com.tw>
05e84878
DR
10 */
11
12#include <linux/clocksource.h>
13#include <linux/delay.h>
f0b1df88 14#include <linux/interrupt.h>
05e84878
DR
15#include <linux/kernel.h>
16#include <linux/module.h>
154867cf 17#include <linux/pm_runtime.h>
05e84878 18#include <linux/slab.h>
bfcba288
GS
19
20#ifdef CONFIG_X86
21/* for art-tsc conversion */
22#include <asm/tsc.h>
23#endif
24
05e84878
DR
25#include <sound/core.h>
26#include <sound/initval.h>
05e84878
DR
27#include "hda_controller.h"
28
43db4a59 29#define CREATE_TRACE_POINTS
18486508 30#include "hda_controller_trace.h"
43db4a59 31
2b5fd6c2 32/* DSP lock helpers */
7833c3f8
TI
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))
2b5fd6c2 36
05e84878
DR
37/* assign a stream for the PCM */
38static inline struct azx_dev *
39azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
40{
7833c3f8
TI
41 struct hdac_stream *s;
42
43 s = snd_hdac_stream_assign(azx_bus(chip), substream);
44 if (!s)
45 return NULL;
46 return stream_to_azx_dev(s);
05e84878
DR
47}
48
49/* release the assigned stream */
50static inline void azx_release_device(struct azx_dev *azx_dev)
51{
7833c3f8 52 snd_hdac_stream_release(azx_stream(azx_dev));
05e84878
DR
53}
54
820cc6cf
TI
55static inline struct hda_pcm_stream *
56to_hda_pcm_stream(struct snd_pcm_substream *substream)
57{
58 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
59 return &apcm->info->stream[substream->stream];
60}
61
05e84878
DR
62static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream,
63 u64 nsec)
64{
65 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
820cc6cf 66 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
05e84878
DR
67 u64 codec_frames, codec_nsecs;
68
69 if (!hinfo->ops.get_delay)
70 return nsec;
71
72 codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream);
73 codec_nsecs = div_u64(codec_frames * 1000000000LL,
74 substream->runtime->rate);
75
76 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
77 return nsec + codec_nsecs;
78
79 return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0;
80}
81
05e84878
DR
82/*
83 * PCM ops
84 */
85
86static int azx_pcm_close(struct snd_pcm_substream *substream)
87{
88 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
820cc6cf 89 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
05e84878
DR
90 struct azx *chip = apcm->chip;
91 struct azx_dev *azx_dev = get_azx_dev(substream);
05e84878 92
18486508 93 trace_azx_pcm_close(chip, azx_dev);
05e84878 94 mutex_lock(&chip->open_mutex);
05e84878 95 azx_release_device(azx_dev);
61ca4107
TI
96 if (hinfo->ops.close)
97 hinfo->ops.close(hinfo, apcm->codec, substream);
05e84878
DR
98 snd_hda_power_down(apcm->codec);
99 mutex_unlock(&chip->open_mutex);
9a6246ff 100 snd_hda_codec_pcm_put(apcm->info);
05e84878
DR
101 return 0;
102}
103
104static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
105 struct snd_pcm_hw_params *hw_params)
106{
107 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
108 struct azx *chip = apcm->chip;
602518a2 109 struct azx_dev *azx_dev = get_azx_dev(substream);
05e84878
DR
110 int ret;
111
18486508 112 trace_azx_pcm_hw_params(chip, azx_dev);
602518a2
TI
113 dsp_lock(azx_dev);
114 if (dsp_is_locked(azx_dev)) {
05e84878
DR
115 ret = -EBUSY;
116 goto unlock;
117 }
118
602518a2
TI
119 azx_dev->core.bufsize = 0;
120 azx_dev->core.period_bytes = 0;
121 azx_dev->core.format_val = 0;
193c7e14
TI
122 ret = snd_pcm_lib_malloc_pages(substream,
123 params_buffer_bytes(hw_params));
124
05e84878 125unlock:
602518a2 126 dsp_unlock(azx_dev);
05e84878
DR
127 return ret;
128}
129
130static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
131{
132 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
133 struct azx_dev *azx_dev = get_azx_dev(substream);
820cc6cf 134 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
05e84878
DR
135 int err;
136
137 /* reset BDL address */
138 dsp_lock(azx_dev);
ccc98865
TI
139 if (!dsp_is_locked(azx_dev))
140 snd_hdac_stream_cleanup(azx_stream(azx_dev));
05e84878
DR
141
142 snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
143
193c7e14 144 err = snd_pcm_lib_free_pages(substream);
6d23c8f5 145 azx_stream(azx_dev)->prepared = 0;
05e84878
DR
146 dsp_unlock(azx_dev);
147 return err;
148}
149
150static int azx_pcm_prepare(struct snd_pcm_substream *substream)
151{
152 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
153 struct azx *chip = apcm->chip;
154 struct azx_dev *azx_dev = get_azx_dev(substream);
820cc6cf 155 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
05e84878 156 struct snd_pcm_runtime *runtime = substream->runtime;
0dd76f36 157 unsigned int format_val, stream_tag;
05e84878
DR
158 int err;
159 struct hda_spdif_out *spdif =
160 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
161 unsigned short ctls = spdif ? spdif->ctls : 0;
162
18486508 163 trace_azx_pcm_prepare(chip, azx_dev);
05e84878
DR
164 dsp_lock(azx_dev);
165 if (dsp_is_locked(azx_dev)) {
166 err = -EBUSY;
167 goto unlock;
168 }
169
7833c3f8 170 snd_hdac_stream_reset(azx_stream(azx_dev));
b7d023e1 171 format_val = snd_hdac_calc_stream_format(runtime->rate,
05e84878
DR
172 runtime->channels,
173 runtime->format,
174 hinfo->maxbps,
175 ctls);
176 if (!format_val) {
177 dev_err(chip->card->dev,
178 "invalid format_val, rate=%d, ch=%d, format=%d\n",
179 runtime->rate, runtime->channels, runtime->format);
180 err = -EINVAL;
181 goto unlock;
182 }
183
0dd76f36
TI
184 err = snd_hdac_stream_set_params(azx_stream(azx_dev), format_val);
185 if (err < 0)
186 goto unlock;
05e84878 187
ccc98865 188 snd_hdac_stream_setup(azx_stream(azx_dev));
05e84878 189
7833c3f8 190 stream_tag = azx_dev->core.stream_tag;
05e84878
DR
191 /* CA-IBG chips need the playback stream starting from 1 */
192 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
193 stream_tag > chip->capture_streams)
194 stream_tag -= chip->capture_streams;
195 err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
7833c3f8 196 azx_dev->core.format_val, substream);
05e84878
DR
197
198 unlock:
199 if (!err)
6d23c8f5 200 azx_stream(azx_dev)->prepared = 1;
05e84878
DR
201 dsp_unlock(azx_dev);
202 return err;
203}
204
205static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
206{
207 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
208 struct azx *chip = apcm->chip;
a41d1224 209 struct hdac_bus *bus = azx_bus(chip);
05e84878
DR
210 struct azx_dev *azx_dev;
211 struct snd_pcm_substream *s;
ccc98865
TI
212 struct hdac_stream *hstr;
213 bool start;
214 int sbits = 0;
215 int sync_reg;
05e84878
DR
216
217 azx_dev = get_azx_dev(substream);
43db4a59
TI
218 trace_azx_pcm_trigger(chip, azx_dev, cmd);
219
ccc98865
TI
220 hstr = azx_stream(azx_dev);
221 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
222 sync_reg = AZX_REG_OLD_SSYNC;
223 else
224 sync_reg = AZX_REG_SSYNC;
05e84878 225
6d23c8f5 226 if (dsp_is_locked(azx_dev) || !hstr->prepared)
05e84878
DR
227 return -EPIPE;
228
229 switch (cmd) {
230 case SNDRV_PCM_TRIGGER_START:
05e84878
DR
231 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
232 case SNDRV_PCM_TRIGGER_RESUME:
ccc98865 233 start = true;
05e84878
DR
234 break;
235 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
236 case SNDRV_PCM_TRIGGER_SUSPEND:
237 case SNDRV_PCM_TRIGGER_STOP:
ccc98865 238 start = false;
05e84878
DR
239 break;
240 default:
241 return -EINVAL;
242 }
243
244 snd_pcm_group_for_each_entry(s, substream) {
245 if (s->pcm->card != substream->pcm->card)
246 continue;
247 azx_dev = get_azx_dev(s);
7833c3f8 248 sbits |= 1 << azx_dev->core.index;
05e84878
DR
249 snd_pcm_trigger_done(s, substream);
250 }
251
a41d1224 252 spin_lock(&bus->reg_lock);
05e84878
DR
253
254 /* first, set SYNC bits of corresponding streams */
ccc98865 255 snd_hdac_stream_sync_trigger(hstr, true, sbits, sync_reg);
05e84878
DR
256
257 snd_pcm_group_for_each_entry(s, substream) {
258 if (s->pcm->card != substream->pcm->card)
259 continue;
260 azx_dev = get_azx_dev(s);
261 if (start) {
7833c3f8
TI
262 azx_dev->insufficient = 1;
263 snd_hdac_stream_start(azx_stream(azx_dev), true);
05e84878 264 } else {
7833c3f8 265 snd_hdac_stream_stop(azx_stream(azx_dev));
05e84878 266 }
05e84878 267 }
a41d1224 268 spin_unlock(&bus->reg_lock);
ccc98865
TI
269
270 snd_hdac_stream_sync(hstr, start, sbits);
271
a41d1224 272 spin_lock(&bus->reg_lock);
05e84878 273 /* reset SYNC bits */
ccc98865
TI
274 snd_hdac_stream_sync_trigger(hstr, false, sbits, sync_reg);
275 if (start)
276 snd_hdac_stream_timecounter_init(hstr, sbits);
a41d1224 277 spin_unlock(&bus->reg_lock);
05e84878
DR
278 return 0;
279}
280
b6050ef6 281unsigned int azx_get_pos_lpib(struct azx *chip, struct azx_dev *azx_dev)
05e84878 282{
7833c3f8 283 return snd_hdac_stream_get_pos_lpib(azx_stream(azx_dev));
b6050ef6
TI
284}
285EXPORT_SYMBOL_GPL(azx_get_pos_lpib);
05e84878 286
b6050ef6
TI
287unsigned int azx_get_pos_posbuf(struct azx *chip, struct azx_dev *azx_dev)
288{
7833c3f8 289 return snd_hdac_stream_get_pos_posbuf(azx_stream(azx_dev));
05e84878 290}
b6050ef6 291EXPORT_SYMBOL_GPL(azx_get_pos_posbuf);
05e84878
DR
292
293unsigned int azx_get_position(struct azx *chip,
b6050ef6 294 struct azx_dev *azx_dev)
05e84878 295{
7833c3f8 296 struct snd_pcm_substream *substream = azx_dev->core.substream;
05e84878
DR
297 unsigned int pos;
298 int stream = substream->stream;
05e84878
DR
299 int delay = 0;
300
b6050ef6
TI
301 if (chip->get_position[stream])
302 pos = chip->get_position[stream](chip, azx_dev);
303 else /* use the position buffer as default */
304 pos = azx_get_pos_posbuf(chip, azx_dev);
05e84878 305
7833c3f8 306 if (pos >= azx_dev->core.bufsize)
05e84878
DR
307 pos = 0;
308
05e84878 309 if (substream->runtime) {
b6050ef6 310 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
820cc6cf 311 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
b6050ef6
TI
312
313 if (chip->get_delay[stream])
314 delay += chip->get_delay[stream](chip, azx_dev, pos);
05e84878
DR
315 if (hinfo->ops.get_delay)
316 delay += hinfo->ops.get_delay(hinfo, apcm->codec,
317 substream);
318 substream->runtime->delay = delay;
319 }
320
43db4a59 321 trace_azx_get_position(chip, azx_dev, pos, delay);
05e84878
DR
322 return pos;
323}
324EXPORT_SYMBOL_GPL(azx_get_position);
325
326static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
327{
328 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
329 struct azx *chip = apcm->chip;
330 struct azx_dev *azx_dev = get_azx_dev(substream);
331 return bytes_to_frames(substream->runtime,
b6050ef6 332 azx_get_position(chip, azx_dev));
05e84878
DR
333}
334
bfcba288
GS
335/*
336 * azx_scale64: Scale base by mult/div while not overflowing sanely
337 *
338 * Derived from scale64_check_overflow in kernel/time/timekeeping.c
339 *
340 * The tmestamps for a 48Khz stream can overflow after (2^64/10^9)/48K which
341 * is about 384307 ie ~4.5 days.
342 *
343 * This scales the calculation so that overflow will happen but after 2^64 /
344 * 48000 secs, which is pretty large!
345 *
346 * In caln below:
347 * base may overflow, but since there isn’t any additional division
348 * performed on base it’s OK
349 * rem can’t overflow because both are 32-bit values
350 */
351
352#ifdef CONFIG_X86
353static u64 azx_scale64(u64 base, u32 num, u32 den)
354{
355 u64 rem;
356
357 rem = do_div(base, den);
358
359 base *= num;
360 rem *= num;
361
362 do_div(rem, den);
363
364 return base + rem;
365}
366
367static int azx_get_sync_time(ktime_t *device,
368 struct system_counterval_t *system, void *ctx)
369{
370 struct snd_pcm_substream *substream = ctx;
371 struct azx_dev *azx_dev = get_azx_dev(substream);
372 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
373 struct azx *chip = apcm->chip;
374 struct snd_pcm_runtime *runtime;
375 u64 ll_counter, ll_counter_l, ll_counter_h;
376 u64 tsc_counter, tsc_counter_l, tsc_counter_h;
377 u32 wallclk_ctr, wallclk_cycles;
378 bool direction;
379 u32 dma_select;
380 u32 timeout = 200;
381 u32 retry_count = 0;
382
383 runtime = substream->runtime;
384
385 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
386 direction = 1;
387 else
388 direction = 0;
389
390 /* 0th stream tag is not used, so DMA ch 0 is for 1st stream tag */
391 do {
392 timeout = 100;
393 dma_select = (direction << GTSCC_CDMAS_DMA_DIR_SHIFT) |
394 (azx_dev->core.stream_tag - 1);
395 snd_hdac_chip_writel(azx_bus(chip), GTSCC, dma_select);
396
397 /* Enable the capture */
398 snd_hdac_chip_updatel(azx_bus(chip), GTSCC, 0, GTSCC_TSCCI_MASK);
399
400 while (timeout) {
401 if (snd_hdac_chip_readl(azx_bus(chip), GTSCC) &
402 GTSCC_TSCCD_MASK)
403 break;
404
405 timeout--;
406 }
407
408 if (!timeout) {
409 dev_err(chip->card->dev, "GTSCC capture Timedout!\n");
410 return -EIO;
411 }
412
413 /* Read wall clock counter */
414 wallclk_ctr = snd_hdac_chip_readl(azx_bus(chip), WALFCC);
415
416 /* Read TSC counter */
417 tsc_counter_l = snd_hdac_chip_readl(azx_bus(chip), TSCCL);
418 tsc_counter_h = snd_hdac_chip_readl(azx_bus(chip), TSCCU);
419
420 /* Read Link counter */
421 ll_counter_l = snd_hdac_chip_readl(azx_bus(chip), LLPCL);
422 ll_counter_h = snd_hdac_chip_readl(azx_bus(chip), LLPCU);
423
424 /* Ack: registers read done */
425 snd_hdac_chip_writel(azx_bus(chip), GTSCC, GTSCC_TSCCD_SHIFT);
426
427 tsc_counter = (tsc_counter_h << TSCCU_CCU_SHIFT) |
428 tsc_counter_l;
429
430 ll_counter = (ll_counter_h << LLPC_CCU_SHIFT) | ll_counter_l;
431 wallclk_cycles = wallclk_ctr & WALFCC_CIF_MASK;
432
433 /*
434 * An error occurs near frame "rollover". The clocks in
435 * frame value indicates whether this error may have
436 * occurred. Here we use the value of 10 i.e.,
437 * HDA_MAX_CYCLE_OFFSET
438 */
439 if (wallclk_cycles < HDA_MAX_CYCLE_VALUE - HDA_MAX_CYCLE_OFFSET
440 && wallclk_cycles > HDA_MAX_CYCLE_OFFSET)
441 break;
442
443 /*
444 * Sleep before we read again, else we may again get
445 * value near to MAX_CYCLE. Try to sleep for different
446 * amount of time so we dont hit the same number again
447 */
448 udelay(retry_count++);
449
450 } while (retry_count != HDA_MAX_CYCLE_READ_RETRY);
451
452 if (retry_count == HDA_MAX_CYCLE_READ_RETRY) {
453 dev_err_ratelimited(chip->card->dev,
454 "Error in WALFCC cycle count\n");
455 return -EIO;
456 }
457
458 *device = ns_to_ktime(azx_scale64(ll_counter,
459 NSEC_PER_SEC, runtime->rate));
460 *device = ktime_add_ns(*device, (wallclk_cycles * NSEC_PER_SEC) /
461 ((HDA_MAX_CYCLE_VALUE + 1) * runtime->rate));
462
463 *system = convert_art_to_tsc(tsc_counter);
464
465 return 0;
466}
467
468#else
469static int azx_get_sync_time(ktime_t *device,
470 struct system_counterval_t *system, void *ctx)
471{
472 return -ENXIO;
473}
474#endif
475
476static int azx_get_crosststamp(struct snd_pcm_substream *substream,
477 struct system_device_crosststamp *xtstamp)
478{
479 return get_device_system_crosststamp(azx_get_sync_time,
480 substream, NULL, xtstamp);
481}
482
483static inline bool is_link_time_supported(struct snd_pcm_runtime *runtime,
484 struct snd_pcm_audio_tstamp_config *ts)
485{
486 if (runtime->hw.info & SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME)
487 if (ts->type_requested == SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED)
488 return true;
489
490 return false;
491}
492
9e94df3a
PLB
493static int azx_get_time_info(struct snd_pcm_substream *substream,
494 struct timespec *system_ts, struct timespec *audio_ts,
495 struct snd_pcm_audio_tstamp_config *audio_tstamp_config,
496 struct snd_pcm_audio_tstamp_report *audio_tstamp_report)
05e84878
DR
497{
498 struct azx_dev *azx_dev = get_azx_dev(substream);
bfcba288
GS
499 struct snd_pcm_runtime *runtime = substream->runtime;
500 struct system_device_crosststamp xtstamp;
501 int ret;
05e84878
DR
502 u64 nsec;
503
9e94df3a
PLB
504 if ((substream->runtime->hw.info & SNDRV_PCM_INFO_HAS_LINK_ATIME) &&
505 (audio_tstamp_config->type_requested == SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK)) {
05e84878 506
9e94df3a
PLB
507 snd_pcm_gettime(substream->runtime, system_ts);
508
7833c3f8 509 nsec = timecounter_read(&azx_dev->core.tc);
9e94df3a
PLB
510 nsec = div_u64(nsec, 3); /* can be optimized */
511 if (audio_tstamp_config->report_delay)
512 nsec = azx_adjust_codec_delay(substream, nsec);
513
514 *audio_ts = ns_to_timespec(nsec);
515
516 audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK;
517 audio_tstamp_report->accuracy_report = 1; /* rest of structure is valid */
518 audio_tstamp_report->accuracy = 42; /* 24 MHz WallClock == 42ns resolution */
519
bfcba288
GS
520 } else if (is_link_time_supported(runtime, audio_tstamp_config)) {
521
522 ret = azx_get_crosststamp(substream, &xtstamp);
523 if (ret)
524 return ret;
525
526 switch (runtime->tstamp_type) {
527 case SNDRV_PCM_TSTAMP_TYPE_MONOTONIC:
528 return -EINVAL;
529
530 case SNDRV_PCM_TSTAMP_TYPE_MONOTONIC_RAW:
531 *system_ts = ktime_to_timespec(xtstamp.sys_monoraw);
532 break;
533
534 default:
535 *system_ts = ktime_to_timespec(xtstamp.sys_realtime);
536 break;
537
538 }
539
540 *audio_ts = ktime_to_timespec(xtstamp.device);
541
542 audio_tstamp_report->actual_type =
543 SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK_SYNCHRONIZED;
544 audio_tstamp_report->accuracy_report = 1;
545 /* 24 MHz WallClock == 42ns resolution */
546 audio_tstamp_report->accuracy = 42;
547
548 } else {
9e94df3a 549 audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT;
bfcba288 550 }
05e84878
DR
551
552 return 0;
553}
554
555static struct snd_pcm_hardware azx_pcm_hw = {
556 .info = (SNDRV_PCM_INFO_MMAP |
557 SNDRV_PCM_INFO_INTERLEAVED |
558 SNDRV_PCM_INFO_BLOCK_TRANSFER |
559 SNDRV_PCM_INFO_MMAP_VALID |
560 /* No full-resume yet implemented */
561 /* SNDRV_PCM_INFO_RESUME |*/
562 SNDRV_PCM_INFO_PAUSE |
563 SNDRV_PCM_INFO_SYNC_START |
9e94df3a
PLB
564 SNDRV_PCM_INFO_HAS_WALL_CLOCK | /* legacy */
565 SNDRV_PCM_INFO_HAS_LINK_ATIME |
05e84878
DR
566 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
567 .formats = SNDRV_PCM_FMTBIT_S16_LE,
568 .rates = SNDRV_PCM_RATE_48000,
569 .rate_min = 48000,
570 .rate_max = 48000,
571 .channels_min = 2,
572 .channels_max = 2,
573 .buffer_bytes_max = AZX_MAX_BUF_SIZE,
574 .period_bytes_min = 128,
575 .period_bytes_max = AZX_MAX_BUF_SIZE / 2,
576 .periods_min = 2,
577 .periods_max = AZX_MAX_FRAG,
578 .fifo_size = 0,
579};
580
581static int azx_pcm_open(struct snd_pcm_substream *substream)
582{
583 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
820cc6cf 584 struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
05e84878
DR
585 struct azx *chip = apcm->chip;
586 struct azx_dev *azx_dev;
587 struct snd_pcm_runtime *runtime = substream->runtime;
05e84878
DR
588 int err;
589 int buff_step;
590
9a6246ff 591 snd_hda_codec_pcm_get(apcm->info);
05e84878
DR
592 mutex_lock(&chip->open_mutex);
593 azx_dev = azx_assign_device(chip, substream);
18486508 594 trace_azx_pcm_open(chip, azx_dev);
05e84878 595 if (azx_dev == NULL) {
61ca4107
TI
596 err = -EBUSY;
597 goto unlock;
05e84878 598 }
ccc98865 599 runtime->private_data = azx_dev;
50279d9b 600
05e84878 601 runtime->hw = azx_pcm_hw;
c1c6c877
TI
602 if (chip->gts_present)
603 runtime->hw.info |= SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME;
05e84878
DR
604 runtime->hw.channels_min = hinfo->channels_min;
605 runtime->hw.channels_max = hinfo->channels_max;
606 runtime->hw.formats = hinfo->formats;
607 runtime->hw.rates = hinfo->rates;
608 snd_pcm_limit_hw_rates(runtime);
609 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
610
611 /* avoid wrap-around with wall-clock */
612 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME,
613 20,
614 178000000);
615
c02f77d3
TI
616 /* by some reason, the playback stream stalls on PulseAudio with
617 * tsched=1 when a capture stream triggers. Until we figure out the
618 * real cause, disable tsched mode by telling the PCM info flag.
619 */
620 if (chip->driver_caps & AZX_DCAPS_AMD_WORKAROUND)
621 runtime->hw.info |= SNDRV_PCM_INFO_BATCH;
622
05e84878
DR
623 if (chip->align_buffer_size)
624 /* constrain buffer sizes to be multiple of 128
625 bytes. This is more efficient in terms of memory
626 access but isn't required by the HDA spec and
627 prevents users from specifying exact period/buffer
628 sizes. For example for 44.1kHz, a period size set
629 to 20ms will be rounded to 19.59ms. */
630 buff_step = 128;
631 else
632 /* Don't enforce steps on buffer sizes, still need to
633 be multiple of 4 bytes (HDA spec). Tested on Intel
634 HDA controllers, may not work on all devices where
635 option needs to be disabled */
636 buff_step = 4;
637
638 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
639 buff_step);
640 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
641 buff_step);
cc72da7d 642 snd_hda_power_up(apcm->codec);
61ca4107
TI
643 if (hinfo->ops.open)
644 err = hinfo->ops.open(hinfo, apcm->codec, substream);
645 else
646 err = -ENODEV;
05e84878
DR
647 if (err < 0) {
648 azx_release_device(azx_dev);
61ca4107 649 goto powerdown;
05e84878
DR
650 }
651 snd_pcm_limit_hw_rates(runtime);
652 /* sanity check */
653 if (snd_BUG_ON(!runtime->hw.channels_min) ||
654 snd_BUG_ON(!runtime->hw.channels_max) ||
655 snd_BUG_ON(!runtime->hw.formats) ||
656 snd_BUG_ON(!runtime->hw.rates)) {
657 azx_release_device(azx_dev);
61ca4107
TI
658 if (hinfo->ops.close)
659 hinfo->ops.close(hinfo, apcm->codec, substream);
660 err = -EINVAL;
661 goto powerdown;
05e84878
DR
662 }
663
9e94df3a 664 /* disable LINK_ATIME timestamps for capture streams
05e84878 665 until we figure out how to handle digital inputs */
9e94df3a
PLB
666 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
667 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK; /* legacy */
668 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_LINK_ATIME;
669 }
05e84878 670
05e84878
DR
671 snd_pcm_set_sync(substream);
672 mutex_unlock(&chip->open_mutex);
673 return 0;
61ca4107
TI
674
675 powerdown:
676 snd_hda_power_down(apcm->codec);
677 unlock:
678 mutex_unlock(&chip->open_mutex);
9a6246ff 679 snd_hda_codec_pcm_put(apcm->info);
61ca4107 680 return err;
05e84878
DR
681}
682
683static int azx_pcm_mmap(struct snd_pcm_substream *substream,
684 struct vm_area_struct *area)
685{
686 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
687 struct azx *chip = apcm->chip;
688 if (chip->ops->pcm_mmap_prepare)
689 chip->ops->pcm_mmap_prepare(substream, area);
690 return snd_pcm_lib_default_mmap(substream, area);
691}
692
6769e988 693static const struct snd_pcm_ops azx_pcm_ops = {
05e84878
DR
694 .open = azx_pcm_open,
695 .close = azx_pcm_close,
696 .ioctl = snd_pcm_lib_ioctl,
697 .hw_params = azx_pcm_hw_params,
698 .hw_free = azx_pcm_hw_free,
699 .prepare = azx_pcm_prepare,
700 .trigger = azx_pcm_trigger,
701 .pointer = azx_pcm_pointer,
9e94df3a 702 .get_time_info = azx_get_time_info,
05e84878
DR
703 .mmap = azx_pcm_mmap,
704 .page = snd_pcm_sgbuf_ops_page,
705};
706
707static void azx_pcm_free(struct snd_pcm *pcm)
708{
709 struct azx_pcm *apcm = pcm->private_data;
710 if (apcm) {
711 list_del(&apcm->list);
820cc6cf 712 apcm->info->pcm = NULL;
05e84878
DR
713 kfree(apcm);
714 }
715}
716
717#define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
718
0a50575b
TI
719int snd_hda_attach_pcm_stream(struct hda_bus *_bus, struct hda_codec *codec,
720 struct hda_pcm *cpcm)
05e84878 721{
a41d1224
TI
722 struct hdac_bus *bus = &_bus->core;
723 struct azx *chip = bus_to_azx(bus);
05e84878
DR
724 struct snd_pcm *pcm;
725 struct azx_pcm *apcm;
726 int pcm_dev = cpcm->device;
727 unsigned int size;
728 int s, err;
fc478143 729 int type = SNDRV_DMA_TYPE_DEV_SG;
05e84878
DR
730
731 list_for_each_entry(apcm, &chip->pcm_list, list) {
732 if (apcm->pcm->device == pcm_dev) {
733 dev_err(chip->card->dev, "PCM %d already exists\n",
734 pcm_dev);
735 return -EBUSY;
736 }
737 }
738 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
739 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
740 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
741 &pcm);
742 if (err < 0)
743 return err;
744 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
745 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
a3aa60d5
BC
746 if (apcm == NULL) {
747 snd_device_free(chip->card, pcm);
05e84878 748 return -ENOMEM;
a3aa60d5 749 }
05e84878
DR
750 apcm->chip = chip;
751 apcm->pcm = pcm;
752 apcm->codec = codec;
820cc6cf 753 apcm->info = cpcm;
05e84878
DR
754 pcm->private_data = apcm;
755 pcm->private_free = azx_pcm_free;
756 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
757 pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
758 list_add_tail(&apcm->list, &chip->pcm_list);
759 cpcm->pcm = pcm;
760 for (s = 0; s < 2; s++) {
05e84878
DR
761 if (cpcm->stream[s].substreams)
762 snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
763 }
764 /* buffer pre-allocation */
765 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
766 if (size > MAX_PREALLOC_SIZE)
767 size = MAX_PREALLOC_SIZE;
fc478143
TI
768 if (chip->uc_buffer)
769 type = SNDRV_DMA_TYPE_DEV_UC_SG;
770 snd_pcm_lib_preallocate_pages_for_all(pcm, type,
05e84878
DR
771 chip->card->dev,
772 size, MAX_PREALLOC_SIZE);
05e84878
DR
773 return 0;
774}
05e84878 775
6e85dddc
DR
776static unsigned int azx_command_addr(u32 cmd)
777{
778 unsigned int addr = cmd >> 28;
779
780 if (addr >= AZX_MAX_CODECS) {
781 snd_BUG();
782 addr = 0;
783 }
784
785 return addr;
786}
787
6e85dddc 788/* receive a response */
a41d1224 789static int azx_rirb_get_response(struct hdac_bus *bus, unsigned int addr,
cad372f1 790 unsigned int *res)
6e85dddc 791{
a41d1224
TI
792 struct azx *chip = bus_to_azx(bus);
793 struct hda_bus *hbus = &chip->bus;
6e85dddc
DR
794 unsigned long timeout;
795 unsigned long loopcounter;
796 int do_poll = 0;
797
798 again:
799 timeout = jiffies + msecs_to_jiffies(1000);
800
801 for (loopcounter = 0;; loopcounter++) {
a41d1224 802 spin_lock_irq(&bus->reg_lock);
8af42130 803 if (bus->polling_mode || do_poll)
a41d1224
TI
804 snd_hdac_bus_update_rirb(bus);
805 if (!bus->rirb.cmds[addr]) {
6e85dddc 806 if (!do_poll)
8af42130 807 bus->poll_count = 0;
cad372f1 808 if (res)
a41d1224
TI
809 *res = bus->rirb.res[addr]; /* the last value */
810 spin_unlock_irq(&bus->reg_lock);
cad372f1 811 return 0;
6e85dddc 812 }
a41d1224 813 spin_unlock_irq(&bus->reg_lock);
6e85dddc
DR
814 if (time_after(jiffies, timeout))
815 break;
a41d1224 816 if (hbus->needs_damn_long_delay || loopcounter > 3000)
6e85dddc
DR
817 msleep(2); /* temporary workaround */
818 else {
819 udelay(10);
820 cond_resched();
821 }
822 }
823
a41d1224 824 if (hbus->no_response_fallback)
cad372f1 825 return -EIO;
6e85dddc 826
8af42130 827 if (!bus->polling_mode && bus->poll_count < 2) {
6e85dddc
DR
828 dev_dbg(chip->card->dev,
829 "azx_get_response timeout, polling the codec once: last cmd=0x%08x\n",
a41d1224 830 bus->last_cmd[addr]);
6e85dddc 831 do_poll = 1;
8af42130 832 bus->poll_count++;
6e85dddc
DR
833 goto again;
834 }
835
836
8af42130 837 if (!bus->polling_mode) {
6e85dddc
DR
838 dev_warn(chip->card->dev,
839 "azx_get_response timeout, switching to polling mode: last cmd=0x%08x\n",
a41d1224 840 bus->last_cmd[addr]);
8af42130 841 bus->polling_mode = 1;
6e85dddc
DR
842 goto again;
843 }
844
845 if (chip->msi) {
846 dev_warn(chip->card->dev,
847 "No response from codec, disabling MSI: last cmd=0x%08x\n",
a41d1224
TI
848 bus->last_cmd[addr]);
849 if (chip->ops->disable_msi_reset_irq &&
cad372f1
TI
850 chip->ops->disable_msi_reset_irq(chip) < 0)
851 return -EIO;
6e85dddc
DR
852 goto again;
853 }
854
855 if (chip->probing) {
856 /* If this critical timeout happens during the codec probing
857 * phase, this is likely an access to a non-existing codec
858 * slot. Better to return an error and reset the system.
859 */
cad372f1 860 return -EIO;
6e85dddc
DR
861 }
862
41438f13
TI
863 /* no fallback mechanism? */
864 if (!chip->fallback_to_single_cmd)
865 return -EIO;
866
6e85dddc
DR
867 /* a fatal communication error; need either to reset or to fallback
868 * to the single_cmd mode
869 */
a41d1224
TI
870 if (hbus->allow_bus_reset && !hbus->response_reset && !hbus->in_reset) {
871 hbus->response_reset = 1;
cad372f1 872 return -EAGAIN; /* give a chance to retry */
6e85dddc
DR
873 }
874
875 dev_err(chip->card->dev,
876 "azx_get_response timeout, switching to single_cmd mode: last cmd=0x%08x\n",
a41d1224 877 bus->last_cmd[addr]);
6e85dddc 878 chip->single_cmd = 1;
a41d1224
TI
879 hbus->response_reset = 0;
880 snd_hdac_bus_stop_cmd_io(bus);
cad372f1 881 return -EIO;
6e85dddc
DR
882}
883
884/*
885 * Use the single immediate command instead of CORB/RIRB for simplicity
886 *
887 * Note: according to Intel, this is not preferred use. The command was
888 * intended for the BIOS only, and may get confused with unsolicited
889 * responses. So, we shouldn't use it for normal operation from the
890 * driver.
891 * I left the codes, however, for debugging/testing purposes.
892 */
893
894/* receive a response */
895static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
896{
897 int timeout = 50;
898
899 while (timeout--) {
900 /* check IRV busy bit */
fb1d8ac2 901 if (azx_readw(chip, IRS) & AZX_IRS_VALID) {
6e85dddc 902 /* reuse rirb.res as the response return value */
a41d1224 903 azx_bus(chip)->rirb.res[addr] = azx_readl(chip, IR);
6e85dddc
DR
904 return 0;
905 }
906 udelay(1);
907 }
908 if (printk_ratelimit())
909 dev_dbg(chip->card->dev, "get_response timeout: IRS=0x%x\n",
910 azx_readw(chip, IRS));
a41d1224 911 azx_bus(chip)->rirb.res[addr] = -1;
6e85dddc
DR
912 return -EIO;
913}
914
915/* send a command */
a41d1224 916static int azx_single_send_cmd(struct hdac_bus *bus, u32 val)
6e85dddc 917{
a41d1224 918 struct azx *chip = bus_to_azx(bus);
6e85dddc
DR
919 unsigned int addr = azx_command_addr(val);
920 int timeout = 50;
921
a41d1224 922 bus->last_cmd[azx_command_addr(val)] = val;
6e85dddc
DR
923 while (timeout--) {
924 /* check ICB busy bit */
fb1d8ac2 925 if (!((azx_readw(chip, IRS) & AZX_IRS_BUSY))) {
6e85dddc
DR
926 /* Clear IRV valid bit */
927 azx_writew(chip, IRS, azx_readw(chip, IRS) |
fb1d8ac2 928 AZX_IRS_VALID);
6e85dddc
DR
929 azx_writel(chip, IC, val);
930 azx_writew(chip, IRS, azx_readw(chip, IRS) |
fb1d8ac2 931 AZX_IRS_BUSY);
6e85dddc
DR
932 return azx_single_wait_for_response(chip, addr);
933 }
934 udelay(1);
935 }
936 if (printk_ratelimit())
937 dev_dbg(chip->card->dev,
938 "send_cmd timeout: IRS=0x%x, val=0x%x\n",
939 azx_readw(chip, IRS), val);
940 return -EIO;
941}
942
943/* receive a response */
a41d1224 944static int azx_single_get_response(struct hdac_bus *bus, unsigned int addr,
cad372f1 945 unsigned int *res)
6e85dddc 946{
cad372f1 947 if (res)
a41d1224 948 *res = bus->rirb.res[addr];
cad372f1 949 return 0;
6e85dddc
DR
950}
951
952/*
953 * The below are the main callbacks from hda_codec.
954 *
955 * They are just the skeleton to call sub-callbacks according to the
956 * current setting of chip->single_cmd.
957 */
958
959/* send a command */
a41d1224 960static int azx_send_cmd(struct hdac_bus *bus, unsigned int val)
6e85dddc 961{
a41d1224 962 struct azx *chip = bus_to_azx(bus);
6e85dddc
DR
963
964 if (chip->disabled)
965 return 0;
6e85dddc
DR
966 if (chip->single_cmd)
967 return azx_single_send_cmd(bus, val);
968 else
a41d1224 969 return snd_hdac_bus_send_cmd(bus, val);
6e85dddc 970}
6e85dddc
DR
971
972/* get a response */
a41d1224 973static int azx_get_response(struct hdac_bus *bus, unsigned int addr,
cad372f1 974 unsigned int *res)
6e85dddc 975{
a41d1224
TI
976 struct azx *chip = bus_to_azx(bus);
977
6e85dddc
DR
978 if (chip->disabled)
979 return 0;
980 if (chip->single_cmd)
cad372f1 981 return azx_single_get_response(bus, addr, res);
6e85dddc 982 else
cad372f1 983 return azx_rirb_get_response(bus, addr, res);
6e85dddc 984}
6e85dddc 985
7e8be1b3
TI
986static const struct hdac_bus_ops bus_core_ops = {
987 .command = azx_send_cmd,
988 .get_response = azx_get_response,
989};
990
2b5fd6c2
DR
991#ifdef CONFIG_SND_HDA_DSP_LOADER
992/*
993 * DSP loading code (e.g. for CA0132)
994 */
995
996/* use the first stream for loading DSP */
997static struct azx_dev *
998azx_get_dsp_loader_dev(struct azx *chip)
999{
7833c3f8
TI
1000 struct hdac_bus *bus = azx_bus(chip);
1001 struct hdac_stream *s;
1002
1003 list_for_each_entry(s, &bus->stream_list, list)
1004 if (s->index == chip->playback_index_offset)
1005 return stream_to_azx_dev(s);
1006
1007 return NULL;
2b5fd6c2
DR
1008}
1009
0a50575b
TI
1010int snd_hda_codec_load_dsp_prepare(struct hda_codec *codec, unsigned int format,
1011 unsigned int byte_size,
1012 struct snd_dma_buffer *bufp)
2b5fd6c2 1013{
0a50575b 1014 struct hdac_bus *bus = &codec->bus->core;
a41d1224 1015 struct azx *chip = bus_to_azx(bus);
2b5fd6c2 1016 struct azx_dev *azx_dev;
ccc98865
TI
1017 struct hdac_stream *hstr;
1018 bool saved = false;
2b5fd6c2
DR
1019 int err;
1020
1021 azx_dev = azx_get_dsp_loader_dev(chip);
ccc98865 1022 hstr = azx_stream(azx_dev);
a41d1224 1023 spin_lock_irq(&bus->reg_lock);
ccc98865
TI
1024 if (hstr->opened) {
1025 chip->saved_azx_dev = *azx_dev;
1026 saved = true;
2b5fd6c2 1027 }
a41d1224 1028 spin_unlock_irq(&bus->reg_lock);
2b5fd6c2 1029
ccc98865
TI
1030 err = snd_hdac_dsp_prepare(hstr, format, byte_size, bufp);
1031 if (err < 0) {
a41d1224 1032 spin_lock_irq(&bus->reg_lock);
ccc98865
TI
1033 if (saved)
1034 *azx_dev = chip->saved_azx_dev;
a41d1224 1035 spin_unlock_irq(&bus->reg_lock);
ccc98865
TI
1036 return err;
1037 }
2b5fd6c2 1038
6d23c8f5 1039 hstr->prepared = 0;
2b5fd6c2
DR
1040 return err;
1041}
0a50575b 1042EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_prepare);
2b5fd6c2 1043
0a50575b 1044void snd_hda_codec_load_dsp_trigger(struct hda_codec *codec, bool start)
2b5fd6c2 1045{
0a50575b 1046 struct hdac_bus *bus = &codec->bus->core;
a41d1224 1047 struct azx *chip = bus_to_azx(bus);
2b5fd6c2
DR
1048 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
1049
ccc98865 1050 snd_hdac_dsp_trigger(azx_stream(azx_dev), start);
2b5fd6c2 1051}
0a50575b 1052EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_trigger);
2b5fd6c2 1053
0a50575b
TI
1054void snd_hda_codec_load_dsp_cleanup(struct hda_codec *codec,
1055 struct snd_dma_buffer *dmab)
2b5fd6c2 1056{
0a50575b 1057 struct hdac_bus *bus = &codec->bus->core;
a41d1224 1058 struct azx *chip = bus_to_azx(bus);
2b5fd6c2 1059 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
ccc98865 1060 struct hdac_stream *hstr = azx_stream(azx_dev);
2b5fd6c2 1061
0a50575b 1062 if (!dmab->area || !hstr->locked)
2b5fd6c2
DR
1063 return;
1064
ccc98865 1065 snd_hdac_dsp_cleanup(hstr, dmab);
a41d1224 1066 spin_lock_irq(&bus->reg_lock);
ccc98865 1067 if (hstr->opened)
2b5fd6c2 1068 *azx_dev = chip->saved_azx_dev;
ccc98865 1069 hstr->locked = false;
a41d1224 1070 spin_unlock_irq(&bus->reg_lock);
2b5fd6c2 1071}
0a50575b 1072EXPORT_SYMBOL_GPL(snd_hda_codec_load_dsp_cleanup);
2b5fd6c2
DR
1073#endif /* CONFIG_SND_HDA_DSP_LOADER */
1074
f43923ff
DR
1075/*
1076 * reset and start the controller registers
1077 */
17c3ad03 1078void azx_init_chip(struct azx *chip, bool full_reset)
f43923ff 1079{
a41d1224
TI
1080 if (snd_hdac_bus_init_chip(azx_bus(chip), full_reset)) {
1081 /* correct RINTCNT for CXT */
1082 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
1083 azx_writew(chip, RINTCNT, 0xc0);
1084 }
f43923ff
DR
1085}
1086EXPORT_SYMBOL_GPL(azx_init_chip);
1087
7833c3f8
TI
1088void azx_stop_all_streams(struct azx *chip)
1089{
1090 struct hdac_bus *bus = azx_bus(chip);
1091 struct hdac_stream *s;
1092
1093 list_for_each_entry(s, &bus->stream_list, list)
1094 snd_hdac_stream_stop(s);
1095}
1096EXPORT_SYMBOL_GPL(azx_stop_all_streams);
1097
f43923ff
DR
1098void azx_stop_chip(struct azx *chip)
1099{
a41d1224 1100 snd_hdac_bus_stop_chip(azx_bus(chip));
f43923ff 1101}
154867cf 1102EXPORT_SYMBOL_GPL(azx_stop_chip);
f43923ff 1103
f0b1df88
DR
1104/*
1105 * interrupt handler
1106 */
7833c3f8
TI
1107static void stream_update(struct hdac_bus *bus, struct hdac_stream *s)
1108{
a41d1224 1109 struct azx *chip = bus_to_azx(bus);
7833c3f8
TI
1110 struct azx_dev *azx_dev = stream_to_azx_dev(s);
1111
1112 /* check whether this IRQ is really acceptable */
1113 if (!chip->ops->position_check ||
1114 chip->ops->position_check(chip, azx_dev)) {
a41d1224
TI
1115 spin_unlock(&bus->reg_lock);
1116 snd_pcm_period_elapsed(azx_stream(azx_dev)->substream);
1117 spin_lock(&bus->reg_lock);
7833c3f8
TI
1118 }
1119}
1120
f0b1df88
DR
1121irqreturn_t azx_interrupt(int irq, void *dev_id)
1122{
1123 struct azx *chip = dev_id;
7833c3f8 1124 struct hdac_bus *bus = azx_bus(chip);
f0b1df88 1125 u32 status;
473f4145
TI
1126 bool active, handled = false;
1127 int repeat = 0; /* count for avoiding endless loop */
f0b1df88 1128
641d334b 1129#ifdef CONFIG_PM
364aa716 1130 if (azx_has_pm_runtime(chip))
7b0a48f3 1131 if (!pm_runtime_active(chip->card->dev))
f0b1df88
DR
1132 return IRQ_NONE;
1133#endif
1134
a41d1224 1135 spin_lock(&bus->reg_lock);
f0b1df88 1136
473f4145
TI
1137 if (chip->disabled)
1138 goto unlock;
f0b1df88 1139
473f4145
TI
1140 do {
1141 status = azx_readl(chip, INTSTS);
1142 if (status == 0 || status == 0xffffffff)
1143 break;
f0b1df88 1144
473f4145
TI
1145 handled = true;
1146 active = false;
1147 if (snd_hdac_bus_handle_stream_irq(bus, status, stream_update))
1148 active = true;
1149
1150 /* clear rirb int */
1151 status = azx_readb(chip, RIRBSTS);
1152 if (status & RIRB_INT_MASK) {
1153 active = true;
1154 if (status & RIRB_INT_RESPONSE) {
1155 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
1156 udelay(80);
1157 snd_hdac_bus_update_rirb(bus);
1158 }
1159 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
f0b1df88 1160 }
473f4145 1161 } while (active && ++repeat < 10);
f0b1df88 1162
473f4145 1163 unlock:
a41d1224 1164 spin_unlock(&bus->reg_lock);
f0b1df88 1165
473f4145 1166 return IRQ_RETVAL(handled);
f0b1df88
DR
1167}
1168EXPORT_SYMBOL_GPL(azx_interrupt);
1169
154867cf
DR
1170/*
1171 * Codec initerface
1172 */
1173
1174/*
1175 * Probe the given codec address
1176 */
1177static int probe_codec(struct azx *chip, int addr)
1178{
1179 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1180 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
7833c3f8 1181 struct hdac_bus *bus = azx_bus(chip);
cad372f1 1182 int err;
a41d1224 1183 unsigned int res = -1;
154867cf 1184
7e8be1b3 1185 mutex_lock(&bus->cmd_mutex);
154867cf 1186 chip->probing = 1;
7e8be1b3
TI
1187 azx_send_cmd(bus, cmd);
1188 err = azx_get_response(bus, addr, &res);
154867cf 1189 chip->probing = 0;
7e8be1b3 1190 mutex_unlock(&bus->cmd_mutex);
cad372f1 1191 if (err < 0 || res == -1)
154867cf
DR
1192 return -EIO;
1193 dev_dbg(chip->card->dev, "codec #%d probed OK\n", addr);
1194 return 0;
1195}
1196
0a50575b 1197void snd_hda_bus_reset(struct hda_bus *bus)
154867cf 1198{
a41d1224 1199 struct azx *chip = bus_to_azx(&bus->core);
154867cf
DR
1200
1201 bus->in_reset = 1;
1202 azx_stop_chip(chip);
17c3ad03 1203 azx_init_chip(chip, true);
a41d1224 1204 if (bus->core.chip_init)
0a50575b 1205 snd_hda_bus_reset_codecs(bus);
154867cf
DR
1206 bus->in_reset = 0;
1207}
1208
96d2bd6e 1209/* HD-audio bus initialization */
a41d1224
TI
1210int azx_bus_init(struct azx *chip, const char *model,
1211 const struct hdac_io_ops *io_ops)
154867cf 1212{
a41d1224 1213 struct hda_bus *bus = &chip->bus;
96d2bd6e 1214 int err;
154867cf 1215
a41d1224
TI
1216 err = snd_hdac_bus_init(&bus->core, chip->card->dev, &bus_core_ops,
1217 io_ops);
154867cf
DR
1218 if (err < 0)
1219 return err;
1220
a41d1224
TI
1221 bus->card = chip->card;
1222 mutex_init(&bus->prepare_mutex);
ef744978
TI
1223 bus->pci = chip->pci;
1224 bus->modelname = model;
2f0eaad9 1225 bus->mixer_assigned = -1;
ccc98865
TI
1226 bus->core.snoop = azx_snoop(chip);
1227 if (chip->get_position[0] != azx_get_pos_lpib ||
1228 chip->get_position[1] != azx_get_pos_lpib)
1229 bus->core.use_posbuf = true;
4f0189be 1230 bus->core.bdl_pos_adj = chip->bdl_pos_adj;
a41d1224
TI
1231 if (chip->driver_caps & AZX_DCAPS_CORBRP_SELF_CLEAR)
1232 bus->core.corbrp_self_clear = true;
ef744978 1233
de1ab6af
TI
1234 if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY)
1235 bus->core.align_bdle_4k = true;
1236
96d2bd6e
TI
1237 /* AMD chipsets often cause the communication stalls upon certain
1238 * sequence like the pin-detection. It seems that forcing the synced
1239 * access works around the stall. Grrr...
1240 */
1241 if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1242 dev_dbg(chip->card->dev, "Enable sync_write for stable communication\n");
d068ebc2 1243 bus->core.sync_write = 1;
96d2bd6e
TI
1244 bus->allow_bus_reset = 1;
1245 }
1246
1247 return 0;
1248}
a41d1224 1249EXPORT_SYMBOL_GPL(azx_bus_init);
96d2bd6e
TI
1250
1251/* Probe codecs */
1252int azx_probe_codecs(struct azx *chip, unsigned int max_slots)
1253{
a41d1224 1254 struct hdac_bus *bus = azx_bus(chip);
96d2bd6e
TI
1255 int c, codecs, err;
1256
154867cf
DR
1257 codecs = 0;
1258 if (!max_slots)
1259 max_slots = AZX_DEFAULT_CODECS;
1260
1261 /* First try to probe all given codec slots */
1262 for (c = 0; c < max_slots; c++) {
a41d1224 1263 if ((bus->codec_mask & (1 << c)) & chip->codec_probe_mask) {
154867cf
DR
1264 if (probe_codec(chip, c) < 0) {
1265 /* Some BIOSen give you wrong codec addresses
1266 * that don't exist
1267 */
1268 dev_warn(chip->card->dev,
1269 "Codec #%d probe error; disabling it...\n", c);
a41d1224 1270 bus->codec_mask &= ~(1 << c);
154867cf
DR
1271 /* More badly, accessing to a non-existing
1272 * codec often screws up the controller chip,
1273 * and disturbs the further communications.
1274 * Thus if an error occurs during probing,
1275 * better to reset the controller chip to
1276 * get back to the sanity state.
1277 */
1278 azx_stop_chip(chip);
17c3ad03 1279 azx_init_chip(chip, true);
154867cf
DR
1280 }
1281 }
1282 }
1283
154867cf
DR
1284 /* Then create codec instances */
1285 for (c = 0; c < max_slots; c++) {
a41d1224 1286 if ((bus->codec_mask & (1 << c)) & chip->codec_probe_mask) {
154867cf 1287 struct hda_codec *codec;
a41d1224 1288 err = snd_hda_codec_new(&chip->bus, chip->card, c, &codec);
154867cf
DR
1289 if (err < 0)
1290 continue;
3a182c84 1291 codec->jackpoll_interval = chip->jackpoll_interval;
154867cf
DR
1292 codec->beep_mode = chip->beep_mode;
1293 codecs++;
1294 }
1295 }
1296 if (!codecs) {
1297 dev_err(chip->card->dev, "no codecs initialized\n");
1298 return -ENXIO;
1299 }
1300 return 0;
1301}
96d2bd6e 1302EXPORT_SYMBOL_GPL(azx_probe_codecs);
154867cf
DR
1303
1304/* configure each codec instance */
1305int azx_codec_configure(struct azx *chip)
1306{
d94815f9
TI
1307 struct hda_codec *codec, *next;
1308
1309 /* use _safe version here since snd_hda_codec_configure() deregisters
1310 * the device upon error and deletes itself from the bus list.
1311 */
1312 list_for_each_codec_safe(codec, next, &chip->bus) {
154867cf
DR
1313 snd_hda_codec_configure(codec);
1314 }
17890880
TI
1315
1316 if (!azx_bus(chip)->num_codecs)
1317 return -ENODEV;
154867cf
DR
1318 return 0;
1319}
1320EXPORT_SYMBOL_GPL(azx_codec_configure);
1321
7833c3f8 1322static int stream_direction(struct azx *chip, unsigned char index)
93e3423e 1323{
7833c3f8
TI
1324 if (index >= chip->capture_index_offset &&
1325 index < chip->capture_index_offset + chip->capture_streams)
1326 return SNDRV_PCM_STREAM_CAPTURE;
1327 return SNDRV_PCM_STREAM_PLAYBACK;
93e3423e
RR
1328}
1329
154867cf 1330/* initialize SD streams */
a41d1224 1331int azx_init_streams(struct azx *chip)
154867cf
DR
1332{
1333 int i;
7833c3f8 1334 int stream_tags[2] = { 0, 0 };
154867cf
DR
1335
1336 /* initialize each stream (aka device)
1337 * assign the starting bdl address to each stream (device)
1338 * and initialize
1339 */
1340 for (i = 0; i < chip->num_streams; i++) {
7833c3f8
TI
1341 struct azx_dev *azx_dev = kzalloc(sizeof(*azx_dev), GFP_KERNEL);
1342 int dir, tag;
1343
1344 if (!azx_dev)
1345 return -ENOMEM;
93e3423e 1346
7833c3f8 1347 dir = stream_direction(chip, i);
93e3423e
RR
1348 /* stream tag must be unique throughout
1349 * the stream direction group,
1350 * valid values 1...15
1351 * use separate stream tag if the flag
1352 * AZX_DCAPS_SEPARATE_STREAM_TAG is used
1353 */
1354 if (chip->driver_caps & AZX_DCAPS_SEPARATE_STREAM_TAG)
7833c3f8 1355 tag = ++stream_tags[dir];
93e3423e 1356 else
7833c3f8
TI
1357 tag = i + 1;
1358 snd_hdac_stream_init(azx_bus(chip), azx_stream(azx_dev),
1359 i, dir, tag);
154867cf
DR
1360 }
1361
1362 return 0;
1363}
a41d1224
TI
1364EXPORT_SYMBOL_GPL(azx_init_streams);
1365
1366void azx_free_streams(struct azx *chip)
1367{
1368 struct hdac_bus *bus = azx_bus(chip);
1369 struct hdac_stream *s;
1370
1371 while (!list_empty(&bus->stream_list)) {
1372 s = list_first_entry(&bus->stream_list, struct hdac_stream, list);
1373 list_del(&s->list);
1374 kfree(stream_to_azx_dev(s));
1375 }
1376}
1377EXPORT_SYMBOL_GPL(azx_free_streams);