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