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