xref: /openbmc/linux/sound/pci/hda/hda_controller.c (revision 99b7e93c)
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 #include <sound/core.h>
31 #include <sound/initval.h>
32 #include "hda_controller.h"
33 
34 #define CREATE_TRACE_POINTS
35 #include "hda_intel_trace.h"
36 
37 /* DSP lock helpers */
38 #ifdef CONFIG_SND_HDA_DSP_LOADER
39 #define dsp_lock_init(dev)	mutex_init(&(dev)->dsp_mutex)
40 #define dsp_lock(dev)		mutex_lock(&(dev)->dsp_mutex)
41 #define dsp_unlock(dev)		mutex_unlock(&(dev)->dsp_mutex)
42 #define dsp_is_locked(dev)	((dev)->locked)
43 #else
44 #define dsp_lock_init(dev)	do {} while (0)
45 #define dsp_lock(dev)		do {} while (0)
46 #define dsp_unlock(dev)		do {} while (0)
47 #define dsp_is_locked(dev)	0
48 #endif
49 
50 /*
51  * AZX stream operations.
52  */
53 
54 /* start a stream */
55 static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev)
56 {
57 	/*
58 	 * Before stream start, initialize parameter
59 	 */
60 	azx_dev->insufficient = 1;
61 
62 	/* enable SIE */
63 	azx_writel(chip, INTCTL,
64 		   azx_readl(chip, INTCTL) | (1 << azx_dev->index));
65 	/* set DMA start and interrupt mask */
66 	azx_sd_writeb(chip, azx_dev, SD_CTL,
67 		      azx_sd_readb(chip, azx_dev, SD_CTL) |
68 		      SD_CTL_DMA_START | SD_INT_MASK);
69 }
70 
71 /* stop DMA */
72 static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev)
73 {
74 	azx_sd_writeb(chip, azx_dev, SD_CTL,
75 		      azx_sd_readb(chip, azx_dev, SD_CTL) &
76 		      ~(SD_CTL_DMA_START | SD_INT_MASK));
77 	azx_sd_writeb(chip, azx_dev, SD_STS, SD_INT_MASK); /* to be sure */
78 }
79 
80 /* stop a stream */
81 void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev)
82 {
83 	azx_stream_clear(chip, azx_dev);
84 	/* disable SIE */
85 	azx_writel(chip, INTCTL,
86 		   azx_readl(chip, INTCTL) & ~(1 << azx_dev->index));
87 }
88 EXPORT_SYMBOL_GPL(azx_stream_stop);
89 
90 /* reset stream */
91 static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev)
92 {
93 	unsigned char val;
94 	int timeout;
95 
96 	azx_stream_clear(chip, azx_dev);
97 
98 	azx_sd_writeb(chip, azx_dev, SD_CTL,
99 		      azx_sd_readb(chip, azx_dev, SD_CTL) |
100 		      SD_CTL_STREAM_RESET);
101 	udelay(3);
102 	timeout = 300;
103 	while (!((val = azx_sd_readb(chip, azx_dev, SD_CTL)) &
104 		 SD_CTL_STREAM_RESET) && --timeout)
105 		;
106 	val &= ~SD_CTL_STREAM_RESET;
107 	azx_sd_writeb(chip, azx_dev, SD_CTL, val);
108 	udelay(3);
109 
110 	timeout = 300;
111 	/* waiting for hardware to report that the stream is out of reset */
112 	while (((val = azx_sd_readb(chip, azx_dev, SD_CTL)) &
113 		SD_CTL_STREAM_RESET) && --timeout)
114 		;
115 
116 	/* reset first position - may not be synced with hw at this time */
117 	*azx_dev->posbuf = 0;
118 }
119 
120 /*
121  * set up the SD for streaming
122  */
123 static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev)
124 {
125 	unsigned int val;
126 	/* make sure the run bit is zero for SD */
127 	azx_stream_clear(chip, azx_dev);
128 	/* program the stream_tag */
129 	val = azx_sd_readl(chip, azx_dev, SD_CTL);
130 	val = (val & ~SD_CTL_STREAM_TAG_MASK) |
131 		(azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT);
132 	if (!azx_snoop(chip))
133 		val |= SD_CTL_TRAFFIC_PRIO;
134 	azx_sd_writel(chip, azx_dev, SD_CTL, val);
135 
136 	/* program the length of samples in cyclic buffer */
137 	azx_sd_writel(chip, azx_dev, SD_CBL, azx_dev->bufsize);
138 
139 	/* program the stream format */
140 	/* this value needs to be the same as the one programmed */
141 	azx_sd_writew(chip, azx_dev, SD_FORMAT, azx_dev->format_val);
142 
143 	/* program the stream LVI (last valid index) of the BDL */
144 	azx_sd_writew(chip, azx_dev, SD_LVI, azx_dev->frags - 1);
145 
146 	/* program the BDL address */
147 	/* lower BDL address */
148 	azx_sd_writel(chip, azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr);
149 	/* upper BDL address */
150 	azx_sd_writel(chip, azx_dev, SD_BDLPU,
151 		      upper_32_bits(azx_dev->bdl.addr));
152 
153 	/* enable the position buffer */
154 	if (chip->get_position[0] != azx_get_pos_lpib ||
155 	    chip->get_position[1] != azx_get_pos_lpib) {
156 		if (!(azx_readl(chip, DPLBASE) & AZX_DPLBASE_ENABLE))
157 			azx_writel(chip, DPLBASE,
158 				(u32)chip->posbuf.addr | AZX_DPLBASE_ENABLE);
159 	}
160 
161 	/* set the interrupt enable bits in the descriptor control register */
162 	azx_sd_writel(chip, azx_dev, SD_CTL,
163 		      azx_sd_readl(chip, azx_dev, SD_CTL) | SD_INT_MASK);
164 
165 	return 0;
166 }
167 
168 /* assign a stream for the PCM */
169 static inline struct azx_dev *
170 azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
171 {
172 	int dev, i, nums;
173 	struct azx_dev *res = NULL;
174 	/* make a non-zero unique key for the substream */
175 	int key = (substream->pcm->device << 16) | (substream->number << 2) |
176 		(substream->stream + 1);
177 
178 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
179 		dev = chip->playback_index_offset;
180 		nums = chip->playback_streams;
181 	} else {
182 		dev = chip->capture_index_offset;
183 		nums = chip->capture_streams;
184 	}
185 	for (i = 0; i < nums; i++, dev++) {
186 		struct azx_dev *azx_dev = &chip->azx_dev[dev];
187 		dsp_lock(azx_dev);
188 		if (!azx_dev->opened && !dsp_is_locked(azx_dev)) {
189 			if (azx_dev->assigned_key == key) {
190 				azx_dev->opened = 1;
191 				azx_dev->assigned_key = key;
192 				dsp_unlock(azx_dev);
193 				return azx_dev;
194 			}
195 			if (!res ||
196 			    (chip->driver_caps & AZX_DCAPS_REVERSE_ASSIGN))
197 				res = azx_dev;
198 		}
199 		dsp_unlock(azx_dev);
200 	}
201 	if (res) {
202 		dsp_lock(res);
203 		res->opened = 1;
204 		res->assigned_key = key;
205 		dsp_unlock(res);
206 	}
207 	return res;
208 }
209 
210 /* release the assigned stream */
211 static inline void azx_release_device(struct azx_dev *azx_dev)
212 {
213 	azx_dev->opened = 0;
214 }
215 
216 static cycle_t azx_cc_read(const struct cyclecounter *cc)
217 {
218 	struct azx_dev *azx_dev = container_of(cc, struct azx_dev, azx_cc);
219 	struct snd_pcm_substream *substream = azx_dev->substream;
220 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
221 	struct azx *chip = apcm->chip;
222 
223 	return azx_readl(chip, WALLCLK);
224 }
225 
226 static void azx_timecounter_init(struct snd_pcm_substream *substream,
227 				bool force, cycle_t last)
228 {
229 	struct azx_dev *azx_dev = get_azx_dev(substream);
230 	struct timecounter *tc = &azx_dev->azx_tc;
231 	struct cyclecounter *cc = &azx_dev->azx_cc;
232 	u64 nsec;
233 
234 	cc->read = azx_cc_read;
235 	cc->mask = CLOCKSOURCE_MASK(32);
236 
237 	/*
238 	 * Converting from 24 MHz to ns means applying a 125/3 factor.
239 	 * To avoid any saturation issues in intermediate operations,
240 	 * the 125 factor is applied first. The division is applied
241 	 * last after reading the timecounter value.
242 	 * Applying the 1/3 factor as part of the multiplication
243 	 * requires at least 20 bits for a decent precision, however
244 	 * overflows occur after about 4 hours or less, not a option.
245 	 */
246 
247 	cc->mult = 125; /* saturation after 195 years */
248 	cc->shift = 0;
249 
250 	nsec = 0; /* audio time is elapsed time since trigger */
251 	timecounter_init(tc, cc, nsec);
252 	if (force)
253 		/*
254 		 * force timecounter to use predefined value,
255 		 * used for synchronized starts
256 		 */
257 		tc->cycle_last = last;
258 }
259 
260 static inline struct hda_pcm_stream *
261 to_hda_pcm_stream(struct snd_pcm_substream *substream)
262 {
263 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
264 	return &apcm->info->stream[substream->stream];
265 }
266 
267 static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream,
268 				u64 nsec)
269 {
270 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
271 	struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
272 	u64 codec_frames, codec_nsecs;
273 
274 	if (!hinfo->ops.get_delay)
275 		return nsec;
276 
277 	codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream);
278 	codec_nsecs = div_u64(codec_frames * 1000000000LL,
279 			      substream->runtime->rate);
280 
281 	if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
282 		return nsec + codec_nsecs;
283 
284 	return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0;
285 }
286 
287 /*
288  * set up a BDL entry
289  */
290 static int setup_bdle(struct azx *chip,
291 		      struct snd_dma_buffer *dmab,
292 		      struct azx_dev *azx_dev, u32 **bdlp,
293 		      int ofs, int size, int with_ioc)
294 {
295 	u32 *bdl = *bdlp;
296 
297 	while (size > 0) {
298 		dma_addr_t addr;
299 		int chunk;
300 
301 		if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES)
302 			return -EINVAL;
303 
304 		addr = snd_sgbuf_get_addr(dmab, ofs);
305 		/* program the address field of the BDL entry */
306 		bdl[0] = cpu_to_le32((u32)addr);
307 		bdl[1] = cpu_to_le32(upper_32_bits(addr));
308 		/* program the size field of the BDL entry */
309 		chunk = snd_sgbuf_get_chunk_size(dmab, ofs, size);
310 		/* one BDLE cannot cross 4K boundary on CTHDA chips */
311 		if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) {
312 			u32 remain = 0x1000 - (ofs & 0xfff);
313 			if (chunk > remain)
314 				chunk = remain;
315 		}
316 		bdl[2] = cpu_to_le32(chunk);
317 		/* program the IOC to enable interrupt
318 		 * only when the whole fragment is processed
319 		 */
320 		size -= chunk;
321 		bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01);
322 		bdl += 4;
323 		azx_dev->frags++;
324 		ofs += chunk;
325 	}
326 	*bdlp = bdl;
327 	return ofs;
328 }
329 
330 /*
331  * set up BDL entries
332  */
333 static int azx_setup_periods(struct azx *chip,
334 			     struct snd_pcm_substream *substream,
335 			     struct azx_dev *azx_dev)
336 {
337 	u32 *bdl;
338 	int i, ofs, periods, period_bytes;
339 	int pos_adj = 0;
340 
341 	/* reset BDL address */
342 	azx_sd_writel(chip, azx_dev, SD_BDLPL, 0);
343 	azx_sd_writel(chip, azx_dev, SD_BDLPU, 0);
344 
345 	period_bytes = azx_dev->period_bytes;
346 	periods = azx_dev->bufsize / period_bytes;
347 
348 	/* program the initial BDL entries */
349 	bdl = (u32 *)azx_dev->bdl.area;
350 	ofs = 0;
351 	azx_dev->frags = 0;
352 
353 	if (chip->bdl_pos_adj)
354 		pos_adj = chip->bdl_pos_adj[chip->dev_index];
355 	if (!azx_dev->no_period_wakeup && pos_adj > 0) {
356 		struct snd_pcm_runtime *runtime = substream->runtime;
357 		int pos_align = pos_adj;
358 		pos_adj = (pos_adj * runtime->rate + 47999) / 48000;
359 		if (!pos_adj)
360 			pos_adj = pos_align;
361 		else
362 			pos_adj = ((pos_adj + pos_align - 1) / pos_align) *
363 				pos_align;
364 		pos_adj = frames_to_bytes(runtime, pos_adj);
365 		if (pos_adj >= period_bytes) {
366 			dev_warn(chip->card->dev,"Too big adjustment %d\n",
367 				 pos_adj);
368 			pos_adj = 0;
369 		} else {
370 			ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
371 					 azx_dev,
372 					 &bdl, ofs, pos_adj, true);
373 			if (ofs < 0)
374 				goto error;
375 		}
376 	} else
377 		pos_adj = 0;
378 
379 	for (i = 0; i < periods; i++) {
380 		if (i == periods - 1 && pos_adj)
381 			ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
382 					 azx_dev, &bdl, ofs,
383 					 period_bytes - pos_adj, 0);
384 		else
385 			ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
386 					 azx_dev, &bdl, ofs,
387 					 period_bytes,
388 					 !azx_dev->no_period_wakeup);
389 		if (ofs < 0)
390 			goto error;
391 	}
392 	return 0;
393 
394  error:
395 	dev_err(chip->card->dev, "Too many BDL entries: buffer=%d, period=%d\n",
396 		azx_dev->bufsize, period_bytes);
397 	return -EINVAL;
398 }
399 
400 /*
401  * PCM ops
402  */
403 
404 static int azx_pcm_close(struct snd_pcm_substream *substream)
405 {
406 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
407 	struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
408 	struct azx *chip = apcm->chip;
409 	struct azx_dev *azx_dev = get_azx_dev(substream);
410 	unsigned long flags;
411 
412 	mutex_lock(&chip->open_mutex);
413 	spin_lock_irqsave(&chip->reg_lock, flags);
414 	azx_dev->substream = NULL;
415 	azx_dev->running = 0;
416 	spin_unlock_irqrestore(&chip->reg_lock, flags);
417 	azx_release_device(azx_dev);
418 	if (hinfo->ops.close)
419 		hinfo->ops.close(hinfo, apcm->codec, substream);
420 	snd_hda_power_down(apcm->codec);
421 	mutex_unlock(&chip->open_mutex);
422 	snd_hda_codec_pcm_put(apcm->info);
423 	return 0;
424 }
425 
426 static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
427 			     struct snd_pcm_hw_params *hw_params)
428 {
429 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
430 	struct azx *chip = apcm->chip;
431 	int ret;
432 
433 	dsp_lock(get_azx_dev(substream));
434 	if (dsp_is_locked(get_azx_dev(substream))) {
435 		ret = -EBUSY;
436 		goto unlock;
437 	}
438 
439 	ret = chip->ops->substream_alloc_pages(chip, substream,
440 					  params_buffer_bytes(hw_params));
441 unlock:
442 	dsp_unlock(get_azx_dev(substream));
443 	return ret;
444 }
445 
446 static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
447 {
448 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
449 	struct azx_dev *azx_dev = get_azx_dev(substream);
450 	struct azx *chip = apcm->chip;
451 	struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
452 	int err;
453 
454 	/* reset BDL address */
455 	dsp_lock(azx_dev);
456 	if (!dsp_is_locked(azx_dev)) {
457 		azx_sd_writel(chip, azx_dev, SD_BDLPL, 0);
458 		azx_sd_writel(chip, azx_dev, SD_BDLPU, 0);
459 		azx_sd_writel(chip, azx_dev, SD_CTL, 0);
460 		azx_dev->bufsize = 0;
461 		azx_dev->period_bytes = 0;
462 		azx_dev->format_val = 0;
463 	}
464 
465 	snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
466 
467 	err = chip->ops->substream_free_pages(chip, substream);
468 	azx_dev->prepared = 0;
469 	dsp_unlock(azx_dev);
470 	return err;
471 }
472 
473 static int azx_pcm_prepare(struct snd_pcm_substream *substream)
474 {
475 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
476 	struct azx *chip = apcm->chip;
477 	struct azx_dev *azx_dev = get_azx_dev(substream);
478 	struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
479 	struct snd_pcm_runtime *runtime = substream->runtime;
480 	unsigned int bufsize, period_bytes, format_val, stream_tag;
481 	int err;
482 	struct hda_spdif_out *spdif =
483 		snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
484 	unsigned short ctls = spdif ? spdif->ctls : 0;
485 
486 	dsp_lock(azx_dev);
487 	if (dsp_is_locked(azx_dev)) {
488 		err = -EBUSY;
489 		goto unlock;
490 	}
491 
492 	azx_stream_reset(chip, azx_dev);
493 	format_val = snd_hda_calc_stream_format(apcm->codec,
494 						runtime->rate,
495 						runtime->channels,
496 						runtime->format,
497 						hinfo->maxbps,
498 						ctls);
499 	if (!format_val) {
500 		dev_err(chip->card->dev,
501 			"invalid format_val, rate=%d, ch=%d, format=%d\n",
502 			runtime->rate, runtime->channels, runtime->format);
503 		err = -EINVAL;
504 		goto unlock;
505 	}
506 
507 	bufsize = snd_pcm_lib_buffer_bytes(substream);
508 	period_bytes = snd_pcm_lib_period_bytes(substream);
509 
510 	dev_dbg(chip->card->dev, "azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
511 		bufsize, format_val);
512 
513 	if (bufsize != azx_dev->bufsize ||
514 	    period_bytes != azx_dev->period_bytes ||
515 	    format_val != azx_dev->format_val ||
516 	    runtime->no_period_wakeup != azx_dev->no_period_wakeup) {
517 		azx_dev->bufsize = bufsize;
518 		azx_dev->period_bytes = period_bytes;
519 		azx_dev->format_val = format_val;
520 		azx_dev->no_period_wakeup = runtime->no_period_wakeup;
521 		err = azx_setup_periods(chip, substream, azx_dev);
522 		if (err < 0)
523 			goto unlock;
524 	}
525 
526 	/* when LPIB delay correction gives a small negative value,
527 	 * we ignore it; currently set the threshold statically to
528 	 * 64 frames
529 	 */
530 	if (runtime->period_size > 64)
531 		azx_dev->delay_negative_threshold = -frames_to_bytes(runtime, 64);
532 	else
533 		azx_dev->delay_negative_threshold = 0;
534 
535 	/* wallclk has 24Mhz clock source */
536 	azx_dev->period_wallclk = (((runtime->period_size * 24000) /
537 						runtime->rate) * 1000);
538 	azx_setup_controller(chip, azx_dev);
539 	if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
540 		azx_dev->fifo_size =
541 			azx_sd_readw(chip, azx_dev, SD_FIFOSIZE) + 1;
542 	else
543 		azx_dev->fifo_size = 0;
544 
545 	stream_tag = azx_dev->stream_tag;
546 	/* CA-IBG chips need the playback stream starting from 1 */
547 	if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
548 	    stream_tag > chip->capture_streams)
549 		stream_tag -= chip->capture_streams;
550 	err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
551 				     azx_dev->format_val, substream);
552 
553  unlock:
554 	if (!err)
555 		azx_dev->prepared = 1;
556 	dsp_unlock(azx_dev);
557 	return err;
558 }
559 
560 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
561 {
562 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
563 	struct azx *chip = apcm->chip;
564 	struct azx_dev *azx_dev;
565 	struct snd_pcm_substream *s;
566 	int rstart = 0, start, nsync = 0, sbits = 0;
567 	int nwait, timeout;
568 
569 	azx_dev = get_azx_dev(substream);
570 	trace_azx_pcm_trigger(chip, azx_dev, cmd);
571 
572 	if (dsp_is_locked(azx_dev) || !azx_dev->prepared)
573 		return -EPIPE;
574 
575 	switch (cmd) {
576 	case SNDRV_PCM_TRIGGER_START:
577 		rstart = 1;
578 	case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
579 	case SNDRV_PCM_TRIGGER_RESUME:
580 		start = 1;
581 		break;
582 	case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
583 	case SNDRV_PCM_TRIGGER_SUSPEND:
584 	case SNDRV_PCM_TRIGGER_STOP:
585 		start = 0;
586 		break;
587 	default:
588 		return -EINVAL;
589 	}
590 
591 	snd_pcm_group_for_each_entry(s, substream) {
592 		if (s->pcm->card != substream->pcm->card)
593 			continue;
594 		azx_dev = get_azx_dev(s);
595 		sbits |= 1 << azx_dev->index;
596 		nsync++;
597 		snd_pcm_trigger_done(s, substream);
598 	}
599 
600 	spin_lock(&chip->reg_lock);
601 
602 	/* first, set SYNC bits of corresponding streams */
603 	if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
604 		azx_writel(chip, OLD_SSYNC,
605 			azx_readl(chip, OLD_SSYNC) | sbits);
606 	else
607 		azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits);
608 
609 	snd_pcm_group_for_each_entry(s, substream) {
610 		if (s->pcm->card != substream->pcm->card)
611 			continue;
612 		azx_dev = get_azx_dev(s);
613 		if (start) {
614 			azx_dev->start_wallclk = azx_readl(chip, WALLCLK);
615 			if (!rstart)
616 				azx_dev->start_wallclk -=
617 						azx_dev->period_wallclk;
618 			azx_stream_start(chip, azx_dev);
619 		} else {
620 			azx_stream_stop(chip, azx_dev);
621 		}
622 		azx_dev->running = start;
623 	}
624 	spin_unlock(&chip->reg_lock);
625 	if (start) {
626 		/* wait until all FIFOs get ready */
627 		for (timeout = 5000; timeout; timeout--) {
628 			nwait = 0;
629 			snd_pcm_group_for_each_entry(s, substream) {
630 				if (s->pcm->card != substream->pcm->card)
631 					continue;
632 				azx_dev = get_azx_dev(s);
633 				if (!(azx_sd_readb(chip, azx_dev, SD_STS) &
634 				      SD_STS_FIFO_READY))
635 					nwait++;
636 			}
637 			if (!nwait)
638 				break;
639 			cpu_relax();
640 		}
641 	} else {
642 		/* wait until all RUN bits are cleared */
643 		for (timeout = 5000; timeout; timeout--) {
644 			nwait = 0;
645 			snd_pcm_group_for_each_entry(s, substream) {
646 				if (s->pcm->card != substream->pcm->card)
647 					continue;
648 				azx_dev = get_azx_dev(s);
649 				if (azx_sd_readb(chip, azx_dev, SD_CTL) &
650 				    SD_CTL_DMA_START)
651 					nwait++;
652 			}
653 			if (!nwait)
654 				break;
655 			cpu_relax();
656 		}
657 	}
658 	spin_lock(&chip->reg_lock);
659 	/* reset SYNC bits */
660 	if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
661 		azx_writel(chip, OLD_SSYNC,
662 			azx_readl(chip, OLD_SSYNC) & ~sbits);
663 	else
664 		azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits);
665 	if (start) {
666 		azx_timecounter_init(substream, 0, 0);
667 		snd_pcm_gettime(substream->runtime, &substream->runtime->trigger_tstamp);
668 		substream->runtime->trigger_tstamp_latched = true;
669 
670 		if (nsync > 1) {
671 			cycle_t cycle_last;
672 
673 			/* same start cycle for master and group */
674 			azx_dev = get_azx_dev(substream);
675 			cycle_last = azx_dev->azx_tc.cycle_last;
676 
677 			snd_pcm_group_for_each_entry(s, substream) {
678 				if (s->pcm->card != substream->pcm->card)
679 					continue;
680 				azx_timecounter_init(s, 1, cycle_last);
681 			}
682 		}
683 	}
684 	spin_unlock(&chip->reg_lock);
685 	return 0;
686 }
687 
688 unsigned int azx_get_pos_lpib(struct azx *chip, struct azx_dev *azx_dev)
689 {
690 	return azx_sd_readl(chip, azx_dev, SD_LPIB);
691 }
692 EXPORT_SYMBOL_GPL(azx_get_pos_lpib);
693 
694 unsigned int azx_get_pos_posbuf(struct azx *chip, struct azx_dev *azx_dev)
695 {
696 	return le32_to_cpu(*azx_dev->posbuf);
697 }
698 EXPORT_SYMBOL_GPL(azx_get_pos_posbuf);
699 
700 unsigned int azx_get_position(struct azx *chip,
701 			      struct azx_dev *azx_dev)
702 {
703 	struct snd_pcm_substream *substream = azx_dev->substream;
704 	unsigned int pos;
705 	int stream = substream->stream;
706 	int delay = 0;
707 
708 	if (chip->get_position[stream])
709 		pos = chip->get_position[stream](chip, azx_dev);
710 	else /* use the position buffer as default */
711 		pos = azx_get_pos_posbuf(chip, azx_dev);
712 
713 	if (pos >= azx_dev->bufsize)
714 		pos = 0;
715 
716 	if (substream->runtime) {
717 		struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
718 		struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
719 
720 		if (chip->get_delay[stream])
721 			delay += chip->get_delay[stream](chip, azx_dev, pos);
722 		if (hinfo->ops.get_delay)
723 			delay += hinfo->ops.get_delay(hinfo, apcm->codec,
724 						      substream);
725 		substream->runtime->delay = delay;
726 	}
727 
728 	trace_azx_get_position(chip, azx_dev, pos, delay);
729 	return pos;
730 }
731 EXPORT_SYMBOL_GPL(azx_get_position);
732 
733 static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
734 {
735 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
736 	struct azx *chip = apcm->chip;
737 	struct azx_dev *azx_dev = get_azx_dev(substream);
738 	return bytes_to_frames(substream->runtime,
739 			       azx_get_position(chip, azx_dev));
740 }
741 
742 static int azx_get_time_info(struct snd_pcm_substream *substream,
743 			struct timespec *system_ts, struct timespec *audio_ts,
744 			struct snd_pcm_audio_tstamp_config *audio_tstamp_config,
745 			struct snd_pcm_audio_tstamp_report *audio_tstamp_report)
746 {
747 	struct azx_dev *azx_dev = get_azx_dev(substream);
748 	u64 nsec;
749 
750 	if ((substream->runtime->hw.info & SNDRV_PCM_INFO_HAS_LINK_ATIME) &&
751 		(audio_tstamp_config->type_requested == SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK)) {
752 
753 		snd_pcm_gettime(substream->runtime, system_ts);
754 
755 		nsec = timecounter_read(&azx_dev->azx_tc);
756 		nsec = div_u64(nsec, 3); /* can be optimized */
757 		if (audio_tstamp_config->report_delay)
758 			nsec = azx_adjust_codec_delay(substream, nsec);
759 
760 		*audio_ts = ns_to_timespec(nsec);
761 
762 		audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_LINK;
763 		audio_tstamp_report->accuracy_report = 1; /* rest of structure is valid */
764 		audio_tstamp_report->accuracy = 42; /* 24 MHz WallClock == 42ns resolution */
765 
766 	} else
767 		audio_tstamp_report->actual_type = SNDRV_PCM_AUDIO_TSTAMP_TYPE_DEFAULT;
768 
769 	return 0;
770 }
771 
772 static struct snd_pcm_hardware azx_pcm_hw = {
773 	.info =			(SNDRV_PCM_INFO_MMAP |
774 				 SNDRV_PCM_INFO_INTERLEAVED |
775 				 SNDRV_PCM_INFO_BLOCK_TRANSFER |
776 				 SNDRV_PCM_INFO_MMAP_VALID |
777 				 /* No full-resume yet implemented */
778 				 /* SNDRV_PCM_INFO_RESUME |*/
779 				 SNDRV_PCM_INFO_PAUSE |
780 				 SNDRV_PCM_INFO_SYNC_START |
781 				 SNDRV_PCM_INFO_HAS_WALL_CLOCK | /* legacy */
782 				 SNDRV_PCM_INFO_HAS_LINK_ATIME |
783 				 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
784 	.formats =		SNDRV_PCM_FMTBIT_S16_LE,
785 	.rates =		SNDRV_PCM_RATE_48000,
786 	.rate_min =		48000,
787 	.rate_max =		48000,
788 	.channels_min =		2,
789 	.channels_max =		2,
790 	.buffer_bytes_max =	AZX_MAX_BUF_SIZE,
791 	.period_bytes_min =	128,
792 	.period_bytes_max =	AZX_MAX_BUF_SIZE / 2,
793 	.periods_min =		2,
794 	.periods_max =		AZX_MAX_FRAG,
795 	.fifo_size =		0,
796 };
797 
798 static int azx_pcm_open(struct snd_pcm_substream *substream)
799 {
800 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
801 	struct hda_pcm_stream *hinfo = to_hda_pcm_stream(substream);
802 	struct azx *chip = apcm->chip;
803 	struct azx_dev *azx_dev;
804 	struct snd_pcm_runtime *runtime = substream->runtime;
805 	unsigned long flags;
806 	int err;
807 	int buff_step;
808 
809 	snd_hda_codec_pcm_get(apcm->info);
810 	mutex_lock(&chip->open_mutex);
811 	azx_dev = azx_assign_device(chip, substream);
812 	if (azx_dev == NULL) {
813 		err = -EBUSY;
814 		goto unlock;
815 	}
816 	runtime->hw = azx_pcm_hw;
817 	runtime->hw.channels_min = hinfo->channels_min;
818 	runtime->hw.channels_max = hinfo->channels_max;
819 	runtime->hw.formats = hinfo->formats;
820 	runtime->hw.rates = hinfo->rates;
821 	snd_pcm_limit_hw_rates(runtime);
822 	snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
823 
824 	/* avoid wrap-around with wall-clock */
825 	snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME,
826 				     20,
827 				     178000000);
828 
829 	if (chip->align_buffer_size)
830 		/* constrain buffer sizes to be multiple of 128
831 		   bytes. This is more efficient in terms of memory
832 		   access but isn't required by the HDA spec and
833 		   prevents users from specifying exact period/buffer
834 		   sizes. For example for 44.1kHz, a period size set
835 		   to 20ms will be rounded to 19.59ms. */
836 		buff_step = 128;
837 	else
838 		/* Don't enforce steps on buffer sizes, still need to
839 		   be multiple of 4 bytes (HDA spec). Tested on Intel
840 		   HDA controllers, may not work on all devices where
841 		   option needs to be disabled */
842 		buff_step = 4;
843 
844 	snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
845 				   buff_step);
846 	snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
847 				   buff_step);
848 	snd_hda_power_up(apcm->codec);
849 	if (hinfo->ops.open)
850 		err = hinfo->ops.open(hinfo, apcm->codec, substream);
851 	else
852 		err = -ENODEV;
853 	if (err < 0) {
854 		azx_release_device(azx_dev);
855 		goto powerdown;
856 	}
857 	snd_pcm_limit_hw_rates(runtime);
858 	/* sanity check */
859 	if (snd_BUG_ON(!runtime->hw.channels_min) ||
860 	    snd_BUG_ON(!runtime->hw.channels_max) ||
861 	    snd_BUG_ON(!runtime->hw.formats) ||
862 	    snd_BUG_ON(!runtime->hw.rates)) {
863 		azx_release_device(azx_dev);
864 		if (hinfo->ops.close)
865 			hinfo->ops.close(hinfo, apcm->codec, substream);
866 		err = -EINVAL;
867 		goto powerdown;
868 	}
869 
870 	/* disable LINK_ATIME timestamps for capture streams
871 	   until we figure out how to handle digital inputs */
872 	if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {
873 		runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK; /* legacy */
874 		runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_LINK_ATIME;
875 	}
876 
877 	spin_lock_irqsave(&chip->reg_lock, flags);
878 	azx_dev->substream = substream;
879 	azx_dev->running = 0;
880 	spin_unlock_irqrestore(&chip->reg_lock, flags);
881 
882 	runtime->private_data = azx_dev;
883 	snd_pcm_set_sync(substream);
884 	mutex_unlock(&chip->open_mutex);
885 	return 0;
886 
887  powerdown:
888 	snd_hda_power_down(apcm->codec);
889  unlock:
890 	mutex_unlock(&chip->open_mutex);
891 	snd_hda_codec_pcm_put(apcm->info);
892 	return err;
893 }
894 
895 static int azx_pcm_mmap(struct snd_pcm_substream *substream,
896 			struct vm_area_struct *area)
897 {
898 	struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
899 	struct azx *chip = apcm->chip;
900 	if (chip->ops->pcm_mmap_prepare)
901 		chip->ops->pcm_mmap_prepare(substream, area);
902 	return snd_pcm_lib_default_mmap(substream, area);
903 }
904 
905 static struct snd_pcm_ops azx_pcm_ops = {
906 	.open = azx_pcm_open,
907 	.close = azx_pcm_close,
908 	.ioctl = snd_pcm_lib_ioctl,
909 	.hw_params = azx_pcm_hw_params,
910 	.hw_free = azx_pcm_hw_free,
911 	.prepare = azx_pcm_prepare,
912 	.trigger = azx_pcm_trigger,
913 	.pointer = azx_pcm_pointer,
914 	.get_time_info =  azx_get_time_info,
915 	.mmap = azx_pcm_mmap,
916 	.page = snd_pcm_sgbuf_ops_page,
917 };
918 
919 static void azx_pcm_free(struct snd_pcm *pcm)
920 {
921 	struct azx_pcm *apcm = pcm->private_data;
922 	if (apcm) {
923 		list_del(&apcm->list);
924 		apcm->info->pcm = NULL;
925 		kfree(apcm);
926 	}
927 }
928 
929 #define MAX_PREALLOC_SIZE	(32 * 1024 * 1024)
930 
931 static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
932 				 struct hda_pcm *cpcm)
933 {
934 	struct azx *chip = bus->private_data;
935 	struct snd_pcm *pcm;
936 	struct azx_pcm *apcm;
937 	int pcm_dev = cpcm->device;
938 	unsigned int size;
939 	int s, err;
940 
941 	list_for_each_entry(apcm, &chip->pcm_list, list) {
942 		if (apcm->pcm->device == pcm_dev) {
943 			dev_err(chip->card->dev, "PCM %d already exists\n",
944 				pcm_dev);
945 			return -EBUSY;
946 		}
947 	}
948 	err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
949 			  cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
950 			  cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
951 			  &pcm);
952 	if (err < 0)
953 		return err;
954 	strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
955 	apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
956 	if (apcm == NULL)
957 		return -ENOMEM;
958 	apcm->chip = chip;
959 	apcm->pcm = pcm;
960 	apcm->codec = codec;
961 	apcm->info = cpcm;
962 	pcm->private_data = apcm;
963 	pcm->private_free = azx_pcm_free;
964 	if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
965 		pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
966 	list_add_tail(&apcm->list, &chip->pcm_list);
967 	cpcm->pcm = pcm;
968 	for (s = 0; s < 2; s++) {
969 		if (cpcm->stream[s].substreams)
970 			snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
971 	}
972 	/* buffer pre-allocation */
973 	size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
974 	if (size > MAX_PREALLOC_SIZE)
975 		size = MAX_PREALLOC_SIZE;
976 	snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
977 					      chip->card->dev,
978 					      size, MAX_PREALLOC_SIZE);
979 	return 0;
980 }
981 
982 /*
983  * CORB / RIRB interface
984  */
985 static int azx_alloc_cmd_io(struct azx *chip)
986 {
987 	/* single page (at least 4096 bytes) must suffice for both ringbuffes */
988 	return chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV,
989 					  PAGE_SIZE, &chip->rb);
990 }
991 
992 static void azx_init_cmd_io(struct azx *chip)
993 {
994 	int timeout;
995 
996 	spin_lock_irq(&chip->reg_lock);
997 	/* CORB set up */
998 	chip->corb.addr = chip->rb.addr;
999 	chip->corb.buf = (u32 *)chip->rb.area;
1000 	azx_writel(chip, CORBLBASE, (u32)chip->corb.addr);
1001 	azx_writel(chip, CORBUBASE, upper_32_bits(chip->corb.addr));
1002 
1003 	/* set the corb size to 256 entries (ULI requires explicitly) */
1004 	azx_writeb(chip, CORBSIZE, 0x02);
1005 	/* set the corb write pointer to 0 */
1006 	azx_writew(chip, CORBWP, 0);
1007 
1008 	/* reset the corb hw read pointer */
1009 	azx_writew(chip, CORBRP, AZX_CORBRP_RST);
1010 	if (!(chip->driver_caps & AZX_DCAPS_CORBRP_SELF_CLEAR)) {
1011 		for (timeout = 1000; timeout > 0; timeout--) {
1012 			if ((azx_readw(chip, CORBRP) & AZX_CORBRP_RST) == AZX_CORBRP_RST)
1013 				break;
1014 			udelay(1);
1015 		}
1016 		if (timeout <= 0)
1017 			dev_err(chip->card->dev, "CORB reset timeout#1, CORBRP = %d\n",
1018 				azx_readw(chip, CORBRP));
1019 
1020 		azx_writew(chip, CORBRP, 0);
1021 		for (timeout = 1000; timeout > 0; timeout--) {
1022 			if (azx_readw(chip, CORBRP) == 0)
1023 				break;
1024 			udelay(1);
1025 		}
1026 		if (timeout <= 0)
1027 			dev_err(chip->card->dev, "CORB reset timeout#2, CORBRP = %d\n",
1028 				azx_readw(chip, CORBRP));
1029 	}
1030 
1031 	/* enable corb dma */
1032 	azx_writeb(chip, CORBCTL, AZX_CORBCTL_RUN);
1033 
1034 	/* RIRB set up */
1035 	chip->rirb.addr = chip->rb.addr + 2048;
1036 	chip->rirb.buf = (u32 *)(chip->rb.area + 2048);
1037 	chip->rirb.wp = chip->rirb.rp = 0;
1038 	memset(chip->rirb.cmds, 0, sizeof(chip->rirb.cmds));
1039 	azx_writel(chip, RIRBLBASE, (u32)chip->rirb.addr);
1040 	azx_writel(chip, RIRBUBASE, upper_32_bits(chip->rirb.addr));
1041 
1042 	/* set the rirb size to 256 entries (ULI requires explicitly) */
1043 	azx_writeb(chip, RIRBSIZE, 0x02);
1044 	/* reset the rirb hw write pointer */
1045 	azx_writew(chip, RIRBWP, AZX_RIRBWP_RST);
1046 	/* set N=1, get RIRB response interrupt for new entry */
1047 	if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
1048 		azx_writew(chip, RINTCNT, 0xc0);
1049 	else
1050 		azx_writew(chip, RINTCNT, 1);
1051 	/* enable rirb dma and response irq */
1052 	azx_writeb(chip, RIRBCTL, AZX_RBCTL_DMA_EN | AZX_RBCTL_IRQ_EN);
1053 	spin_unlock_irq(&chip->reg_lock);
1054 }
1055 
1056 static void azx_free_cmd_io(struct azx *chip)
1057 {
1058 	spin_lock_irq(&chip->reg_lock);
1059 	/* disable ringbuffer DMAs */
1060 	azx_writeb(chip, RIRBCTL, 0);
1061 	azx_writeb(chip, CORBCTL, 0);
1062 	spin_unlock_irq(&chip->reg_lock);
1063 }
1064 
1065 static unsigned int azx_command_addr(u32 cmd)
1066 {
1067 	unsigned int addr = cmd >> 28;
1068 
1069 	if (addr >= AZX_MAX_CODECS) {
1070 		snd_BUG();
1071 		addr = 0;
1072 	}
1073 
1074 	return addr;
1075 }
1076 
1077 /* send a command */
1078 static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
1079 {
1080 	struct azx *chip = bus->private_data;
1081 	unsigned int addr = azx_command_addr(val);
1082 	unsigned int wp, rp;
1083 
1084 	spin_lock_irq(&chip->reg_lock);
1085 
1086 	/* add command to corb */
1087 	wp = azx_readw(chip, CORBWP);
1088 	if (wp == 0xffff) {
1089 		/* something wrong, controller likely turned to D3 */
1090 		spin_unlock_irq(&chip->reg_lock);
1091 		return -EIO;
1092 	}
1093 	wp++;
1094 	wp %= AZX_MAX_CORB_ENTRIES;
1095 
1096 	rp = azx_readw(chip, CORBRP);
1097 	if (wp == rp) {
1098 		/* oops, it's full */
1099 		spin_unlock_irq(&chip->reg_lock);
1100 		return -EAGAIN;
1101 	}
1102 
1103 	chip->rirb.cmds[addr]++;
1104 	chip->corb.buf[wp] = cpu_to_le32(val);
1105 	azx_writew(chip, CORBWP, wp);
1106 
1107 	spin_unlock_irq(&chip->reg_lock);
1108 
1109 	return 0;
1110 }
1111 
1112 #define AZX_RIRB_EX_UNSOL_EV	(1<<4)
1113 
1114 /* retrieve RIRB entry - called from interrupt handler */
1115 static void azx_update_rirb(struct azx *chip)
1116 {
1117 	unsigned int rp, wp;
1118 	unsigned int addr;
1119 	u32 res, res_ex;
1120 
1121 	wp = azx_readw(chip, RIRBWP);
1122 	if (wp == 0xffff) {
1123 		/* something wrong, controller likely turned to D3 */
1124 		return;
1125 	}
1126 
1127 	if (wp == chip->rirb.wp)
1128 		return;
1129 	chip->rirb.wp = wp;
1130 
1131 	while (chip->rirb.rp != wp) {
1132 		chip->rirb.rp++;
1133 		chip->rirb.rp %= AZX_MAX_RIRB_ENTRIES;
1134 
1135 		rp = chip->rirb.rp << 1; /* an RIRB entry is 8-bytes */
1136 		res_ex = le32_to_cpu(chip->rirb.buf[rp + 1]);
1137 		res = le32_to_cpu(chip->rirb.buf[rp]);
1138 		addr = res_ex & 0xf;
1139 		if ((addr >= AZX_MAX_CODECS) || !(chip->codec_mask & (1 << addr))) {
1140 			dev_err(chip->card->dev, "spurious response %#x:%#x, rp = %d, wp = %d",
1141 				res, res_ex,
1142 				chip->rirb.rp, wp);
1143 			snd_BUG();
1144 		} else if (res_ex & AZX_RIRB_EX_UNSOL_EV)
1145 			snd_hda_queue_unsol_event(chip->bus, res, res_ex);
1146 		else if (chip->rirb.cmds[addr]) {
1147 			chip->rirb.res[addr] = res;
1148 			smp_wmb();
1149 			chip->rirb.cmds[addr]--;
1150 		} else if (printk_ratelimit()) {
1151 			dev_err(chip->card->dev, "spurious response %#x:%#x, last cmd=%#08x\n",
1152 				res, res_ex,
1153 				chip->last_cmd[addr]);
1154 		}
1155 	}
1156 }
1157 
1158 /* receive a response */
1159 static unsigned int azx_rirb_get_response(struct hda_bus *bus,
1160 					  unsigned int addr)
1161 {
1162 	struct azx *chip = bus->private_data;
1163 	unsigned long timeout;
1164 	unsigned long loopcounter;
1165 	int do_poll = 0;
1166 
1167  again:
1168 	timeout = jiffies + msecs_to_jiffies(1000);
1169 
1170 	for (loopcounter = 0;; loopcounter++) {
1171 		if (chip->polling_mode || do_poll) {
1172 			spin_lock_irq(&chip->reg_lock);
1173 			azx_update_rirb(chip);
1174 			spin_unlock_irq(&chip->reg_lock);
1175 		}
1176 		if (!chip->rirb.cmds[addr]) {
1177 			smp_rmb();
1178 			bus->rirb_error = 0;
1179 
1180 			if (!do_poll)
1181 				chip->poll_count = 0;
1182 			return chip->rirb.res[addr]; /* the last value */
1183 		}
1184 		if (time_after(jiffies, timeout))
1185 			break;
1186 		if (bus->needs_damn_long_delay || loopcounter > 3000)
1187 			msleep(2); /* temporary workaround */
1188 		else {
1189 			udelay(10);
1190 			cond_resched();
1191 		}
1192 	}
1193 
1194 	if (bus->no_response_fallback)
1195 		return -1;
1196 
1197 	if (!chip->polling_mode && chip->poll_count < 2) {
1198 		dev_dbg(chip->card->dev,
1199 			"azx_get_response timeout, polling the codec once: last cmd=0x%08x\n",
1200 			chip->last_cmd[addr]);
1201 		do_poll = 1;
1202 		chip->poll_count++;
1203 		goto again;
1204 	}
1205 
1206 
1207 	if (!chip->polling_mode) {
1208 		dev_warn(chip->card->dev,
1209 			 "azx_get_response timeout, switching to polling mode: last cmd=0x%08x\n",
1210 			 chip->last_cmd[addr]);
1211 		chip->polling_mode = 1;
1212 		goto again;
1213 	}
1214 
1215 	if (chip->msi) {
1216 		dev_warn(chip->card->dev,
1217 			 "No response from codec, disabling MSI: last cmd=0x%08x\n",
1218 			 chip->last_cmd[addr]);
1219 		if (chip->ops->disable_msi_reset_irq(chip) &&
1220 		    chip->ops->disable_msi_reset_irq(chip) < 0) {
1221 			bus->rirb_error = 1;
1222 			return -1;
1223 		}
1224 		goto again;
1225 	}
1226 
1227 	if (chip->probing) {
1228 		/* If this critical timeout happens during the codec probing
1229 		 * phase, this is likely an access to a non-existing codec
1230 		 * slot.  Better to return an error and reset the system.
1231 		 */
1232 		return -1;
1233 	}
1234 
1235 	/* a fatal communication error; need either to reset or to fallback
1236 	 * to the single_cmd mode
1237 	 */
1238 	bus->rirb_error = 1;
1239 	if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) {
1240 		bus->response_reset = 1;
1241 		return -1; /* give a chance to retry */
1242 	}
1243 
1244 	dev_err(chip->card->dev,
1245 		"azx_get_response timeout, switching to single_cmd mode: last cmd=0x%08x\n",
1246 		chip->last_cmd[addr]);
1247 	chip->single_cmd = 1;
1248 	bus->response_reset = 0;
1249 	/* release CORB/RIRB */
1250 	azx_free_cmd_io(chip);
1251 	/* disable unsolicited responses */
1252 	azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~AZX_GCTL_UNSOL);
1253 	return -1;
1254 }
1255 
1256 /*
1257  * Use the single immediate command instead of CORB/RIRB for simplicity
1258  *
1259  * Note: according to Intel, this is not preferred use.  The command was
1260  *       intended for the BIOS only, and may get confused with unsolicited
1261  *       responses.  So, we shouldn't use it for normal operation from the
1262  *       driver.
1263  *       I left the codes, however, for debugging/testing purposes.
1264  */
1265 
1266 /* receive a response */
1267 static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
1268 {
1269 	int timeout = 50;
1270 
1271 	while (timeout--) {
1272 		/* check IRV busy bit */
1273 		if (azx_readw(chip, IRS) & AZX_IRS_VALID) {
1274 			/* reuse rirb.res as the response return value */
1275 			chip->rirb.res[addr] = azx_readl(chip, IR);
1276 			return 0;
1277 		}
1278 		udelay(1);
1279 	}
1280 	if (printk_ratelimit())
1281 		dev_dbg(chip->card->dev, "get_response timeout: IRS=0x%x\n",
1282 			azx_readw(chip, IRS));
1283 	chip->rirb.res[addr] = -1;
1284 	return -EIO;
1285 }
1286 
1287 /* send a command */
1288 static int azx_single_send_cmd(struct hda_bus *bus, u32 val)
1289 {
1290 	struct azx *chip = bus->private_data;
1291 	unsigned int addr = azx_command_addr(val);
1292 	int timeout = 50;
1293 
1294 	bus->rirb_error = 0;
1295 	while (timeout--) {
1296 		/* check ICB busy bit */
1297 		if (!((azx_readw(chip, IRS) & AZX_IRS_BUSY))) {
1298 			/* Clear IRV valid bit */
1299 			azx_writew(chip, IRS, azx_readw(chip, IRS) |
1300 				   AZX_IRS_VALID);
1301 			azx_writel(chip, IC, val);
1302 			azx_writew(chip, IRS, azx_readw(chip, IRS) |
1303 				   AZX_IRS_BUSY);
1304 			return azx_single_wait_for_response(chip, addr);
1305 		}
1306 		udelay(1);
1307 	}
1308 	if (printk_ratelimit())
1309 		dev_dbg(chip->card->dev,
1310 			"send_cmd timeout: IRS=0x%x, val=0x%x\n",
1311 			azx_readw(chip, IRS), val);
1312 	return -EIO;
1313 }
1314 
1315 /* receive a response */
1316 static unsigned int azx_single_get_response(struct hda_bus *bus,
1317 					    unsigned int addr)
1318 {
1319 	struct azx *chip = bus->private_data;
1320 	return chip->rirb.res[addr];
1321 }
1322 
1323 /*
1324  * The below are the main callbacks from hda_codec.
1325  *
1326  * They are just the skeleton to call sub-callbacks according to the
1327  * current setting of chip->single_cmd.
1328  */
1329 
1330 /* send a command */
1331 static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
1332 {
1333 	struct azx *chip = bus->private_data;
1334 
1335 	if (chip->disabled)
1336 		return 0;
1337 	chip->last_cmd[azx_command_addr(val)] = val;
1338 	if (chip->single_cmd)
1339 		return azx_single_send_cmd(bus, val);
1340 	else
1341 		return azx_corb_send_cmd(bus, val);
1342 }
1343 
1344 /* get a response */
1345 static unsigned int azx_get_response(struct hda_bus *bus,
1346 				     unsigned int addr)
1347 {
1348 	struct azx *chip = bus->private_data;
1349 	if (chip->disabled)
1350 		return 0;
1351 	if (chip->single_cmd)
1352 		return azx_single_get_response(bus, addr);
1353 	else
1354 		return azx_rirb_get_response(bus, addr);
1355 }
1356 
1357 #ifdef CONFIG_SND_HDA_DSP_LOADER
1358 /*
1359  * DSP loading code (e.g. for CA0132)
1360  */
1361 
1362 /* use the first stream for loading DSP */
1363 static struct azx_dev *
1364 azx_get_dsp_loader_dev(struct azx *chip)
1365 {
1366 	return &chip->azx_dev[chip->playback_index_offset];
1367 }
1368 
1369 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format,
1370 				unsigned int byte_size,
1371 				struct snd_dma_buffer *bufp)
1372 {
1373 	u32 *bdl;
1374 	struct azx *chip = bus->private_data;
1375 	struct azx_dev *azx_dev;
1376 	int err;
1377 
1378 	azx_dev = azx_get_dsp_loader_dev(chip);
1379 
1380 	dsp_lock(azx_dev);
1381 	spin_lock_irq(&chip->reg_lock);
1382 	if (azx_dev->running || azx_dev->locked) {
1383 		spin_unlock_irq(&chip->reg_lock);
1384 		err = -EBUSY;
1385 		goto unlock;
1386 	}
1387 	azx_dev->prepared = 0;
1388 	chip->saved_azx_dev = *azx_dev;
1389 	azx_dev->locked = 1;
1390 	spin_unlock_irq(&chip->reg_lock);
1391 
1392 	err = chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV_SG,
1393 					 byte_size, bufp);
1394 	if (err < 0)
1395 		goto err_alloc;
1396 
1397 	azx_dev->bufsize = byte_size;
1398 	azx_dev->period_bytes = byte_size;
1399 	azx_dev->format_val = format;
1400 
1401 	azx_stream_reset(chip, azx_dev);
1402 
1403 	/* reset BDL address */
1404 	azx_sd_writel(chip, azx_dev, SD_BDLPL, 0);
1405 	azx_sd_writel(chip, azx_dev, SD_BDLPU, 0);
1406 
1407 	azx_dev->frags = 0;
1408 	bdl = (u32 *)azx_dev->bdl.area;
1409 	err = setup_bdle(chip, bufp, azx_dev, &bdl, 0, byte_size, 0);
1410 	if (err < 0)
1411 		goto error;
1412 
1413 	azx_setup_controller(chip, azx_dev);
1414 	dsp_unlock(azx_dev);
1415 	return azx_dev->stream_tag;
1416 
1417  error:
1418 	chip->ops->dma_free_pages(chip, bufp);
1419  err_alloc:
1420 	spin_lock_irq(&chip->reg_lock);
1421 	if (azx_dev->opened)
1422 		*azx_dev = chip->saved_azx_dev;
1423 	azx_dev->locked = 0;
1424 	spin_unlock_irq(&chip->reg_lock);
1425  unlock:
1426 	dsp_unlock(azx_dev);
1427 	return err;
1428 }
1429 
1430 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start)
1431 {
1432 	struct azx *chip = bus->private_data;
1433 	struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
1434 
1435 	if (start)
1436 		azx_stream_start(chip, azx_dev);
1437 	else
1438 		azx_stream_stop(chip, azx_dev);
1439 	azx_dev->running = start;
1440 }
1441 
1442 static void azx_load_dsp_cleanup(struct hda_bus *bus,
1443 				 struct snd_dma_buffer *dmab)
1444 {
1445 	struct azx *chip = bus->private_data;
1446 	struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
1447 
1448 	if (!dmab->area || !azx_dev->locked)
1449 		return;
1450 
1451 	dsp_lock(azx_dev);
1452 	/* reset BDL address */
1453 	azx_sd_writel(chip, azx_dev, SD_BDLPL, 0);
1454 	azx_sd_writel(chip, azx_dev, SD_BDLPU, 0);
1455 	azx_sd_writel(chip, azx_dev, SD_CTL, 0);
1456 	azx_dev->bufsize = 0;
1457 	azx_dev->period_bytes = 0;
1458 	azx_dev->format_val = 0;
1459 
1460 	chip->ops->dma_free_pages(chip, dmab);
1461 	dmab->area = NULL;
1462 
1463 	spin_lock_irq(&chip->reg_lock);
1464 	if (azx_dev->opened)
1465 		*azx_dev = chip->saved_azx_dev;
1466 	azx_dev->locked = 0;
1467 	spin_unlock_irq(&chip->reg_lock);
1468 	dsp_unlock(azx_dev);
1469 }
1470 #endif /* CONFIG_SND_HDA_DSP_LOADER */
1471 
1472 int azx_alloc_stream_pages(struct azx *chip)
1473 {
1474 	int i, err;
1475 
1476 	for (i = 0; i < chip->num_streams; i++) {
1477 		dsp_lock_init(&chip->azx_dev[i]);
1478 		/* allocate memory for the BDL for each stream */
1479 		err = chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV,
1480 						 BDL_SIZE,
1481 						 &chip->azx_dev[i].bdl);
1482 		if (err < 0)
1483 			return -ENOMEM;
1484 	}
1485 	/* allocate memory for the position buffer */
1486 	err = chip->ops->dma_alloc_pages(chip, SNDRV_DMA_TYPE_DEV,
1487 					 chip->num_streams * 8, &chip->posbuf);
1488 	if (err < 0)
1489 		return -ENOMEM;
1490 
1491 	/* allocate CORB/RIRB */
1492 	err = azx_alloc_cmd_io(chip);
1493 	if (err < 0)
1494 		return err;
1495 	return 0;
1496 }
1497 EXPORT_SYMBOL_GPL(azx_alloc_stream_pages);
1498 
1499 void azx_free_stream_pages(struct azx *chip)
1500 {
1501 	int i;
1502 	if (chip->azx_dev) {
1503 		for (i = 0; i < chip->num_streams; i++)
1504 			if (chip->azx_dev[i].bdl.area)
1505 				chip->ops->dma_free_pages(
1506 					chip, &chip->azx_dev[i].bdl);
1507 	}
1508 	if (chip->rb.area)
1509 		chip->ops->dma_free_pages(chip, &chip->rb);
1510 	if (chip->posbuf.area)
1511 		chip->ops->dma_free_pages(chip, &chip->posbuf);
1512 }
1513 EXPORT_SYMBOL_GPL(azx_free_stream_pages);
1514 
1515 /*
1516  * Lowlevel interface
1517  */
1518 
1519 /* enter link reset */
1520 void azx_enter_link_reset(struct azx *chip)
1521 {
1522 	unsigned long timeout;
1523 
1524 	/* reset controller */
1525 	azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~AZX_GCTL_RESET);
1526 
1527 	timeout = jiffies + msecs_to_jiffies(100);
1528 	while ((azx_readb(chip, GCTL) & AZX_GCTL_RESET) &&
1529 			time_before(jiffies, timeout))
1530 		usleep_range(500, 1000);
1531 }
1532 EXPORT_SYMBOL_GPL(azx_enter_link_reset);
1533 
1534 /* exit link reset */
1535 static void azx_exit_link_reset(struct azx *chip)
1536 {
1537 	unsigned long timeout;
1538 
1539 	azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | AZX_GCTL_RESET);
1540 
1541 	timeout = jiffies + msecs_to_jiffies(100);
1542 	while (!azx_readb(chip, GCTL) &&
1543 			time_before(jiffies, timeout))
1544 		usleep_range(500, 1000);
1545 }
1546 
1547 /* reset codec link */
1548 static int azx_reset(struct azx *chip, bool full_reset)
1549 {
1550 	if (!full_reset)
1551 		goto __skip;
1552 
1553 	/* clear STATESTS */
1554 	azx_writew(chip, STATESTS, STATESTS_INT_MASK);
1555 
1556 	/* reset controller */
1557 	azx_enter_link_reset(chip);
1558 
1559 	/* delay for >= 100us for codec PLL to settle per spec
1560 	 * Rev 0.9 section 5.5.1
1561 	 */
1562 	usleep_range(500, 1000);
1563 
1564 	/* Bring controller out of reset */
1565 	azx_exit_link_reset(chip);
1566 
1567 	/* Brent Chartrand said to wait >= 540us for codecs to initialize */
1568 	usleep_range(1000, 1200);
1569 
1570       __skip:
1571 	/* check to see if controller is ready */
1572 	if (!azx_readb(chip, GCTL)) {
1573 		dev_dbg(chip->card->dev, "azx_reset: controller not ready!\n");
1574 		return -EBUSY;
1575 	}
1576 
1577 	/* Accept unsolicited responses */
1578 	if (!chip->single_cmd)
1579 		azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
1580 			   AZX_GCTL_UNSOL);
1581 
1582 	/* detect codecs */
1583 	if (!chip->codec_mask) {
1584 		chip->codec_mask = azx_readw(chip, STATESTS);
1585 		dev_dbg(chip->card->dev, "codec_mask = 0x%x\n",
1586 			chip->codec_mask);
1587 	}
1588 
1589 	return 0;
1590 }
1591 
1592 /* enable interrupts */
1593 static void azx_int_enable(struct azx *chip)
1594 {
1595 	/* enable controller CIE and GIE */
1596 	azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) |
1597 		   AZX_INT_CTRL_EN | AZX_INT_GLOBAL_EN);
1598 }
1599 
1600 /* disable interrupts */
1601 static void azx_int_disable(struct azx *chip)
1602 {
1603 	int i;
1604 
1605 	/* disable interrupts in stream descriptor */
1606 	for (i = 0; i < chip->num_streams; i++) {
1607 		struct azx_dev *azx_dev = &chip->azx_dev[i];
1608 		azx_sd_writeb(chip, azx_dev, SD_CTL,
1609 			      azx_sd_readb(chip, azx_dev, SD_CTL) &
1610 					~SD_INT_MASK);
1611 	}
1612 
1613 	/* disable SIE for all streams */
1614 	azx_writeb(chip, INTCTL, 0);
1615 
1616 	/* disable controller CIE and GIE */
1617 	azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) &
1618 		   ~(AZX_INT_CTRL_EN | AZX_INT_GLOBAL_EN));
1619 }
1620 
1621 /* clear interrupts */
1622 static void azx_int_clear(struct azx *chip)
1623 {
1624 	int i;
1625 
1626 	/* clear stream status */
1627 	for (i = 0; i < chip->num_streams; i++) {
1628 		struct azx_dev *azx_dev = &chip->azx_dev[i];
1629 		azx_sd_writeb(chip, azx_dev, SD_STS, SD_INT_MASK);
1630 	}
1631 
1632 	/* clear STATESTS */
1633 	azx_writew(chip, STATESTS, STATESTS_INT_MASK);
1634 
1635 	/* clear rirb status */
1636 	azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1637 
1638 	/* clear int status */
1639 	azx_writel(chip, INTSTS, AZX_INT_CTRL_EN | AZX_INT_ALL_STREAM);
1640 }
1641 
1642 /*
1643  * reset and start the controller registers
1644  */
1645 void azx_init_chip(struct azx *chip, bool full_reset)
1646 {
1647 	if (chip->initialized)
1648 		return;
1649 
1650 	/* reset controller */
1651 	azx_reset(chip, full_reset);
1652 
1653 	/* initialize interrupts */
1654 	azx_int_clear(chip);
1655 	azx_int_enable(chip);
1656 
1657 	/* initialize the codec command I/O */
1658 	if (!chip->single_cmd)
1659 		azx_init_cmd_io(chip);
1660 
1661 	/* program the position buffer */
1662 	azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
1663 	azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr));
1664 
1665 	chip->initialized = 1;
1666 }
1667 EXPORT_SYMBOL_GPL(azx_init_chip);
1668 
1669 void azx_stop_chip(struct azx *chip)
1670 {
1671 	if (!chip->initialized)
1672 		return;
1673 
1674 	/* disable interrupts */
1675 	azx_int_disable(chip);
1676 	azx_int_clear(chip);
1677 
1678 	/* disable CORB/RIRB */
1679 	azx_free_cmd_io(chip);
1680 
1681 	/* disable position buffer */
1682 	azx_writel(chip, DPLBASE, 0);
1683 	azx_writel(chip, DPUBASE, 0);
1684 
1685 	chip->initialized = 0;
1686 }
1687 EXPORT_SYMBOL_GPL(azx_stop_chip);
1688 
1689 /*
1690  * interrupt handler
1691  */
1692 irqreturn_t azx_interrupt(int irq, void *dev_id)
1693 {
1694 	struct azx *chip = dev_id;
1695 	struct azx_dev *azx_dev;
1696 	u32 status;
1697 	u8 sd_status;
1698 	int i;
1699 
1700 #ifdef CONFIG_PM
1701 	if (azx_has_pm_runtime(chip))
1702 		if (!pm_runtime_active(chip->card->dev))
1703 			return IRQ_NONE;
1704 #endif
1705 
1706 	spin_lock(&chip->reg_lock);
1707 
1708 	if (chip->disabled) {
1709 		spin_unlock(&chip->reg_lock);
1710 		return IRQ_NONE;
1711 	}
1712 
1713 	status = azx_readl(chip, INTSTS);
1714 	if (status == 0 || status == 0xffffffff) {
1715 		spin_unlock(&chip->reg_lock);
1716 		return IRQ_NONE;
1717 	}
1718 
1719 	for (i = 0; i < chip->num_streams; i++) {
1720 		azx_dev = &chip->azx_dev[i];
1721 		if (status & azx_dev->sd_int_sta_mask) {
1722 			sd_status = azx_sd_readb(chip, azx_dev, SD_STS);
1723 			azx_sd_writeb(chip, azx_dev, SD_STS, SD_INT_MASK);
1724 			if (!azx_dev->substream || !azx_dev->running ||
1725 			    !(sd_status & SD_INT_COMPLETE))
1726 				continue;
1727 			/* check whether this IRQ is really acceptable */
1728 			if (!chip->ops->position_check ||
1729 			    chip->ops->position_check(chip, azx_dev)) {
1730 				spin_unlock(&chip->reg_lock);
1731 				snd_pcm_period_elapsed(azx_dev->substream);
1732 				spin_lock(&chip->reg_lock);
1733 			}
1734 		}
1735 	}
1736 
1737 	/* clear rirb int */
1738 	status = azx_readb(chip, RIRBSTS);
1739 	if (status & RIRB_INT_MASK) {
1740 		if (status & RIRB_INT_RESPONSE) {
1741 			if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY)
1742 				udelay(80);
1743 			azx_update_rirb(chip);
1744 		}
1745 		azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1746 	}
1747 
1748 	spin_unlock(&chip->reg_lock);
1749 
1750 	return IRQ_HANDLED;
1751 }
1752 EXPORT_SYMBOL_GPL(azx_interrupt);
1753 
1754 /*
1755  * Codec initerface
1756  */
1757 
1758 /*
1759  * Probe the given codec address
1760  */
1761 static int probe_codec(struct azx *chip, int addr)
1762 {
1763 	unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1764 		(AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1765 	unsigned int res;
1766 
1767 	mutex_lock(&chip->bus->core.cmd_mutex);
1768 	chip->probing = 1;
1769 	azx_send_cmd(chip->bus, cmd);
1770 	res = azx_get_response(chip->bus, addr);
1771 	chip->probing = 0;
1772 	mutex_unlock(&chip->bus->core.cmd_mutex);
1773 	if (res == -1)
1774 		return -EIO;
1775 	dev_dbg(chip->card->dev, "codec #%d probed OK\n", addr);
1776 	return 0;
1777 }
1778 
1779 static void azx_bus_reset(struct hda_bus *bus)
1780 {
1781 	struct azx *chip = bus->private_data;
1782 
1783 	bus->in_reset = 1;
1784 	azx_stop_chip(chip);
1785 	azx_init_chip(chip, true);
1786 	if (chip->initialized)
1787 		snd_hda_bus_reset(chip->bus);
1788 	bus->in_reset = 0;
1789 }
1790 
1791 static int get_jackpoll_interval(struct azx *chip)
1792 {
1793 	int i;
1794 	unsigned int j;
1795 
1796 	if (!chip->jackpoll_ms)
1797 		return 0;
1798 
1799 	i = chip->jackpoll_ms[chip->dev_index];
1800 	if (i == 0)
1801 		return 0;
1802 	if (i < 50 || i > 60000)
1803 		j = 0;
1804 	else
1805 		j = msecs_to_jiffies(i);
1806 	if (j == 0)
1807 		dev_warn(chip->card->dev,
1808 			 "jackpoll_ms value out of range: %d\n", i);
1809 	return j;
1810 }
1811 
1812 static struct hda_bus_ops bus_ops = {
1813 	.command = azx_send_cmd,
1814 	.get_response = azx_get_response,
1815 	.attach_pcm = azx_attach_pcm_stream,
1816 	.bus_reset = azx_bus_reset,
1817 #ifdef CONFIG_SND_HDA_DSP_LOADER
1818 	.load_dsp_prepare = azx_load_dsp_prepare,
1819 	.load_dsp_trigger = azx_load_dsp_trigger,
1820 	.load_dsp_cleanup = azx_load_dsp_cleanup,
1821 #endif
1822 };
1823 
1824 /* HD-audio bus initialization */
1825 int azx_bus_create(struct azx *chip, const char *model)
1826 {
1827 	struct hda_bus *bus;
1828 	int err;
1829 
1830 	err = snd_hda_bus_new(chip->card, &bus);
1831 	if (err < 0)
1832 		return err;
1833 
1834 	chip->bus = bus;
1835 	bus->private_data = chip;
1836 	bus->pci = chip->pci;
1837 	bus->modelname = model;
1838 	bus->ops = bus_ops;
1839 
1840 	if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) {
1841 		dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n");
1842 		bus->needs_damn_long_delay = 1;
1843 	}
1844 
1845 	/* AMD chipsets often cause the communication stalls upon certain
1846 	 * sequence like the pin-detection.  It seems that forcing the synced
1847 	 * access works around the stall.  Grrr...
1848 	 */
1849 	if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1850 		dev_dbg(chip->card->dev, "Enable sync_write for stable communication\n");
1851 		bus->core.sync_write = 1;
1852 		bus->allow_bus_reset = 1;
1853 	}
1854 
1855 	return 0;
1856 }
1857 EXPORT_SYMBOL_GPL(azx_bus_create);
1858 
1859 /* Probe codecs */
1860 int azx_probe_codecs(struct azx *chip, unsigned int max_slots)
1861 {
1862 	struct hda_bus *bus = chip->bus;
1863 	int c, codecs, err;
1864 
1865 	codecs = 0;
1866 	if (!max_slots)
1867 		max_slots = AZX_DEFAULT_CODECS;
1868 
1869 	/* First try to probe all given codec slots */
1870 	for (c = 0; c < max_slots; c++) {
1871 		if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1872 			if (probe_codec(chip, c) < 0) {
1873 				/* Some BIOSen give you wrong codec addresses
1874 				 * that don't exist
1875 				 */
1876 				dev_warn(chip->card->dev,
1877 					 "Codec #%d probe error; disabling it...\n", c);
1878 				chip->codec_mask &= ~(1 << c);
1879 				/* More badly, accessing to a non-existing
1880 				 * codec often screws up the controller chip,
1881 				 * and disturbs the further communications.
1882 				 * Thus if an error occurs during probing,
1883 				 * better to reset the controller chip to
1884 				 * get back to the sanity state.
1885 				 */
1886 				azx_stop_chip(chip);
1887 				azx_init_chip(chip, true);
1888 			}
1889 		}
1890 	}
1891 
1892 	/* Then create codec instances */
1893 	for (c = 0; c < max_slots; c++) {
1894 		if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1895 			struct hda_codec *codec;
1896 			err = snd_hda_codec_new(bus, bus->card, c, &codec);
1897 			if (err < 0)
1898 				continue;
1899 			codec->jackpoll_interval = get_jackpoll_interval(chip);
1900 			codec->beep_mode = chip->beep_mode;
1901 			codecs++;
1902 		}
1903 	}
1904 	if (!codecs) {
1905 		dev_err(chip->card->dev, "no codecs initialized\n");
1906 		return -ENXIO;
1907 	}
1908 	return 0;
1909 }
1910 EXPORT_SYMBOL_GPL(azx_probe_codecs);
1911 
1912 /* configure each codec instance */
1913 int azx_codec_configure(struct azx *chip)
1914 {
1915 	struct hda_codec *codec;
1916 	list_for_each_codec(codec, chip->bus) {
1917 		snd_hda_codec_configure(codec);
1918 	}
1919 	return 0;
1920 }
1921 EXPORT_SYMBOL_GPL(azx_codec_configure);
1922 
1923 
1924 static bool is_input_stream(struct azx *chip, unsigned char index)
1925 {
1926 	return (index >= chip->capture_index_offset &&
1927 		index < chip->capture_index_offset + chip->capture_streams);
1928 }
1929 
1930 /* initialize SD streams */
1931 int azx_init_stream(struct azx *chip)
1932 {
1933 	int i;
1934 	int in_stream_tag = 0;
1935 	int out_stream_tag = 0;
1936 
1937 	/* initialize each stream (aka device)
1938 	 * assign the starting bdl address to each stream (device)
1939 	 * and initialize
1940 	 */
1941 	for (i = 0; i < chip->num_streams; i++) {
1942 		struct azx_dev *azx_dev = &chip->azx_dev[i];
1943 		azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8);
1944 		/* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
1945 		azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80);
1946 		/* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
1947 		azx_dev->sd_int_sta_mask = 1 << i;
1948 		azx_dev->index = i;
1949 
1950 		/* stream tag must be unique throughout
1951 		 * the stream direction group,
1952 		 * valid values 1...15
1953 		 * use separate stream tag if the flag
1954 		 * AZX_DCAPS_SEPARATE_STREAM_TAG is used
1955 		 */
1956 		if (chip->driver_caps & AZX_DCAPS_SEPARATE_STREAM_TAG)
1957 			azx_dev->stream_tag =
1958 				is_input_stream(chip, i) ?
1959 				++in_stream_tag :
1960 				++out_stream_tag;
1961 		else
1962 			azx_dev->stream_tag = i + 1;
1963 	}
1964 
1965 	return 0;
1966 }
1967 EXPORT_SYMBOL_GPL(azx_init_stream);
1968 
1969 MODULE_LICENSE("GPL");
1970 MODULE_DESCRIPTION("Common HDA driver functions");
1971