]> git.kernelconcepts.de Git - karo-tx-linux.git/blob - sound/pci/hda/hda_intel.c
ALSA: hda - Replace with standard printk
[karo-tx-linux.git] / sound / pci / hda / hda_intel.c
1 /*
2  *
3  *  hda_intel.c - Implementation of primary alsa driver code base
4  *                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  *  This program is free software; you can redistribute it and/or modify it
12  *  under the terms of the GNU General Public License as published by the Free
13  *  Software Foundation; either version 2 of the License, or (at your option)
14  *  any later version.
15  *
16  *  This program is distributed in the hope that it will be useful, but WITHOUT
17  *  ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18  *  FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
19  *  more details.
20  *
21  *  You should have received a copy of the GNU General Public License along with
22  *  this program; if not, write to the Free Software Foundation, Inc., 59
23  *  Temple Place - Suite 330, Boston, MA  02111-1307, USA.
24  *
25  *  CONTACTS:
26  *
27  *  Matt Jared          matt.jared@intel.com
28  *  Andy Kopp           andy.kopp@intel.com
29  *  Dan Kogan           dan.d.kogan@intel.com
30  *
31  *  CHANGES:
32  *
33  *  2004.12.01  Major rewrite by tiwai, merged the work of pshou
34  * 
35  */
36
37 #include <linux/delay.h>
38 #include <linux/interrupt.h>
39 #include <linux/kernel.h>
40 #include <linux/module.h>
41 #include <linux/dma-mapping.h>
42 #include <linux/moduleparam.h>
43 #include <linux/init.h>
44 #include <linux/slab.h>
45 #include <linux/pci.h>
46 #include <linux/mutex.h>
47 #include <linux/reboot.h>
48 #include <linux/io.h>
49 #include <linux/pm_runtime.h>
50 #include <linux/clocksource.h>
51 #include <linux/time.h>
52 #include <linux/completion.h>
53
54 #ifdef CONFIG_X86
55 /* for snoop control */
56 #include <asm/pgtable.h>
57 #include <asm/cacheflush.h>
58 #endif
59 #include <sound/core.h>
60 #include <sound/initval.h>
61 #include <linux/vgaarb.h>
62 #include <linux/vga_switcheroo.h>
63 #include <linux/firmware.h>
64 #include "hda_codec.h"
65 #include "hda_i915.h"
66
67
68 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
69 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
70 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
71 static char *model[SNDRV_CARDS];
72 static int position_fix[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
73 static int bdl_pos_adj[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
74 static int probe_mask[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
75 static int probe_only[SNDRV_CARDS];
76 static int jackpoll_ms[SNDRV_CARDS];
77 static bool single_cmd;
78 static int enable_msi = -1;
79 #ifdef CONFIG_SND_HDA_PATCH_LOADER
80 static char *patch[SNDRV_CARDS];
81 #endif
82 #ifdef CONFIG_SND_HDA_INPUT_BEEP
83 static bool beep_mode[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] =
84                                         CONFIG_SND_HDA_INPUT_BEEP_MODE};
85 #endif
86
87 module_param_array(index, int, NULL, 0444);
88 MODULE_PARM_DESC(index, "Index value for Intel HD audio interface.");
89 module_param_array(id, charp, NULL, 0444);
90 MODULE_PARM_DESC(id, "ID string for Intel HD audio interface.");
91 module_param_array(enable, bool, NULL, 0444);
92 MODULE_PARM_DESC(enable, "Enable Intel HD audio interface.");
93 module_param_array(model, charp, NULL, 0444);
94 MODULE_PARM_DESC(model, "Use the given board model.");
95 module_param_array(position_fix, int, NULL, 0444);
96 MODULE_PARM_DESC(position_fix, "DMA pointer read method."
97                  "(-1 = system default, 0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO).");
98 module_param_array(bdl_pos_adj, int, NULL, 0644);
99 MODULE_PARM_DESC(bdl_pos_adj, "BDL position adjustment offset.");
100 module_param_array(probe_mask, int, NULL, 0444);
101 MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1).");
102 module_param_array(probe_only, int, NULL, 0444);
103 MODULE_PARM_DESC(probe_only, "Only probing and no codec initialization.");
104 module_param_array(jackpoll_ms, int, NULL, 0444);
105 MODULE_PARM_DESC(jackpoll_ms, "Ms between polling for jack events (default = 0, using unsol events only)");
106 module_param(single_cmd, bool, 0444);
107 MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs "
108                  "(for debugging only).");
109 module_param(enable_msi, bint, 0444);
110 MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)");
111 #ifdef CONFIG_SND_HDA_PATCH_LOADER
112 module_param_array(patch, charp, NULL, 0444);
113 MODULE_PARM_DESC(patch, "Patch file for Intel HD audio interface.");
114 #endif
115 #ifdef CONFIG_SND_HDA_INPUT_BEEP
116 module_param_array(beep_mode, bool, NULL, 0444);
117 MODULE_PARM_DESC(beep_mode, "Select HDA Beep registration mode "
118                             "(0=off, 1=on) (default=1).");
119 #endif
120
121 #ifdef CONFIG_PM
122 static int param_set_xint(const char *val, const struct kernel_param *kp);
123 static struct kernel_param_ops param_ops_xint = {
124         .set = param_set_xint,
125         .get = param_get_int,
126 };
127 #define param_check_xint param_check_int
128
129 static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
130 module_param(power_save, xint, 0644);
131 MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
132                  "(in second, 0 = disable).");
133
134 /* reset the HD-audio controller in power save mode.
135  * this may give more power-saving, but will take longer time to
136  * wake up.
137  */
138 static bool power_save_controller = 1;
139 module_param(power_save_controller, bool, 0644);
140 MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
141 #endif /* CONFIG_PM */
142
143 static int align_buffer_size = -1;
144 module_param(align_buffer_size, bint, 0644);
145 MODULE_PARM_DESC(align_buffer_size,
146                 "Force buffer and period sizes to be multiple of 128 bytes.");
147
148 #ifdef CONFIG_X86
149 static bool hda_snoop = true;
150 module_param_named(snoop, hda_snoop, bool, 0444);
151 MODULE_PARM_DESC(snoop, "Enable/disable snooping");
152 #define azx_snoop(chip)         (chip)->snoop
153 #else
154 #define hda_snoop               true
155 #define azx_snoop(chip)         true
156 #endif
157
158
159 MODULE_LICENSE("GPL");
160 MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
161                          "{Intel, ICH6M},"
162                          "{Intel, ICH7},"
163                          "{Intel, ESB2},"
164                          "{Intel, ICH8},"
165                          "{Intel, ICH9},"
166                          "{Intel, ICH10},"
167                          "{Intel, PCH},"
168                          "{Intel, CPT},"
169                          "{Intel, PPT},"
170                          "{Intel, LPT},"
171                          "{Intel, LPT_LP},"
172                          "{Intel, WPT_LP},"
173                          "{Intel, HPT},"
174                          "{Intel, PBG},"
175                          "{Intel, SCH},"
176                          "{ATI, SB450},"
177                          "{ATI, SB600},"
178                          "{ATI, RS600},"
179                          "{ATI, RS690},"
180                          "{ATI, RS780},"
181                          "{ATI, R600},"
182                          "{ATI, RV630},"
183                          "{ATI, RV610},"
184                          "{ATI, RV670},"
185                          "{ATI, RV635},"
186                          "{ATI, RV620},"
187                          "{ATI, RV770},"
188                          "{VIA, VT8251},"
189                          "{VIA, VT8237A},"
190                          "{SiS, SIS966},"
191                          "{ULI, M5461}}");
192 MODULE_DESCRIPTION("Intel HDA driver");
193
194 #if defined(CONFIG_PM) && defined(CONFIG_VGA_SWITCHEROO)
195 #if IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI)
196 #define SUPPORT_VGA_SWITCHEROO
197 #endif
198 #endif
199
200
201 /*
202  * registers
203  */
204 #define ICH6_REG_GCAP                   0x00
205 #define   ICH6_GCAP_64OK        (1 << 0)   /* 64bit address support */
206 #define   ICH6_GCAP_NSDO        (3 << 1)   /* # of serial data out signals */
207 #define   ICH6_GCAP_BSS         (31 << 3)  /* # of bidirectional streams */
208 #define   ICH6_GCAP_ISS         (15 << 8)  /* # of input streams */
209 #define   ICH6_GCAP_OSS         (15 << 12) /* # of output streams */
210 #define ICH6_REG_VMIN                   0x02
211 #define ICH6_REG_VMAJ                   0x03
212 #define ICH6_REG_OUTPAY                 0x04
213 #define ICH6_REG_INPAY                  0x06
214 #define ICH6_REG_GCTL                   0x08
215 #define   ICH6_GCTL_RESET       (1 << 0)   /* controller reset */
216 #define   ICH6_GCTL_FCNTRL      (1 << 1)   /* flush control */
217 #define   ICH6_GCTL_UNSOL       (1 << 8)   /* accept unsol. response enable */
218 #define ICH6_REG_WAKEEN                 0x0c
219 #define ICH6_REG_STATESTS               0x0e
220 #define ICH6_REG_GSTS                   0x10
221 #define   ICH6_GSTS_FSTS        (1 << 1)   /* flush status */
222 #define ICH6_REG_INTCTL                 0x20
223 #define ICH6_REG_INTSTS                 0x24
224 #define ICH6_REG_WALLCLK                0x30    /* 24Mhz source */
225 #define ICH6_REG_OLD_SSYNC              0x34    /* SSYNC for old ICH */
226 #define ICH6_REG_SSYNC                  0x38
227 #define ICH6_REG_CORBLBASE              0x40
228 #define ICH6_REG_CORBUBASE              0x44
229 #define ICH6_REG_CORBWP                 0x48
230 #define ICH6_REG_CORBRP                 0x4a
231 #define   ICH6_CORBRP_RST       (1 << 15)  /* read pointer reset */
232 #define ICH6_REG_CORBCTL                0x4c
233 #define   ICH6_CORBCTL_RUN      (1 << 1)   /* enable DMA */
234 #define   ICH6_CORBCTL_CMEIE    (1 << 0)   /* enable memory error irq */
235 #define ICH6_REG_CORBSTS                0x4d
236 #define   ICH6_CORBSTS_CMEI     (1 << 0)   /* memory error indication */
237 #define ICH6_REG_CORBSIZE               0x4e
238
239 #define ICH6_REG_RIRBLBASE              0x50
240 #define ICH6_REG_RIRBUBASE              0x54
241 #define ICH6_REG_RIRBWP                 0x58
242 #define   ICH6_RIRBWP_RST       (1 << 15)  /* write pointer reset */
243 #define ICH6_REG_RINTCNT                0x5a
244 #define ICH6_REG_RIRBCTL                0x5c
245 #define   ICH6_RBCTL_IRQ_EN     (1 << 0)   /* enable IRQ */
246 #define   ICH6_RBCTL_DMA_EN     (1 << 1)   /* enable DMA */
247 #define   ICH6_RBCTL_OVERRUN_EN (1 << 2)   /* enable overrun irq */
248 #define ICH6_REG_RIRBSTS                0x5d
249 #define   ICH6_RBSTS_IRQ        (1 << 0)   /* response irq */
250 #define   ICH6_RBSTS_OVERRUN    (1 << 2)   /* overrun irq */
251 #define ICH6_REG_RIRBSIZE               0x5e
252
253 #define ICH6_REG_IC                     0x60
254 #define ICH6_REG_IR                     0x64
255 #define ICH6_REG_IRS                    0x68
256 #define   ICH6_IRS_VALID        (1<<1)
257 #define   ICH6_IRS_BUSY         (1<<0)
258
259 #define ICH6_REG_DPLBASE                0x70
260 #define ICH6_REG_DPUBASE                0x74
261 #define   ICH6_DPLBASE_ENABLE   0x1     /* Enable position buffer */
262
263 /* SD offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
264 enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
265
266 /* stream register offsets from stream base */
267 #define ICH6_REG_SD_CTL                 0x00
268 #define ICH6_REG_SD_STS                 0x03
269 #define ICH6_REG_SD_LPIB                0x04
270 #define ICH6_REG_SD_CBL                 0x08
271 #define ICH6_REG_SD_LVI                 0x0c
272 #define ICH6_REG_SD_FIFOW               0x0e
273 #define ICH6_REG_SD_FIFOSIZE            0x10
274 #define ICH6_REG_SD_FORMAT              0x12
275 #define ICH6_REG_SD_BDLPL               0x18
276 #define ICH6_REG_SD_BDLPU               0x1c
277
278 /* PCI space */
279 #define ICH6_PCIREG_TCSEL       0x44
280
281 /*
282  * other constants
283  */
284
285 /* max number of SDs */
286 /* ICH, ATI and VIA have 4 playback and 4 capture */
287 #define ICH6_NUM_CAPTURE        4
288 #define ICH6_NUM_PLAYBACK       4
289
290 /* ULI has 6 playback and 5 capture */
291 #define ULI_NUM_CAPTURE         5
292 #define ULI_NUM_PLAYBACK        6
293
294 /* ATI HDMI may have up to 8 playbacks and 0 capture */
295 #define ATIHDMI_NUM_CAPTURE     0
296 #define ATIHDMI_NUM_PLAYBACK    8
297
298 /* TERA has 4 playback and 3 capture */
299 #define TERA_NUM_CAPTURE        3
300 #define TERA_NUM_PLAYBACK       4
301
302 /* this number is statically defined for simplicity */
303 #define MAX_AZX_DEV             16
304
305 /* max number of fragments - we may use more if allocating more pages for BDL */
306 #define BDL_SIZE                4096
307 #define AZX_MAX_BDL_ENTRIES     (BDL_SIZE / 16)
308 #define AZX_MAX_FRAG            32
309 /* max buffer size - no h/w limit, you can increase as you like */
310 #define AZX_MAX_BUF_SIZE        (1024*1024*1024)
311
312 /* RIRB int mask: overrun[2], response[0] */
313 #define RIRB_INT_RESPONSE       0x01
314 #define RIRB_INT_OVERRUN        0x04
315 #define RIRB_INT_MASK           0x05
316
317 /* STATESTS int mask: S3,SD2,SD1,SD0 */
318 #define AZX_MAX_CODECS          8
319 #define AZX_DEFAULT_CODECS      4
320 #define STATESTS_INT_MASK       ((1 << AZX_MAX_CODECS) - 1)
321
322 /* SD_CTL bits */
323 #define SD_CTL_STREAM_RESET     0x01    /* stream reset bit */
324 #define SD_CTL_DMA_START        0x02    /* stream DMA start bit */
325 #define SD_CTL_STRIPE           (3 << 16)       /* stripe control */
326 #define SD_CTL_TRAFFIC_PRIO     (1 << 18)       /* traffic priority */
327 #define SD_CTL_DIR              (1 << 19)       /* bi-directional stream */
328 #define SD_CTL_STREAM_TAG_MASK  (0xf << 20)
329 #define SD_CTL_STREAM_TAG_SHIFT 20
330
331 /* SD_CTL and SD_STS */
332 #define SD_INT_DESC_ERR         0x10    /* descriptor error interrupt */
333 #define SD_INT_FIFO_ERR         0x08    /* FIFO error interrupt */
334 #define SD_INT_COMPLETE         0x04    /* completion interrupt */
335 #define SD_INT_MASK             (SD_INT_DESC_ERR|SD_INT_FIFO_ERR|\
336                                  SD_INT_COMPLETE)
337
338 /* SD_STS */
339 #define SD_STS_FIFO_READY       0x20    /* FIFO ready */
340
341 /* INTCTL and INTSTS */
342 #define ICH6_INT_ALL_STREAM     0xff       /* all stream interrupts */
343 #define ICH6_INT_CTRL_EN        0x40000000 /* controller interrupt enable bit */
344 #define ICH6_INT_GLOBAL_EN      0x80000000 /* global interrupt enable bit */
345
346 /* below are so far hardcoded - should read registers in future */
347 #define ICH6_MAX_CORB_ENTRIES   256
348 #define ICH6_MAX_RIRB_ENTRIES   256
349
350 /* position fix mode */
351 enum {
352         POS_FIX_AUTO,
353         POS_FIX_LPIB,
354         POS_FIX_POSBUF,
355         POS_FIX_VIACOMBO,
356         POS_FIX_COMBO,
357 };
358
359 /* Defines for ATI HD Audio support in SB450 south bridge */
360 #define ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR   0x42
361 #define ATI_SB450_HDAUDIO_ENABLE_SNOOP      0x02
362
363 /* Defines for Nvidia HDA support */
364 #define NVIDIA_HDA_TRANSREG_ADDR      0x4e
365 #define NVIDIA_HDA_ENABLE_COHBITS     0x0f
366 #define NVIDIA_HDA_ISTRM_COH          0x4d
367 #define NVIDIA_HDA_OSTRM_COH          0x4c
368 #define NVIDIA_HDA_ENABLE_COHBIT      0x01
369
370 /* Defines for Intel SCH HDA snoop control */
371 #define INTEL_SCH_HDA_DEVC      0x78
372 #define INTEL_SCH_HDA_DEVC_NOSNOOP       (0x1<<11)
373
374 /* Define IN stream 0 FIFO size offset in VIA controller */
375 #define VIA_IN_STREAM0_FIFO_SIZE_OFFSET 0x90
376 /* Define VIA HD Audio Device ID*/
377 #define VIA_HDAC_DEVICE_ID              0x3288
378
379 /* HD Audio class code */
380 #define PCI_CLASS_MULTIMEDIA_HD_AUDIO   0x0403
381
382 /*
383  */
384
385 struct azx_dev {
386         struct snd_dma_buffer bdl; /* BDL buffer */
387         u32 *posbuf;            /* position buffer pointer */
388
389         unsigned int bufsize;   /* size of the play buffer in bytes */
390         unsigned int period_bytes; /* size of the period in bytes */
391         unsigned int frags;     /* number for period in the play buffer */
392         unsigned int fifo_size; /* FIFO size */
393         unsigned long start_wallclk;    /* start + minimum wallclk */
394         unsigned long period_wallclk;   /* wallclk for period */
395
396         void __iomem *sd_addr;  /* stream descriptor pointer */
397
398         u32 sd_int_sta_mask;    /* stream int status mask */
399
400         /* pcm support */
401         struct snd_pcm_substream *substream;    /* assigned substream,
402                                                  * set in PCM open
403                                                  */
404         unsigned int format_val;        /* format value to be set in the
405                                          * controller and the codec
406                                          */
407         unsigned char stream_tag;       /* assigned stream */
408         unsigned char index;            /* stream index */
409         int assigned_key;               /* last device# key assigned to */
410
411         unsigned int opened :1;
412         unsigned int running :1;
413         unsigned int irq_pending :1;
414         unsigned int prepared:1;
415         unsigned int locked:1;
416         /*
417          * For VIA:
418          *  A flag to ensure DMA position is 0
419          *  when link position is not greater than FIFO size
420          */
421         unsigned int insufficient :1;
422         unsigned int wc_marked:1;
423         unsigned int no_period_wakeup:1;
424
425         struct timecounter  azx_tc;
426         struct cyclecounter azx_cc;
427
428         int delay_negative_threshold;
429
430 #ifdef CONFIG_SND_HDA_DSP_LOADER
431         struct mutex dsp_mutex;
432 #endif
433 };
434
435 /* DSP lock helpers */
436 #ifdef CONFIG_SND_HDA_DSP_LOADER
437 #define dsp_lock_init(dev)      mutex_init(&(dev)->dsp_mutex)
438 #define dsp_lock(dev)           mutex_lock(&(dev)->dsp_mutex)
439 #define dsp_unlock(dev)         mutex_unlock(&(dev)->dsp_mutex)
440 #define dsp_is_locked(dev)      ((dev)->locked)
441 #else
442 #define dsp_lock_init(dev)      do {} while (0)
443 #define dsp_lock(dev)           do {} while (0)
444 #define dsp_unlock(dev)         do {} while (0)
445 #define dsp_is_locked(dev)      0
446 #endif
447
448 /* CORB/RIRB */
449 struct azx_rb {
450         u32 *buf;               /* CORB/RIRB buffer
451                                  * Each CORB entry is 4byte, RIRB is 8byte
452                                  */
453         dma_addr_t addr;        /* physical address of CORB/RIRB buffer */
454         /* for RIRB */
455         unsigned short rp, wp;  /* read/write pointers */
456         int cmds[AZX_MAX_CODECS];       /* number of pending requests */
457         u32 res[AZX_MAX_CODECS];        /* last read value */
458 };
459
460 struct azx_pcm {
461         struct azx *chip;
462         struct snd_pcm *pcm;
463         struct hda_codec *codec;
464         struct hda_pcm_stream *hinfo[2];
465         struct list_head list;
466 };
467
468 struct azx {
469         struct snd_card *card;
470         struct pci_dev *pci;
471         int dev_index;
472
473         /* chip type specific */
474         int driver_type;
475         unsigned int driver_caps;
476         int playback_streams;
477         int playback_index_offset;
478         int capture_streams;
479         int capture_index_offset;
480         int num_streams;
481
482         /* pci resources */
483         unsigned long addr;
484         void __iomem *remap_addr;
485         int irq;
486
487         /* locks */
488         spinlock_t reg_lock;
489         struct mutex open_mutex;
490         struct completion probe_wait;
491
492         /* streams (x num_streams) */
493         struct azx_dev *azx_dev;
494
495         /* PCM */
496         struct list_head pcm_list; /* azx_pcm list */
497
498         /* HD codec */
499         unsigned short codec_mask;
500         int  codec_probe_mask; /* copied from probe_mask option */
501         struct hda_bus *bus;
502         unsigned int beep_mode;
503
504         /* CORB/RIRB */
505         struct azx_rb corb;
506         struct azx_rb rirb;
507
508         /* CORB/RIRB and position buffers */
509         struct snd_dma_buffer rb;
510         struct snd_dma_buffer posbuf;
511
512 #ifdef CONFIG_SND_HDA_PATCH_LOADER
513         const struct firmware *fw;
514 #endif
515
516         /* flags */
517         int position_fix[2]; /* for both playback/capture streams */
518         int poll_count;
519         unsigned int running :1;
520         unsigned int initialized :1;
521         unsigned int single_cmd :1;
522         unsigned int polling_mode :1;
523         unsigned int msi :1;
524         unsigned int irq_pending_warned :1;
525         unsigned int probing :1; /* codec probing phase */
526         unsigned int snoop:1;
527         unsigned int align_buffer_size:1;
528         unsigned int region_requested:1;
529
530         /* VGA-switcheroo setup */
531         unsigned int use_vga_switcheroo:1;
532         unsigned int vga_switcheroo_registered:1;
533         unsigned int init_failed:1; /* delayed init failed */
534         unsigned int disabled:1; /* disabled by VGA-switcher */
535
536         /* for debugging */
537         unsigned int last_cmd[AZX_MAX_CODECS];
538
539         /* for pending irqs */
540         struct work_struct irq_pending_work;
541
542         struct work_struct probe_work;
543
544         /* reboot notifier (for mysterious hangup problem at power-down) */
545         struct notifier_block reboot_notifier;
546
547         /* card list (for power_save trigger) */
548         struct list_head list;
549
550 #ifdef CONFIG_SND_HDA_DSP_LOADER
551         struct azx_dev saved_azx_dev;
552 #endif
553
554         /* secondary power domain for hdmi audio under vga device */
555         struct dev_pm_domain hdmi_pm_domain;
556 };
557
558 #define CREATE_TRACE_POINTS
559 #include "hda_intel_trace.h"
560
561 /* driver types */
562 enum {
563         AZX_DRIVER_ICH,
564         AZX_DRIVER_PCH,
565         AZX_DRIVER_SCH,
566         AZX_DRIVER_HDMI,
567         AZX_DRIVER_ATI,
568         AZX_DRIVER_ATIHDMI,
569         AZX_DRIVER_ATIHDMI_NS,
570         AZX_DRIVER_VIA,
571         AZX_DRIVER_SIS,
572         AZX_DRIVER_ULI,
573         AZX_DRIVER_NVIDIA,
574         AZX_DRIVER_TERA,
575         AZX_DRIVER_CTX,
576         AZX_DRIVER_CTHDA,
577         AZX_DRIVER_GENERIC,
578         AZX_NUM_DRIVERS, /* keep this as last entry */
579 };
580
581 /* driver quirks (capabilities) */
582 /* bits 0-7 are used for indicating driver type */
583 #define AZX_DCAPS_NO_TCSEL      (1 << 8)        /* No Intel TCSEL bit */
584 #define AZX_DCAPS_NO_MSI        (1 << 9)        /* No MSI support */
585 #define AZX_DCAPS_ATI_SNOOP     (1 << 10)       /* ATI snoop enable */
586 #define AZX_DCAPS_NVIDIA_SNOOP  (1 << 11)       /* Nvidia snoop enable */
587 #define AZX_DCAPS_SCH_SNOOP     (1 << 12)       /* SCH/PCH snoop enable */
588 #define AZX_DCAPS_RIRB_DELAY    (1 << 13)       /* Long delay in read loop */
589 #define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14)      /* Put a delay before read */
590 #define AZX_DCAPS_CTX_WORKAROUND (1 << 15)      /* X-Fi workaround */
591 #define AZX_DCAPS_POSFIX_LPIB   (1 << 16)       /* Use LPIB as default */
592 #define AZX_DCAPS_POSFIX_VIA    (1 << 17)       /* Use VIACOMBO as default */
593 #define AZX_DCAPS_NO_64BIT      (1 << 18)       /* No 64bit address */
594 #define AZX_DCAPS_SYNC_WRITE    (1 << 19)       /* sync each cmd write */
595 #define AZX_DCAPS_OLD_SSYNC     (1 << 20)       /* Old SSYNC reg for ICH */
596 #define AZX_DCAPS_BUFSIZE       (1 << 21)       /* no buffer size alignment */
597 #define AZX_DCAPS_ALIGN_BUFSIZE (1 << 22)       /* buffer size alignment */
598 #define AZX_DCAPS_4K_BDLE_BOUNDARY (1 << 23)    /* BDLE in 4k boundary */
599 #define AZX_DCAPS_COUNT_LPIB_DELAY  (1 << 25)   /* Take LPIB as delay */
600 #define AZX_DCAPS_PM_RUNTIME    (1 << 26)       /* runtime PM support */
601 #define AZX_DCAPS_I915_POWERWELL (1 << 27)      /* HSW i915 power well support */
602
603 /* quirks for Intel PCH */
604 #define AZX_DCAPS_INTEL_PCH_NOPM \
605         (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_BUFSIZE | \
606          AZX_DCAPS_COUNT_LPIB_DELAY)
607
608 #define AZX_DCAPS_INTEL_PCH \
609         (AZX_DCAPS_INTEL_PCH_NOPM | AZX_DCAPS_PM_RUNTIME)
610
611 #define AZX_DCAPS_INTEL_HASWELL \
612         (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_ALIGN_BUFSIZE | \
613          AZX_DCAPS_COUNT_LPIB_DELAY | AZX_DCAPS_PM_RUNTIME | \
614          AZX_DCAPS_I915_POWERWELL)
615
616 /* quirks for ATI SB / AMD Hudson */
617 #define AZX_DCAPS_PRESET_ATI_SB \
618         (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
619          AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
620
621 /* quirks for ATI/AMD HDMI */
622 #define AZX_DCAPS_PRESET_ATI_HDMI \
623         (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
624
625 /* quirks for Nvidia */
626 #define AZX_DCAPS_PRESET_NVIDIA \
627         (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
628          AZX_DCAPS_ALIGN_BUFSIZE | AZX_DCAPS_NO_64BIT)
629
630 #define AZX_DCAPS_PRESET_CTHDA \
631         (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_4K_BDLE_BOUNDARY)
632
633 /*
634  * VGA-switcher support
635  */
636 #ifdef SUPPORT_VGA_SWITCHEROO
637 #define use_vga_switcheroo(chip)        ((chip)->use_vga_switcheroo)
638 #else
639 #define use_vga_switcheroo(chip)        0
640 #endif
641
642 static char *driver_short_names[] = {
643         [AZX_DRIVER_ICH] = "HDA Intel",
644         [AZX_DRIVER_PCH] = "HDA Intel PCH",
645         [AZX_DRIVER_SCH] = "HDA Intel MID",
646         [AZX_DRIVER_HDMI] = "HDA Intel HDMI",
647         [AZX_DRIVER_ATI] = "HDA ATI SB",
648         [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI",
649         [AZX_DRIVER_ATIHDMI_NS] = "HDA ATI HDMI",
650         [AZX_DRIVER_VIA] = "HDA VIA VT82xx",
651         [AZX_DRIVER_SIS] = "HDA SIS966",
652         [AZX_DRIVER_ULI] = "HDA ULI M5461",
653         [AZX_DRIVER_NVIDIA] = "HDA NVidia",
654         [AZX_DRIVER_TERA] = "HDA Teradici", 
655         [AZX_DRIVER_CTX] = "HDA Creative", 
656         [AZX_DRIVER_CTHDA] = "HDA Creative",
657         [AZX_DRIVER_GENERIC] = "HD-Audio Generic",
658 };
659
660 /*
661  * macros for easy use
662  */
663 #define azx_writel(chip,reg,value) \
664         writel(value, (chip)->remap_addr + ICH6_REG_##reg)
665 #define azx_readl(chip,reg) \
666         readl((chip)->remap_addr + ICH6_REG_##reg)
667 #define azx_writew(chip,reg,value) \
668         writew(value, (chip)->remap_addr + ICH6_REG_##reg)
669 #define azx_readw(chip,reg) \
670         readw((chip)->remap_addr + ICH6_REG_##reg)
671 #define azx_writeb(chip,reg,value) \
672         writeb(value, (chip)->remap_addr + ICH6_REG_##reg)
673 #define azx_readb(chip,reg) \
674         readb((chip)->remap_addr + ICH6_REG_##reg)
675
676 #define azx_sd_writel(dev,reg,value) \
677         writel(value, (dev)->sd_addr + ICH6_REG_##reg)
678 #define azx_sd_readl(dev,reg) \
679         readl((dev)->sd_addr + ICH6_REG_##reg)
680 #define azx_sd_writew(dev,reg,value) \
681         writew(value, (dev)->sd_addr + ICH6_REG_##reg)
682 #define azx_sd_readw(dev,reg) \
683         readw((dev)->sd_addr + ICH6_REG_##reg)
684 #define azx_sd_writeb(dev,reg,value) \
685         writeb(value, (dev)->sd_addr + ICH6_REG_##reg)
686 #define azx_sd_readb(dev,reg) \
687         readb((dev)->sd_addr + ICH6_REG_##reg)
688
689 /* for pcm support */
690 #define get_azx_dev(substream) (substream->runtime->private_data)
691
692 #ifdef CONFIG_X86
693 static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool on)
694 {
695         int pages;
696
697         if (azx_snoop(chip))
698                 return;
699         if (!dmab || !dmab->area || !dmab->bytes)
700                 return;
701
702 #ifdef CONFIG_SND_DMA_SGBUF
703         if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_SG) {
704                 struct snd_sg_buf *sgbuf = dmab->private_data;
705                 if (on)
706                         set_pages_array_wc(sgbuf->page_table, sgbuf->pages);
707                 else
708                         set_pages_array_wb(sgbuf->page_table, sgbuf->pages);
709                 return;
710         }
711 #endif
712
713         pages = (dmab->bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;
714         if (on)
715                 set_memory_wc((unsigned long)dmab->area, pages);
716         else
717                 set_memory_wb((unsigned long)dmab->area, pages);
718 }
719
720 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
721                                  bool on)
722 {
723         __mark_pages_wc(chip, buf, on);
724 }
725 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
726                                    struct snd_pcm_substream *substream, bool on)
727 {
728         if (azx_dev->wc_marked != on) {
729                 __mark_pages_wc(chip, snd_pcm_get_dma_buf(substream), on);
730                 azx_dev->wc_marked = on;
731         }
732 }
733 #else
734 /* NOP for other archs */
735 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
736                                  bool on)
737 {
738 }
739 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
740                                    struct snd_pcm_substream *substream, bool on)
741 {
742 }
743 #endif
744
745 static int azx_acquire_irq(struct azx *chip, int do_disconnect);
746 static int azx_send_cmd(struct hda_bus *bus, unsigned int val);
747 /*
748  * Interface for HD codec
749  */
750
751 /*
752  * CORB / RIRB interface
753  */
754 static int azx_alloc_cmd_io(struct azx *chip)
755 {
756         int err;
757
758         /* single page (at least 4096 bytes) must suffice for both ringbuffes */
759         err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
760                                   snd_dma_pci_data(chip->pci),
761                                   PAGE_SIZE, &chip->rb);
762         if (err < 0) {
763                 dev_err(chip->card->dev, "cannot allocate CORB/RIRB\n");
764                 return err;
765         }
766         mark_pages_wc(chip, &chip->rb, true);
767         return 0;
768 }
769
770 static void azx_init_cmd_io(struct azx *chip)
771 {
772         spin_lock_irq(&chip->reg_lock);
773         /* CORB set up */
774         chip->corb.addr = chip->rb.addr;
775         chip->corb.buf = (u32 *)chip->rb.area;
776         azx_writel(chip, CORBLBASE, (u32)chip->corb.addr);
777         azx_writel(chip, CORBUBASE, upper_32_bits(chip->corb.addr));
778
779         /* set the corb size to 256 entries (ULI requires explicitly) */
780         azx_writeb(chip, CORBSIZE, 0x02);
781         /* set the corb write pointer to 0 */
782         azx_writew(chip, CORBWP, 0);
783         /* reset the corb hw read pointer */
784         azx_writew(chip, CORBRP, ICH6_CORBRP_RST);
785         /* enable corb dma */
786         azx_writeb(chip, CORBCTL, ICH6_CORBCTL_RUN);
787
788         /* RIRB set up */
789         chip->rirb.addr = chip->rb.addr + 2048;
790         chip->rirb.buf = (u32 *)(chip->rb.area + 2048);
791         chip->rirb.wp = chip->rirb.rp = 0;
792         memset(chip->rirb.cmds, 0, sizeof(chip->rirb.cmds));
793         azx_writel(chip, RIRBLBASE, (u32)chip->rirb.addr);
794         azx_writel(chip, RIRBUBASE, upper_32_bits(chip->rirb.addr));
795
796         /* set the rirb size to 256 entries (ULI requires explicitly) */
797         azx_writeb(chip, RIRBSIZE, 0x02);
798         /* reset the rirb hw write pointer */
799         azx_writew(chip, RIRBWP, ICH6_RIRBWP_RST);
800         /* set N=1, get RIRB response interrupt for new entry */
801         if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
802                 azx_writew(chip, RINTCNT, 0xc0);
803         else
804                 azx_writew(chip, RINTCNT, 1);
805         /* enable rirb dma and response irq */
806         azx_writeb(chip, RIRBCTL, ICH6_RBCTL_DMA_EN | ICH6_RBCTL_IRQ_EN);
807         spin_unlock_irq(&chip->reg_lock);
808 }
809
810 static void azx_free_cmd_io(struct azx *chip)
811 {
812         spin_lock_irq(&chip->reg_lock);
813         /* disable ringbuffer DMAs */
814         azx_writeb(chip, RIRBCTL, 0);
815         azx_writeb(chip, CORBCTL, 0);
816         spin_unlock_irq(&chip->reg_lock);
817 }
818
819 static unsigned int azx_command_addr(u32 cmd)
820 {
821         unsigned int addr = cmd >> 28;
822
823         if (addr >= AZX_MAX_CODECS) {
824                 snd_BUG();
825                 addr = 0;
826         }
827
828         return addr;
829 }
830
831 /* send a command */
832 static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
833 {
834         struct azx *chip = bus->private_data;
835         unsigned int addr = azx_command_addr(val);
836         unsigned int wp, rp;
837
838         spin_lock_irq(&chip->reg_lock);
839
840         /* add command to corb */
841         wp = azx_readw(chip, CORBWP);
842         if (wp == 0xffff) {
843                 /* something wrong, controller likely turned to D3 */
844                 spin_unlock_irq(&chip->reg_lock);
845                 return -EIO;
846         }
847         wp++;
848         wp %= ICH6_MAX_CORB_ENTRIES;
849
850         rp = azx_readw(chip, CORBRP);
851         if (wp == rp) {
852                 /* oops, it's full */
853                 spin_unlock_irq(&chip->reg_lock);
854                 return -EAGAIN;
855         }
856
857         chip->rirb.cmds[addr]++;
858         chip->corb.buf[wp] = cpu_to_le32(val);
859         azx_writel(chip, CORBWP, wp);
860
861         spin_unlock_irq(&chip->reg_lock);
862
863         return 0;
864 }
865
866 #define ICH6_RIRB_EX_UNSOL_EV   (1<<4)
867
868 /* retrieve RIRB entry - called from interrupt handler */
869 static void azx_update_rirb(struct azx *chip)
870 {
871         unsigned int rp, wp;
872         unsigned int addr;
873         u32 res, res_ex;
874
875         wp = azx_readw(chip, RIRBWP);
876         if (wp == 0xffff) {
877                 /* something wrong, controller likely turned to D3 */
878                 return;
879         }
880
881         if (wp == chip->rirb.wp)
882                 return;
883         chip->rirb.wp = wp;
884
885         while (chip->rirb.rp != wp) {
886                 chip->rirb.rp++;
887                 chip->rirb.rp %= ICH6_MAX_RIRB_ENTRIES;
888
889                 rp = chip->rirb.rp << 1; /* an RIRB entry is 8-bytes */
890                 res_ex = le32_to_cpu(chip->rirb.buf[rp + 1]);
891                 res = le32_to_cpu(chip->rirb.buf[rp]);
892                 addr = res_ex & 0xf;
893                 if ((addr >= AZX_MAX_CODECS) || !(chip->codec_mask & (1 << addr))) {
894                         dev_err(chip->card->dev, "spurious response %#x:%#x, rp = %d, wp = %d",
895                                 res, res_ex,
896                                 chip->rirb.rp, wp);
897                         snd_BUG();
898                 }
899                 else if (res_ex & ICH6_RIRB_EX_UNSOL_EV)
900                         snd_hda_queue_unsol_event(chip->bus, res, res_ex);
901                 else if (chip->rirb.cmds[addr]) {
902                         chip->rirb.res[addr] = res;
903                         smp_wmb();
904                         chip->rirb.cmds[addr]--;
905                 } else if (printk_ratelimit()) {
906                         dev_err(chip->card->dev, "spurious response %#x:%#x, last cmd=%#08x\n",
907                                 res, res_ex,
908                                 chip->last_cmd[addr]);
909                 }
910         }
911 }
912
913 /* receive a response */
914 static unsigned int azx_rirb_get_response(struct hda_bus *bus,
915                                           unsigned int addr)
916 {
917         struct azx *chip = bus->private_data;
918         unsigned long timeout;
919         unsigned long loopcounter;
920         int do_poll = 0;
921
922  again:
923         timeout = jiffies + msecs_to_jiffies(1000);
924
925         for (loopcounter = 0;; loopcounter++) {
926                 if (chip->polling_mode || do_poll) {
927                         spin_lock_irq(&chip->reg_lock);
928                         azx_update_rirb(chip);
929                         spin_unlock_irq(&chip->reg_lock);
930                 }
931                 if (!chip->rirb.cmds[addr]) {
932                         smp_rmb();
933                         bus->rirb_error = 0;
934
935                         if (!do_poll)
936                                 chip->poll_count = 0;
937                         return chip->rirb.res[addr]; /* the last value */
938                 }
939                 if (time_after(jiffies, timeout))
940                         break;
941                 if (bus->needs_damn_long_delay || loopcounter > 3000)
942                         msleep(2); /* temporary workaround */
943                 else {
944                         udelay(10);
945                         cond_resched();
946                 }
947         }
948
949         if (!bus->no_response_fallback)
950                 return -1;
951
952         if (!chip->polling_mode && chip->poll_count < 2) {
953                 dev_dbg(chip->card->dev,
954                         "azx_get_response timeout, polling the codec once: last cmd=0x%08x\n",
955                         chip->last_cmd[addr]);
956                 do_poll = 1;
957                 chip->poll_count++;
958                 goto again;
959         }
960
961
962         if (!chip->polling_mode) {
963                 dev_warn(chip->card->dev,
964                          "azx_get_response timeout, switching to polling mode: last cmd=0x%08x\n",
965                          chip->last_cmd[addr]);
966                 chip->polling_mode = 1;
967                 goto again;
968         }
969
970         if (chip->msi) {
971                 dev_warn(chip->card->dev,
972                          "No response from codec, disabling MSI: last cmd=0x%08x\n",
973                          chip->last_cmd[addr]);
974                 free_irq(chip->irq, chip);
975                 chip->irq = -1;
976                 pci_disable_msi(chip->pci);
977                 chip->msi = 0;
978                 if (azx_acquire_irq(chip, 1) < 0) {
979                         bus->rirb_error = 1;
980                         return -1;
981                 }
982                 goto again;
983         }
984
985         if (chip->probing) {
986                 /* If this critical timeout happens during the codec probing
987                  * phase, this is likely an access to a non-existing codec
988                  * slot.  Better to return an error and reset the system.
989                  */
990                 return -1;
991         }
992
993         /* a fatal communication error; need either to reset or to fallback
994          * to the single_cmd mode
995          */
996         bus->rirb_error = 1;
997         if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) {
998                 bus->response_reset = 1;
999                 return -1; /* give a chance to retry */
1000         }
1001
1002         dev_err(chip->card->dev,
1003                 "azx_get_response timeout, switching to single_cmd mode: last cmd=0x%08x\n",
1004                 chip->last_cmd[addr]);
1005         chip->single_cmd = 1;
1006         bus->response_reset = 0;
1007         /* release CORB/RIRB */
1008         azx_free_cmd_io(chip);
1009         /* disable unsolicited responses */
1010         azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL);
1011         return -1;
1012 }
1013
1014 /*
1015  * Use the single immediate command instead of CORB/RIRB for simplicity
1016  *
1017  * Note: according to Intel, this is not preferred use.  The command was
1018  *       intended for the BIOS only, and may get confused with unsolicited
1019  *       responses.  So, we shouldn't use it for normal operation from the
1020  *       driver.
1021  *       I left the codes, however, for debugging/testing purposes.
1022  */
1023
1024 /* receive a response */
1025 static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
1026 {
1027         int timeout = 50;
1028
1029         while (timeout--) {
1030                 /* check IRV busy bit */
1031                 if (azx_readw(chip, IRS) & ICH6_IRS_VALID) {
1032                         /* reuse rirb.res as the response return value */
1033                         chip->rirb.res[addr] = azx_readl(chip, IR);
1034                         return 0;
1035                 }
1036                 udelay(1);
1037         }
1038         if (printk_ratelimit())
1039                 dev_dbg(chip->card->dev, "get_response timeout: IRS=0x%x\n",
1040                         azx_readw(chip, IRS));
1041         chip->rirb.res[addr] = -1;
1042         return -EIO;
1043 }
1044
1045 /* send a command */
1046 static int azx_single_send_cmd(struct hda_bus *bus, u32 val)
1047 {
1048         struct azx *chip = bus->private_data;
1049         unsigned int addr = azx_command_addr(val);
1050         int timeout = 50;
1051
1052         bus->rirb_error = 0;
1053         while (timeout--) {
1054                 /* check ICB busy bit */
1055                 if (!((azx_readw(chip, IRS) & ICH6_IRS_BUSY))) {
1056                         /* Clear IRV valid bit */
1057                         azx_writew(chip, IRS, azx_readw(chip, IRS) |
1058                                    ICH6_IRS_VALID);
1059                         azx_writel(chip, IC, val);
1060                         azx_writew(chip, IRS, azx_readw(chip, IRS) |
1061                                    ICH6_IRS_BUSY);
1062                         return azx_single_wait_for_response(chip, addr);
1063                 }
1064                 udelay(1);
1065         }
1066         if (printk_ratelimit())
1067                 dev_dbg(chip->card->dev,
1068                         "send_cmd timeout: IRS=0x%x, val=0x%x\n",
1069                         azx_readw(chip, IRS), val);
1070         return -EIO;
1071 }
1072
1073 /* receive a response */
1074 static unsigned int azx_single_get_response(struct hda_bus *bus,
1075                                             unsigned int addr)
1076 {
1077         struct azx *chip = bus->private_data;
1078         return chip->rirb.res[addr];
1079 }
1080
1081 /*
1082  * The below are the main callbacks from hda_codec.
1083  *
1084  * They are just the skeleton to call sub-callbacks according to the
1085  * current setting of chip->single_cmd.
1086  */
1087
1088 /* send a command */
1089 static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
1090 {
1091         struct azx *chip = bus->private_data;
1092
1093         if (chip->disabled)
1094                 return 0;
1095         chip->last_cmd[azx_command_addr(val)] = val;
1096         if (chip->single_cmd)
1097                 return azx_single_send_cmd(bus, val);
1098         else
1099                 return azx_corb_send_cmd(bus, val);
1100 }
1101
1102 /* get a response */
1103 static unsigned int azx_get_response(struct hda_bus *bus,
1104                                      unsigned int addr)
1105 {
1106         struct azx *chip = bus->private_data;
1107         if (chip->disabled)
1108                 return 0;
1109         if (chip->single_cmd)
1110                 return azx_single_get_response(bus, addr);
1111         else
1112                 return azx_rirb_get_response(bus, addr);
1113 }
1114
1115 #ifdef CONFIG_PM
1116 static void azx_power_notify(struct hda_bus *bus, bool power_up);
1117 #endif
1118
1119 #ifdef CONFIG_SND_HDA_DSP_LOADER
1120 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format,
1121                                 unsigned int byte_size,
1122                                 struct snd_dma_buffer *bufp);
1123 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start);
1124 static void azx_load_dsp_cleanup(struct hda_bus *bus,
1125                                  struct snd_dma_buffer *dmab);
1126 #endif
1127
1128 /* enter link reset */
1129 static void azx_enter_link_reset(struct azx *chip)
1130 {
1131         unsigned long timeout;
1132
1133         /* reset controller */
1134         azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_RESET);
1135
1136         timeout = jiffies + msecs_to_jiffies(100);
1137         while ((azx_readb(chip, GCTL) & ICH6_GCTL_RESET) &&
1138                         time_before(jiffies, timeout))
1139                 usleep_range(500, 1000);
1140 }
1141
1142 /* exit link reset */
1143 static void azx_exit_link_reset(struct azx *chip)
1144 {
1145         unsigned long timeout;
1146
1147         azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | ICH6_GCTL_RESET);
1148
1149         timeout = jiffies + msecs_to_jiffies(100);
1150         while (!azx_readb(chip, GCTL) &&
1151                         time_before(jiffies, timeout))
1152                 usleep_range(500, 1000);
1153 }
1154
1155 /* reset codec link */
1156 static int azx_reset(struct azx *chip, int full_reset)
1157 {
1158         if (!full_reset)
1159                 goto __skip;
1160
1161         /* clear STATESTS */
1162         azx_writew(chip, STATESTS, STATESTS_INT_MASK);
1163
1164         /* reset controller */
1165         azx_enter_link_reset(chip);
1166
1167         /* delay for >= 100us for codec PLL to settle per spec
1168          * Rev 0.9 section 5.5.1
1169          */
1170         usleep_range(500, 1000);
1171
1172         /* Bring controller out of reset */
1173         azx_exit_link_reset(chip);
1174
1175         /* Brent Chartrand said to wait >= 540us for codecs to initialize */
1176         usleep_range(1000, 1200);
1177
1178       __skip:
1179         /* check to see if controller is ready */
1180         if (!azx_readb(chip, GCTL)) {
1181                 dev_dbg(chip->card->dev, "azx_reset: controller not ready!\n");
1182                 return -EBUSY;
1183         }
1184
1185         /* Accept unsolicited responses */
1186         if (!chip->single_cmd)
1187                 azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
1188                            ICH6_GCTL_UNSOL);
1189
1190         /* detect codecs */
1191         if (!chip->codec_mask) {
1192                 chip->codec_mask = azx_readw(chip, STATESTS);
1193                 dev_dbg(chip->card->dev, "codec_mask = 0x%x\n",
1194                         chip->codec_mask);
1195         }
1196
1197         return 0;
1198 }
1199
1200
1201 /*
1202  * Lowlevel interface
1203  */  
1204
1205 /* enable interrupts */
1206 static void azx_int_enable(struct azx *chip)
1207 {
1208         /* enable controller CIE and GIE */
1209         azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) |
1210                    ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN);
1211 }
1212
1213 /* disable interrupts */
1214 static void azx_int_disable(struct azx *chip)
1215 {
1216         int i;
1217
1218         /* disable interrupts in stream descriptor */
1219         for (i = 0; i < chip->num_streams; i++) {
1220                 struct azx_dev *azx_dev = &chip->azx_dev[i];
1221                 azx_sd_writeb(azx_dev, SD_CTL,
1222                               azx_sd_readb(azx_dev, SD_CTL) & ~SD_INT_MASK);
1223         }
1224
1225         /* disable SIE for all streams */
1226         azx_writeb(chip, INTCTL, 0);
1227
1228         /* disable controller CIE and GIE */
1229         azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) &
1230                    ~(ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN));
1231 }
1232
1233 /* clear interrupts */
1234 static void azx_int_clear(struct azx *chip)
1235 {
1236         int i;
1237
1238         /* clear stream status */
1239         for (i = 0; i < chip->num_streams; i++) {
1240                 struct azx_dev *azx_dev = &chip->azx_dev[i];
1241                 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1242         }
1243
1244         /* clear STATESTS */
1245         azx_writew(chip, STATESTS, STATESTS_INT_MASK);
1246
1247         /* clear rirb status */
1248         azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1249
1250         /* clear int status */
1251         azx_writel(chip, INTSTS, ICH6_INT_CTRL_EN | ICH6_INT_ALL_STREAM);
1252 }
1253
1254 /* start a stream */
1255 static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev)
1256 {
1257         /*
1258          * Before stream start, initialize parameter
1259          */
1260         azx_dev->insufficient = 1;
1261
1262         /* enable SIE */
1263         azx_writel(chip, INTCTL,
1264                    azx_readl(chip, INTCTL) | (1 << azx_dev->index));
1265         /* set DMA start and interrupt mask */
1266         azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1267                       SD_CTL_DMA_START | SD_INT_MASK);
1268 }
1269
1270 /* stop DMA */
1271 static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev)
1272 {
1273         azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) &
1274                       ~(SD_CTL_DMA_START | SD_INT_MASK));
1275         azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); /* to be sure */
1276 }
1277
1278 /* stop a stream */
1279 static void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev)
1280 {
1281         azx_stream_clear(chip, azx_dev);
1282         /* disable SIE */
1283         azx_writel(chip, INTCTL,
1284                    azx_readl(chip, INTCTL) & ~(1 << azx_dev->index));
1285 }
1286
1287
1288 /*
1289  * reset and start the controller registers
1290  */
1291 static void azx_init_chip(struct azx *chip, int full_reset)
1292 {
1293         if (chip->initialized)
1294                 return;
1295
1296         /* reset controller */
1297         azx_reset(chip, full_reset);
1298
1299         /* initialize interrupts */
1300         azx_int_clear(chip);
1301         azx_int_enable(chip);
1302
1303         /* initialize the codec command I/O */
1304         if (!chip->single_cmd)
1305                 azx_init_cmd_io(chip);
1306
1307         /* program the position buffer */
1308         azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
1309         azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr));
1310
1311         chip->initialized = 1;
1312 }
1313
1314 /*
1315  * initialize the PCI registers
1316  */
1317 /* update bits in a PCI register byte */
1318 static void update_pci_byte(struct pci_dev *pci, unsigned int reg,
1319                             unsigned char mask, unsigned char val)
1320 {
1321         unsigned char data;
1322
1323         pci_read_config_byte(pci, reg, &data);
1324         data &= ~mask;
1325         data |= (val & mask);
1326         pci_write_config_byte(pci, reg, data);
1327 }
1328
1329 static void azx_init_pci(struct azx *chip)
1330 {
1331         /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
1332          * TCSEL == Traffic Class Select Register, which sets PCI express QOS
1333          * Ensuring these bits are 0 clears playback static on some HD Audio
1334          * codecs.
1335          * The PCI register TCSEL is defined in the Intel manuals.
1336          */
1337         if (!(chip->driver_caps & AZX_DCAPS_NO_TCSEL)) {
1338                 dev_dbg(chip->card->dev, "Clearing TCSEL\n");
1339                 update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0);
1340         }
1341
1342         /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
1343          * we need to enable snoop.
1344          */
1345         if (chip->driver_caps & AZX_DCAPS_ATI_SNOOP) {
1346                 dev_dbg(chip->card->dev, "Setting ATI snoop: %d\n",
1347                         azx_snoop(chip));
1348                 update_pci_byte(chip->pci,
1349                                 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR, 0x07,
1350                                 azx_snoop(chip) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP : 0);
1351         }
1352
1353         /* For NVIDIA HDA, enable snoop */
1354         if (chip->driver_caps & AZX_DCAPS_NVIDIA_SNOOP) {
1355                 dev_dbg(chip->card->dev, "Setting Nvidia snoop: %d\n",
1356                         azx_snoop(chip));
1357                 update_pci_byte(chip->pci,
1358                                 NVIDIA_HDA_TRANSREG_ADDR,
1359                                 0x0f, NVIDIA_HDA_ENABLE_COHBITS);
1360                 update_pci_byte(chip->pci,
1361                                 NVIDIA_HDA_ISTRM_COH,
1362                                 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1363                 update_pci_byte(chip->pci,
1364                                 NVIDIA_HDA_OSTRM_COH,
1365                                 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1366         }
1367
1368         /* Enable SCH/PCH snoop if needed */
1369         if (chip->driver_caps & AZX_DCAPS_SCH_SNOOP) {
1370                 unsigned short snoop;
1371                 pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);
1372                 if ((!azx_snoop(chip) && !(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)) ||
1373                     (azx_snoop(chip) && (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP))) {
1374                         snoop &= ~INTEL_SCH_HDA_DEVC_NOSNOOP;
1375                         if (!azx_snoop(chip))
1376                                 snoop |= INTEL_SCH_HDA_DEVC_NOSNOOP;
1377                         pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, snoop);
1378                         pci_read_config_word(chip->pci,
1379                                 INTEL_SCH_HDA_DEVC, &snoop);
1380                 }
1381                 dev_dbg(chip->card->dev, "SCH snoop: %s\n",
1382                         (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP) ?
1383                         "Disabled" : "Enabled");
1384         }
1385 }
1386
1387
1388 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev);
1389
1390 /*
1391  * interrupt handler
1392  */
1393 static irqreturn_t azx_interrupt(int irq, void *dev_id)
1394 {
1395         struct azx *chip = dev_id;
1396         struct azx_dev *azx_dev;
1397         u32 status;
1398         u8 sd_status;
1399         int i, ok;
1400
1401 #ifdef CONFIG_PM_RUNTIME
1402         if (chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
1403                 if (chip->pci->dev.power.runtime_status != RPM_ACTIVE)
1404                         return IRQ_NONE;
1405 #endif
1406
1407         spin_lock(&chip->reg_lock);
1408
1409         if (chip->disabled) {
1410                 spin_unlock(&chip->reg_lock);
1411                 return IRQ_NONE;
1412         }
1413
1414         status = azx_readl(chip, INTSTS);
1415         if (status == 0 || status == 0xffffffff) {
1416                 spin_unlock(&chip->reg_lock);
1417                 return IRQ_NONE;
1418         }
1419         
1420         for (i = 0; i < chip->num_streams; i++) {
1421                 azx_dev = &chip->azx_dev[i];
1422                 if (status & azx_dev->sd_int_sta_mask) {
1423                         sd_status = azx_sd_readb(azx_dev, SD_STS);
1424                         azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1425                         if (!azx_dev->substream || !azx_dev->running ||
1426                             !(sd_status & SD_INT_COMPLETE))
1427                                 continue;
1428                         /* check whether this IRQ is really acceptable */
1429                         ok = azx_position_ok(chip, azx_dev);
1430                         if (ok == 1) {
1431                                 azx_dev->irq_pending = 0;
1432                                 spin_unlock(&chip->reg_lock);
1433                                 snd_pcm_period_elapsed(azx_dev->substream);
1434                                 spin_lock(&chip->reg_lock);
1435                         } else if (ok == 0 && chip->bus && chip->bus->workq) {
1436                                 /* bogus IRQ, process it later */
1437                                 azx_dev->irq_pending = 1;
1438                                 queue_work(chip->bus->workq,
1439                                            &chip->irq_pending_work);
1440                         }
1441                 }
1442         }
1443
1444         /* clear rirb int */
1445         status = azx_readb(chip, RIRBSTS);
1446         if (status & RIRB_INT_MASK) {
1447                 if (status & RIRB_INT_RESPONSE) {
1448                         if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY)
1449                                 udelay(80);
1450                         azx_update_rirb(chip);
1451                 }
1452                 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1453         }
1454
1455 #if 0
1456         /* clear state status int */
1457         if (azx_readw(chip, STATESTS) & 0x04)
1458                 azx_writew(chip, STATESTS, 0x04);
1459 #endif
1460         spin_unlock(&chip->reg_lock);
1461         
1462         return IRQ_HANDLED;
1463 }
1464
1465
1466 /*
1467  * set up a BDL entry
1468  */
1469 static int setup_bdle(struct azx *chip,
1470                       struct snd_dma_buffer *dmab,
1471                       struct azx_dev *azx_dev, u32 **bdlp,
1472                       int ofs, int size, int with_ioc)
1473 {
1474         u32 *bdl = *bdlp;
1475
1476         while (size > 0) {
1477                 dma_addr_t addr;
1478                 int chunk;
1479
1480                 if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES)
1481                         return -EINVAL;
1482
1483                 addr = snd_sgbuf_get_addr(dmab, ofs);
1484                 /* program the address field of the BDL entry */
1485                 bdl[0] = cpu_to_le32((u32)addr);
1486                 bdl[1] = cpu_to_le32(upper_32_bits(addr));
1487                 /* program the size field of the BDL entry */
1488                 chunk = snd_sgbuf_get_chunk_size(dmab, ofs, size);
1489                 /* one BDLE cannot cross 4K boundary on CTHDA chips */
1490                 if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) {
1491                         u32 remain = 0x1000 - (ofs & 0xfff);
1492                         if (chunk > remain)
1493                                 chunk = remain;
1494                 }
1495                 bdl[2] = cpu_to_le32(chunk);
1496                 /* program the IOC to enable interrupt
1497                  * only when the whole fragment is processed
1498                  */
1499                 size -= chunk;
1500                 bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01);
1501                 bdl += 4;
1502                 azx_dev->frags++;
1503                 ofs += chunk;
1504         }
1505         *bdlp = bdl;
1506         return ofs;
1507 }
1508
1509 /*
1510  * set up BDL entries
1511  */
1512 static int azx_setup_periods(struct azx *chip,
1513                              struct snd_pcm_substream *substream,
1514                              struct azx_dev *azx_dev)
1515 {
1516         u32 *bdl;
1517         int i, ofs, periods, period_bytes;
1518         int pos_adj;
1519
1520         /* reset BDL address */
1521         azx_sd_writel(azx_dev, SD_BDLPL, 0);
1522         azx_sd_writel(azx_dev, SD_BDLPU, 0);
1523
1524         period_bytes = azx_dev->period_bytes;
1525         periods = azx_dev->bufsize / period_bytes;
1526
1527         /* program the initial BDL entries */
1528         bdl = (u32 *)azx_dev->bdl.area;
1529         ofs = 0;
1530         azx_dev->frags = 0;
1531         pos_adj = bdl_pos_adj[chip->dev_index];
1532         if (!azx_dev->no_period_wakeup && pos_adj > 0) {
1533                 struct snd_pcm_runtime *runtime = substream->runtime;
1534                 int pos_align = pos_adj;
1535                 pos_adj = (pos_adj * runtime->rate + 47999) / 48000;
1536                 if (!pos_adj)
1537                         pos_adj = pos_align;
1538                 else
1539                         pos_adj = ((pos_adj + pos_align - 1) / pos_align) *
1540                                 pos_align;
1541                 pos_adj = frames_to_bytes(runtime, pos_adj);
1542                 if (pos_adj >= period_bytes) {
1543                         dev_warn(chip->card->dev,"Too big adjustment %d\n",
1544                                  bdl_pos_adj[chip->dev_index]);
1545                         pos_adj = 0;
1546                 } else {
1547                         ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1548                                          azx_dev,
1549                                          &bdl, ofs, pos_adj, true);
1550                         if (ofs < 0)
1551                                 goto error;
1552                 }
1553         } else
1554                 pos_adj = 0;
1555         for (i = 0; i < periods; i++) {
1556                 if (i == periods - 1 && pos_adj)
1557                         ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1558                                          azx_dev, &bdl, ofs,
1559                                          period_bytes - pos_adj, 0);
1560                 else
1561                         ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1562                                          azx_dev, &bdl, ofs,
1563                                          period_bytes,
1564                                          !azx_dev->no_period_wakeup);
1565                 if (ofs < 0)
1566                         goto error;
1567         }
1568         return 0;
1569
1570  error:
1571         dev_err(chip->card->dev, "Too many BDL entries: buffer=%d, period=%d\n",
1572                 azx_dev->bufsize, period_bytes);
1573         return -EINVAL;
1574 }
1575
1576 /* reset stream */
1577 static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev)
1578 {
1579         unsigned char val;
1580         int timeout;
1581
1582         azx_stream_clear(chip, azx_dev);
1583
1584         azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1585                       SD_CTL_STREAM_RESET);
1586         udelay(3);
1587         timeout = 300;
1588         while (!((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1589                --timeout)
1590                 ;
1591         val &= ~SD_CTL_STREAM_RESET;
1592         azx_sd_writeb(azx_dev, SD_CTL, val);
1593         udelay(3);
1594
1595         timeout = 300;
1596         /* waiting for hardware to report that the stream is out of reset */
1597         while (((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1598                --timeout)
1599                 ;
1600
1601         /* reset first position - may not be synced with hw at this time */
1602         *azx_dev->posbuf = 0;
1603 }
1604
1605 /*
1606  * set up the SD for streaming
1607  */
1608 static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev)
1609 {
1610         unsigned int val;
1611         /* make sure the run bit is zero for SD */
1612         azx_stream_clear(chip, azx_dev);
1613         /* program the stream_tag */
1614         val = azx_sd_readl(azx_dev, SD_CTL);
1615         val = (val & ~SD_CTL_STREAM_TAG_MASK) |
1616                 (azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT);
1617         if (!azx_snoop(chip))
1618                 val |= SD_CTL_TRAFFIC_PRIO;
1619         azx_sd_writel(azx_dev, SD_CTL, val);
1620
1621         /* program the length of samples in cyclic buffer */
1622         azx_sd_writel(azx_dev, SD_CBL, azx_dev->bufsize);
1623
1624         /* program the stream format */
1625         /* this value needs to be the same as the one programmed */
1626         azx_sd_writew(azx_dev, SD_FORMAT, azx_dev->format_val);
1627
1628         /* program the stream LVI (last valid index) of the BDL */
1629         azx_sd_writew(azx_dev, SD_LVI, azx_dev->frags - 1);
1630
1631         /* program the BDL address */
1632         /* lower BDL address */
1633         azx_sd_writel(azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr);
1634         /* upper BDL address */
1635         azx_sd_writel(azx_dev, SD_BDLPU, upper_32_bits(azx_dev->bdl.addr));
1636
1637         /* enable the position buffer */
1638         if (chip->position_fix[0] != POS_FIX_LPIB ||
1639             chip->position_fix[1] != POS_FIX_LPIB) {
1640                 if (!(azx_readl(chip, DPLBASE) & ICH6_DPLBASE_ENABLE))
1641                         azx_writel(chip, DPLBASE,
1642                                 (u32)chip->posbuf.addr | ICH6_DPLBASE_ENABLE);
1643         }
1644
1645         /* set the interrupt enable bits in the descriptor control register */
1646         azx_sd_writel(azx_dev, SD_CTL,
1647                       azx_sd_readl(azx_dev, SD_CTL) | SD_INT_MASK);
1648
1649         return 0;
1650 }
1651
1652 /*
1653  * Probe the given codec address
1654  */
1655 static int probe_codec(struct azx *chip, int addr)
1656 {
1657         unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1658                 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1659         unsigned int res;
1660
1661         mutex_lock(&chip->bus->cmd_mutex);
1662         chip->probing = 1;
1663         azx_send_cmd(chip->bus, cmd);
1664         res = azx_get_response(chip->bus, addr);
1665         chip->probing = 0;
1666         mutex_unlock(&chip->bus->cmd_mutex);
1667         if (res == -1)
1668                 return -EIO;
1669         dev_dbg(chip->card->dev, "codec #%d probed OK\n", addr);
1670         return 0;
1671 }
1672
1673 static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
1674                                  struct hda_pcm *cpcm);
1675 static void azx_stop_chip(struct azx *chip);
1676
1677 static void azx_bus_reset(struct hda_bus *bus)
1678 {
1679         struct azx *chip = bus->private_data;
1680
1681         bus->in_reset = 1;
1682         azx_stop_chip(chip);
1683         azx_init_chip(chip, 1);
1684 #ifdef CONFIG_PM
1685         if (chip->initialized) {
1686                 struct azx_pcm *p;
1687                 list_for_each_entry(p, &chip->pcm_list, list)
1688                         snd_pcm_suspend_all(p->pcm);
1689                 snd_hda_suspend(chip->bus);
1690                 snd_hda_resume(chip->bus);
1691         }
1692 #endif
1693         bus->in_reset = 0;
1694 }
1695
1696 static int get_jackpoll_interval(struct azx *chip)
1697 {
1698         int i = jackpoll_ms[chip->dev_index];
1699         unsigned int j;
1700         if (i == 0)
1701                 return 0;
1702         if (i < 50 || i > 60000)
1703                 j = 0;
1704         else
1705                 j = msecs_to_jiffies(i);
1706         if (j == 0)
1707                 dev_warn(chip->card->dev,
1708                          "jackpoll_ms value out of range: %d\n", i);
1709         return j;
1710 }
1711
1712 /*
1713  * Codec initialization
1714  */
1715
1716 /* number of codec slots for each chipset: 0 = default slots (i.e. 4) */
1717 static unsigned int azx_max_codecs[AZX_NUM_DRIVERS] = {
1718         [AZX_DRIVER_NVIDIA] = 8,
1719         [AZX_DRIVER_TERA] = 1,
1720 };
1721
1722 static int azx_codec_create(struct azx *chip, const char *model)
1723 {
1724         struct hda_bus_template bus_temp;
1725         int c, codecs, err;
1726         int max_slots;
1727
1728         memset(&bus_temp, 0, sizeof(bus_temp));
1729         bus_temp.private_data = chip;
1730         bus_temp.modelname = model;
1731         bus_temp.pci = chip->pci;
1732         bus_temp.ops.command = azx_send_cmd;
1733         bus_temp.ops.get_response = azx_get_response;
1734         bus_temp.ops.attach_pcm = azx_attach_pcm_stream;
1735         bus_temp.ops.bus_reset = azx_bus_reset;
1736 #ifdef CONFIG_PM
1737         bus_temp.power_save = &power_save;
1738         bus_temp.ops.pm_notify = azx_power_notify;
1739 #endif
1740 #ifdef CONFIG_SND_HDA_DSP_LOADER
1741         bus_temp.ops.load_dsp_prepare = azx_load_dsp_prepare;
1742         bus_temp.ops.load_dsp_trigger = azx_load_dsp_trigger;
1743         bus_temp.ops.load_dsp_cleanup = azx_load_dsp_cleanup;
1744 #endif
1745
1746         err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus);
1747         if (err < 0)
1748                 return err;
1749
1750         if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) {
1751                 dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n");
1752                 chip->bus->needs_damn_long_delay = 1;
1753         }
1754
1755         codecs = 0;
1756         max_slots = azx_max_codecs[chip->driver_type];
1757         if (!max_slots)
1758                 max_slots = AZX_DEFAULT_CODECS;
1759
1760         /* First try to probe all given codec slots */
1761         for (c = 0; c < max_slots; c++) {
1762                 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1763                         if (probe_codec(chip, c) < 0) {
1764                                 /* Some BIOSen give you wrong codec addresses
1765                                  * that don't exist
1766                                  */
1767                                 dev_warn(chip->card->dev,
1768                                          "Codec #%d probe error; disabling it...\n", c);
1769                                 chip->codec_mask &= ~(1 << c);
1770                                 /* More badly, accessing to a non-existing
1771                                  * codec often screws up the controller chip,
1772                                  * and disturbs the further communications.
1773                                  * Thus if an error occurs during probing,
1774                                  * better to reset the controller chip to
1775                                  * get back to the sanity state.
1776                                  */
1777                                 azx_stop_chip(chip);
1778                                 azx_init_chip(chip, 1);
1779                         }
1780                 }
1781         }
1782
1783         /* AMD chipsets often cause the communication stalls upon certain
1784          * sequence like the pin-detection.  It seems that forcing the synced
1785          * access works around the stall.  Grrr...
1786          */
1787         if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1788                 dev_dbg(chip->card->dev, "Enable sync_write for stable communication\n");
1789                 chip->bus->sync_write = 1;
1790                 chip->bus->allow_bus_reset = 1;
1791         }
1792
1793         /* Then create codec instances */
1794         for (c = 0; c < max_slots; c++) {
1795                 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1796                         struct hda_codec *codec;
1797                         err = snd_hda_codec_new(chip->bus, c, &codec);
1798                         if (err < 0)
1799                                 continue;
1800                         codec->jackpoll_interval = get_jackpoll_interval(chip);
1801                         codec->beep_mode = chip->beep_mode;
1802                         codecs++;
1803                 }
1804         }
1805         if (!codecs) {
1806                 dev_err(chip->card->dev, "no codecs initialized\n");
1807                 return -ENXIO;
1808         }
1809         return 0;
1810 }
1811
1812 /* configure each codec instance */
1813 static int azx_codec_configure(struct azx *chip)
1814 {
1815         struct hda_codec *codec;
1816         list_for_each_entry(codec, &chip->bus->codec_list, list) {
1817                 snd_hda_codec_configure(codec);
1818         }
1819         return 0;
1820 }
1821
1822
1823 /*
1824  * PCM support
1825  */
1826
1827 /* assign a stream for the PCM */
1828 static inline struct azx_dev *
1829 azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
1830 {
1831         int dev, i, nums;
1832         struct azx_dev *res = NULL;
1833         /* make a non-zero unique key for the substream */
1834         int key = (substream->pcm->device << 16) | (substream->number << 2) |
1835                 (substream->stream + 1);
1836
1837         if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
1838                 dev = chip->playback_index_offset;
1839                 nums = chip->playback_streams;
1840         } else {
1841                 dev = chip->capture_index_offset;
1842                 nums = chip->capture_streams;
1843         }
1844         for (i = 0; i < nums; i++, dev++) {
1845                 struct azx_dev *azx_dev = &chip->azx_dev[dev];
1846                 dsp_lock(azx_dev);
1847                 if (!azx_dev->opened && !dsp_is_locked(azx_dev)) {
1848                         res = azx_dev;
1849                         if (res->assigned_key == key) {
1850                                 res->opened = 1;
1851                                 res->assigned_key = key;
1852                                 dsp_unlock(azx_dev);
1853                                 return azx_dev;
1854                         }
1855                 }
1856                 dsp_unlock(azx_dev);
1857         }
1858         if (res) {
1859                 dsp_lock(res);
1860                 res->opened = 1;
1861                 res->assigned_key = key;
1862                 dsp_unlock(res);
1863         }
1864         return res;
1865 }
1866
1867 /* release the assigned stream */
1868 static inline void azx_release_device(struct azx_dev *azx_dev)
1869 {
1870         azx_dev->opened = 0;
1871 }
1872
1873 static cycle_t azx_cc_read(const struct cyclecounter *cc)
1874 {
1875         struct azx_dev *azx_dev = container_of(cc, struct azx_dev, azx_cc);
1876         struct snd_pcm_substream *substream = azx_dev->substream;
1877         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1878         struct azx *chip = apcm->chip;
1879
1880         return azx_readl(chip, WALLCLK);
1881 }
1882
1883 static void azx_timecounter_init(struct snd_pcm_substream *substream,
1884                                 bool force, cycle_t last)
1885 {
1886         struct azx_dev *azx_dev = get_azx_dev(substream);
1887         struct timecounter *tc = &azx_dev->azx_tc;
1888         struct cyclecounter *cc = &azx_dev->azx_cc;
1889         u64 nsec;
1890
1891         cc->read = azx_cc_read;
1892         cc->mask = CLOCKSOURCE_MASK(32);
1893
1894         /*
1895          * Converting from 24 MHz to ns means applying a 125/3 factor.
1896          * To avoid any saturation issues in intermediate operations,
1897          * the 125 factor is applied first. The division is applied
1898          * last after reading the timecounter value.
1899          * Applying the 1/3 factor as part of the multiplication
1900          * requires at least 20 bits for a decent precision, however
1901          * overflows occur after about 4 hours or less, not a option.
1902          */
1903
1904         cc->mult = 125; /* saturation after 195 years */
1905         cc->shift = 0;
1906
1907         nsec = 0; /* audio time is elapsed time since trigger */
1908         timecounter_init(tc, cc, nsec);
1909         if (force)
1910                 /*
1911                  * force timecounter to use predefined value,
1912                  * used for synchronized starts
1913                  */
1914                 tc->cycle_last = last;
1915 }
1916
1917 static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream,
1918                                 u64 nsec)
1919 {
1920         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1921         struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1922         u64 codec_frames, codec_nsecs;
1923
1924         if (!hinfo->ops.get_delay)
1925                 return nsec;
1926
1927         codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream);
1928         codec_nsecs = div_u64(codec_frames * 1000000000LL,
1929                               substream->runtime->rate);
1930
1931         if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
1932                 return nsec + codec_nsecs;
1933
1934         return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0;
1935 }
1936
1937 static int azx_get_wallclock_tstamp(struct snd_pcm_substream *substream,
1938                                 struct timespec *ts)
1939 {
1940         struct azx_dev *azx_dev = get_azx_dev(substream);
1941         u64 nsec;
1942
1943         nsec = timecounter_read(&azx_dev->azx_tc);
1944         nsec = div_u64(nsec, 3); /* can be optimized */
1945         nsec = azx_adjust_codec_delay(substream, nsec);
1946
1947         *ts = ns_to_timespec(nsec);
1948
1949         return 0;
1950 }
1951
1952 static struct snd_pcm_hardware azx_pcm_hw = {
1953         .info =                 (SNDRV_PCM_INFO_MMAP |
1954                                  SNDRV_PCM_INFO_INTERLEAVED |
1955                                  SNDRV_PCM_INFO_BLOCK_TRANSFER |
1956                                  SNDRV_PCM_INFO_MMAP_VALID |
1957                                  /* No full-resume yet implemented */
1958                                  /* SNDRV_PCM_INFO_RESUME |*/
1959                                  SNDRV_PCM_INFO_PAUSE |
1960                                  SNDRV_PCM_INFO_SYNC_START |
1961                                  SNDRV_PCM_INFO_HAS_WALL_CLOCK |
1962                                  SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
1963         .formats =              SNDRV_PCM_FMTBIT_S16_LE,
1964         .rates =                SNDRV_PCM_RATE_48000,
1965         .rate_min =             48000,
1966         .rate_max =             48000,
1967         .channels_min =         2,
1968         .channels_max =         2,
1969         .buffer_bytes_max =     AZX_MAX_BUF_SIZE,
1970         .period_bytes_min =     128,
1971         .period_bytes_max =     AZX_MAX_BUF_SIZE / 2,
1972         .periods_min =          2,
1973         .periods_max =          AZX_MAX_FRAG,
1974         .fifo_size =            0,
1975 };
1976
1977 static int azx_pcm_open(struct snd_pcm_substream *substream)
1978 {
1979         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1980         struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1981         struct azx *chip = apcm->chip;
1982         struct azx_dev *azx_dev;
1983         struct snd_pcm_runtime *runtime = substream->runtime;
1984         unsigned long flags;
1985         int err;
1986         int buff_step;
1987
1988         mutex_lock(&chip->open_mutex);
1989         azx_dev = azx_assign_device(chip, substream);
1990         if (azx_dev == NULL) {
1991                 mutex_unlock(&chip->open_mutex);
1992                 return -EBUSY;
1993         }
1994         runtime->hw = azx_pcm_hw;
1995         runtime->hw.channels_min = hinfo->channels_min;
1996         runtime->hw.channels_max = hinfo->channels_max;
1997         runtime->hw.formats = hinfo->formats;
1998         runtime->hw.rates = hinfo->rates;
1999         snd_pcm_limit_hw_rates(runtime);
2000         snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
2001
2002         /* avoid wrap-around with wall-clock */
2003         snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME,
2004                                 20,
2005                                 178000000);
2006
2007         if (chip->align_buffer_size)
2008                 /* constrain buffer sizes to be multiple of 128
2009                    bytes. This is more efficient in terms of memory
2010                    access but isn't required by the HDA spec and
2011                    prevents users from specifying exact period/buffer
2012                    sizes. For example for 44.1kHz, a period size set
2013                    to 20ms will be rounded to 19.59ms. */
2014                 buff_step = 128;
2015         else
2016                 /* Don't enforce steps on buffer sizes, still need to
2017                    be multiple of 4 bytes (HDA spec). Tested on Intel
2018                    HDA controllers, may not work on all devices where
2019                    option needs to be disabled */
2020                 buff_step = 4;
2021
2022         snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
2023                                    buff_step);
2024         snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
2025                                    buff_step);
2026         snd_hda_power_up_d3wait(apcm->codec);
2027         err = hinfo->ops.open(hinfo, apcm->codec, substream);
2028         if (err < 0) {
2029                 azx_release_device(azx_dev);
2030                 snd_hda_power_down(apcm->codec);
2031                 mutex_unlock(&chip->open_mutex);
2032                 return err;
2033         }
2034         snd_pcm_limit_hw_rates(runtime);
2035         /* sanity check */
2036         if (snd_BUG_ON(!runtime->hw.channels_min) ||
2037             snd_BUG_ON(!runtime->hw.channels_max) ||
2038             snd_BUG_ON(!runtime->hw.formats) ||
2039             snd_BUG_ON(!runtime->hw.rates)) {
2040                 azx_release_device(azx_dev);
2041                 hinfo->ops.close(hinfo, apcm->codec, substream);
2042                 snd_hda_power_down(apcm->codec);
2043                 mutex_unlock(&chip->open_mutex);
2044                 return -EINVAL;
2045         }
2046
2047         /* disable WALLCLOCK timestamps for capture streams
2048            until we figure out how to handle digital inputs */
2049         if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
2050                 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK;
2051
2052         spin_lock_irqsave(&chip->reg_lock, flags);
2053         azx_dev->substream = substream;
2054         azx_dev->running = 0;
2055         spin_unlock_irqrestore(&chip->reg_lock, flags);
2056
2057         runtime->private_data = azx_dev;
2058         snd_pcm_set_sync(substream);
2059         mutex_unlock(&chip->open_mutex);
2060         return 0;
2061 }
2062
2063 static int azx_pcm_close(struct snd_pcm_substream *substream)
2064 {
2065         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2066         struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2067         struct azx *chip = apcm->chip;
2068         struct azx_dev *azx_dev = get_azx_dev(substream);
2069         unsigned long flags;
2070
2071         mutex_lock(&chip->open_mutex);
2072         spin_lock_irqsave(&chip->reg_lock, flags);
2073         azx_dev->substream = NULL;
2074         azx_dev->running = 0;
2075         spin_unlock_irqrestore(&chip->reg_lock, flags);
2076         azx_release_device(azx_dev);
2077         hinfo->ops.close(hinfo, apcm->codec, substream);
2078         snd_hda_power_down(apcm->codec);
2079         mutex_unlock(&chip->open_mutex);
2080         return 0;
2081 }
2082
2083 static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
2084                              struct snd_pcm_hw_params *hw_params)
2085 {
2086         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2087         struct azx *chip = apcm->chip;
2088         struct azx_dev *azx_dev = get_azx_dev(substream);
2089         int ret;
2090
2091         dsp_lock(azx_dev);
2092         if (dsp_is_locked(azx_dev)) {
2093                 ret = -EBUSY;
2094                 goto unlock;
2095         }
2096
2097         mark_runtime_wc(chip, azx_dev, substream, false);
2098         azx_dev->bufsize = 0;
2099         azx_dev->period_bytes = 0;
2100         azx_dev->format_val = 0;
2101         ret = snd_pcm_lib_malloc_pages(substream,
2102                                         params_buffer_bytes(hw_params));
2103         if (ret < 0)
2104                 goto unlock;
2105         mark_runtime_wc(chip, azx_dev, substream, true);
2106  unlock:
2107         dsp_unlock(azx_dev);
2108         return ret;
2109 }
2110
2111 static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
2112 {
2113         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2114         struct azx_dev *azx_dev = get_azx_dev(substream);
2115         struct azx *chip = apcm->chip;
2116         struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2117
2118         /* reset BDL address */
2119         dsp_lock(azx_dev);
2120         if (!dsp_is_locked(azx_dev)) {
2121                 azx_sd_writel(azx_dev, SD_BDLPL, 0);
2122                 azx_sd_writel(azx_dev, SD_BDLPU, 0);
2123                 azx_sd_writel(azx_dev, SD_CTL, 0);
2124                 azx_dev->bufsize = 0;
2125                 azx_dev->period_bytes = 0;
2126                 azx_dev->format_val = 0;
2127         }
2128
2129         snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
2130
2131         mark_runtime_wc(chip, azx_dev, substream, false);
2132         azx_dev->prepared = 0;
2133         dsp_unlock(azx_dev);
2134         return snd_pcm_lib_free_pages(substream);
2135 }
2136
2137 static int azx_pcm_prepare(struct snd_pcm_substream *substream)
2138 {
2139         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2140         struct azx *chip = apcm->chip;
2141         struct azx_dev *azx_dev = get_azx_dev(substream);
2142         struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2143         struct snd_pcm_runtime *runtime = substream->runtime;
2144         unsigned int bufsize, period_bytes, format_val, stream_tag;
2145         int err;
2146         struct hda_spdif_out *spdif =
2147                 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
2148         unsigned short ctls = spdif ? spdif->ctls : 0;
2149
2150         dsp_lock(azx_dev);
2151         if (dsp_is_locked(azx_dev)) {
2152                 err = -EBUSY;
2153                 goto unlock;
2154         }
2155
2156         azx_stream_reset(chip, azx_dev);
2157         format_val = snd_hda_calc_stream_format(runtime->rate,
2158                                                 runtime->channels,
2159                                                 runtime->format,
2160                                                 hinfo->maxbps,
2161                                                 ctls);
2162         if (!format_val) {
2163                 dev_err(chip->card->dev,
2164                         "invalid format_val, rate=%d, ch=%d, format=%d\n",
2165                         runtime->rate, runtime->channels, runtime->format);
2166                 err = -EINVAL;
2167                 goto unlock;
2168         }
2169
2170         bufsize = snd_pcm_lib_buffer_bytes(substream);
2171         period_bytes = snd_pcm_lib_period_bytes(substream);
2172
2173         dev_dbg(chip->card->dev, "azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
2174                 bufsize, format_val);
2175
2176         if (bufsize != azx_dev->bufsize ||
2177             period_bytes != azx_dev->period_bytes ||
2178             format_val != azx_dev->format_val ||
2179             runtime->no_period_wakeup != azx_dev->no_period_wakeup) {
2180                 azx_dev->bufsize = bufsize;
2181                 azx_dev->period_bytes = period_bytes;
2182                 azx_dev->format_val = format_val;
2183                 azx_dev->no_period_wakeup = runtime->no_period_wakeup;
2184                 err = azx_setup_periods(chip, substream, azx_dev);
2185                 if (err < 0)
2186                         goto unlock;
2187         }
2188
2189         /* when LPIB delay correction gives a small negative value,
2190          * we ignore it; currently set the threshold statically to
2191          * 64 frames
2192          */
2193         if (runtime->period_size > 64)
2194                 azx_dev->delay_negative_threshold = -frames_to_bytes(runtime, 64);
2195         else
2196                 azx_dev->delay_negative_threshold = 0;
2197
2198         /* wallclk has 24Mhz clock source */
2199         azx_dev->period_wallclk = (((runtime->period_size * 24000) /
2200                                                 runtime->rate) * 1000);
2201         azx_setup_controller(chip, azx_dev);
2202         if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
2203                 azx_dev->fifo_size = azx_sd_readw(azx_dev, SD_FIFOSIZE) + 1;
2204         else
2205                 azx_dev->fifo_size = 0;
2206
2207         stream_tag = azx_dev->stream_tag;
2208         /* CA-IBG chips need the playback stream starting from 1 */
2209         if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
2210             stream_tag > chip->capture_streams)
2211                 stream_tag -= chip->capture_streams;
2212         err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
2213                                      azx_dev->format_val, substream);
2214
2215  unlock:
2216         if (!err)
2217                 azx_dev->prepared = 1;
2218         dsp_unlock(azx_dev);
2219         return err;
2220 }
2221
2222 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
2223 {
2224         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2225         struct azx *chip = apcm->chip;
2226         struct azx_dev *azx_dev;
2227         struct snd_pcm_substream *s;
2228         int rstart = 0, start, nsync = 0, sbits = 0;
2229         int nwait, timeout;
2230
2231         azx_dev = get_azx_dev(substream);
2232         trace_azx_pcm_trigger(chip, azx_dev, cmd);
2233
2234         if (dsp_is_locked(azx_dev) || !azx_dev->prepared)
2235                 return -EPIPE;
2236
2237         switch (cmd) {
2238         case SNDRV_PCM_TRIGGER_START:
2239                 rstart = 1;
2240         case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
2241         case SNDRV_PCM_TRIGGER_RESUME:
2242                 start = 1;
2243                 break;
2244         case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
2245         case SNDRV_PCM_TRIGGER_SUSPEND:
2246         case SNDRV_PCM_TRIGGER_STOP:
2247                 start = 0;
2248                 break;
2249         default:
2250                 return -EINVAL;
2251         }
2252
2253         snd_pcm_group_for_each_entry(s, substream) {
2254                 if (s->pcm->card != substream->pcm->card)
2255                         continue;
2256                 azx_dev = get_azx_dev(s);
2257                 sbits |= 1 << azx_dev->index;
2258                 nsync++;
2259                 snd_pcm_trigger_done(s, substream);
2260         }
2261
2262         spin_lock(&chip->reg_lock);
2263
2264         /* first, set SYNC bits of corresponding streams */
2265         if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
2266                 azx_writel(chip, OLD_SSYNC,
2267                         azx_readl(chip, OLD_SSYNC) | sbits);
2268         else
2269                 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits);
2270
2271         snd_pcm_group_for_each_entry(s, substream) {
2272                 if (s->pcm->card != substream->pcm->card)
2273                         continue;
2274                 azx_dev = get_azx_dev(s);
2275                 if (start) {
2276                         azx_dev->start_wallclk = azx_readl(chip, WALLCLK);
2277                         if (!rstart)
2278                                 azx_dev->start_wallclk -=
2279                                                 azx_dev->period_wallclk;
2280                         azx_stream_start(chip, azx_dev);
2281                 } else {
2282                         azx_stream_stop(chip, azx_dev);
2283                 }
2284                 azx_dev->running = start;
2285         }
2286         spin_unlock(&chip->reg_lock);
2287         if (start) {
2288                 /* wait until all FIFOs get ready */
2289                 for (timeout = 5000; timeout; timeout--) {
2290                         nwait = 0;
2291                         snd_pcm_group_for_each_entry(s, substream) {
2292                                 if (s->pcm->card != substream->pcm->card)
2293                                         continue;
2294                                 azx_dev = get_azx_dev(s);
2295                                 if (!(azx_sd_readb(azx_dev, SD_STS) &
2296                                       SD_STS_FIFO_READY))
2297                                         nwait++;
2298                         }
2299                         if (!nwait)
2300                                 break;
2301                         cpu_relax();
2302                 }
2303         } else {
2304                 /* wait until all RUN bits are cleared */
2305                 for (timeout = 5000; timeout; timeout--) {
2306                         nwait = 0;
2307                         snd_pcm_group_for_each_entry(s, substream) {
2308                                 if (s->pcm->card != substream->pcm->card)
2309                                         continue;
2310                                 azx_dev = get_azx_dev(s);
2311                                 if (azx_sd_readb(azx_dev, SD_CTL) &
2312                                     SD_CTL_DMA_START)
2313                                         nwait++;
2314                         }
2315                         if (!nwait)
2316                                 break;
2317                         cpu_relax();
2318                 }
2319         }
2320         spin_lock(&chip->reg_lock);
2321         /* reset SYNC bits */
2322         if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
2323                 azx_writel(chip, OLD_SSYNC,
2324                         azx_readl(chip, OLD_SSYNC) & ~sbits);
2325         else
2326                 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits);
2327         if (start) {
2328                 azx_timecounter_init(substream, 0, 0);
2329                 if (nsync > 1) {
2330                         cycle_t cycle_last;
2331
2332                         /* same start cycle for master and group */
2333                         azx_dev = get_azx_dev(substream);
2334                         cycle_last = azx_dev->azx_tc.cycle_last;
2335
2336                         snd_pcm_group_for_each_entry(s, substream) {
2337                                 if (s->pcm->card != substream->pcm->card)
2338                                         continue;
2339                                 azx_timecounter_init(s, 1, cycle_last);
2340                         }
2341                 }
2342         }
2343         spin_unlock(&chip->reg_lock);
2344         return 0;
2345 }
2346
2347 /* get the current DMA position with correction on VIA chips */
2348 static unsigned int azx_via_get_position(struct azx *chip,
2349                                          struct azx_dev *azx_dev)
2350 {
2351         unsigned int link_pos, mini_pos, bound_pos;
2352         unsigned int mod_link_pos, mod_dma_pos, mod_mini_pos;
2353         unsigned int fifo_size;
2354
2355         link_pos = azx_sd_readl(azx_dev, SD_LPIB);
2356         if (azx_dev->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
2357                 /* Playback, no problem using link position */
2358                 return link_pos;
2359         }
2360
2361         /* Capture */
2362         /* For new chipset,
2363          * use mod to get the DMA position just like old chipset
2364          */
2365         mod_dma_pos = le32_to_cpu(*azx_dev->posbuf);
2366         mod_dma_pos %= azx_dev->period_bytes;
2367
2368         /* azx_dev->fifo_size can't get FIFO size of in stream.
2369          * Get from base address + offset.
2370          */
2371         fifo_size = readw(chip->remap_addr + VIA_IN_STREAM0_FIFO_SIZE_OFFSET);
2372
2373         if (azx_dev->insufficient) {
2374                 /* Link position never gather than FIFO size */
2375                 if (link_pos <= fifo_size)
2376                         return 0;
2377
2378                 azx_dev->insufficient = 0;
2379         }
2380
2381         if (link_pos <= fifo_size)
2382                 mini_pos = azx_dev->bufsize + link_pos - fifo_size;
2383         else
2384                 mini_pos = link_pos - fifo_size;
2385
2386         /* Find nearest previous boudary */
2387         mod_mini_pos = mini_pos % azx_dev->period_bytes;
2388         mod_link_pos = link_pos % azx_dev->period_bytes;
2389         if (mod_link_pos >= fifo_size)
2390                 bound_pos = link_pos - mod_link_pos;
2391         else if (mod_dma_pos >= mod_mini_pos)
2392                 bound_pos = mini_pos - mod_mini_pos;
2393         else {
2394                 bound_pos = mini_pos - mod_mini_pos + azx_dev->period_bytes;
2395                 if (bound_pos >= azx_dev->bufsize)
2396                         bound_pos = 0;
2397         }
2398
2399         /* Calculate real DMA position we want */
2400         return bound_pos + mod_dma_pos;
2401 }
2402
2403 static unsigned int azx_get_position(struct azx *chip,
2404                                      struct azx_dev *azx_dev,
2405                                      bool with_check)
2406 {
2407         struct snd_pcm_substream *substream = azx_dev->substream;
2408         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2409         unsigned int pos;
2410         int stream = substream->stream;
2411         struct hda_pcm_stream *hinfo = apcm->hinfo[stream];
2412         int delay = 0;
2413
2414         switch (chip->position_fix[stream]) {
2415         case POS_FIX_LPIB:
2416                 /* read LPIB */
2417                 pos = azx_sd_readl(azx_dev, SD_LPIB);
2418                 break;
2419         case POS_FIX_VIACOMBO:
2420                 pos = azx_via_get_position(chip, azx_dev);
2421                 break;
2422         default:
2423                 /* use the position buffer */
2424                 pos = le32_to_cpu(*azx_dev->posbuf);
2425                 if (with_check && chip->position_fix[stream] == POS_FIX_AUTO) {
2426                         if (!pos || pos == (u32)-1) {
2427                                 dev_info(chip->card->dev,
2428                                          "Invalid position buffer, using LPIB read method instead.\n");
2429                                 chip->position_fix[stream] = POS_FIX_LPIB;
2430                                 pos = azx_sd_readl(azx_dev, SD_LPIB);
2431                         } else
2432                                 chip->position_fix[stream] = POS_FIX_POSBUF;
2433                 }
2434                 break;
2435         }
2436
2437         if (pos >= azx_dev->bufsize)
2438                 pos = 0;
2439
2440         /* calculate runtime delay from LPIB */
2441         if (substream->runtime &&
2442             chip->position_fix[stream] == POS_FIX_POSBUF &&
2443             (chip->driver_caps & AZX_DCAPS_COUNT_LPIB_DELAY)) {
2444                 unsigned int lpib_pos = azx_sd_readl(azx_dev, SD_LPIB);
2445                 if (stream == SNDRV_PCM_STREAM_PLAYBACK)
2446                         delay = pos - lpib_pos;
2447                 else
2448                         delay = lpib_pos - pos;
2449                 if (delay < 0) {
2450                         if (delay >= azx_dev->delay_negative_threshold)
2451                                 delay = 0;
2452                         else
2453                                 delay += azx_dev->bufsize;
2454                 }
2455                 if (delay >= azx_dev->period_bytes) {
2456                         dev_info(chip->card->dev,
2457                                  "Unstable LPIB (%d >= %d); disabling LPIB delay counting\n",
2458                                  delay, azx_dev->period_bytes);
2459                         delay = 0;
2460                         chip->driver_caps &= ~AZX_DCAPS_COUNT_LPIB_DELAY;
2461                 }
2462                 delay = bytes_to_frames(substream->runtime, delay);
2463         }
2464
2465         if (substream->runtime) {
2466                 if (hinfo->ops.get_delay)
2467                         delay += hinfo->ops.get_delay(hinfo, apcm->codec,
2468                                                       substream);
2469                 substream->runtime->delay = delay;
2470         }
2471
2472         trace_azx_get_position(chip, azx_dev, pos, delay);
2473         return pos;
2474 }
2475
2476 static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
2477 {
2478         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2479         struct azx *chip = apcm->chip;
2480         struct azx_dev *azx_dev = get_azx_dev(substream);
2481         return bytes_to_frames(substream->runtime,
2482                                azx_get_position(chip, azx_dev, false));
2483 }
2484
2485 /*
2486  * Check whether the current DMA position is acceptable for updating
2487  * periods.  Returns non-zero if it's OK.
2488  *
2489  * Many HD-audio controllers appear pretty inaccurate about
2490  * the update-IRQ timing.  The IRQ is issued before actually the
2491  * data is processed.  So, we need to process it afterwords in a
2492  * workqueue.
2493  */
2494 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
2495 {
2496         u32 wallclk;
2497         unsigned int pos;
2498
2499         wallclk = azx_readl(chip, WALLCLK) - azx_dev->start_wallclk;
2500         if (wallclk < (azx_dev->period_wallclk * 2) / 3)
2501                 return -1;      /* bogus (too early) interrupt */
2502
2503         pos = azx_get_position(chip, azx_dev, true);
2504
2505         if (WARN_ONCE(!azx_dev->period_bytes,
2506                       "hda-intel: zero azx_dev->period_bytes"))
2507                 return -1; /* this shouldn't happen! */
2508         if (wallclk < (azx_dev->period_wallclk * 5) / 4 &&
2509             pos % azx_dev->period_bytes > azx_dev->period_bytes / 2)
2510                 /* NG - it's below the first next period boundary */
2511                 return bdl_pos_adj[chip->dev_index] ? 0 : -1;
2512         azx_dev->start_wallclk += wallclk;
2513         return 1; /* OK, it's fine */
2514 }
2515
2516 /*
2517  * The work for pending PCM period updates.
2518  */
2519 static void azx_irq_pending_work(struct work_struct *work)
2520 {
2521         struct azx *chip = container_of(work, struct azx, irq_pending_work);
2522         int i, pending, ok;
2523
2524         if (!chip->irq_pending_warned) {
2525                 dev_info(chip->card->dev,
2526                          "IRQ timing workaround is activated for card #%d. Suggest a bigger bdl_pos_adj.\n",
2527                          chip->card->number);
2528                 chip->irq_pending_warned = 1;
2529         }
2530
2531         for (;;) {
2532                 pending = 0;
2533                 spin_lock_irq(&chip->reg_lock);
2534                 for (i = 0; i < chip->num_streams; i++) {
2535                         struct azx_dev *azx_dev = &chip->azx_dev[i];
2536                         if (!azx_dev->irq_pending ||
2537                             !azx_dev->substream ||
2538                             !azx_dev->running)
2539                                 continue;
2540                         ok = azx_position_ok(chip, azx_dev);
2541                         if (ok > 0) {
2542                                 azx_dev->irq_pending = 0;
2543                                 spin_unlock(&chip->reg_lock);
2544                                 snd_pcm_period_elapsed(azx_dev->substream);
2545                                 spin_lock(&chip->reg_lock);
2546                         } else if (ok < 0) {
2547                                 pending = 0;    /* too early */
2548                         } else
2549                                 pending++;
2550                 }
2551                 spin_unlock_irq(&chip->reg_lock);
2552                 if (!pending)
2553                         return;
2554                 msleep(1);
2555         }
2556 }
2557
2558 /* clear irq_pending flags and assure no on-going workq */
2559 static void azx_clear_irq_pending(struct azx *chip)
2560 {
2561         int i;
2562
2563         spin_lock_irq(&chip->reg_lock);
2564         for (i = 0; i < chip->num_streams; i++)
2565                 chip->azx_dev[i].irq_pending = 0;
2566         spin_unlock_irq(&chip->reg_lock);
2567 }
2568
2569 #ifdef CONFIG_X86
2570 static int azx_pcm_mmap(struct snd_pcm_substream *substream,
2571                         struct vm_area_struct *area)
2572 {
2573         struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2574         struct azx *chip = apcm->chip;
2575         if (!azx_snoop(chip))
2576                 area->vm_page_prot = pgprot_writecombine(area->vm_page_prot);
2577         return snd_pcm_lib_default_mmap(substream, area);
2578 }
2579 #else
2580 #define azx_pcm_mmap    NULL
2581 #endif
2582
2583 static struct snd_pcm_ops azx_pcm_ops = {
2584         .open = azx_pcm_open,
2585         .close = azx_pcm_close,
2586         .ioctl = snd_pcm_lib_ioctl,
2587         .hw_params = azx_pcm_hw_params,
2588         .hw_free = azx_pcm_hw_free,
2589         .prepare = azx_pcm_prepare,
2590         .trigger = azx_pcm_trigger,
2591         .pointer = azx_pcm_pointer,
2592         .wall_clock =  azx_get_wallclock_tstamp,
2593         .mmap = azx_pcm_mmap,
2594         .page = snd_pcm_sgbuf_ops_page,
2595 };
2596
2597 static void azx_pcm_free(struct snd_pcm *pcm)
2598 {
2599         struct azx_pcm *apcm = pcm->private_data;
2600         if (apcm) {
2601                 list_del(&apcm->list);
2602                 kfree(apcm);
2603         }
2604 }
2605
2606 #define MAX_PREALLOC_SIZE       (32 * 1024 * 1024)
2607
2608 static int
2609 azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
2610                       struct hda_pcm *cpcm)
2611 {
2612         struct azx *chip = bus->private_data;
2613         struct snd_pcm *pcm;
2614         struct azx_pcm *apcm;
2615         int pcm_dev = cpcm->device;
2616         unsigned int size;
2617         int s, err;
2618
2619         list_for_each_entry(apcm, &chip->pcm_list, list) {
2620                 if (apcm->pcm->device == pcm_dev) {
2621                         dev_err(chip->card->dev, "PCM %d already exists\n",
2622                                 pcm_dev);
2623                         return -EBUSY;
2624                 }
2625         }
2626         err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
2627                           cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
2628                           cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
2629                           &pcm);
2630         if (err < 0)
2631                 return err;
2632         strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
2633         apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
2634         if (apcm == NULL)
2635                 return -ENOMEM;
2636         apcm->chip = chip;
2637         apcm->pcm = pcm;
2638         apcm->codec = codec;
2639         pcm->private_data = apcm;
2640         pcm->private_free = azx_pcm_free;
2641         if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
2642                 pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
2643         list_add_tail(&apcm->list, &chip->pcm_list);
2644         cpcm->pcm = pcm;
2645         for (s = 0; s < 2; s++) {
2646                 apcm->hinfo[s] = &cpcm->stream[s];
2647                 if (cpcm->stream[s].substreams)
2648                         snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
2649         }
2650         /* buffer pre-allocation */
2651         size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
2652         if (size > MAX_PREALLOC_SIZE)
2653                 size = MAX_PREALLOC_SIZE;
2654         snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
2655                                               snd_dma_pci_data(chip->pci),
2656                                               size, MAX_PREALLOC_SIZE);
2657         /* link to codec */
2658         pcm->dev = &codec->dev;
2659         return 0;
2660 }
2661
2662 /*
2663  * mixer creation - all stuff is implemented in hda module
2664  */
2665 static int azx_mixer_create(struct azx *chip)
2666 {
2667         return snd_hda_build_controls(chip->bus);
2668 }
2669
2670
2671 /*
2672  * initialize SD streams
2673  */
2674 static int azx_init_stream(struct azx *chip)
2675 {
2676         int i;
2677
2678         /* initialize each stream (aka device)
2679          * assign the starting bdl address to each stream (device)
2680          * and initialize
2681          */
2682         for (i = 0; i < chip->num_streams; i++) {
2683                 struct azx_dev *azx_dev = &chip->azx_dev[i];
2684                 azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8);
2685                 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
2686                 azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80);
2687                 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
2688                 azx_dev->sd_int_sta_mask = 1 << i;
2689                 /* stream tag: must be non-zero and unique */
2690                 azx_dev->index = i;
2691                 azx_dev->stream_tag = i + 1;
2692         }
2693
2694         return 0;
2695 }
2696
2697 static int azx_acquire_irq(struct azx *chip, int do_disconnect)
2698 {
2699         if (request_irq(chip->pci->irq, azx_interrupt,
2700                         chip->msi ? 0 : IRQF_SHARED,
2701                         KBUILD_MODNAME, chip)) {
2702                 dev_err(chip->card->dev,
2703                         "unable to grab IRQ %d, disabling device\n",
2704                         chip->pci->irq);
2705                 if (do_disconnect)
2706                         snd_card_disconnect(chip->card);
2707                 return -1;
2708         }
2709         chip->irq = chip->pci->irq;
2710         pci_intx(chip->pci, !chip->msi);
2711         return 0;
2712 }
2713
2714
2715 static void azx_stop_chip(struct azx *chip)
2716 {
2717         if (!chip->initialized)
2718                 return;
2719
2720         /* disable interrupts */
2721         azx_int_disable(chip);
2722         azx_int_clear(chip);
2723
2724         /* disable CORB/RIRB */
2725         azx_free_cmd_io(chip);
2726
2727         /* disable position buffer */
2728         azx_writel(chip, DPLBASE, 0);
2729         azx_writel(chip, DPUBASE, 0);
2730
2731         chip->initialized = 0;
2732 }
2733
2734 #ifdef CONFIG_SND_HDA_DSP_LOADER
2735 /*
2736  * DSP loading code (e.g. for CA0132)
2737  */
2738
2739 /* use the first stream for loading DSP */
2740 static struct azx_dev *
2741 azx_get_dsp_loader_dev(struct azx *chip)
2742 {
2743         return &chip->azx_dev[chip->playback_index_offset];
2744 }
2745
2746 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format,
2747                                 unsigned int byte_size,
2748                                 struct snd_dma_buffer *bufp)
2749 {
2750         u32 *bdl;
2751         struct azx *chip = bus->private_data;
2752         struct azx_dev *azx_dev;
2753         int err;
2754
2755         azx_dev = azx_get_dsp_loader_dev(chip);
2756
2757         dsp_lock(azx_dev);
2758         spin_lock_irq(&chip->reg_lock);
2759         if (azx_dev->running || azx_dev->locked) {
2760                 spin_unlock_irq(&chip->reg_lock);
2761                 err = -EBUSY;
2762                 goto unlock;
2763         }
2764         azx_dev->prepared = 0;
2765         chip->saved_azx_dev = *azx_dev;
2766         azx_dev->locked = 1;
2767         spin_unlock_irq(&chip->reg_lock);
2768
2769         err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV_SG,
2770                                   snd_dma_pci_data(chip->pci),
2771                                   byte_size, bufp);
2772         if (err < 0)
2773                 goto err_alloc;
2774
2775         mark_pages_wc(chip, bufp, true);
2776         azx_dev->bufsize = byte_size;
2777         azx_dev->period_bytes = byte_size;
2778         azx_dev->format_val = format;
2779
2780         azx_stream_reset(chip, azx_dev);
2781
2782         /* reset BDL address */
2783         azx_sd_writel(azx_dev, SD_BDLPL, 0);
2784         azx_sd_writel(azx_dev, SD_BDLPU, 0);
2785
2786         azx_dev->frags = 0;
2787         bdl = (u32 *)azx_dev->bdl.area;
2788         err = setup_bdle(chip, bufp, azx_dev, &bdl, 0, byte_size, 0);
2789         if (err < 0)
2790                 goto error;
2791
2792         azx_setup_controller(chip, azx_dev);
2793         dsp_unlock(azx_dev);
2794         return azx_dev->stream_tag;
2795
2796  error:
2797         mark_pages_wc(chip, bufp, false);
2798         snd_dma_free_pages(bufp);
2799  err_alloc:
2800         spin_lock_irq(&chip->reg_lock);
2801         if (azx_dev->opened)
2802                 *azx_dev = chip->saved_azx_dev;
2803         azx_dev->locked = 0;
2804         spin_unlock_irq(&chip->reg_lock);
2805  unlock:
2806         dsp_unlock(azx_dev);
2807         return err;
2808 }
2809
2810 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start)
2811 {
2812         struct azx *chip = bus->private_data;
2813         struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
2814
2815         if (start)
2816                 azx_stream_start(chip, azx_dev);
2817         else
2818                 azx_stream_stop(chip, azx_dev);
2819         azx_dev->running = start;
2820 }
2821
2822 static void azx_load_dsp_cleanup(struct hda_bus *bus,
2823                                  struct snd_dma_buffer *dmab)
2824 {
2825         struct azx *chip = bus->private_data;
2826         struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
2827
2828         if (!dmab->area || !azx_dev->locked)
2829                 return;
2830
2831         dsp_lock(azx_dev);
2832         /* reset BDL address */
2833         azx_sd_writel(azx_dev, SD_BDLPL, 0);
2834         azx_sd_writel(azx_dev, SD_BDLPU, 0);
2835         azx_sd_writel(azx_dev, SD_CTL, 0);
2836         azx_dev->bufsize = 0;
2837         azx_dev->period_bytes = 0;
2838         azx_dev->format_val = 0;
2839
2840         mark_pages_wc(chip, dmab, false);
2841         snd_dma_free_pages(dmab);
2842         dmab->area = NULL;
2843
2844         spin_lock_irq(&chip->reg_lock);
2845         if (azx_dev->opened)
2846                 *azx_dev = chip->saved_azx_dev;
2847         azx_dev->locked = 0;
2848         spin_unlock_irq(&chip->reg_lock);
2849         dsp_unlock(azx_dev);
2850 }
2851 #endif /* CONFIG_SND_HDA_DSP_LOADER */
2852
2853 #ifdef CONFIG_PM
2854 /* power-up/down the controller */
2855 static void azx_power_notify(struct hda_bus *bus, bool power_up)
2856 {
2857         struct azx *chip = bus->private_data;
2858
2859         if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
2860                 return;
2861
2862         if (power_up)
2863                 pm_runtime_get_sync(&chip->pci->dev);
2864         else
2865                 pm_runtime_put_sync(&chip->pci->dev);
2866 }
2867
2868 static DEFINE_MUTEX(card_list_lock);
2869 static LIST_HEAD(card_list);
2870
2871 static void azx_add_card_list(struct azx *chip)
2872 {
2873         mutex_lock(&card_list_lock);
2874         list_add(&chip->list, &card_list);
2875         mutex_unlock(&card_list_lock);
2876 }
2877
2878 static void azx_del_card_list(struct azx *chip)
2879 {
2880         mutex_lock(&card_list_lock);
2881         list_del_init(&chip->list);
2882         mutex_unlock(&card_list_lock);
2883 }
2884
2885 /* trigger power-save check at writing parameter */
2886 static int param_set_xint(const char *val, const struct kernel_param *kp)
2887 {
2888         struct azx *chip;
2889         struct hda_codec *c;
2890         int prev = power_save;
2891         int ret = param_set_int(val, kp);
2892
2893         if (ret || prev == power_save)
2894                 return ret;
2895
2896         mutex_lock(&card_list_lock);
2897         list_for_each_entry(chip, &card_list, list) {
2898                 if (!chip->bus || chip->disabled)
2899                         continue;
2900                 list_for_each_entry(c, &chip->bus->codec_list, list)
2901                         snd_hda_power_sync(c);
2902         }
2903         mutex_unlock(&card_list_lock);
2904         return 0;
2905 }
2906 #else
2907 #define azx_add_card_list(chip) /* NOP */
2908 #define azx_del_card_list(chip) /* NOP */
2909 #endif /* CONFIG_PM */
2910
2911 #if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO)
2912 /*
2913  * power management
2914  */
2915 static int azx_suspend(struct device *dev)
2916 {
2917         struct pci_dev *pci = to_pci_dev(dev);
2918         struct snd_card *card = dev_get_drvdata(dev);
2919         struct azx *chip = card->private_data;
2920         struct azx_pcm *p;
2921
2922         if (chip->disabled)
2923                 return 0;
2924
2925         snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2926         azx_clear_irq_pending(chip);
2927         list_for_each_entry(p, &chip->pcm_list, list)
2928                 snd_pcm_suspend_all(p->pcm);
2929         if (chip->initialized)
2930                 snd_hda_suspend(chip->bus);
2931         azx_stop_chip(chip);
2932         azx_enter_link_reset(chip);
2933         if (chip->irq >= 0) {
2934                 free_irq(chip->irq, chip);
2935                 chip->irq = -1;
2936         }
2937         if (chip->msi)
2938                 pci_disable_msi(chip->pci);
2939         pci_disable_device(pci);
2940         pci_save_state(pci);
2941         pci_set_power_state(pci, PCI_D3hot);
2942         if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
2943                 hda_display_power(false);
2944         return 0;
2945 }
2946
2947 static int azx_resume(struct device *dev)
2948 {
2949         struct pci_dev *pci = to_pci_dev(dev);
2950         struct snd_card *card = dev_get_drvdata(dev);
2951         struct azx *chip = card->private_data;
2952
2953         if (chip->disabled)
2954                 return 0;
2955
2956         if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
2957                 hda_display_power(true);
2958         pci_set_power_state(pci, PCI_D0);
2959         pci_restore_state(pci);
2960         if (pci_enable_device(pci) < 0) {
2961                 dev_err(chip->card->dev,
2962                         "pci_enable_device failed, disabling device\n");
2963                 snd_card_disconnect(card);
2964                 return -EIO;
2965         }
2966         pci_set_master(pci);
2967         if (chip->msi)
2968                 if (pci_enable_msi(pci) < 0)
2969                         chip->msi = 0;
2970         if (azx_acquire_irq(chip, 1) < 0)
2971                 return -EIO;
2972         azx_init_pci(chip);
2973
2974         azx_init_chip(chip, 1);
2975
2976         snd_hda_resume(chip->bus);
2977         snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2978         return 0;
2979 }
2980 #endif /* CONFIG_PM_SLEEP || SUPPORT_VGA_SWITCHEROO */
2981
2982 #ifdef CONFIG_PM_RUNTIME
2983 static int azx_runtime_suspend(struct device *dev)
2984 {
2985         struct snd_card *card = dev_get_drvdata(dev);
2986         struct azx *chip = card->private_data;
2987
2988         if (chip->disabled)
2989                 return 0;
2990
2991         if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
2992                 return 0;
2993
2994         /* enable controller wake up event */
2995         azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) |
2996                   STATESTS_INT_MASK);
2997
2998         azx_stop_chip(chip);
2999         azx_enter_link_reset(chip);
3000         azx_clear_irq_pending(chip);
3001         if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
3002                 hda_display_power(false);
3003         return 0;
3004 }
3005
3006 static int azx_runtime_resume(struct device *dev)
3007 {
3008         struct snd_card *card = dev_get_drvdata(dev);
3009         struct azx *chip = card->private_data;
3010         struct hda_bus *bus;
3011         struct hda_codec *codec;
3012         int status;
3013
3014         if (chip->disabled)
3015                 return 0;
3016
3017         if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
3018                 return 0;
3019
3020         if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
3021                 hda_display_power(true);
3022
3023         /* Read STATESTS before controller reset */
3024         status = azx_readw(chip, STATESTS);
3025
3026         azx_init_pci(chip);
3027         azx_init_chip(chip, 1);
3028
3029         bus = chip->bus;
3030         if (status && bus) {
3031                 list_for_each_entry(codec, &bus->codec_list, list)
3032                         if (status & (1 << codec->addr))
3033                                 queue_delayed_work(codec->bus->workq,
3034                                                    &codec->jackpoll_work, codec->jackpoll_interval);
3035         }
3036
3037         /* disable controller Wake Up event*/
3038         azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) &
3039                         ~STATESTS_INT_MASK);
3040
3041         return 0;
3042 }
3043
3044 static int azx_runtime_idle(struct device *dev)
3045 {
3046         struct snd_card *card = dev_get_drvdata(dev);
3047         struct azx *chip = card->private_data;
3048
3049         if (chip->disabled)
3050                 return 0;
3051
3052         if (!power_save_controller ||
3053             !(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
3054                 return -EBUSY;
3055
3056         return 0;
3057 }
3058
3059 #endif /* CONFIG_PM_RUNTIME */
3060
3061 #ifdef CONFIG_PM
3062 static const struct dev_pm_ops azx_pm = {
3063         SET_SYSTEM_SLEEP_PM_OPS(azx_suspend, azx_resume)
3064         SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, azx_runtime_idle)
3065 };
3066
3067 #define AZX_PM_OPS      &azx_pm
3068 #else
3069 #define AZX_PM_OPS      NULL
3070 #endif /* CONFIG_PM */
3071
3072
3073 /*
3074  * reboot notifier for hang-up problem at power-down
3075  */
3076 static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
3077 {
3078         struct azx *chip = container_of(nb, struct azx, reboot_notifier);
3079         snd_hda_bus_reboot_notify(chip->bus);
3080         azx_stop_chip(chip);
3081         return NOTIFY_OK;
3082 }
3083
3084 static void azx_notifier_register(struct azx *chip)
3085 {
3086         chip->reboot_notifier.notifier_call = azx_halt;
3087         register_reboot_notifier(&chip->reboot_notifier);
3088 }
3089
3090 static void azx_notifier_unregister(struct azx *chip)
3091 {
3092         if (chip->reboot_notifier.notifier_call)
3093                 unregister_reboot_notifier(&chip->reboot_notifier);
3094 }
3095
3096 static int azx_probe_continue(struct azx *chip);
3097
3098 #ifdef SUPPORT_VGA_SWITCHEROO
3099 static struct pci_dev *get_bound_vga(struct pci_dev *pci);
3100
3101 static void azx_vs_set_state(struct pci_dev *pci,
3102                              enum vga_switcheroo_state state)
3103 {
3104         struct snd_card *card = pci_get_drvdata(pci);
3105         struct azx *chip = card->private_data;
3106         bool disabled;
3107
3108         wait_for_completion(&chip->probe_wait);
3109         if (chip->init_failed)
3110                 return;
3111
3112         disabled = (state == VGA_SWITCHEROO_OFF);
3113         if (chip->disabled == disabled)
3114                 return;
3115
3116         if (!chip->bus) {
3117                 chip->disabled = disabled;
3118                 if (!disabled) {
3119                         dev_info(chip->card->dev,
3120                                  "Start delayed initialization\n");
3121                         if (azx_probe_continue(chip) < 0) {
3122                                 dev_err(chip->card->dev, "initialization error\n");
3123                                 chip->init_failed = true;
3124                         }
3125                 }
3126         } else {
3127                 dev_info(chip->card->dev, "%s via VGA-switcheroo\n",
3128                          disabled ? "Disabling" : "Enabling");
3129                 if (disabled) {
3130                         pm_runtime_put_sync_suspend(&pci->dev);
3131                         azx_suspend(&pci->dev);
3132                         /* when we get suspended by vga switcheroo we end up in D3cold,
3133                          * however we have no ACPI handle, so pci/acpi can't put us there,
3134                          * put ourselves there */
3135                         pci->current_state = PCI_D3cold;
3136                         chip->disabled = true;
3137                         if (snd_hda_lock_devices(chip->bus))
3138                                 dev_warn(chip->card->dev,
3139                                          "Cannot lock devices!\n");
3140                 } else {
3141                         snd_hda_unlock_devices(chip->bus);
3142                         pm_runtime_get_noresume(&pci->dev);
3143                         chip->disabled = false;
3144                         azx_resume(&pci->dev);
3145                 }
3146         }
3147 }
3148
3149 static bool azx_vs_can_switch(struct pci_dev *pci)
3150 {
3151         struct snd_card *card = pci_get_drvdata(pci);
3152         struct azx *chip = card->private_data;
3153
3154         wait_for_completion(&chip->probe_wait);
3155         if (chip->init_failed)
3156                 return false;
3157         if (chip->disabled || !chip->bus)
3158                 return true;
3159         if (snd_hda_lock_devices(chip->bus))
3160                 return false;
3161         snd_hda_unlock_devices(chip->bus);
3162         return true;
3163 }
3164
3165 static void init_vga_switcheroo(struct azx *chip)
3166 {
3167         struct pci_dev *p = get_bound_vga(chip->pci);
3168         if (p) {
3169                 dev_info(chip->card->dev,
3170                          "Handle VGA-switcheroo audio client\n");
3171                 chip->use_vga_switcheroo = 1;
3172                 pci_dev_put(p);
3173         }
3174 }
3175
3176 static const struct vga_switcheroo_client_ops azx_vs_ops = {
3177         .set_gpu_state = azx_vs_set_state,
3178         .can_switch = azx_vs_can_switch,
3179 };
3180
3181 static int register_vga_switcheroo(struct azx *chip)
3182 {
3183         int err;
3184
3185         if (!chip->use_vga_switcheroo)
3186                 return 0;
3187         /* FIXME: currently only handling DIS controller
3188          * is there any machine with two switchable HDMI audio controllers?
3189          */
3190         err = vga_switcheroo_register_audio_client(chip->pci, &azx_vs_ops,
3191                                                     VGA_SWITCHEROO_DIS,
3192                                                     chip->bus != NULL);
3193         if (err < 0)
3194                 return err;
3195         chip->vga_switcheroo_registered = 1;
3196
3197         /* register as an optimus hdmi audio power domain */
3198         vga_switcheroo_init_domain_pm_optimus_hdmi_audio(&chip->pci->dev, &chip->hdmi_pm_domain);
3199         return 0;
3200 }
3201 #else
3202 #define init_vga_switcheroo(chip)               /* NOP */
3203 #define register_vga_switcheroo(chip)           0
3204 #define check_hdmi_disabled(pci)        false
3205 #endif /* SUPPORT_VGA_SWITCHER */
3206
3207 /*
3208  * destructor
3209  */
3210 static int azx_free(struct azx *chip)
3211 {
3212         struct pci_dev *pci = chip->pci;
3213         int i;
3214
3215         if ((chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
3216                         && chip->running)
3217                 pm_runtime_get_noresume(&pci->dev);
3218
3219         azx_del_card_list(chip);
3220
3221         azx_notifier_unregister(chip);
3222
3223         chip->init_failed = 1; /* to be sure */
3224         complete_all(&chip->probe_wait);
3225
3226         if (use_vga_switcheroo(chip)) {
3227                 if (chip->disabled && chip->bus)
3228                         snd_hda_unlock_devices(chip->bus);
3229                 if (chip->vga_switcheroo_registered)
3230                         vga_switcheroo_unregister_client(chip->pci);
3231         }
3232
3233         if (chip->initialized) {
3234                 azx_clear_irq_pending(chip);
3235                 for (i = 0; i < chip->num_streams; i++)
3236                         azx_stream_stop(chip, &chip->azx_dev[i]);
3237                 azx_stop_chip(chip);
3238         }
3239
3240         if (chip->irq >= 0)
3241                 free_irq(chip->irq, (void*)chip);
3242         if (chip->msi)
3243                 pci_disable_msi(chip->pci);
3244         if (chip->remap_addr)
3245                 iounmap(chip->remap_addr);
3246
3247         if (chip->azx_dev) {
3248                 for (i = 0; i < chip->num_streams; i++)
3249                         if (chip->azx_dev[i].bdl.area) {
3250                                 mark_pages_wc(chip, &chip->azx_dev[i].bdl, false);
3251                                 snd_dma_free_pages(&chip->azx_dev[i].bdl);
3252                         }
3253         }
3254         if (chip->rb.area) {
3255                 mark_pages_wc(chip, &chip->rb, false);
3256                 snd_dma_free_pages(&chip->rb);
3257         }
3258         if (chip->posbuf.area) {
3259                 mark_pages_wc(chip, &chip->posbuf, false);
3260                 snd_dma_free_pages(&chip->posbuf);
3261         }
3262         if (chip->region_requested)
3263                 pci_release_regions(chip->pci);
3264         pci_disable_device(chip->pci);
3265         kfree(chip->azx_dev);
3266 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3267         if (chip->fw)
3268                 release_firmware(chip->fw);
3269 #endif
3270         if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {
3271                 hda_display_power(false);
3272                 hda_i915_exit();
3273         }
3274         kfree(chip);
3275
3276         return 0;
3277 }
3278
3279 static int azx_dev_free(struct snd_device *device)
3280 {
3281         return azx_free(device->device_data);
3282 }
3283
3284 #ifdef SUPPORT_VGA_SWITCHEROO
3285 /*
3286  * Check of disabled HDMI controller by vga-switcheroo
3287  */
3288 static struct pci_dev *get_bound_vga(struct pci_dev *pci)
3289 {
3290         struct pci_dev *p;
3291
3292         /* check only discrete GPU */
3293         switch (pci->vendor) {
3294         case PCI_VENDOR_ID_ATI:
3295         case PCI_VENDOR_ID_AMD:
3296         case PCI_VENDOR_ID_NVIDIA:
3297                 if (pci->devfn == 1) {
3298                         p = pci_get_domain_bus_and_slot(pci_domain_nr(pci->bus),
3299                                                         pci->bus->number, 0);
3300                         if (p) {
3301                                 if ((p->class >> 8) == PCI_CLASS_DISPLAY_VGA)
3302                                         return p;
3303                                 pci_dev_put(p);
3304                         }
3305                 }
3306                 break;
3307         }
3308         return NULL;
3309 }
3310
3311 static bool check_hdmi_disabled(struct pci_dev *pci)
3312 {
3313         bool vga_inactive = false;
3314         struct pci_dev *p = get_bound_vga(pci);
3315
3316         if (p) {
3317                 if (vga_switcheroo_get_client_state(p) == VGA_SWITCHEROO_OFF)
3318                         vga_inactive = true;
3319                 pci_dev_put(p);
3320         }
3321         return vga_inactive;
3322 }
3323 #endif /* SUPPORT_VGA_SWITCHEROO */
3324
3325 /*
3326  * white/black-listing for position_fix
3327  */
3328 static struct snd_pci_quirk position_fix_list[] = {
3329         SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
3330         SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
3331         SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
3332         SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
3333         SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
3334         SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),
3335         SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),
3336         SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB),
3337         SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB),
3338         SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB),
3339         SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
3340         SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB),
3341         SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB),
3342         SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB),
3343         {}
3344 };
3345
3346 static int check_position_fix(struct azx *chip, int fix)
3347 {
3348         const struct snd_pci_quirk *q;
3349
3350         switch (fix) {
3351         case POS_FIX_AUTO:
3352         case POS_FIX_LPIB:
3353         case POS_FIX_POSBUF:
3354         case POS_FIX_VIACOMBO:
3355         case POS_FIX_COMBO:
3356                 return fix;
3357         }
3358
3359         q = snd_pci_quirk_lookup(chip->pci, position_fix_list);
3360         if (q) {
3361                 dev_info(chip->card->dev,
3362                          "position_fix set to %d for device %04x:%04x\n",
3363                          q->value, q->subvendor, q->subdevice);
3364                 return q->value;
3365         }
3366
3367         /* Check VIA/ATI HD Audio Controller exist */
3368         if (chip->driver_caps & AZX_DCAPS_POSFIX_VIA) {
3369                 dev_dbg(chip->card->dev, "Using VIACOMBO position fix\n");
3370                 return POS_FIX_VIACOMBO;
3371         }
3372         if (chip->driver_caps & AZX_DCAPS_POSFIX_LPIB) {
3373                 dev_dbg(chip->card->dev, "Using LPIB position fix\n");
3374                 return POS_FIX_LPIB;
3375         }
3376         return POS_FIX_AUTO;
3377 }
3378
3379 /*
3380  * black-lists for probe_mask
3381  */
3382 static struct snd_pci_quirk probe_mask_list[] = {
3383         /* Thinkpad often breaks the controller communication when accessing
3384          * to the non-working (or non-existing) modem codec slot.
3385          */
3386         SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01),
3387         SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01),
3388         SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01),
3389         /* broken BIOS */
3390         SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),
3391         /* including bogus ALC268 in slot#2 that conflicts with ALC888 */
3392         SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),
3393         /* forced codec slots */
3394         SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),
3395         SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),
3396         /* WinFast VP200 H (Teradici) user reported broken communication */
3397         SND_PCI_QUIRK(0x3a21, 0x040d, "WinFast VP200 H", 0x101),
3398         {}
3399 };
3400
3401 #define AZX_FORCE_CODEC_MASK    0x100
3402
3403 static void check_probe_mask(struct azx *chip, int dev)
3404 {
3405         const struct snd_pci_quirk *q;
3406
3407         chip->codec_probe_mask = probe_mask[dev];
3408         if (chip->codec_probe_mask == -1) {
3409                 q = snd_pci_quirk_lookup(chip->pci, probe_mask_list);
3410                 if (q) {
3411                         dev_info(chip->card->dev,
3412                                  "probe_mask set to 0x%x for device %04x:%04x\n",
3413                                  q->value, q->subvendor, q->subdevice);
3414                         chip->codec_probe_mask = q->value;
3415                 }
3416         }
3417
3418         /* check forced option */
3419         if (chip->codec_probe_mask != -1 &&
3420             (chip->codec_probe_mask & AZX_FORCE_CODEC_MASK)) {
3421                 chip->codec_mask = chip->codec_probe_mask & 0xff;
3422                 dev_info(chip->card->dev, "codec_mask forced to 0x%x\n",
3423                          chip->codec_mask);
3424         }
3425 }
3426
3427 /*
3428  * white/black-list for enable_msi
3429  */
3430 static struct snd_pci_quirk msi_black_list[] = {
3431         SND_PCI_QUIRK(0x103c, 0x2191, "HP", 0), /* AMD Hudson */
3432         SND_PCI_QUIRK(0x103c, 0x2192, "HP", 0), /* AMD Hudson */
3433         SND_PCI_QUIRK(0x103c, 0x21f7, "HP", 0), /* AMD Hudson */
3434         SND_PCI_QUIRK(0x103c, 0x21fa, "HP", 0), /* AMD Hudson */
3435         SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
3436         SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
3437         SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
3438         SND_PCI_QUIRK(0x1179, 0xfb44, "Toshiba Satellite C870", 0), /* AMD Hudson */
3439         SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
3440         SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
3441         {}
3442 };
3443
3444 static void check_msi(struct azx *chip)
3445 {
3446         const struct snd_pci_quirk *q;
3447
3448         if (enable_msi >= 0) {
3449                 chip->msi = !!enable_msi;
3450                 return;
3451         }
3452         chip->msi = 1;  /* enable MSI as default */
3453         q = snd_pci_quirk_lookup(chip->pci, msi_black_list);
3454         if (q) {
3455                 dev_info(chip->card->dev,
3456                          "msi for device %04x:%04x set to %d\n",
3457                          q->subvendor, q->subdevice, q->value);
3458                 chip->msi = q->value;
3459                 return;
3460         }
3461
3462         /* NVidia chipsets seem to cause troubles with MSI */
3463         if (chip->driver_caps & AZX_DCAPS_NO_MSI) {
3464                 dev_info(chip->card->dev, "Disabling MSI\n");
3465                 chip->msi = 0;
3466         }
3467 }
3468
3469 /* check the snoop mode availability */
3470 static void azx_check_snoop_available(struct azx *chip)
3471 {
3472         bool snoop = chip->snoop;
3473
3474         switch (chip->driver_type) {
3475         case AZX_DRIVER_VIA:
3476                 /* force to non-snoop mode for a new VIA controller
3477                  * when BIOS is set
3478                  */
3479                 if (snoop) {
3480                         u8 val;
3481                         pci_read_config_byte(chip->pci, 0x42, &val);
3482                         if (!(val & 0x80) && chip->pci->revision == 0x30)
3483                                 snoop = false;
3484                 }
3485                 break;
3486         case AZX_DRIVER_ATIHDMI_NS:
3487                 /* new ATI HDMI requires non-snoop */
3488                 snoop = false;
3489                 break;
3490         case AZX_DRIVER_CTHDA:
3491                 snoop = false;
3492                 break;
3493         }
3494
3495         if (snoop != chip->snoop) {
3496                 dev_info(chip->card->dev, "Force to %s mode\n",
3497                          snoop ? "snoop" : "non-snoop");
3498                 chip->snoop = snoop;
3499         }
3500 }
3501
3502 static void azx_probe_work(struct work_struct *work)
3503 {
3504         azx_probe_continue(container_of(work, struct azx, probe_work));
3505 }
3506
3507 /*
3508  * constructor
3509  */
3510 static int azx_create(struct snd_card *card, struct pci_dev *pci,
3511                       int dev, unsigned int driver_caps,
3512                       struct azx **rchip)
3513 {
3514         static struct snd_device_ops ops = {
3515                 .dev_free = azx_dev_free,
3516         };
3517         struct azx *chip;
3518         int err;
3519
3520         *rchip = NULL;
3521
3522         err = pci_enable_device(pci);
3523         if (err < 0)
3524                 return err;
3525
3526         chip = kzalloc(sizeof(*chip), GFP_KERNEL);
3527         if (!chip) {
3528                 dev_err(card->dev, "Cannot allocate chip\n");
3529                 pci_disable_device(pci);
3530                 return -ENOMEM;
3531         }
3532
3533         spin_lock_init(&chip->reg_lock);
3534         mutex_init(&chip->open_mutex);
3535         chip->card = card;
3536         chip->pci = pci;
3537         chip->irq = -1;
3538         chip->driver_caps = driver_caps;
3539         chip->driver_type = driver_caps & 0xff;
3540         check_msi(chip);
3541         chip->dev_index = dev;
3542         INIT_WORK(&chip->irq_pending_work, azx_irq_pending_work);
3543         INIT_LIST_HEAD(&chip->pcm_list);
3544         INIT_LIST_HEAD(&chip->list);
3545         init_vga_switcheroo(chip);
3546         init_completion(&chip->probe_wait);
3547
3548         chip->position_fix[0] = chip->position_fix[1] =
3549                 check_position_fix(chip, position_fix[dev]);
3550         /* combo mode uses LPIB for playback */
3551         if (chip->position_fix[0] == POS_FIX_COMBO) {
3552                 chip->position_fix[0] = POS_FIX_LPIB;
3553                 chip->position_fix[1] = POS_FIX_AUTO;
3554         }
3555
3556         check_probe_mask(chip, dev);
3557
3558         chip->single_cmd = single_cmd;
3559         chip->snoop = hda_snoop;
3560         azx_check_snoop_available(chip);
3561
3562         if (bdl_pos_adj[dev] < 0) {
3563                 switch (chip->driver_type) {
3564                 case AZX_DRIVER_ICH:
3565                 case AZX_DRIVER_PCH:
3566                         bdl_pos_adj[dev] = 1;
3567                         break;
3568                 default:
3569                         bdl_pos_adj[dev] = 32;
3570                         break;
3571                 }
3572         }
3573
3574         err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
3575         if (err < 0) {
3576                 dev_err(card->dev, "Error creating device [card]!\n");
3577                 azx_free(chip);
3578                 return err;
3579         }
3580
3581         /* continue probing in work context as may trigger request module */
3582         INIT_WORK(&chip->probe_work, azx_probe_work);
3583
3584         *rchip = chip;
3585
3586         return 0;
3587 }
3588
3589 static int azx_first_init(struct azx *chip)
3590 {
3591         int dev = chip->dev_index;
3592         struct pci_dev *pci = chip->pci;
3593         struct snd_card *card = chip->card;
3594         int i, err;
3595         unsigned short gcap;
3596
3597 #if BITS_PER_LONG != 64
3598         /* Fix up base address on ULI M5461 */
3599         if (chip->driver_type == AZX_DRIVER_ULI) {
3600                 u16 tmp3;
3601                 pci_read_config_word(pci, 0x40, &tmp3);
3602                 pci_write_config_word(pci, 0x40, tmp3 | 0x10);
3603                 pci_write_config_dword(pci, PCI_BASE_ADDRESS_1, 0);
3604         }
3605 #endif
3606
3607         err = pci_request_regions(pci, "ICH HD audio");
3608         if (err < 0)
3609                 return err;
3610         chip->region_requested = 1;
3611
3612         chip->addr = pci_resource_start(pci, 0);
3613         chip->remap_addr = pci_ioremap_bar(pci, 0);
3614         if (chip->remap_addr == NULL) {
3615                 dev_err(card->dev, "ioremap error\n");
3616                 return -ENXIO;
3617         }
3618
3619         if (chip->msi)
3620                 if (pci_enable_msi(pci) < 0)
3621                         chip->msi = 0;
3622
3623         if (azx_acquire_irq(chip, 0) < 0)
3624                 return -EBUSY;
3625
3626         pci_set_master(pci);
3627         synchronize_irq(chip->irq);
3628
3629         gcap = azx_readw(chip, GCAP);
3630         dev_dbg(card->dev, "chipset global capabilities = 0x%x\n", gcap);
3631
3632         /* disable SB600 64bit support for safety */
3633         if (chip->pci->vendor == PCI_VENDOR_ID_ATI) {
3634                 struct pci_dev *p_smbus;
3635                 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,
3636                                          PCI_DEVICE_ID_ATI_SBX00_SMBUS,
3637                                          NULL);
3638                 if (p_smbus) {
3639                         if (p_smbus->revision < 0x30)
3640                                 gcap &= ~ICH6_GCAP_64OK;
3641                         pci_dev_put(p_smbus);
3642                 }
3643         }
3644
3645         /* disable 64bit DMA address on some devices */
3646         if (chip->driver_caps & AZX_DCAPS_NO_64BIT) {
3647                 dev_dbg(card->dev, "Disabling 64bit DMA\n");
3648                 gcap &= ~ICH6_GCAP_64OK;
3649         }
3650
3651         /* disable buffer size rounding to 128-byte multiples if supported */
3652         if (align_buffer_size >= 0)
3653                 chip->align_buffer_size = !!align_buffer_size;
3654         else {
3655                 if (chip->driver_caps & AZX_DCAPS_BUFSIZE)
3656                         chip->align_buffer_size = 0;
3657                 else if (chip->driver_caps & AZX_DCAPS_ALIGN_BUFSIZE)
3658                         chip->align_buffer_size = 1;
3659                 else
3660                         chip->align_buffer_size = 1;
3661         }
3662
3663         /* allow 64bit DMA address if supported by H/W */
3664         if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64)))
3665                 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(64));
3666         else {
3667                 pci_set_dma_mask(pci, DMA_BIT_MASK(32));
3668                 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32));
3669         }
3670
3671         /* read number of streams from GCAP register instead of using
3672          * hardcoded value
3673          */
3674         chip->capture_streams = (gcap >> 8) & 0x0f;
3675         chip->playback_streams = (gcap >> 12) & 0x0f;
3676         if (!chip->playback_streams && !chip->capture_streams) {
3677                 /* gcap didn't give any info, switching to old method */
3678
3679                 switch (chip->driver_type) {
3680                 case AZX_DRIVER_ULI:
3681                         chip->playback_streams = ULI_NUM_PLAYBACK;
3682                         chip->capture_streams = ULI_NUM_CAPTURE;
3683                         break;
3684                 case AZX_DRIVER_ATIHDMI:
3685                 case AZX_DRIVER_ATIHDMI_NS:
3686                         chip->playback_streams = ATIHDMI_NUM_PLAYBACK;
3687                         chip->capture_streams = ATIHDMI_NUM_CAPTURE;
3688                         break;
3689                 case AZX_DRIVER_GENERIC:
3690                 default:
3691                         chip->playback_streams = ICH6_NUM_PLAYBACK;
3692                         chip->capture_streams = ICH6_NUM_CAPTURE;
3693                         break;
3694                 }
3695         }
3696         chip->capture_index_offset = 0;
3697         chip->playback_index_offset = chip->capture_streams;
3698         chip->num_streams = chip->playback_streams + chip->capture_streams;
3699         chip->azx_dev = kcalloc(chip->num_streams, sizeof(*chip->azx_dev),
3700                                 GFP_KERNEL);
3701         if (!chip->azx_dev) {
3702                 dev_err(card->dev, "cannot malloc azx_dev\n");
3703                 return -ENOMEM;
3704         }
3705
3706         for (i = 0; i < chip->num_streams; i++) {
3707                 dsp_lock_init(&chip->azx_dev[i]);
3708                 /* allocate memory for the BDL for each stream */
3709                 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
3710                                           snd_dma_pci_data(chip->pci),
3711                                           BDL_SIZE, &chip->azx_dev[i].bdl);
3712                 if (err < 0) {
3713                         dev_err(card->dev, "cannot allocate BDL\n");
3714                         return -ENOMEM;
3715                 }
3716                 mark_pages_wc(chip, &chip->azx_dev[i].bdl, true);
3717         }
3718         /* allocate memory for the position buffer */
3719         err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
3720                                   snd_dma_pci_data(chip->pci),
3721                                   chip->num_streams * 8, &chip->posbuf);
3722         if (err < 0) {
3723                 dev_err(card->dev, "cannot allocate posbuf\n");
3724                 return -ENOMEM;
3725         }
3726         mark_pages_wc(chip, &chip->posbuf, true);
3727         /* allocate CORB/RIRB */
3728         err = azx_alloc_cmd_io(chip);
3729         if (err < 0)
3730                 return err;
3731
3732         /* initialize streams */
3733         azx_init_stream(chip);
3734
3735         /* initialize chip */
3736         azx_init_pci(chip);
3737         azx_init_chip(chip, (probe_only[dev] & 2) == 0);
3738
3739         /* codec detection */
3740         if (!chip->codec_mask) {
3741                 dev_err(card->dev, "no codecs found!\n");
3742                 return -ENODEV;
3743         }
3744
3745         strcpy(card->driver, "HDA-Intel");
3746         strlcpy(card->shortname, driver_short_names[chip->driver_type],
3747                 sizeof(card->shortname));
3748         snprintf(card->longname, sizeof(card->longname),
3749                  "%s at 0x%lx irq %i",
3750                  card->shortname, chip->addr, chip->irq);
3751
3752         return 0;
3753 }
3754
3755 static void power_down_all_codecs(struct azx *chip)
3756 {
3757 #ifdef CONFIG_PM
3758         /* The codecs were powered up in snd_hda_codec_new().
3759          * Now all initialization done, so turn them down if possible
3760          */
3761         struct hda_codec *codec;
3762         list_for_each_entry(codec, &chip->bus->codec_list, list) {
3763                 snd_hda_power_down(codec);
3764         }
3765 #endif
3766 }
3767
3768 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3769 /* callback from request_firmware_nowait() */
3770 static void azx_firmware_cb(const struct firmware *fw, void *context)
3771 {
3772         struct snd_card *card = context;
3773         struct azx *chip = card->private_data;
3774         struct pci_dev *pci = chip->pci;
3775
3776         if (!fw) {
3777                 dev_err(card->dev, "Cannot load firmware, aborting\n");
3778                 goto error;
3779         }
3780
3781         chip->fw = fw;
3782         if (!chip->disabled) {
3783                 /* continue probing */
3784                 if (azx_probe_continue(chip))
3785                         goto error;
3786         }
3787         return; /* OK */
3788
3789  error:
3790         snd_card_free(card);
3791         pci_set_drvdata(pci, NULL);
3792 }
3793 #endif
3794
3795 static int azx_probe(struct pci_dev *pci,
3796                      const struct pci_device_id *pci_id)
3797 {
3798         static int dev;
3799         struct snd_card *card;
3800         struct azx *chip;
3801         bool schedule_probe;
3802         int err;
3803
3804         if (dev >= SNDRV_CARDS)
3805                 return -ENODEV;
3806         if (!enable[dev]) {
3807                 dev++;
3808                 return -ENOENT;
3809         }
3810
3811         err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,
3812                            0, &card);
3813         if (err < 0) {
3814                 dev_err(&pci->dev, "Error creating card!\n");
3815                 return err;
3816         }
3817
3818         err = azx_create(card, pci, dev, pci_id->driver_data, &chip);
3819         if (err < 0)
3820                 goto out_free;
3821         card->private_data = chip;
3822
3823         pci_set_drvdata(pci, card);
3824
3825         err = register_vga_switcheroo(chip);
3826         if (err < 0) {
3827                 dev_err(card->dev, "Error registering VGA-switcheroo client\n");
3828                 goto out_free;
3829         }
3830
3831         if (check_hdmi_disabled(pci)) {
3832                 dev_info(card->dev, "VGA controller is disabled\n");
3833                 dev_info(card->dev, "Delaying initialization\n");
3834                 chip->disabled = true;
3835         }
3836
3837         schedule_probe = !chip->disabled;
3838
3839 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3840         if (patch[dev] && *patch[dev]) {
3841                 dev_info(card->dev, "Applying patch firmware '%s'\n",
3842                          patch[dev]);
3843                 err = request_firmware_nowait(THIS_MODULE, true, patch[dev],
3844                                               &pci->dev, GFP_KERNEL, card,
3845                                               azx_firmware_cb);
3846                 if (err < 0)
3847                         goto out_free;
3848                 schedule_probe = false; /* continued in azx_firmware_cb() */
3849         }
3850 #endif /* CONFIG_SND_HDA_PATCH_LOADER */
3851
3852 #ifndef CONFIG_SND_HDA_I915
3853         if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
3854                 dev_err(card->dev, "Haswell must build in CONFIG_SND_HDA_I915\n");
3855 #endif
3856
3857         if (schedule_probe)
3858                 schedule_work(&chip->probe_work);
3859
3860         dev++;
3861         if (chip->disabled)
3862                 complete_all(&chip->probe_wait);
3863         return 0;
3864
3865 out_free:
3866         snd_card_free(card);
3867         return err;
3868 }
3869
3870 static int azx_probe_continue(struct azx *chip)
3871 {
3872         struct pci_dev *pci = chip->pci;
3873         int dev = chip->dev_index;
3874         int err;
3875
3876         /* Request power well for Haswell HDA controller and codec */
3877         if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {
3878 #ifdef CONFIG_SND_HDA_I915
3879                 err = hda_i915_init();
3880                 if (err < 0) {
3881                         dev_err(chip->card->dev,
3882                                 "Error request power-well from i915\n");
3883                         goto out_free;
3884                 }
3885 #endif
3886                 hda_display_power(true);
3887         }
3888
3889         err = azx_first_init(chip);
3890         if (err < 0)
3891                 goto out_free;
3892
3893 #ifdef CONFIG_SND_HDA_INPUT_BEEP
3894         chip->beep_mode = beep_mode[dev];
3895 #endif
3896
3897         /* create codec instances */
3898         err = azx_codec_create(chip, model[dev]);
3899         if (err < 0)
3900                 goto out_free;
3901 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3902         if (chip->fw) {
3903                 err = snd_hda_load_patch(chip->bus, chip->fw->size,
3904                                          chip->fw->data);
3905                 if (err < 0)
3906                         goto out_free;
3907 #ifndef CONFIG_PM
3908                 release_firmware(chip->fw); /* no longer needed */
3909                 chip->fw = NULL;
3910 #endif
3911         }
3912 #endif
3913         if ((probe_only[dev] & 1) == 0) {
3914                 err = azx_codec_configure(chip);
3915                 if (err < 0)
3916                         goto out_free;
3917         }
3918
3919         /* create PCM streams */
3920         err = snd_hda_build_pcms(chip->bus);
3921         if (err < 0)
3922                 goto out_free;
3923
3924         /* create mixer controls */
3925         err = azx_mixer_create(chip);
3926         if (err < 0)
3927                 goto out_free;
3928
3929         err = snd_card_register(chip->card);
3930         if (err < 0)
3931                 goto out_free;
3932
3933         chip->running = 1;
3934         power_down_all_codecs(chip);
3935         azx_notifier_register(chip);
3936         azx_add_card_list(chip);
3937         if ((chip->driver_caps & AZX_DCAPS_PM_RUNTIME) || chip->use_vga_switcheroo)
3938                 pm_runtime_put_noidle(&pci->dev);
3939
3940 out_free:
3941         if (err < 0)
3942                 chip->init_failed = 1;
3943         complete_all(&chip->probe_wait);
3944         return err;
3945 }
3946
3947 static void azx_remove(struct pci_dev *pci)
3948 {
3949         struct snd_card *card = pci_get_drvdata(pci);
3950
3951         if (card)
3952                 snd_card_free(card);
3953 }
3954
3955 /* PCI IDs */
3956 static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
3957         /* CPT */
3958         { PCI_DEVICE(0x8086, 0x1c20),
3959           .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3960         /* PBG */
3961         { PCI_DEVICE(0x8086, 0x1d20),
3962           .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3963         /* Panther Point */
3964         { PCI_DEVICE(0x8086, 0x1e20),
3965           .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3966         /* Lynx Point */
3967         { PCI_DEVICE(0x8086, 0x8c20),
3968           .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3969         /* Wellsburg */
3970         { PCI_DEVICE(0x8086, 0x8d20),
3971           .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3972         { PCI_DEVICE(0x8086, 0x8d21),
3973           .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3974         /* Lynx Point-LP */
3975         { PCI_DEVICE(0x8086, 0x9c20),
3976           .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3977         /* Lynx Point-LP */
3978         { PCI_DEVICE(0x8086, 0x9c21),
3979           .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3980         /* Wildcat Point-LP */
3981         { PCI_DEVICE(0x8086, 0x9ca0),
3982           .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3983         /* Haswell */
3984         { PCI_DEVICE(0x8086, 0x0a0c),
3985           .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
3986         { PCI_DEVICE(0x8086, 0x0c0c),
3987           .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
3988         { PCI_DEVICE(0x8086, 0x0d0c),
3989           .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
3990         /* Broadwell */
3991         { PCI_DEVICE(0x8086, 0x160c),
3992           .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
3993         /* 5 Series/3400 */
3994         { PCI_DEVICE(0x8086, 0x3b56),
3995           .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
3996         /* Poulsbo */
3997         { PCI_DEVICE(0x8086, 0x811b),
3998           .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
3999         /* Oaktrail */
4000         { PCI_DEVICE(0x8086, 0x080a),
4001           .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
4002         /* BayTrail */
4003         { PCI_DEVICE(0x8086, 0x0f04),
4004           .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
4005         /* ICH */
4006         { PCI_DEVICE(0x8086, 0x2668),
4007           .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4008           AZX_DCAPS_BUFSIZE },  /* ICH6 */
4009         { PCI_DEVICE(0x8086, 0x27d8),
4010           .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4011           AZX_DCAPS_BUFSIZE },  /* ICH7 */
4012         { PCI_DEVICE(0x8086, 0x269a),
4013           .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4014           AZX_DCAPS_BUFSIZE },  /* ESB2 */
4015         { PCI_DEVICE(0x8086, 0x284b),
4016           .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4017           AZX_DCAPS_BUFSIZE },  /* ICH8 */
4018         { PCI_DEVICE(0x8086, 0x293e),
4019           .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4020           AZX_DCAPS_BUFSIZE },  /* ICH9 */
4021         { PCI_DEVICE(0x8086, 0x293f),
4022           .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4023           AZX_DCAPS_BUFSIZE },  /* ICH9 */
4024         { PCI_DEVICE(0x8086, 0x3a3e),
4025           .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4026           AZX_DCAPS_BUFSIZE },  /* ICH10 */
4027         { PCI_DEVICE(0x8086, 0x3a6e),
4028           .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4029           AZX_DCAPS_BUFSIZE },  /* ICH10 */
4030         /* Generic Intel */
4031         { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),
4032           .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4033           .class_mask = 0xffffff,
4034           .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_BUFSIZE },
4035         /* ATI SB 450/600/700/800/900 */
4036         { PCI_DEVICE(0x1002, 0x437b),
4037           .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
4038         { PCI_DEVICE(0x1002, 0x4383),
4039           .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
4040         /* AMD Hudson */
4041         { PCI_DEVICE(0x1022, 0x780d),
4042           .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
4043         /* ATI HDMI */
4044         { PCI_DEVICE(0x1002, 0x793b),
4045           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4046         { PCI_DEVICE(0x1002, 0x7919),
4047           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4048         { PCI_DEVICE(0x1002, 0x960f),
4049           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4050         { PCI_DEVICE(0x1002, 0x970f),
4051           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4052         { PCI_DEVICE(0x1002, 0xaa00),
4053           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4054         { PCI_DEVICE(0x1002, 0xaa08),
4055           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4056         { PCI_DEVICE(0x1002, 0xaa10),
4057           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4058         { PCI_DEVICE(0x1002, 0xaa18),
4059           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4060         { PCI_DEVICE(0x1002, 0xaa20),
4061           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4062         { PCI_DEVICE(0x1002, 0xaa28),
4063           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4064         { PCI_DEVICE(0x1002, 0xaa30),
4065           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4066         { PCI_DEVICE(0x1002, 0xaa38),
4067           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4068         { PCI_DEVICE(0x1002, 0xaa40),
4069           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4070         { PCI_DEVICE(0x1002, 0xaa48),
4071           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4072         { PCI_DEVICE(0x1002, 0xaa50),
4073           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4074         { PCI_DEVICE(0x1002, 0xaa58),
4075           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4076         { PCI_DEVICE(0x1002, 0xaa60),
4077           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4078         { PCI_DEVICE(0x1002, 0xaa68),
4079           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4080         { PCI_DEVICE(0x1002, 0xaa80),
4081           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4082         { PCI_DEVICE(0x1002, 0xaa88),
4083           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4084         { PCI_DEVICE(0x1002, 0xaa90),
4085           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4086         { PCI_DEVICE(0x1002, 0xaa98),
4087           .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4088         { PCI_DEVICE(0x1002, 0x9902),
4089           .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4090         { PCI_DEVICE(0x1002, 0xaaa0),
4091           .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4092         { PCI_DEVICE(0x1002, 0xaaa8),
4093           .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4094         { PCI_DEVICE(0x1002, 0xaab0),
4095           .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4096         /* VIA VT8251/VT8237A */
4097         { PCI_DEVICE(0x1106, 0x3288),
4098           .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
4099         /* VIA GFX VT7122/VX900 */
4100         { PCI_DEVICE(0x1106, 0x9170), .driver_data = AZX_DRIVER_GENERIC },
4101         /* VIA GFX VT6122/VX11 */
4102         { PCI_DEVICE(0x1106, 0x9140), .driver_data = AZX_DRIVER_GENERIC },
4103         /* SIS966 */
4104         { PCI_DEVICE(0x1039, 0x7502), .driver_data = AZX_DRIVER_SIS },
4105         /* ULI M5461 */
4106         { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI },
4107         /* NVIDIA MCP */
4108         { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID),
4109           .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4110           .class_mask = 0xffffff,
4111           .driver_data = AZX_DRIVER_NVIDIA | AZX_DCAPS_PRESET_NVIDIA },
4112         /* Teradici */
4113         { PCI_DEVICE(0x6549, 0x1200),
4114           .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
4115         { PCI_DEVICE(0x6549, 0x2200),
4116           .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
4117         /* Creative X-Fi (CA0110-IBG) */
4118         /* CTHDA chips */
4119         { PCI_DEVICE(0x1102, 0x0010),
4120           .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
4121         { PCI_DEVICE(0x1102, 0x0012),
4122           .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
4123 #if !IS_ENABLED(CONFIG_SND_CTXFI)
4124         /* the following entry conflicts with snd-ctxfi driver,
4125          * as ctxfi driver mutates from HD-audio to native mode with
4126          * a special command sequence.
4127          */
4128         { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_ANY_ID),
4129           .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4130           .class_mask = 0xffffff,
4131           .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
4132           AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
4133 #else
4134         /* this entry seems still valid -- i.e. without emu20kx chip */
4135         { PCI_DEVICE(0x1102, 0x0009),
4136           .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
4137           AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
4138 #endif
4139         /* Vortex86MX */
4140         { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
4141         /* VMware HDAudio */
4142         { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC },
4143         /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */
4144         { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID),
4145           .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4146           .class_mask = 0xffffff,
4147           .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
4148         { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_ANY_ID),
4149           .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4150           .class_mask = 0xffffff,
4151           .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
4152         { 0, }
4153 };
4154 MODULE_DEVICE_TABLE(pci, azx_ids);
4155
4156 /* pci_driver definition */
4157 static struct pci_driver azx_driver = {
4158         .name = KBUILD_MODNAME,
4159         .id_table = azx_ids,
4160         .probe = azx_probe,
4161         .remove = azx_remove,
4162         .driver = {
4163                 .pm = AZX_PM_OPS,
4164         },
4165 };
4166
4167 module_pci_driver(azx_driver);