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