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