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