3 * hda_intel.c - Implementation of primary alsa driver code base
6 * Copyright(c) 2004 Intel Corporation. All rights reserved.
8 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
9 * PeiSen Hou <pshou@realtek.com.tw>
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)
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
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.
27 * Matt Jared matt.jared@intel.com
28 * Andy Kopp andy.kopp@intel.com
29 * Dan Kogan dan.d.kogan@intel.com
33 * 2004.12.01 Major rewrite by tiwai, merged the work of pshou
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>
49 #include <linux/pm_runtime.h>
50 #include <linux/clocksource.h>
51 #include <linux/time.h>
52 #include <linux/completion.h>
55 /* for snoop control */
56 #include <asm/pgtable.h>
57 #include <asm/cacheflush.h>
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"
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];
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};
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.");
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).");
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,
127 #define param_check_xint param_check_int
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).");
134 /* reset the HD-audio controller in power save mode.
135 * this may give more power-saving, but will take longer time to
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 */
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.");
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
154 #define hda_snoop true
155 #define azx_snoop(chip) true
159 MODULE_LICENSE("GPL");
160 MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
192 MODULE_DESCRIPTION("Intel HDA driver");
194 #ifdef CONFIG_SND_VERBOSE_PRINTK
195 #define SFX /* nop */
197 #define SFX "hda-intel "
200 #if defined(CONFIG_PM) && defined(CONFIG_VGA_SWITCHEROO)
201 #ifdef CONFIG_SND_HDA_CODEC_HDMI
202 #define SUPPORT_VGA_SWITCHEROO
210 #define ICH6_REG_GCAP 0x00
211 #define ICH6_GCAP_64OK (1 << 0) /* 64bit address support */
212 #define ICH6_GCAP_NSDO (3 << 1) /* # of serial data out signals */
213 #define ICH6_GCAP_BSS (31 << 3) /* # of bidirectional streams */
214 #define ICH6_GCAP_ISS (15 << 8) /* # of input streams */
215 #define ICH6_GCAP_OSS (15 << 12) /* # of output streams */
216 #define ICH6_REG_VMIN 0x02
217 #define ICH6_REG_VMAJ 0x03
218 #define ICH6_REG_OUTPAY 0x04
219 #define ICH6_REG_INPAY 0x06
220 #define ICH6_REG_GCTL 0x08
221 #define ICH6_GCTL_RESET (1 << 0) /* controller reset */
222 #define ICH6_GCTL_FCNTRL (1 << 1) /* flush control */
223 #define ICH6_GCTL_UNSOL (1 << 8) /* accept unsol. response enable */
224 #define ICH6_REG_WAKEEN 0x0c
225 #define ICH6_REG_STATESTS 0x0e
226 #define ICH6_REG_GSTS 0x10
227 #define ICH6_GSTS_FSTS (1 << 1) /* flush status */
228 #define ICH6_REG_INTCTL 0x20
229 #define ICH6_REG_INTSTS 0x24
230 #define ICH6_REG_WALLCLK 0x30 /* 24Mhz source */
231 #define ICH6_REG_OLD_SSYNC 0x34 /* SSYNC for old ICH */
232 #define ICH6_REG_SSYNC 0x38
233 #define ICH6_REG_CORBLBASE 0x40
234 #define ICH6_REG_CORBUBASE 0x44
235 #define ICH6_REG_CORBWP 0x48
236 #define ICH6_REG_CORBRP 0x4a
237 #define ICH6_CORBRP_RST (1 << 15) /* read pointer reset */
238 #define ICH6_REG_CORBCTL 0x4c
239 #define ICH6_CORBCTL_RUN (1 << 1) /* enable DMA */
240 #define ICH6_CORBCTL_CMEIE (1 << 0) /* enable memory error irq */
241 #define ICH6_REG_CORBSTS 0x4d
242 #define ICH6_CORBSTS_CMEI (1 << 0) /* memory error indication */
243 #define ICH6_REG_CORBSIZE 0x4e
245 #define ICH6_REG_RIRBLBASE 0x50
246 #define ICH6_REG_RIRBUBASE 0x54
247 #define ICH6_REG_RIRBWP 0x58
248 #define ICH6_RIRBWP_RST (1 << 15) /* write pointer reset */
249 #define ICH6_REG_RINTCNT 0x5a
250 #define ICH6_REG_RIRBCTL 0x5c
251 #define ICH6_RBCTL_IRQ_EN (1 << 0) /* enable IRQ */
252 #define ICH6_RBCTL_DMA_EN (1 << 1) /* enable DMA */
253 #define ICH6_RBCTL_OVERRUN_EN (1 << 2) /* enable overrun irq */
254 #define ICH6_REG_RIRBSTS 0x5d
255 #define ICH6_RBSTS_IRQ (1 << 0) /* response irq */
256 #define ICH6_RBSTS_OVERRUN (1 << 2) /* overrun irq */
257 #define ICH6_REG_RIRBSIZE 0x5e
259 #define ICH6_REG_IC 0x60
260 #define ICH6_REG_IR 0x64
261 #define ICH6_REG_IRS 0x68
262 #define ICH6_IRS_VALID (1<<1)
263 #define ICH6_IRS_BUSY (1<<0)
265 #define ICH6_REG_DPLBASE 0x70
266 #define ICH6_REG_DPUBASE 0x74
267 #define ICH6_DPLBASE_ENABLE 0x1 /* Enable position buffer */
269 /* SD offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
270 enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
272 /* stream register offsets from stream base */
273 #define ICH6_REG_SD_CTL 0x00
274 #define ICH6_REG_SD_STS 0x03
275 #define ICH6_REG_SD_LPIB 0x04
276 #define ICH6_REG_SD_CBL 0x08
277 #define ICH6_REG_SD_LVI 0x0c
278 #define ICH6_REG_SD_FIFOW 0x0e
279 #define ICH6_REG_SD_FIFOSIZE 0x10
280 #define ICH6_REG_SD_FORMAT 0x12
281 #define ICH6_REG_SD_BDLPL 0x18
282 #define ICH6_REG_SD_BDLPU 0x1c
285 #define ICH6_PCIREG_TCSEL 0x44
291 /* max number of SDs */
292 /* ICH, ATI and VIA have 4 playback and 4 capture */
293 #define ICH6_NUM_CAPTURE 4
294 #define ICH6_NUM_PLAYBACK 4
296 /* ULI has 6 playback and 5 capture */
297 #define ULI_NUM_CAPTURE 5
298 #define ULI_NUM_PLAYBACK 6
300 /* ATI HDMI may have up to 8 playbacks and 0 capture */
301 #define ATIHDMI_NUM_CAPTURE 0
302 #define ATIHDMI_NUM_PLAYBACK 8
304 /* TERA has 4 playback and 3 capture */
305 #define TERA_NUM_CAPTURE 3
306 #define TERA_NUM_PLAYBACK 4
308 /* this number is statically defined for simplicity */
309 #define MAX_AZX_DEV 16
311 /* max number of fragments - we may use more if allocating more pages for BDL */
312 #define BDL_SIZE 4096
313 #define AZX_MAX_BDL_ENTRIES (BDL_SIZE / 16)
314 #define AZX_MAX_FRAG 32
315 /* max buffer size - no h/w limit, you can increase as you like */
316 #define AZX_MAX_BUF_SIZE (1024*1024*1024)
318 /* RIRB int mask: overrun[2], response[0] */
319 #define RIRB_INT_RESPONSE 0x01
320 #define RIRB_INT_OVERRUN 0x04
321 #define RIRB_INT_MASK 0x05
323 /* STATESTS int mask: S3,SD2,SD1,SD0 */
324 #define AZX_MAX_CODECS 8
325 #define AZX_DEFAULT_CODECS 4
326 #define STATESTS_INT_MASK ((1 << AZX_MAX_CODECS) - 1)
329 #define SD_CTL_STREAM_RESET 0x01 /* stream reset bit */
330 #define SD_CTL_DMA_START 0x02 /* stream DMA start bit */
331 #define SD_CTL_STRIPE (3 << 16) /* stripe control */
332 #define SD_CTL_TRAFFIC_PRIO (1 << 18) /* traffic priority */
333 #define SD_CTL_DIR (1 << 19) /* bi-directional stream */
334 #define SD_CTL_STREAM_TAG_MASK (0xf << 20)
335 #define SD_CTL_STREAM_TAG_SHIFT 20
337 /* SD_CTL and SD_STS */
338 #define SD_INT_DESC_ERR 0x10 /* descriptor error interrupt */
339 #define SD_INT_FIFO_ERR 0x08 /* FIFO error interrupt */
340 #define SD_INT_COMPLETE 0x04 /* completion interrupt */
341 #define SD_INT_MASK (SD_INT_DESC_ERR|SD_INT_FIFO_ERR|\
345 #define SD_STS_FIFO_READY 0x20 /* FIFO ready */
347 /* INTCTL and INTSTS */
348 #define ICH6_INT_ALL_STREAM 0xff /* all stream interrupts */
349 #define ICH6_INT_CTRL_EN 0x40000000 /* controller interrupt enable bit */
350 #define ICH6_INT_GLOBAL_EN 0x80000000 /* global interrupt enable bit */
352 /* below are so far hardcoded - should read registers in future */
353 #define ICH6_MAX_CORB_ENTRIES 256
354 #define ICH6_MAX_RIRB_ENTRIES 256
356 /* position fix mode */
365 /* Defines for ATI HD Audio support in SB450 south bridge */
366 #define ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR 0x42
367 #define ATI_SB450_HDAUDIO_ENABLE_SNOOP 0x02
369 /* Defines for Nvidia HDA support */
370 #define NVIDIA_HDA_TRANSREG_ADDR 0x4e
371 #define NVIDIA_HDA_ENABLE_COHBITS 0x0f
372 #define NVIDIA_HDA_ISTRM_COH 0x4d
373 #define NVIDIA_HDA_OSTRM_COH 0x4c
374 #define NVIDIA_HDA_ENABLE_COHBIT 0x01
376 /* Defines for Intel SCH HDA snoop control */
377 #define INTEL_SCH_HDA_DEVC 0x78
378 #define INTEL_SCH_HDA_DEVC_NOSNOOP (0x1<<11)
380 /* Define IN stream 0 FIFO size offset in VIA controller */
381 #define VIA_IN_STREAM0_FIFO_SIZE_OFFSET 0x90
382 /* Define VIA HD Audio Device ID*/
383 #define VIA_HDAC_DEVICE_ID 0x3288
385 /* HD Audio class code */
386 #define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
392 struct snd_dma_buffer bdl; /* BDL buffer */
393 u32 *posbuf; /* position buffer pointer */
395 unsigned int bufsize; /* size of the play buffer in bytes */
396 unsigned int period_bytes; /* size of the period in bytes */
397 unsigned int frags; /* number for period in the play buffer */
398 unsigned int fifo_size; /* FIFO size */
399 unsigned long start_wallclk; /* start + minimum wallclk */
400 unsigned long period_wallclk; /* wallclk for period */
402 void __iomem *sd_addr; /* stream descriptor pointer */
404 u32 sd_int_sta_mask; /* stream int status mask */
407 struct snd_pcm_substream *substream; /* assigned substream,
410 unsigned int format_val; /* format value to be set in the
411 * controller and the codec
413 unsigned char stream_tag; /* assigned stream */
414 unsigned char index; /* stream index */
415 int assigned_key; /* last device# key assigned to */
417 unsigned int opened :1;
418 unsigned int running :1;
419 unsigned int irq_pending :1;
420 unsigned int prepared:1;
421 unsigned int locked:1;
424 * A flag to ensure DMA position is 0
425 * when link position is not greater than FIFO size
427 unsigned int insufficient :1;
428 unsigned int wc_marked:1;
429 unsigned int no_period_wakeup:1;
431 struct timecounter azx_tc;
432 struct cyclecounter azx_cc;
434 int delay_negative_threshold;
436 #ifdef CONFIG_SND_HDA_DSP_LOADER
437 struct mutex dsp_mutex;
441 /* DSP lock helpers */
442 #ifdef CONFIG_SND_HDA_DSP_LOADER
443 #define dsp_lock_init(dev) mutex_init(&(dev)->dsp_mutex)
444 #define dsp_lock(dev) mutex_lock(&(dev)->dsp_mutex)
445 #define dsp_unlock(dev) mutex_unlock(&(dev)->dsp_mutex)
446 #define dsp_is_locked(dev) ((dev)->locked)
448 #define dsp_lock_init(dev) do {} while (0)
449 #define dsp_lock(dev) do {} while (0)
450 #define dsp_unlock(dev) do {} while (0)
451 #define dsp_is_locked(dev) 0
456 u32 *buf; /* CORB/RIRB buffer
457 * Each CORB entry is 4byte, RIRB is 8byte
459 dma_addr_t addr; /* physical address of CORB/RIRB buffer */
461 unsigned short rp, wp; /* read/write pointers */
462 int cmds[AZX_MAX_CODECS]; /* number of pending requests */
463 u32 res[AZX_MAX_CODECS]; /* last read value */
469 struct hda_codec *codec;
470 struct hda_pcm_stream *hinfo[2];
471 struct list_head list;
475 struct snd_card *card;
479 /* chip type specific */
481 unsigned int driver_caps;
482 int playback_streams;
483 int playback_index_offset;
485 int capture_index_offset;
490 void __iomem *remap_addr;
495 struct mutex open_mutex;
496 struct completion probe_wait;
498 /* streams (x num_streams) */
499 struct azx_dev *azx_dev;
502 struct list_head pcm_list; /* azx_pcm list */
505 unsigned short codec_mask;
506 int codec_probe_mask; /* copied from probe_mask option */
508 unsigned int beep_mode;
514 /* CORB/RIRB and position buffers */
515 struct snd_dma_buffer rb;
516 struct snd_dma_buffer posbuf;
518 #ifdef CONFIG_SND_HDA_PATCH_LOADER
519 const struct firmware *fw;
523 int position_fix[2]; /* for both playback/capture streams */
525 unsigned int running :1;
526 unsigned int initialized :1;
527 unsigned int single_cmd :1;
528 unsigned int polling_mode :1;
530 unsigned int irq_pending_warned :1;
531 unsigned int probing :1; /* codec probing phase */
532 unsigned int snoop:1;
533 unsigned int align_buffer_size:1;
534 unsigned int region_requested:1;
536 /* VGA-switcheroo setup */
537 unsigned int use_vga_switcheroo:1;
538 unsigned int vga_switcheroo_registered:1;
539 unsigned int init_failed:1; /* delayed init failed */
540 unsigned int disabled:1; /* disabled by VGA-switcher */
543 unsigned int last_cmd[AZX_MAX_CODECS];
545 /* for pending irqs */
546 struct work_struct irq_pending_work;
548 struct work_struct probe_work;
550 /* reboot notifier (for mysterious hangup problem at power-down) */
551 struct notifier_block reboot_notifier;
553 /* card list (for power_save trigger) */
554 struct list_head list;
556 #ifdef CONFIG_SND_HDA_DSP_LOADER
557 struct azx_dev saved_azx_dev;
560 /* secondary power domain for hdmi audio under vga device */
561 struct dev_pm_domain hdmi_pm_domain;
564 #define CREATE_TRACE_POINTS
565 #include "hda_intel_trace.h"
575 AZX_DRIVER_ATIHDMI_NS,
584 AZX_NUM_DRIVERS, /* keep this as last entry */
587 /* driver quirks (capabilities) */
588 /* bits 0-7 are used for indicating driver type */
589 #define AZX_DCAPS_NO_TCSEL (1 << 8) /* No Intel TCSEL bit */
590 #define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
591 #define AZX_DCAPS_ATI_SNOOP (1 << 10) /* ATI snoop enable */
592 #define AZX_DCAPS_NVIDIA_SNOOP (1 << 11) /* Nvidia snoop enable */
593 #define AZX_DCAPS_SCH_SNOOP (1 << 12) /* SCH/PCH snoop enable */
594 #define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */
595 #define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */
596 #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
597 #define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */
598 #define AZX_DCAPS_POSFIX_VIA (1 << 17) /* Use VIACOMBO as default */
599 #define AZX_DCAPS_NO_64BIT (1 << 18) /* No 64bit address */
600 #define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */
601 #define AZX_DCAPS_OLD_SSYNC (1 << 20) /* Old SSYNC reg for ICH */
602 #define AZX_DCAPS_BUFSIZE (1 << 21) /* no buffer size alignment */
603 #define AZX_DCAPS_ALIGN_BUFSIZE (1 << 22) /* buffer size alignment */
604 #define AZX_DCAPS_4K_BDLE_BOUNDARY (1 << 23) /* BDLE in 4k boundary */
605 #define AZX_DCAPS_COUNT_LPIB_DELAY (1 << 25) /* Take LPIB as delay */
606 #define AZX_DCAPS_PM_RUNTIME (1 << 26) /* runtime PM support */
607 #define AZX_DCAPS_I915_POWERWELL (1 << 27) /* HSW i915 power well support */
609 /* quirks for Intel PCH */
610 #define AZX_DCAPS_INTEL_PCH_NOPM \
611 (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_BUFSIZE | \
612 AZX_DCAPS_COUNT_LPIB_DELAY)
614 #define AZX_DCAPS_INTEL_PCH \
615 (AZX_DCAPS_INTEL_PCH_NOPM | AZX_DCAPS_PM_RUNTIME)
617 #define AZX_DCAPS_INTEL_HASWELL \
618 (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_ALIGN_BUFSIZE | \
619 AZX_DCAPS_COUNT_LPIB_DELAY | AZX_DCAPS_PM_RUNTIME | \
620 AZX_DCAPS_I915_POWERWELL)
622 /* quirks for ATI SB / AMD Hudson */
623 #define AZX_DCAPS_PRESET_ATI_SB \
624 (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
625 AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
627 /* quirks for ATI/AMD HDMI */
628 #define AZX_DCAPS_PRESET_ATI_HDMI \
629 (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
631 /* quirks for Nvidia */
632 #define AZX_DCAPS_PRESET_NVIDIA \
633 (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
634 AZX_DCAPS_ALIGN_BUFSIZE | AZX_DCAPS_NO_64BIT)
636 #define AZX_DCAPS_PRESET_CTHDA \
637 (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_4K_BDLE_BOUNDARY)
640 * VGA-switcher support
642 #ifdef SUPPORT_VGA_SWITCHEROO
643 #define use_vga_switcheroo(chip) ((chip)->use_vga_switcheroo)
645 #define use_vga_switcheroo(chip) 0
648 static char *driver_short_names[] = {
649 [AZX_DRIVER_ICH] = "HDA Intel",
650 [AZX_DRIVER_PCH] = "HDA Intel PCH",
651 [AZX_DRIVER_SCH] = "HDA Intel MID",
652 [AZX_DRIVER_HDMI] = "HDA Intel HDMI",
653 [AZX_DRIVER_ATI] = "HDA ATI SB",
654 [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI",
655 [AZX_DRIVER_ATIHDMI_NS] = "HDA ATI HDMI",
656 [AZX_DRIVER_VIA] = "HDA VIA VT82xx",
657 [AZX_DRIVER_SIS] = "HDA SIS966",
658 [AZX_DRIVER_ULI] = "HDA ULI M5461",
659 [AZX_DRIVER_NVIDIA] = "HDA NVidia",
660 [AZX_DRIVER_TERA] = "HDA Teradici",
661 [AZX_DRIVER_CTX] = "HDA Creative",
662 [AZX_DRIVER_CTHDA] = "HDA Creative",
663 [AZX_DRIVER_GENERIC] = "HD-Audio Generic",
667 * macros for easy use
669 #define azx_writel(chip,reg,value) \
670 writel(value, (chip)->remap_addr + ICH6_REG_##reg)
671 #define azx_readl(chip,reg) \
672 readl((chip)->remap_addr + ICH6_REG_##reg)
673 #define azx_writew(chip,reg,value) \
674 writew(value, (chip)->remap_addr + ICH6_REG_##reg)
675 #define azx_readw(chip,reg) \
676 readw((chip)->remap_addr + ICH6_REG_##reg)
677 #define azx_writeb(chip,reg,value) \
678 writeb(value, (chip)->remap_addr + ICH6_REG_##reg)
679 #define azx_readb(chip,reg) \
680 readb((chip)->remap_addr + ICH6_REG_##reg)
682 #define azx_sd_writel(dev,reg,value) \
683 writel(value, (dev)->sd_addr + ICH6_REG_##reg)
684 #define azx_sd_readl(dev,reg) \
685 readl((dev)->sd_addr + ICH6_REG_##reg)
686 #define azx_sd_writew(dev,reg,value) \
687 writew(value, (dev)->sd_addr + ICH6_REG_##reg)
688 #define azx_sd_readw(dev,reg) \
689 readw((dev)->sd_addr + ICH6_REG_##reg)
690 #define azx_sd_writeb(dev,reg,value) \
691 writeb(value, (dev)->sd_addr + ICH6_REG_##reg)
692 #define azx_sd_readb(dev,reg) \
693 readb((dev)->sd_addr + ICH6_REG_##reg)
695 /* for pcm support */
696 #define get_azx_dev(substream) (substream->runtime->private_data)
699 static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool on)
705 if (!dmab || !dmab->area || !dmab->bytes)
708 #ifdef CONFIG_SND_DMA_SGBUF
709 if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_SG) {
710 struct snd_sg_buf *sgbuf = dmab->private_data;
712 set_pages_array_wc(sgbuf->page_table, sgbuf->pages);
714 set_pages_array_wb(sgbuf->page_table, sgbuf->pages);
719 pages = (dmab->bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;
721 set_memory_wc((unsigned long)dmab->area, pages);
723 set_memory_wb((unsigned long)dmab->area, pages);
726 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
729 __mark_pages_wc(chip, buf, on);
731 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
732 struct snd_pcm_substream *substream, bool on)
734 if (azx_dev->wc_marked != on) {
735 __mark_pages_wc(chip, snd_pcm_get_dma_buf(substream), on);
736 azx_dev->wc_marked = on;
740 /* NOP for other archs */
741 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
745 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
746 struct snd_pcm_substream *substream, bool on)
751 static int azx_acquire_irq(struct azx *chip, int do_disconnect);
752 static int azx_send_cmd(struct hda_bus *bus, unsigned int val);
754 * Interface for HD codec
758 * CORB / RIRB interface
760 static int azx_alloc_cmd_io(struct azx *chip)
764 /* single page (at least 4096 bytes) must suffice for both ringbuffes */
765 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
766 snd_dma_pci_data(chip->pci),
767 PAGE_SIZE, &chip->rb);
769 snd_printk(KERN_ERR SFX "%s: cannot allocate CORB/RIRB\n", pci_name(chip->pci));
772 mark_pages_wc(chip, &chip->rb, true);
776 static void azx_init_cmd_io(struct azx *chip)
778 spin_lock_irq(&chip->reg_lock);
780 chip->corb.addr = chip->rb.addr;
781 chip->corb.buf = (u32 *)chip->rb.area;
782 azx_writel(chip, CORBLBASE, (u32)chip->corb.addr);
783 azx_writel(chip, CORBUBASE, upper_32_bits(chip->corb.addr));
785 /* set the corb size to 256 entries (ULI requires explicitly) */
786 azx_writeb(chip, CORBSIZE, 0x02);
787 /* set the corb write pointer to 0 */
788 azx_writew(chip, CORBWP, 0);
789 /* reset the corb hw read pointer */
790 azx_writew(chip, CORBRP, ICH6_CORBRP_RST);
791 /* enable corb dma */
792 azx_writeb(chip, CORBCTL, ICH6_CORBCTL_RUN);
795 chip->rirb.addr = chip->rb.addr + 2048;
796 chip->rirb.buf = (u32 *)(chip->rb.area + 2048);
797 chip->rirb.wp = chip->rirb.rp = 0;
798 memset(chip->rirb.cmds, 0, sizeof(chip->rirb.cmds));
799 azx_writel(chip, RIRBLBASE, (u32)chip->rirb.addr);
800 azx_writel(chip, RIRBUBASE, upper_32_bits(chip->rirb.addr));
802 /* set the rirb size to 256 entries (ULI requires explicitly) */
803 azx_writeb(chip, RIRBSIZE, 0x02);
804 /* reset the rirb hw write pointer */
805 azx_writew(chip, RIRBWP, ICH6_RIRBWP_RST);
806 /* set N=1, get RIRB response interrupt for new entry */
807 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
808 azx_writew(chip, RINTCNT, 0xc0);
810 azx_writew(chip, RINTCNT, 1);
811 /* enable rirb dma and response irq */
812 azx_writeb(chip, RIRBCTL, ICH6_RBCTL_DMA_EN | ICH6_RBCTL_IRQ_EN);
813 spin_unlock_irq(&chip->reg_lock);
816 static void azx_free_cmd_io(struct azx *chip)
818 spin_lock_irq(&chip->reg_lock);
819 /* disable ringbuffer DMAs */
820 azx_writeb(chip, RIRBCTL, 0);
821 azx_writeb(chip, CORBCTL, 0);
822 spin_unlock_irq(&chip->reg_lock);
825 static unsigned int azx_command_addr(u32 cmd)
827 unsigned int addr = cmd >> 28;
829 if (addr >= AZX_MAX_CODECS) {
838 static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
840 struct azx *chip = bus->private_data;
841 unsigned int addr = azx_command_addr(val);
844 spin_lock_irq(&chip->reg_lock);
846 /* add command to corb */
847 wp = azx_readw(chip, CORBWP);
849 /* something wrong, controller likely turned to D3 */
850 spin_unlock_irq(&chip->reg_lock);
854 wp %= ICH6_MAX_CORB_ENTRIES;
856 rp = azx_readw(chip, CORBRP);
858 /* oops, it's full */
859 spin_unlock_irq(&chip->reg_lock);
863 chip->rirb.cmds[addr]++;
864 chip->corb.buf[wp] = cpu_to_le32(val);
865 azx_writel(chip, CORBWP, wp);
867 spin_unlock_irq(&chip->reg_lock);
872 #define ICH6_RIRB_EX_UNSOL_EV (1<<4)
874 /* retrieve RIRB entry - called from interrupt handler */
875 static void azx_update_rirb(struct azx *chip)
881 wp = azx_readw(chip, RIRBWP);
883 /* something wrong, controller likely turned to D3 */
887 if (wp == chip->rirb.wp)
891 while (chip->rirb.rp != wp) {
893 chip->rirb.rp %= ICH6_MAX_RIRB_ENTRIES;
895 rp = chip->rirb.rp << 1; /* an RIRB entry is 8-bytes */
896 res_ex = le32_to_cpu(chip->rirb.buf[rp + 1]);
897 res = le32_to_cpu(chip->rirb.buf[rp]);
899 if ((addr >= AZX_MAX_CODECS) || !(chip->codec_mask & (1 << addr))) {
900 snd_printk(KERN_ERR SFX "%s: spurious response %#x:%#x, rp = %d, wp = %d",
906 else if (res_ex & ICH6_RIRB_EX_UNSOL_EV)
907 snd_hda_queue_unsol_event(chip->bus, res, res_ex);
908 else if (chip->rirb.cmds[addr]) {
909 chip->rirb.res[addr] = res;
911 chip->rirb.cmds[addr]--;
912 } else if (printk_ratelimit()) {
913 snd_printk(KERN_ERR SFX "%s: spurious response %#x:%#x, last cmd=%#08x\n",
916 chip->last_cmd[addr]);
921 /* receive a response */
922 static unsigned int azx_rirb_get_response(struct hda_bus *bus,
925 struct azx *chip = bus->private_data;
926 unsigned long timeout;
927 unsigned long loopcounter;
931 timeout = jiffies + msecs_to_jiffies(1000);
933 for (loopcounter = 0;; loopcounter++) {
934 if (chip->polling_mode || do_poll) {
935 spin_lock_irq(&chip->reg_lock);
936 azx_update_rirb(chip);
937 spin_unlock_irq(&chip->reg_lock);
939 if (!chip->rirb.cmds[addr]) {
944 chip->poll_count = 0;
945 return chip->rirb.res[addr]; /* the last value */
947 if (time_after(jiffies, timeout))
949 if (bus->needs_damn_long_delay || loopcounter > 3000)
950 msleep(2); /* temporary workaround */
957 if (!bus->no_response_fallback)
960 if (!chip->polling_mode && chip->poll_count < 2) {
961 snd_printdd(SFX "%s: azx_get_response timeout, "
962 "polling the codec once: last cmd=0x%08x\n",
963 pci_name(chip->pci), chip->last_cmd[addr]);
970 if (!chip->polling_mode) {
971 snd_printk(KERN_WARNING SFX "%s: azx_get_response timeout, "
972 "switching to polling mode: last cmd=0x%08x\n",
973 pci_name(chip->pci), chip->last_cmd[addr]);
974 chip->polling_mode = 1;
979 snd_printk(KERN_WARNING SFX "%s: No response from codec, "
980 "disabling MSI: last cmd=0x%08x\n",
981 pci_name(chip->pci), chip->last_cmd[addr]);
982 free_irq(chip->irq, chip);
984 pci_disable_msi(chip->pci);
986 if (azx_acquire_irq(chip, 1) < 0) {
994 /* If this critical timeout happens during the codec probing
995 * phase, this is likely an access to a non-existing codec
996 * slot. Better to return an error and reset the system.
1001 /* a fatal communication error; need either to reset or to fallback
1002 * to the single_cmd mode
1004 bus->rirb_error = 1;
1005 if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) {
1006 bus->response_reset = 1;
1007 return -1; /* give a chance to retry */
1010 snd_printk(KERN_ERR "hda_intel: azx_get_response timeout, "
1011 "switching to single_cmd mode: last cmd=0x%08x\n",
1012 chip->last_cmd[addr]);
1013 chip->single_cmd = 1;
1014 bus->response_reset = 0;
1015 /* release CORB/RIRB */
1016 azx_free_cmd_io(chip);
1017 /* disable unsolicited responses */
1018 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL);
1023 * Use the single immediate command instead of CORB/RIRB for simplicity
1025 * Note: according to Intel, this is not preferred use. The command was
1026 * intended for the BIOS only, and may get confused with unsolicited
1027 * responses. So, we shouldn't use it for normal operation from the
1029 * I left the codes, however, for debugging/testing purposes.
1032 /* receive a response */
1033 static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
1038 /* check IRV busy bit */
1039 if (azx_readw(chip, IRS) & ICH6_IRS_VALID) {
1040 /* reuse rirb.res as the response return value */
1041 chip->rirb.res[addr] = azx_readl(chip, IR);
1046 if (printk_ratelimit())
1047 snd_printd(SFX "%s: get_response timeout: IRS=0x%x\n",
1048 pci_name(chip->pci), azx_readw(chip, IRS));
1049 chip->rirb.res[addr] = -1;
1053 /* send a command */
1054 static int azx_single_send_cmd(struct hda_bus *bus, u32 val)
1056 struct azx *chip = bus->private_data;
1057 unsigned int addr = azx_command_addr(val);
1060 bus->rirb_error = 0;
1062 /* check ICB busy bit */
1063 if (!((azx_readw(chip, IRS) & ICH6_IRS_BUSY))) {
1064 /* Clear IRV valid bit */
1065 azx_writew(chip, IRS, azx_readw(chip, IRS) |
1067 azx_writel(chip, IC, val);
1068 azx_writew(chip, IRS, azx_readw(chip, IRS) |
1070 return azx_single_wait_for_response(chip, addr);
1074 if (printk_ratelimit())
1075 snd_printd(SFX "%s: send_cmd timeout: IRS=0x%x, val=0x%x\n",
1076 pci_name(chip->pci), azx_readw(chip, IRS), val);
1080 /* receive a response */
1081 static unsigned int azx_single_get_response(struct hda_bus *bus,
1084 struct azx *chip = bus->private_data;
1085 return chip->rirb.res[addr];
1089 * The below are the main callbacks from hda_codec.
1091 * They are just the skeleton to call sub-callbacks according to the
1092 * current setting of chip->single_cmd.
1095 /* send a command */
1096 static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
1098 struct azx *chip = bus->private_data;
1102 chip->last_cmd[azx_command_addr(val)] = val;
1103 if (chip->single_cmd)
1104 return azx_single_send_cmd(bus, val);
1106 return azx_corb_send_cmd(bus, val);
1109 /* get a response */
1110 static unsigned int azx_get_response(struct hda_bus *bus,
1113 struct azx *chip = bus->private_data;
1116 if (chip->single_cmd)
1117 return azx_single_get_response(bus, addr);
1119 return azx_rirb_get_response(bus, addr);
1123 static void azx_power_notify(struct hda_bus *bus, bool power_up);
1126 #ifdef CONFIG_SND_HDA_DSP_LOADER
1127 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format,
1128 unsigned int byte_size,
1129 struct snd_dma_buffer *bufp);
1130 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start);
1131 static void azx_load_dsp_cleanup(struct hda_bus *bus,
1132 struct snd_dma_buffer *dmab);
1135 /* enter link reset */
1136 static void azx_enter_link_reset(struct azx *chip)
1138 unsigned long timeout;
1140 /* reset controller */
1141 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_RESET);
1143 timeout = jiffies + msecs_to_jiffies(100);
1144 while ((azx_readb(chip, GCTL) & ICH6_GCTL_RESET) &&
1145 time_before(jiffies, timeout))
1146 usleep_range(500, 1000);
1149 /* exit link reset */
1150 static void azx_exit_link_reset(struct azx *chip)
1152 unsigned long timeout;
1154 azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | ICH6_GCTL_RESET);
1156 timeout = jiffies + msecs_to_jiffies(100);
1157 while (!azx_readb(chip, GCTL) &&
1158 time_before(jiffies, timeout))
1159 usleep_range(500, 1000);
1162 /* reset codec link */
1163 static int azx_reset(struct azx *chip, int full_reset)
1168 /* clear STATESTS */
1169 azx_writew(chip, STATESTS, STATESTS_INT_MASK);
1171 /* reset controller */
1172 azx_enter_link_reset(chip);
1174 /* delay for >= 100us for codec PLL to settle per spec
1175 * Rev 0.9 section 5.5.1
1177 usleep_range(500, 1000);
1179 /* Bring controller out of reset */
1180 azx_exit_link_reset(chip);
1182 /* Brent Chartrand said to wait >= 540us for codecs to initialize */
1183 usleep_range(1000, 1200);
1186 /* check to see if controller is ready */
1187 if (!azx_readb(chip, GCTL)) {
1188 snd_printd(SFX "%s: azx_reset: controller not ready!\n", pci_name(chip->pci));
1192 /* Accept unsolicited responses */
1193 if (!chip->single_cmd)
1194 azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
1198 if (!chip->codec_mask) {
1199 chip->codec_mask = azx_readw(chip, STATESTS);
1200 snd_printdd(SFX "%s: codec_mask = 0x%x\n", pci_name(chip->pci), chip->codec_mask);
1208 * Lowlevel interface
1211 /* enable interrupts */
1212 static void azx_int_enable(struct azx *chip)
1214 /* enable controller CIE and GIE */
1215 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) |
1216 ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN);
1219 /* disable interrupts */
1220 static void azx_int_disable(struct azx *chip)
1224 /* disable interrupts in stream descriptor */
1225 for (i = 0; i < chip->num_streams; i++) {
1226 struct azx_dev *azx_dev = &chip->azx_dev[i];
1227 azx_sd_writeb(azx_dev, SD_CTL,
1228 azx_sd_readb(azx_dev, SD_CTL) & ~SD_INT_MASK);
1231 /* disable SIE for all streams */
1232 azx_writeb(chip, INTCTL, 0);
1234 /* disable controller CIE and GIE */
1235 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) &
1236 ~(ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN));
1239 /* clear interrupts */
1240 static void azx_int_clear(struct azx *chip)
1244 /* clear stream status */
1245 for (i = 0; i < chip->num_streams; i++) {
1246 struct azx_dev *azx_dev = &chip->azx_dev[i];
1247 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1250 /* clear STATESTS */
1251 azx_writew(chip, STATESTS, STATESTS_INT_MASK);
1253 /* clear rirb status */
1254 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1256 /* clear int status */
1257 azx_writel(chip, INTSTS, ICH6_INT_CTRL_EN | ICH6_INT_ALL_STREAM);
1260 /* start a stream */
1261 static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev)
1264 * Before stream start, initialize parameter
1266 azx_dev->insufficient = 1;
1269 azx_writel(chip, INTCTL,
1270 azx_readl(chip, INTCTL) | (1 << azx_dev->index));
1271 /* set DMA start and interrupt mask */
1272 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1273 SD_CTL_DMA_START | SD_INT_MASK);
1277 static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev)
1279 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) &
1280 ~(SD_CTL_DMA_START | SD_INT_MASK));
1281 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); /* to be sure */
1285 static void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev)
1287 azx_stream_clear(chip, azx_dev);
1289 azx_writel(chip, INTCTL,
1290 azx_readl(chip, INTCTL) & ~(1 << azx_dev->index));
1295 * reset and start the controller registers
1297 static void azx_init_chip(struct azx *chip, int full_reset)
1299 if (chip->initialized)
1302 /* reset controller */
1303 azx_reset(chip, full_reset);
1305 /* initialize interrupts */
1306 azx_int_clear(chip);
1307 azx_int_enable(chip);
1309 /* initialize the codec command I/O */
1310 if (!chip->single_cmd)
1311 azx_init_cmd_io(chip);
1313 /* program the position buffer */
1314 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
1315 azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr));
1317 chip->initialized = 1;
1321 * initialize the PCI registers
1323 /* update bits in a PCI register byte */
1324 static void update_pci_byte(struct pci_dev *pci, unsigned int reg,
1325 unsigned char mask, unsigned char val)
1329 pci_read_config_byte(pci, reg, &data);
1331 data |= (val & mask);
1332 pci_write_config_byte(pci, reg, data);
1335 static void azx_init_pci(struct azx *chip)
1337 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
1338 * TCSEL == Traffic Class Select Register, which sets PCI express QOS
1339 * Ensuring these bits are 0 clears playback static on some HD Audio
1341 * The PCI register TCSEL is defined in the Intel manuals.
1343 if (!(chip->driver_caps & AZX_DCAPS_NO_TCSEL)) {
1344 snd_printdd(SFX "%s: Clearing TCSEL\n", pci_name(chip->pci));
1345 update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0);
1348 /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
1349 * we need to enable snoop.
1351 if (chip->driver_caps & AZX_DCAPS_ATI_SNOOP) {
1352 snd_printdd(SFX "%s: Setting ATI snoop: %d\n", pci_name(chip->pci), azx_snoop(chip));
1353 update_pci_byte(chip->pci,
1354 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR, 0x07,
1355 azx_snoop(chip) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP : 0);
1358 /* For NVIDIA HDA, enable snoop */
1359 if (chip->driver_caps & AZX_DCAPS_NVIDIA_SNOOP) {
1360 snd_printdd(SFX "%s: Setting Nvidia snoop: %d\n", pci_name(chip->pci), azx_snoop(chip));
1361 update_pci_byte(chip->pci,
1362 NVIDIA_HDA_TRANSREG_ADDR,
1363 0x0f, NVIDIA_HDA_ENABLE_COHBITS);
1364 update_pci_byte(chip->pci,
1365 NVIDIA_HDA_ISTRM_COH,
1366 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1367 update_pci_byte(chip->pci,
1368 NVIDIA_HDA_OSTRM_COH,
1369 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1372 /* Enable SCH/PCH snoop if needed */
1373 if (chip->driver_caps & AZX_DCAPS_SCH_SNOOP) {
1374 unsigned short snoop;
1375 pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);
1376 if ((!azx_snoop(chip) && !(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)) ||
1377 (azx_snoop(chip) && (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP))) {
1378 snoop &= ~INTEL_SCH_HDA_DEVC_NOSNOOP;
1379 if (!azx_snoop(chip))
1380 snoop |= INTEL_SCH_HDA_DEVC_NOSNOOP;
1381 pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, snoop);
1382 pci_read_config_word(chip->pci,
1383 INTEL_SCH_HDA_DEVC, &snoop);
1385 snd_printdd(SFX "%s: SCH snoop: %s\n",
1386 pci_name(chip->pci), (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)
1387 ? "Disabled" : "Enabled");
1392 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev);
1397 static irqreturn_t azx_interrupt(int irq, void *dev_id)
1399 struct azx *chip = dev_id;
1400 struct azx_dev *azx_dev;
1405 #ifdef CONFIG_PM_RUNTIME
1406 if (chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
1407 if (chip->pci->dev.power.runtime_status != RPM_ACTIVE)
1411 spin_lock(&chip->reg_lock);
1413 if (chip->disabled) {
1414 spin_unlock(&chip->reg_lock);
1418 status = azx_readl(chip, INTSTS);
1419 if (status == 0 || status == 0xffffffff) {
1420 spin_unlock(&chip->reg_lock);
1424 for (i = 0; i < chip->num_streams; i++) {
1425 azx_dev = &chip->azx_dev[i];
1426 if (status & azx_dev->sd_int_sta_mask) {
1427 sd_status = azx_sd_readb(azx_dev, SD_STS);
1428 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1429 if (!azx_dev->substream || !azx_dev->running ||
1430 !(sd_status & SD_INT_COMPLETE))
1432 /* check whether this IRQ is really acceptable */
1433 ok = azx_position_ok(chip, azx_dev);
1435 azx_dev->irq_pending = 0;
1436 spin_unlock(&chip->reg_lock);
1437 snd_pcm_period_elapsed(azx_dev->substream);
1438 spin_lock(&chip->reg_lock);
1439 } else if (ok == 0 && chip->bus && chip->bus->workq) {
1440 /* bogus IRQ, process it later */
1441 azx_dev->irq_pending = 1;
1442 queue_work(chip->bus->workq,
1443 &chip->irq_pending_work);
1448 /* clear rirb int */
1449 status = azx_readb(chip, RIRBSTS);
1450 if (status & RIRB_INT_MASK) {
1451 if (status & RIRB_INT_RESPONSE) {
1452 if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY)
1454 azx_update_rirb(chip);
1456 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1460 /* clear state status int */
1461 if (azx_readw(chip, STATESTS) & 0x04)
1462 azx_writew(chip, STATESTS, 0x04);
1464 spin_unlock(&chip->reg_lock);
1471 * set up a BDL entry
1473 static int setup_bdle(struct azx *chip,
1474 struct snd_dma_buffer *dmab,
1475 struct azx_dev *azx_dev, u32 **bdlp,
1476 int ofs, int size, int with_ioc)
1484 if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES)
1487 addr = snd_sgbuf_get_addr(dmab, ofs);
1488 /* program the address field of the BDL entry */
1489 bdl[0] = cpu_to_le32((u32)addr);
1490 bdl[1] = cpu_to_le32(upper_32_bits(addr));
1491 /* program the size field of the BDL entry */
1492 chunk = snd_sgbuf_get_chunk_size(dmab, ofs, size);
1493 /* one BDLE cannot cross 4K boundary on CTHDA chips */
1494 if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) {
1495 u32 remain = 0x1000 - (ofs & 0xfff);
1499 bdl[2] = cpu_to_le32(chunk);
1500 /* program the IOC to enable interrupt
1501 * only when the whole fragment is processed
1504 bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01);
1514 * set up BDL entries
1516 static int azx_setup_periods(struct azx *chip,
1517 struct snd_pcm_substream *substream,
1518 struct azx_dev *azx_dev)
1521 int i, ofs, periods, period_bytes;
1524 /* reset BDL address */
1525 azx_sd_writel(azx_dev, SD_BDLPL, 0);
1526 azx_sd_writel(azx_dev, SD_BDLPU, 0);
1528 period_bytes = azx_dev->period_bytes;
1529 periods = azx_dev->bufsize / period_bytes;
1531 /* program the initial BDL entries */
1532 bdl = (u32 *)azx_dev->bdl.area;
1535 pos_adj = bdl_pos_adj[chip->dev_index];
1536 if (!azx_dev->no_period_wakeup && pos_adj > 0) {
1537 struct snd_pcm_runtime *runtime = substream->runtime;
1538 int pos_align = pos_adj;
1539 pos_adj = (pos_adj * runtime->rate + 47999) / 48000;
1541 pos_adj = pos_align;
1543 pos_adj = ((pos_adj + pos_align - 1) / pos_align) *
1545 pos_adj = frames_to_bytes(runtime, pos_adj);
1546 if (pos_adj >= period_bytes) {
1547 snd_printk(KERN_WARNING SFX "%s: Too big adjustment %d\n",
1548 pci_name(chip->pci), bdl_pos_adj[chip->dev_index]);
1551 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1553 &bdl, ofs, pos_adj, true);
1559 for (i = 0; i < periods; i++) {
1560 if (i == periods - 1 && pos_adj)
1561 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1563 period_bytes - pos_adj, 0);
1565 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1568 !azx_dev->no_period_wakeup);
1575 snd_printk(KERN_ERR SFX "%s: Too many BDL entries: buffer=%d, period=%d\n",
1576 pci_name(chip->pci), azx_dev->bufsize, period_bytes);
1581 static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev)
1586 azx_stream_clear(chip, azx_dev);
1588 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1589 SD_CTL_STREAM_RESET);
1592 while (!((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1595 val &= ~SD_CTL_STREAM_RESET;
1596 azx_sd_writeb(azx_dev, SD_CTL, val);
1600 /* waiting for hardware to report that the stream is out of reset */
1601 while (((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1605 /* reset first position - may not be synced with hw at this time */
1606 *azx_dev->posbuf = 0;
1610 * set up the SD for streaming
1612 static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev)
1615 /* make sure the run bit is zero for SD */
1616 azx_stream_clear(chip, azx_dev);
1617 /* program the stream_tag */
1618 val = azx_sd_readl(azx_dev, SD_CTL);
1619 val = (val & ~SD_CTL_STREAM_TAG_MASK) |
1620 (azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT);
1621 if (!azx_snoop(chip))
1622 val |= SD_CTL_TRAFFIC_PRIO;
1623 azx_sd_writel(azx_dev, SD_CTL, val);
1625 /* program the length of samples in cyclic buffer */
1626 azx_sd_writel(azx_dev, SD_CBL, azx_dev->bufsize);
1628 /* program the stream format */
1629 /* this value needs to be the same as the one programmed */
1630 azx_sd_writew(azx_dev, SD_FORMAT, azx_dev->format_val);
1632 /* program the stream LVI (last valid index) of the BDL */
1633 azx_sd_writew(azx_dev, SD_LVI, azx_dev->frags - 1);
1635 /* program the BDL address */
1636 /* lower BDL address */
1637 azx_sd_writel(azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr);
1638 /* upper BDL address */
1639 azx_sd_writel(azx_dev, SD_BDLPU, upper_32_bits(azx_dev->bdl.addr));
1641 /* enable the position buffer */
1642 if (chip->position_fix[0] != POS_FIX_LPIB ||
1643 chip->position_fix[1] != POS_FIX_LPIB) {
1644 if (!(azx_readl(chip, DPLBASE) & ICH6_DPLBASE_ENABLE))
1645 azx_writel(chip, DPLBASE,
1646 (u32)chip->posbuf.addr | ICH6_DPLBASE_ENABLE);
1649 /* set the interrupt enable bits in the descriptor control register */
1650 azx_sd_writel(azx_dev, SD_CTL,
1651 azx_sd_readl(azx_dev, SD_CTL) | SD_INT_MASK);
1657 * Probe the given codec address
1659 static int probe_codec(struct azx *chip, int addr)
1661 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1662 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1665 mutex_lock(&chip->bus->cmd_mutex);
1667 azx_send_cmd(chip->bus, cmd);
1668 res = azx_get_response(chip->bus, addr);
1670 mutex_unlock(&chip->bus->cmd_mutex);
1673 snd_printdd(SFX "%s: codec #%d probed OK\n", pci_name(chip->pci), addr);
1677 static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
1678 struct hda_pcm *cpcm);
1679 static void azx_stop_chip(struct azx *chip);
1681 static void azx_bus_reset(struct hda_bus *bus)
1683 struct azx *chip = bus->private_data;
1686 azx_stop_chip(chip);
1687 azx_init_chip(chip, 1);
1689 if (chip->initialized) {
1691 list_for_each_entry(p, &chip->pcm_list, list)
1692 snd_pcm_suspend_all(p->pcm);
1693 snd_hda_suspend(chip->bus);
1694 snd_hda_resume(chip->bus);
1700 static int get_jackpoll_interval(struct azx *chip)
1702 int i = jackpoll_ms[chip->dev_index];
1706 if (i < 50 || i > 60000)
1709 j = msecs_to_jiffies(i);
1711 snd_printk(KERN_WARNING SFX
1712 "jackpoll_ms value out of range: %d\n", i);
1717 * Codec initialization
1720 /* number of codec slots for each chipset: 0 = default slots (i.e. 4) */
1721 static unsigned int azx_max_codecs[AZX_NUM_DRIVERS] = {
1722 [AZX_DRIVER_NVIDIA] = 8,
1723 [AZX_DRIVER_TERA] = 1,
1726 static int azx_codec_create(struct azx *chip, const char *model)
1728 struct hda_bus_template bus_temp;
1732 memset(&bus_temp, 0, sizeof(bus_temp));
1733 bus_temp.private_data = chip;
1734 bus_temp.modelname = model;
1735 bus_temp.pci = chip->pci;
1736 bus_temp.ops.command = azx_send_cmd;
1737 bus_temp.ops.get_response = azx_get_response;
1738 bus_temp.ops.attach_pcm = azx_attach_pcm_stream;
1739 bus_temp.ops.bus_reset = azx_bus_reset;
1741 bus_temp.power_save = &power_save;
1742 bus_temp.ops.pm_notify = azx_power_notify;
1744 #ifdef CONFIG_SND_HDA_DSP_LOADER
1745 bus_temp.ops.load_dsp_prepare = azx_load_dsp_prepare;
1746 bus_temp.ops.load_dsp_trigger = azx_load_dsp_trigger;
1747 bus_temp.ops.load_dsp_cleanup = azx_load_dsp_cleanup;
1750 err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus);
1754 if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) {
1755 snd_printd(SFX "%s: Enable delay in RIRB handling\n", pci_name(chip->pci));
1756 chip->bus->needs_damn_long_delay = 1;
1760 max_slots = azx_max_codecs[chip->driver_type];
1762 max_slots = AZX_DEFAULT_CODECS;
1764 /* First try to probe all given codec slots */
1765 for (c = 0; c < max_slots; c++) {
1766 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1767 if (probe_codec(chip, c) < 0) {
1768 /* Some BIOSen give you wrong codec addresses
1771 snd_printk(KERN_WARNING SFX
1772 "%s: Codec #%d probe error; "
1773 "disabling it...\n", pci_name(chip->pci), c);
1774 chip->codec_mask &= ~(1 << c);
1775 /* More badly, accessing to a non-existing
1776 * codec often screws up the controller chip,
1777 * and disturbs the further communications.
1778 * Thus if an error occurs during probing,
1779 * better to reset the controller chip to
1780 * get back to the sanity state.
1782 azx_stop_chip(chip);
1783 azx_init_chip(chip, 1);
1788 /* AMD chipsets often cause the communication stalls upon certain
1789 * sequence like the pin-detection. It seems that forcing the synced
1790 * access works around the stall. Grrr...
1792 if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1793 snd_printd(SFX "%s: Enable sync_write for stable communication\n",
1794 pci_name(chip->pci));
1795 chip->bus->sync_write = 1;
1796 chip->bus->allow_bus_reset = 1;
1799 /* Then create codec instances */
1800 for (c = 0; c < max_slots; c++) {
1801 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1802 struct hda_codec *codec;
1803 err = snd_hda_codec_new(chip->bus, c, &codec);
1806 codec->jackpoll_interval = get_jackpoll_interval(chip);
1807 codec->beep_mode = chip->beep_mode;
1812 snd_printk(KERN_ERR SFX "%s: no codecs initialized\n", pci_name(chip->pci));
1818 /* configure each codec instance */
1819 static int azx_codec_configure(struct azx *chip)
1821 struct hda_codec *codec;
1822 list_for_each_entry(codec, &chip->bus->codec_list, list) {
1823 snd_hda_codec_configure(codec);
1833 /* assign a stream for the PCM */
1834 static inline struct azx_dev *
1835 azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
1838 struct azx_dev *res = NULL;
1839 /* make a non-zero unique key for the substream */
1840 int key = (substream->pcm->device << 16) | (substream->number << 2) |
1841 (substream->stream + 1);
1843 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
1844 dev = chip->playback_index_offset;
1845 nums = chip->playback_streams;
1847 dev = chip->capture_index_offset;
1848 nums = chip->capture_streams;
1850 for (i = 0; i < nums; i++, dev++) {
1851 struct azx_dev *azx_dev = &chip->azx_dev[dev];
1853 if (!azx_dev->opened && !dsp_is_locked(azx_dev)) {
1855 if (res->assigned_key == key) {
1857 res->assigned_key = key;
1858 dsp_unlock(azx_dev);
1862 dsp_unlock(azx_dev);
1867 res->assigned_key = key;
1873 /* release the assigned stream */
1874 static inline void azx_release_device(struct azx_dev *azx_dev)
1876 azx_dev->opened = 0;
1879 static cycle_t azx_cc_read(const struct cyclecounter *cc)
1881 struct azx_dev *azx_dev = container_of(cc, struct azx_dev, azx_cc);
1882 struct snd_pcm_substream *substream = azx_dev->substream;
1883 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1884 struct azx *chip = apcm->chip;
1886 return azx_readl(chip, WALLCLK);
1889 static void azx_timecounter_init(struct snd_pcm_substream *substream,
1890 bool force, cycle_t last)
1892 struct azx_dev *azx_dev = get_azx_dev(substream);
1893 struct timecounter *tc = &azx_dev->azx_tc;
1894 struct cyclecounter *cc = &azx_dev->azx_cc;
1897 cc->read = azx_cc_read;
1898 cc->mask = CLOCKSOURCE_MASK(32);
1901 * Converting from 24 MHz to ns means applying a 125/3 factor.
1902 * To avoid any saturation issues in intermediate operations,
1903 * the 125 factor is applied first. The division is applied
1904 * last after reading the timecounter value.
1905 * Applying the 1/3 factor as part of the multiplication
1906 * requires at least 20 bits for a decent precision, however
1907 * overflows occur after about 4 hours or less, not a option.
1910 cc->mult = 125; /* saturation after 195 years */
1913 nsec = 0; /* audio time is elapsed time since trigger */
1914 timecounter_init(tc, cc, nsec);
1917 * force timecounter to use predefined value,
1918 * used for synchronized starts
1920 tc->cycle_last = last;
1923 static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream,
1926 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1927 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1928 u64 codec_frames, codec_nsecs;
1930 if (!hinfo->ops.get_delay)
1933 codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream);
1934 codec_nsecs = div_u64(codec_frames * 1000000000LL,
1935 substream->runtime->rate);
1937 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
1938 return nsec + codec_nsecs;
1940 return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0;
1943 static int azx_get_wallclock_tstamp(struct snd_pcm_substream *substream,
1944 struct timespec *ts)
1946 struct azx_dev *azx_dev = get_azx_dev(substream);
1949 nsec = timecounter_read(&azx_dev->azx_tc);
1950 nsec = div_u64(nsec, 3); /* can be optimized */
1951 nsec = azx_adjust_codec_delay(substream, nsec);
1953 *ts = ns_to_timespec(nsec);
1958 static struct snd_pcm_hardware azx_pcm_hw = {
1959 .info = (SNDRV_PCM_INFO_MMAP |
1960 SNDRV_PCM_INFO_INTERLEAVED |
1961 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1962 SNDRV_PCM_INFO_MMAP_VALID |
1963 /* No full-resume yet implemented */
1964 /* SNDRV_PCM_INFO_RESUME |*/
1965 SNDRV_PCM_INFO_PAUSE |
1966 SNDRV_PCM_INFO_SYNC_START |
1967 SNDRV_PCM_INFO_HAS_WALL_CLOCK |
1968 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
1969 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1970 .rates = SNDRV_PCM_RATE_48000,
1975 .buffer_bytes_max = AZX_MAX_BUF_SIZE,
1976 .period_bytes_min = 128,
1977 .period_bytes_max = AZX_MAX_BUF_SIZE / 2,
1979 .periods_max = AZX_MAX_FRAG,
1983 static int azx_pcm_open(struct snd_pcm_substream *substream)
1985 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1986 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1987 struct azx *chip = apcm->chip;
1988 struct azx_dev *azx_dev;
1989 struct snd_pcm_runtime *runtime = substream->runtime;
1990 unsigned long flags;
1994 mutex_lock(&chip->open_mutex);
1995 azx_dev = azx_assign_device(chip, substream);
1996 if (azx_dev == NULL) {
1997 mutex_unlock(&chip->open_mutex);
2000 runtime->hw = azx_pcm_hw;
2001 runtime->hw.channels_min = hinfo->channels_min;
2002 runtime->hw.channels_max = hinfo->channels_max;
2003 runtime->hw.formats = hinfo->formats;
2004 runtime->hw.rates = hinfo->rates;
2005 snd_pcm_limit_hw_rates(runtime);
2006 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
2008 /* avoid wrap-around with wall-clock */
2009 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME,
2013 if (chip->align_buffer_size)
2014 /* constrain buffer sizes to be multiple of 128
2015 bytes. This is more efficient in terms of memory
2016 access but isn't required by the HDA spec and
2017 prevents users from specifying exact period/buffer
2018 sizes. For example for 44.1kHz, a period size set
2019 to 20ms will be rounded to 19.59ms. */
2022 /* Don't enforce steps on buffer sizes, still need to
2023 be multiple of 4 bytes (HDA spec). Tested on Intel
2024 HDA controllers, may not work on all devices where
2025 option needs to be disabled */
2028 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
2030 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
2032 snd_hda_power_up_d3wait(apcm->codec);
2033 err = hinfo->ops.open(hinfo, apcm->codec, substream);
2035 azx_release_device(azx_dev);
2036 snd_hda_power_down(apcm->codec);
2037 mutex_unlock(&chip->open_mutex);
2040 snd_pcm_limit_hw_rates(runtime);
2042 if (snd_BUG_ON(!runtime->hw.channels_min) ||
2043 snd_BUG_ON(!runtime->hw.channels_max) ||
2044 snd_BUG_ON(!runtime->hw.formats) ||
2045 snd_BUG_ON(!runtime->hw.rates)) {
2046 azx_release_device(azx_dev);
2047 hinfo->ops.close(hinfo, apcm->codec, substream);
2048 snd_hda_power_down(apcm->codec);
2049 mutex_unlock(&chip->open_mutex);
2053 /* disable WALLCLOCK timestamps for capture streams
2054 until we figure out how to handle digital inputs */
2055 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
2056 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK;
2058 spin_lock_irqsave(&chip->reg_lock, flags);
2059 azx_dev->substream = substream;
2060 azx_dev->running = 0;
2061 spin_unlock_irqrestore(&chip->reg_lock, flags);
2063 runtime->private_data = azx_dev;
2064 snd_pcm_set_sync(substream);
2065 mutex_unlock(&chip->open_mutex);
2069 static int azx_pcm_close(struct snd_pcm_substream *substream)
2071 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2072 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2073 struct azx *chip = apcm->chip;
2074 struct azx_dev *azx_dev = get_azx_dev(substream);
2075 unsigned long flags;
2077 mutex_lock(&chip->open_mutex);
2078 spin_lock_irqsave(&chip->reg_lock, flags);
2079 azx_dev->substream = NULL;
2080 azx_dev->running = 0;
2081 spin_unlock_irqrestore(&chip->reg_lock, flags);
2082 azx_release_device(azx_dev);
2083 hinfo->ops.close(hinfo, apcm->codec, substream);
2084 snd_hda_power_down(apcm->codec);
2085 mutex_unlock(&chip->open_mutex);
2089 static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
2090 struct snd_pcm_hw_params *hw_params)
2092 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2093 struct azx *chip = apcm->chip;
2094 struct azx_dev *azx_dev = get_azx_dev(substream);
2098 if (dsp_is_locked(azx_dev)) {
2103 mark_runtime_wc(chip, azx_dev, substream, false);
2104 azx_dev->bufsize = 0;
2105 azx_dev->period_bytes = 0;
2106 azx_dev->format_val = 0;
2107 ret = snd_pcm_lib_malloc_pages(substream,
2108 params_buffer_bytes(hw_params));
2111 mark_runtime_wc(chip, azx_dev, substream, true);
2113 dsp_unlock(azx_dev);
2117 static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
2119 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2120 struct azx_dev *azx_dev = get_azx_dev(substream);
2121 struct azx *chip = apcm->chip;
2122 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2124 /* reset BDL address */
2126 if (!dsp_is_locked(azx_dev)) {
2127 azx_sd_writel(azx_dev, SD_BDLPL, 0);
2128 azx_sd_writel(azx_dev, SD_BDLPU, 0);
2129 azx_sd_writel(azx_dev, SD_CTL, 0);
2130 azx_dev->bufsize = 0;
2131 azx_dev->period_bytes = 0;
2132 azx_dev->format_val = 0;
2135 snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
2137 mark_runtime_wc(chip, azx_dev, substream, false);
2138 azx_dev->prepared = 0;
2139 dsp_unlock(azx_dev);
2140 return snd_pcm_lib_free_pages(substream);
2143 static int azx_pcm_prepare(struct snd_pcm_substream *substream)
2145 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2146 struct azx *chip = apcm->chip;
2147 struct azx_dev *azx_dev = get_azx_dev(substream);
2148 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2149 struct snd_pcm_runtime *runtime = substream->runtime;
2150 unsigned int bufsize, period_bytes, format_val, stream_tag;
2152 struct hda_spdif_out *spdif =
2153 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
2154 unsigned short ctls = spdif ? spdif->ctls : 0;
2157 if (dsp_is_locked(azx_dev)) {
2162 azx_stream_reset(chip, azx_dev);
2163 format_val = snd_hda_calc_stream_format(runtime->rate,
2169 snd_printk(KERN_ERR SFX
2170 "%s: invalid format_val, rate=%d, ch=%d, format=%d\n",
2171 pci_name(chip->pci), runtime->rate, runtime->channels, runtime->format);
2176 bufsize = snd_pcm_lib_buffer_bytes(substream);
2177 period_bytes = snd_pcm_lib_period_bytes(substream);
2179 snd_printdd(SFX "%s: azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
2180 pci_name(chip->pci), bufsize, format_val);
2182 if (bufsize != azx_dev->bufsize ||
2183 period_bytes != azx_dev->period_bytes ||
2184 format_val != azx_dev->format_val ||
2185 runtime->no_period_wakeup != azx_dev->no_period_wakeup) {
2186 azx_dev->bufsize = bufsize;
2187 azx_dev->period_bytes = period_bytes;
2188 azx_dev->format_val = format_val;
2189 azx_dev->no_period_wakeup = runtime->no_period_wakeup;
2190 err = azx_setup_periods(chip, substream, azx_dev);
2195 /* when LPIB delay correction gives a small negative value,
2196 * we ignore it; currently set the threshold statically to
2199 if (runtime->period_size > 64)
2200 azx_dev->delay_negative_threshold = -frames_to_bytes(runtime, 64);
2202 azx_dev->delay_negative_threshold = 0;
2204 /* wallclk has 24Mhz clock source */
2205 azx_dev->period_wallclk = (((runtime->period_size * 24000) /
2206 runtime->rate) * 1000);
2207 azx_setup_controller(chip, azx_dev);
2208 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
2209 azx_dev->fifo_size = azx_sd_readw(azx_dev, SD_FIFOSIZE) + 1;
2211 azx_dev->fifo_size = 0;
2213 stream_tag = azx_dev->stream_tag;
2214 /* CA-IBG chips need the playback stream starting from 1 */
2215 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
2216 stream_tag > chip->capture_streams)
2217 stream_tag -= chip->capture_streams;
2218 err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
2219 azx_dev->format_val, substream);
2223 azx_dev->prepared = 1;
2224 dsp_unlock(azx_dev);
2228 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
2230 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2231 struct azx *chip = apcm->chip;
2232 struct azx_dev *azx_dev;
2233 struct snd_pcm_substream *s;
2234 int rstart = 0, start, nsync = 0, sbits = 0;
2237 azx_dev = get_azx_dev(substream);
2238 trace_azx_pcm_trigger(chip, azx_dev, cmd);
2240 if (dsp_is_locked(azx_dev) || !azx_dev->prepared)
2244 case SNDRV_PCM_TRIGGER_START:
2246 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
2247 case SNDRV_PCM_TRIGGER_RESUME:
2250 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
2251 case SNDRV_PCM_TRIGGER_SUSPEND:
2252 case SNDRV_PCM_TRIGGER_STOP:
2259 snd_pcm_group_for_each_entry(s, substream) {
2260 if (s->pcm->card != substream->pcm->card)
2262 azx_dev = get_azx_dev(s);
2263 sbits |= 1 << azx_dev->index;
2265 snd_pcm_trigger_done(s, substream);
2268 spin_lock(&chip->reg_lock);
2270 /* first, set SYNC bits of corresponding streams */
2271 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
2272 azx_writel(chip, OLD_SSYNC,
2273 azx_readl(chip, OLD_SSYNC) | sbits);
2275 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits);
2277 snd_pcm_group_for_each_entry(s, substream) {
2278 if (s->pcm->card != substream->pcm->card)
2280 azx_dev = get_azx_dev(s);
2282 azx_dev->start_wallclk = azx_readl(chip, WALLCLK);
2284 azx_dev->start_wallclk -=
2285 azx_dev->period_wallclk;
2286 azx_stream_start(chip, azx_dev);
2288 azx_stream_stop(chip, azx_dev);
2290 azx_dev->running = start;
2292 spin_unlock(&chip->reg_lock);
2294 /* wait until all FIFOs get ready */
2295 for (timeout = 5000; timeout; timeout--) {
2297 snd_pcm_group_for_each_entry(s, substream) {
2298 if (s->pcm->card != substream->pcm->card)
2300 azx_dev = get_azx_dev(s);
2301 if (!(azx_sd_readb(azx_dev, SD_STS) &
2310 /* wait until all RUN bits are cleared */
2311 for (timeout = 5000; timeout; timeout--) {
2313 snd_pcm_group_for_each_entry(s, substream) {
2314 if (s->pcm->card != substream->pcm->card)
2316 azx_dev = get_azx_dev(s);
2317 if (azx_sd_readb(azx_dev, SD_CTL) &
2326 spin_lock(&chip->reg_lock);
2327 /* reset SYNC bits */
2328 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
2329 azx_writel(chip, OLD_SSYNC,
2330 azx_readl(chip, OLD_SSYNC) & ~sbits);
2332 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits);
2334 azx_timecounter_init(substream, 0, 0);
2338 /* same start cycle for master and group */
2339 azx_dev = get_azx_dev(substream);
2340 cycle_last = azx_dev->azx_tc.cycle_last;
2342 snd_pcm_group_for_each_entry(s, substream) {
2343 if (s->pcm->card != substream->pcm->card)
2345 azx_timecounter_init(s, 1, cycle_last);
2349 spin_unlock(&chip->reg_lock);
2353 /* get the current DMA position with correction on VIA chips */
2354 static unsigned int azx_via_get_position(struct azx *chip,
2355 struct azx_dev *azx_dev)
2357 unsigned int link_pos, mini_pos, bound_pos;
2358 unsigned int mod_link_pos, mod_dma_pos, mod_mini_pos;
2359 unsigned int fifo_size;
2361 link_pos = azx_sd_readl(azx_dev, SD_LPIB);
2362 if (azx_dev->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
2363 /* Playback, no problem using link position */
2369 * use mod to get the DMA position just like old chipset
2371 mod_dma_pos = le32_to_cpu(*azx_dev->posbuf);
2372 mod_dma_pos %= azx_dev->period_bytes;
2374 /* azx_dev->fifo_size can't get FIFO size of in stream.
2375 * Get from base address + offset.
2377 fifo_size = readw(chip->remap_addr + VIA_IN_STREAM0_FIFO_SIZE_OFFSET);
2379 if (azx_dev->insufficient) {
2380 /* Link position never gather than FIFO size */
2381 if (link_pos <= fifo_size)
2384 azx_dev->insufficient = 0;
2387 if (link_pos <= fifo_size)
2388 mini_pos = azx_dev->bufsize + link_pos - fifo_size;
2390 mini_pos = link_pos - fifo_size;
2392 /* Find nearest previous boudary */
2393 mod_mini_pos = mini_pos % azx_dev->period_bytes;
2394 mod_link_pos = link_pos % azx_dev->period_bytes;
2395 if (mod_link_pos >= fifo_size)
2396 bound_pos = link_pos - mod_link_pos;
2397 else if (mod_dma_pos >= mod_mini_pos)
2398 bound_pos = mini_pos - mod_mini_pos;
2400 bound_pos = mini_pos - mod_mini_pos + azx_dev->period_bytes;
2401 if (bound_pos >= azx_dev->bufsize)
2405 /* Calculate real DMA position we want */
2406 return bound_pos + mod_dma_pos;
2409 static unsigned int azx_get_position(struct azx *chip,
2410 struct azx_dev *azx_dev,
2413 struct snd_pcm_substream *substream = azx_dev->substream;
2414 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2416 int stream = substream->stream;
2417 struct hda_pcm_stream *hinfo = apcm->hinfo[stream];
2420 switch (chip->position_fix[stream]) {
2423 pos = azx_sd_readl(azx_dev, SD_LPIB);
2425 case POS_FIX_VIACOMBO:
2426 pos = azx_via_get_position(chip, azx_dev);
2429 /* use the position buffer */
2430 pos = le32_to_cpu(*azx_dev->posbuf);
2431 if (with_check && chip->position_fix[stream] == POS_FIX_AUTO) {
2432 if (!pos || pos == (u32)-1) {
2434 "hda-intel: Invalid position buffer, "
2435 "using LPIB read method instead.\n");
2436 chip->position_fix[stream] = POS_FIX_LPIB;
2437 pos = azx_sd_readl(azx_dev, SD_LPIB);
2439 chip->position_fix[stream] = POS_FIX_POSBUF;
2444 if (pos >= azx_dev->bufsize)
2447 /* calculate runtime delay from LPIB */
2448 if (substream->runtime &&
2449 chip->position_fix[stream] == POS_FIX_POSBUF &&
2450 (chip->driver_caps & AZX_DCAPS_COUNT_LPIB_DELAY)) {
2451 unsigned int lpib_pos = azx_sd_readl(azx_dev, SD_LPIB);
2452 if (stream == SNDRV_PCM_STREAM_PLAYBACK)
2453 delay = pos - lpib_pos;
2455 delay = lpib_pos - pos;
2457 if (delay >= azx_dev->delay_negative_threshold)
2460 delay += azx_dev->bufsize;
2462 if (delay >= azx_dev->period_bytes) {
2463 snd_printk(KERN_WARNING SFX
2464 "%s: Unstable LPIB (%d >= %d); "
2465 "disabling LPIB delay counting\n",
2466 pci_name(chip->pci), delay, azx_dev->period_bytes);
2468 chip->driver_caps &= ~AZX_DCAPS_COUNT_LPIB_DELAY;
2470 delay = bytes_to_frames(substream->runtime, delay);
2473 if (substream->runtime) {
2474 if (hinfo->ops.get_delay)
2475 delay += hinfo->ops.get_delay(hinfo, apcm->codec,
2477 substream->runtime->delay = delay;
2480 trace_azx_get_position(chip, azx_dev, pos, delay);
2484 static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
2486 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2487 struct azx *chip = apcm->chip;
2488 struct azx_dev *azx_dev = get_azx_dev(substream);
2489 return bytes_to_frames(substream->runtime,
2490 azx_get_position(chip, azx_dev, false));
2494 * Check whether the current DMA position is acceptable for updating
2495 * periods. Returns non-zero if it's OK.
2497 * Many HD-audio controllers appear pretty inaccurate about
2498 * the update-IRQ timing. The IRQ is issued before actually the
2499 * data is processed. So, we need to process it afterwords in a
2502 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
2507 wallclk = azx_readl(chip, WALLCLK) - azx_dev->start_wallclk;
2508 if (wallclk < (azx_dev->period_wallclk * 2) / 3)
2509 return -1; /* bogus (too early) interrupt */
2511 pos = azx_get_position(chip, azx_dev, true);
2513 if (WARN_ONCE(!azx_dev->period_bytes,
2514 "hda-intel: zero azx_dev->period_bytes"))
2515 return -1; /* this shouldn't happen! */
2516 if (wallclk < (azx_dev->period_wallclk * 5) / 4 &&
2517 pos % azx_dev->period_bytes > azx_dev->period_bytes / 2)
2518 /* NG - it's below the first next period boundary */
2519 return bdl_pos_adj[chip->dev_index] ? 0 : -1;
2520 azx_dev->start_wallclk += wallclk;
2521 return 1; /* OK, it's fine */
2525 * The work for pending PCM period updates.
2527 static void azx_irq_pending_work(struct work_struct *work)
2529 struct azx *chip = container_of(work, struct azx, irq_pending_work);
2532 if (!chip->irq_pending_warned) {
2534 "hda-intel: IRQ timing workaround is activated "
2535 "for card #%d. Suggest a bigger bdl_pos_adj.\n",
2536 chip->card->number);
2537 chip->irq_pending_warned = 1;
2542 spin_lock_irq(&chip->reg_lock);
2543 for (i = 0; i < chip->num_streams; i++) {
2544 struct azx_dev *azx_dev = &chip->azx_dev[i];
2545 if (!azx_dev->irq_pending ||
2546 !azx_dev->substream ||
2549 ok = azx_position_ok(chip, azx_dev);
2551 azx_dev->irq_pending = 0;
2552 spin_unlock(&chip->reg_lock);
2553 snd_pcm_period_elapsed(azx_dev->substream);
2554 spin_lock(&chip->reg_lock);
2555 } else if (ok < 0) {
2556 pending = 0; /* too early */
2560 spin_unlock_irq(&chip->reg_lock);
2567 /* clear irq_pending flags and assure no on-going workq */
2568 static void azx_clear_irq_pending(struct azx *chip)
2572 spin_lock_irq(&chip->reg_lock);
2573 for (i = 0; i < chip->num_streams; i++)
2574 chip->azx_dev[i].irq_pending = 0;
2575 spin_unlock_irq(&chip->reg_lock);
2579 static int azx_pcm_mmap(struct snd_pcm_substream *substream,
2580 struct vm_area_struct *area)
2582 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2583 struct azx *chip = apcm->chip;
2584 if (!azx_snoop(chip))
2585 area->vm_page_prot = pgprot_writecombine(area->vm_page_prot);
2586 return snd_pcm_lib_default_mmap(substream, area);
2589 #define azx_pcm_mmap NULL
2592 static struct snd_pcm_ops azx_pcm_ops = {
2593 .open = azx_pcm_open,
2594 .close = azx_pcm_close,
2595 .ioctl = snd_pcm_lib_ioctl,
2596 .hw_params = azx_pcm_hw_params,
2597 .hw_free = azx_pcm_hw_free,
2598 .prepare = azx_pcm_prepare,
2599 .trigger = azx_pcm_trigger,
2600 .pointer = azx_pcm_pointer,
2601 .wall_clock = azx_get_wallclock_tstamp,
2602 .mmap = azx_pcm_mmap,
2603 .page = snd_pcm_sgbuf_ops_page,
2606 static void azx_pcm_free(struct snd_pcm *pcm)
2608 struct azx_pcm *apcm = pcm->private_data;
2610 list_del(&apcm->list);
2615 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
2618 azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
2619 struct hda_pcm *cpcm)
2621 struct azx *chip = bus->private_data;
2622 struct snd_pcm *pcm;
2623 struct azx_pcm *apcm;
2624 int pcm_dev = cpcm->device;
2628 list_for_each_entry(apcm, &chip->pcm_list, list) {
2629 if (apcm->pcm->device == pcm_dev) {
2630 snd_printk(KERN_ERR SFX "%s: PCM %d already exists\n",
2631 pci_name(chip->pci), pcm_dev);
2635 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
2636 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
2637 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
2641 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
2642 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
2647 apcm->codec = codec;
2648 pcm->private_data = apcm;
2649 pcm->private_free = azx_pcm_free;
2650 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
2651 pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
2652 list_add_tail(&apcm->list, &chip->pcm_list);
2654 for (s = 0; s < 2; s++) {
2655 apcm->hinfo[s] = &cpcm->stream[s];
2656 if (cpcm->stream[s].substreams)
2657 snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
2659 /* buffer pre-allocation */
2660 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
2661 if (size > MAX_PREALLOC_SIZE)
2662 size = MAX_PREALLOC_SIZE;
2663 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
2664 snd_dma_pci_data(chip->pci),
2665 size, MAX_PREALLOC_SIZE);
2670 * mixer creation - all stuff is implemented in hda module
2672 static int azx_mixer_create(struct azx *chip)
2674 return snd_hda_build_controls(chip->bus);
2679 * initialize SD streams
2681 static int azx_init_stream(struct azx *chip)
2685 /* initialize each stream (aka device)
2686 * assign the starting bdl address to each stream (device)
2689 for (i = 0; i < chip->num_streams; i++) {
2690 struct azx_dev *azx_dev = &chip->azx_dev[i];
2691 azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8);
2692 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
2693 azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80);
2694 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
2695 azx_dev->sd_int_sta_mask = 1 << i;
2696 /* stream tag: must be non-zero and unique */
2698 azx_dev->stream_tag = i + 1;
2704 static int azx_acquire_irq(struct azx *chip, int do_disconnect)
2706 if (request_irq(chip->pci->irq, azx_interrupt,
2707 chip->msi ? 0 : IRQF_SHARED,
2708 KBUILD_MODNAME, chip)) {
2709 printk(KERN_ERR "hda-intel: unable to grab IRQ %d, "
2710 "disabling device\n", chip->pci->irq);
2712 snd_card_disconnect(chip->card);
2715 chip->irq = chip->pci->irq;
2716 pci_intx(chip->pci, !chip->msi);
2721 static void azx_stop_chip(struct azx *chip)
2723 if (!chip->initialized)
2726 /* disable interrupts */
2727 azx_int_disable(chip);
2728 azx_int_clear(chip);
2730 /* disable CORB/RIRB */
2731 azx_free_cmd_io(chip);
2733 /* disable position buffer */
2734 azx_writel(chip, DPLBASE, 0);
2735 azx_writel(chip, DPUBASE, 0);
2737 chip->initialized = 0;
2740 #ifdef CONFIG_SND_HDA_DSP_LOADER
2742 * DSP loading code (e.g. for CA0132)
2745 /* use the first stream for loading DSP */
2746 static struct azx_dev *
2747 azx_get_dsp_loader_dev(struct azx *chip)
2749 return &chip->azx_dev[chip->playback_index_offset];
2752 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format,
2753 unsigned int byte_size,
2754 struct snd_dma_buffer *bufp)
2757 struct azx *chip = bus->private_data;
2758 struct azx_dev *azx_dev;
2761 azx_dev = azx_get_dsp_loader_dev(chip);
2764 spin_lock_irq(&chip->reg_lock);
2765 if (azx_dev->running || azx_dev->locked) {
2766 spin_unlock_irq(&chip->reg_lock);
2770 azx_dev->prepared = 0;
2771 chip->saved_azx_dev = *azx_dev;
2772 azx_dev->locked = 1;
2773 spin_unlock_irq(&chip->reg_lock);
2775 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV_SG,
2776 snd_dma_pci_data(chip->pci),
2781 mark_pages_wc(chip, bufp, true);
2782 azx_dev->bufsize = byte_size;
2783 azx_dev->period_bytes = byte_size;
2784 azx_dev->format_val = format;
2786 azx_stream_reset(chip, azx_dev);
2788 /* reset BDL address */
2789 azx_sd_writel(azx_dev, SD_BDLPL, 0);
2790 azx_sd_writel(azx_dev, SD_BDLPU, 0);
2793 bdl = (u32 *)azx_dev->bdl.area;
2794 err = setup_bdle(chip, bufp, azx_dev, &bdl, 0, byte_size, 0);
2798 azx_setup_controller(chip, azx_dev);
2799 dsp_unlock(azx_dev);
2800 return azx_dev->stream_tag;
2803 mark_pages_wc(chip, bufp, false);
2804 snd_dma_free_pages(bufp);
2806 spin_lock_irq(&chip->reg_lock);
2807 if (azx_dev->opened)
2808 *azx_dev = chip->saved_azx_dev;
2809 azx_dev->locked = 0;
2810 spin_unlock_irq(&chip->reg_lock);
2812 dsp_unlock(azx_dev);
2816 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start)
2818 struct azx *chip = bus->private_data;
2819 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
2822 azx_stream_start(chip, azx_dev);
2824 azx_stream_stop(chip, azx_dev);
2825 azx_dev->running = start;
2828 static void azx_load_dsp_cleanup(struct hda_bus *bus,
2829 struct snd_dma_buffer *dmab)
2831 struct azx *chip = bus->private_data;
2832 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
2834 if (!dmab->area || !azx_dev->locked)
2838 /* reset BDL address */
2839 azx_sd_writel(azx_dev, SD_BDLPL, 0);
2840 azx_sd_writel(azx_dev, SD_BDLPU, 0);
2841 azx_sd_writel(azx_dev, SD_CTL, 0);
2842 azx_dev->bufsize = 0;
2843 azx_dev->period_bytes = 0;
2844 azx_dev->format_val = 0;
2846 mark_pages_wc(chip, dmab, false);
2847 snd_dma_free_pages(dmab);
2850 spin_lock_irq(&chip->reg_lock);
2851 if (azx_dev->opened)
2852 *azx_dev = chip->saved_azx_dev;
2853 azx_dev->locked = 0;
2854 spin_unlock_irq(&chip->reg_lock);
2855 dsp_unlock(azx_dev);
2857 #endif /* CONFIG_SND_HDA_DSP_LOADER */
2860 /* power-up/down the controller */
2861 static void azx_power_notify(struct hda_bus *bus, bool power_up)
2863 struct azx *chip = bus->private_data;
2865 if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
2869 pm_runtime_get_sync(&chip->pci->dev);
2871 pm_runtime_put_sync(&chip->pci->dev);
2874 static DEFINE_MUTEX(card_list_lock);
2875 static LIST_HEAD(card_list);
2877 static void azx_add_card_list(struct azx *chip)
2879 mutex_lock(&card_list_lock);
2880 list_add(&chip->list, &card_list);
2881 mutex_unlock(&card_list_lock);
2884 static void azx_del_card_list(struct azx *chip)
2886 mutex_lock(&card_list_lock);
2887 list_del_init(&chip->list);
2888 mutex_unlock(&card_list_lock);
2891 /* trigger power-save check at writing parameter */
2892 static int param_set_xint(const char *val, const struct kernel_param *kp)
2895 struct hda_codec *c;
2896 int prev = power_save;
2897 int ret = param_set_int(val, kp);
2899 if (ret || prev == power_save)
2902 mutex_lock(&card_list_lock);
2903 list_for_each_entry(chip, &card_list, list) {
2904 if (!chip->bus || chip->disabled)
2906 list_for_each_entry(c, &chip->bus->codec_list, list)
2907 snd_hda_power_sync(c);
2909 mutex_unlock(&card_list_lock);
2913 #define azx_add_card_list(chip) /* NOP */
2914 #define azx_del_card_list(chip) /* NOP */
2915 #endif /* CONFIG_PM */
2917 #if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO)
2921 static int azx_suspend(struct device *dev)
2923 struct pci_dev *pci = to_pci_dev(dev);
2924 struct snd_card *card = dev_get_drvdata(dev);
2925 struct azx *chip = card->private_data;
2931 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2932 azx_clear_irq_pending(chip);
2933 list_for_each_entry(p, &chip->pcm_list, list)
2934 snd_pcm_suspend_all(p->pcm);
2935 if (chip->initialized)
2936 snd_hda_suspend(chip->bus);
2937 azx_stop_chip(chip);
2938 azx_enter_link_reset(chip);
2939 if (chip->irq >= 0) {
2940 free_irq(chip->irq, chip);
2944 pci_disable_msi(chip->pci);
2945 pci_disable_device(pci);
2946 pci_save_state(pci);
2947 pci_set_power_state(pci, PCI_D3hot);
2948 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
2949 hda_display_power(false);
2953 static int azx_resume(struct device *dev)
2955 struct pci_dev *pci = to_pci_dev(dev);
2956 struct snd_card *card = dev_get_drvdata(dev);
2957 struct azx *chip = card->private_data;
2962 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
2963 hda_display_power(true);
2964 pci_set_power_state(pci, PCI_D0);
2965 pci_restore_state(pci);
2966 if (pci_enable_device(pci) < 0) {
2967 printk(KERN_ERR "hda-intel: pci_enable_device failed, "
2968 "disabling device\n");
2969 snd_card_disconnect(card);
2972 pci_set_master(pci);
2974 if (pci_enable_msi(pci) < 0)
2976 if (azx_acquire_irq(chip, 1) < 0)
2980 azx_init_chip(chip, 1);
2982 snd_hda_resume(chip->bus);
2983 snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2986 #endif /* CONFIG_PM_SLEEP || SUPPORT_VGA_SWITCHEROO */
2988 #ifdef CONFIG_PM_RUNTIME
2989 static int azx_runtime_suspend(struct device *dev)
2991 struct snd_card *card = dev_get_drvdata(dev);
2992 struct azx *chip = card->private_data;
2997 if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
3000 /* enable controller wake up event */
3001 azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) |
3004 azx_stop_chip(chip);
3005 azx_enter_link_reset(chip);
3006 azx_clear_irq_pending(chip);
3007 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
3008 hda_display_power(false);
3012 static int azx_runtime_resume(struct device *dev)
3014 struct snd_card *card = dev_get_drvdata(dev);
3015 struct azx *chip = card->private_data;
3016 struct hda_bus *bus;
3017 struct hda_codec *codec;
3023 if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
3026 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
3027 hda_display_power(true);
3029 /* Read STATESTS before controller reset */
3030 status = azx_readw(chip, STATESTS);
3033 azx_init_chip(chip, 1);
3036 if (status && bus) {
3037 list_for_each_entry(codec, &bus->codec_list, list)
3038 if (status & (1 << codec->addr))
3039 queue_delayed_work(codec->bus->workq,
3040 &codec->jackpoll_work, codec->jackpoll_interval);
3043 /* disable controller Wake Up event*/
3044 azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) &
3045 ~STATESTS_INT_MASK);
3050 static int azx_runtime_idle(struct device *dev)
3052 struct snd_card *card = dev_get_drvdata(dev);
3053 struct azx *chip = card->private_data;
3058 if (!power_save_controller ||
3059 !(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
3065 #endif /* CONFIG_PM_RUNTIME */
3068 static const struct dev_pm_ops azx_pm = {
3069 SET_SYSTEM_SLEEP_PM_OPS(azx_suspend, azx_resume)
3070 SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, azx_runtime_idle)
3073 #define AZX_PM_OPS &azx_pm
3075 #define AZX_PM_OPS NULL
3076 #endif /* CONFIG_PM */
3080 * reboot notifier for hang-up problem at power-down
3082 static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
3084 struct azx *chip = container_of(nb, struct azx, reboot_notifier);
3085 snd_hda_bus_reboot_notify(chip->bus);
3086 azx_stop_chip(chip);
3090 static void azx_notifier_register(struct azx *chip)
3092 chip->reboot_notifier.notifier_call = azx_halt;
3093 register_reboot_notifier(&chip->reboot_notifier);
3096 static void azx_notifier_unregister(struct azx *chip)
3098 if (chip->reboot_notifier.notifier_call)
3099 unregister_reboot_notifier(&chip->reboot_notifier);
3102 static int azx_probe_continue(struct azx *chip);
3104 #ifdef SUPPORT_VGA_SWITCHEROO
3105 static struct pci_dev *get_bound_vga(struct pci_dev *pci);
3107 static void azx_vs_set_state(struct pci_dev *pci,
3108 enum vga_switcheroo_state state)
3110 struct snd_card *card = pci_get_drvdata(pci);
3111 struct azx *chip = card->private_data;
3114 wait_for_completion(&chip->probe_wait);
3115 if (chip->init_failed)
3118 disabled = (state == VGA_SWITCHEROO_OFF);
3119 if (chip->disabled == disabled)
3123 chip->disabled = disabled;
3125 snd_printk(KERN_INFO SFX
3126 "%s: Start delayed initialization\n",
3127 pci_name(chip->pci));
3128 if (azx_probe_continue(chip) < 0) {
3129 snd_printk(KERN_ERR SFX
3130 "%s: initialization error\n",
3131 pci_name(chip->pci));
3132 chip->init_failed = true;
3136 snd_printk(KERN_INFO SFX
3137 "%s: %s via VGA-switcheroo\n", pci_name(chip->pci),
3138 disabled ? "Disabling" : "Enabling");
3140 pm_runtime_put_sync_suspend(&pci->dev);
3141 azx_suspend(&pci->dev);
3142 /* when we get suspended by vga switcheroo we end up in D3cold,
3143 * however we have no ACPI handle, so pci/acpi can't put us there,
3144 * put ourselves there */
3145 pci->current_state = PCI_D3cold;
3146 chip->disabled = true;
3147 if (snd_hda_lock_devices(chip->bus))
3148 snd_printk(KERN_WARNING SFX "%s: Cannot lock devices!\n",
3149 pci_name(chip->pci));
3151 snd_hda_unlock_devices(chip->bus);
3152 pm_runtime_get_noresume(&pci->dev);
3153 chip->disabled = false;
3154 azx_resume(&pci->dev);
3159 static bool azx_vs_can_switch(struct pci_dev *pci)
3161 struct snd_card *card = pci_get_drvdata(pci);
3162 struct azx *chip = card->private_data;
3164 wait_for_completion(&chip->probe_wait);
3165 if (chip->init_failed)
3167 if (chip->disabled || !chip->bus)
3169 if (snd_hda_lock_devices(chip->bus))
3171 snd_hda_unlock_devices(chip->bus);
3175 static void init_vga_switcheroo(struct azx *chip)
3177 struct pci_dev *p = get_bound_vga(chip->pci);
3179 snd_printk(KERN_INFO SFX
3180 "%s: Handle VGA-switcheroo audio client\n",
3181 pci_name(chip->pci));
3182 chip->use_vga_switcheroo = 1;
3187 static const struct vga_switcheroo_client_ops azx_vs_ops = {
3188 .set_gpu_state = azx_vs_set_state,
3189 .can_switch = azx_vs_can_switch,
3192 static int register_vga_switcheroo(struct azx *chip)
3196 if (!chip->use_vga_switcheroo)
3198 /* FIXME: currently only handling DIS controller
3199 * is there any machine with two switchable HDMI audio controllers?
3201 err = vga_switcheroo_register_audio_client(chip->pci, &azx_vs_ops,
3206 chip->vga_switcheroo_registered = 1;
3208 /* register as an optimus hdmi audio power domain */
3209 vga_switcheroo_init_domain_pm_optimus_hdmi_audio(&chip->pci->dev, &chip->hdmi_pm_domain);
3213 #define init_vga_switcheroo(chip) /* NOP */
3214 #define register_vga_switcheroo(chip) 0
3215 #define check_hdmi_disabled(pci) false
3216 #endif /* SUPPORT_VGA_SWITCHER */
3221 static int azx_free(struct azx *chip)
3223 struct pci_dev *pci = chip->pci;
3226 if ((chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
3228 pm_runtime_get_noresume(&pci->dev);
3230 azx_del_card_list(chip);
3232 azx_notifier_unregister(chip);
3234 chip->init_failed = 1; /* to be sure */
3235 complete_all(&chip->probe_wait);
3237 if (use_vga_switcheroo(chip)) {
3238 if (chip->disabled && chip->bus)
3239 snd_hda_unlock_devices(chip->bus);
3240 if (chip->vga_switcheroo_registered)
3241 vga_switcheroo_unregister_client(chip->pci);
3244 if (chip->initialized) {
3245 azx_clear_irq_pending(chip);
3246 for (i = 0; i < chip->num_streams; i++)
3247 azx_stream_stop(chip, &chip->azx_dev[i]);
3248 azx_stop_chip(chip);
3252 free_irq(chip->irq, (void*)chip);
3254 pci_disable_msi(chip->pci);
3255 if (chip->remap_addr)
3256 iounmap(chip->remap_addr);
3258 if (chip->azx_dev) {
3259 for (i = 0; i < chip->num_streams; i++)
3260 if (chip->azx_dev[i].bdl.area) {
3261 mark_pages_wc(chip, &chip->azx_dev[i].bdl, false);
3262 snd_dma_free_pages(&chip->azx_dev[i].bdl);
3265 if (chip->rb.area) {
3266 mark_pages_wc(chip, &chip->rb, false);
3267 snd_dma_free_pages(&chip->rb);
3269 if (chip->posbuf.area) {
3270 mark_pages_wc(chip, &chip->posbuf, false);
3271 snd_dma_free_pages(&chip->posbuf);
3273 if (chip->region_requested)
3274 pci_release_regions(chip->pci);
3275 pci_disable_device(chip->pci);
3276 kfree(chip->azx_dev);
3277 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3279 release_firmware(chip->fw);
3281 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {
3282 hda_display_power(false);
3290 static int azx_dev_free(struct snd_device *device)
3292 return azx_free(device->device_data);
3295 #ifdef SUPPORT_VGA_SWITCHEROO
3297 * Check of disabled HDMI controller by vga-switcheroo
3299 static struct pci_dev *get_bound_vga(struct pci_dev *pci)
3303 /* check only discrete GPU */
3304 switch (pci->vendor) {
3305 case PCI_VENDOR_ID_ATI:
3306 case PCI_VENDOR_ID_AMD:
3307 case PCI_VENDOR_ID_NVIDIA:
3308 if (pci->devfn == 1) {
3309 p = pci_get_domain_bus_and_slot(pci_domain_nr(pci->bus),
3310 pci->bus->number, 0);
3312 if ((p->class >> 8) == PCI_CLASS_DISPLAY_VGA)
3322 static bool check_hdmi_disabled(struct pci_dev *pci)
3324 bool vga_inactive = false;
3325 struct pci_dev *p = get_bound_vga(pci);
3328 if (vga_switcheroo_get_client_state(p) == VGA_SWITCHEROO_OFF)
3329 vga_inactive = true;
3332 return vga_inactive;
3334 #endif /* SUPPORT_VGA_SWITCHEROO */
3337 * white/black-listing for position_fix
3339 static struct snd_pci_quirk position_fix_list[] = {
3340 SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
3341 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
3342 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
3343 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
3344 SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
3345 SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),
3346 SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),
3347 SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB),
3348 SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB),
3349 SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB),
3350 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
3351 SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB),
3352 SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB),
3353 SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB),
3357 static int check_position_fix(struct azx *chip, int fix)
3359 const struct snd_pci_quirk *q;
3364 case POS_FIX_POSBUF:
3365 case POS_FIX_VIACOMBO:
3370 q = snd_pci_quirk_lookup(chip->pci, position_fix_list);
3373 "hda_intel: position_fix set to %d "
3374 "for device %04x:%04x\n",
3375 q->value, q->subvendor, q->subdevice);
3379 /* Check VIA/ATI HD Audio Controller exist */
3380 if (chip->driver_caps & AZX_DCAPS_POSFIX_VIA) {
3381 snd_printd(SFX "%s: Using VIACOMBO position fix\n", pci_name(chip->pci));
3382 return POS_FIX_VIACOMBO;
3384 if (chip->driver_caps & AZX_DCAPS_POSFIX_LPIB) {
3385 snd_printd(SFX "%s: Using LPIB position fix\n", pci_name(chip->pci));
3386 return POS_FIX_LPIB;
3388 return POS_FIX_AUTO;
3392 * black-lists for probe_mask
3394 static struct snd_pci_quirk probe_mask_list[] = {
3395 /* Thinkpad often breaks the controller communication when accessing
3396 * to the non-working (or non-existing) modem codec slot.
3398 SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01),
3399 SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01),
3400 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01),
3402 SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),
3403 /* including bogus ALC268 in slot#2 that conflicts with ALC888 */
3404 SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),
3405 /* forced codec slots */
3406 SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),
3407 SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),
3408 /* WinFast VP200 H (Teradici) user reported broken communication */
3409 SND_PCI_QUIRK(0x3a21, 0x040d, "WinFast VP200 H", 0x101),
3413 #define AZX_FORCE_CODEC_MASK 0x100
3415 static void check_probe_mask(struct azx *chip, int dev)
3417 const struct snd_pci_quirk *q;
3419 chip->codec_probe_mask = probe_mask[dev];
3420 if (chip->codec_probe_mask == -1) {
3421 q = snd_pci_quirk_lookup(chip->pci, probe_mask_list);
3424 "hda_intel: probe_mask set to 0x%x "
3425 "for device %04x:%04x\n",
3426 q->value, q->subvendor, q->subdevice);
3427 chip->codec_probe_mask = q->value;
3431 /* check forced option */
3432 if (chip->codec_probe_mask != -1 &&
3433 (chip->codec_probe_mask & AZX_FORCE_CODEC_MASK)) {
3434 chip->codec_mask = chip->codec_probe_mask & 0xff;
3435 printk(KERN_INFO "hda_intel: codec_mask forced to 0x%x\n",
3441 * white/black-list for enable_msi
3443 static struct snd_pci_quirk msi_black_list[] = {
3444 SND_PCI_QUIRK(0x103c, 0x2191, "HP", 0), /* AMD Hudson */
3445 SND_PCI_QUIRK(0x103c, 0x2192, "HP", 0), /* AMD Hudson */
3446 SND_PCI_QUIRK(0x103c, 0x21f7, "HP", 0), /* AMD Hudson */
3447 SND_PCI_QUIRK(0x103c, 0x21fa, "HP", 0), /* AMD Hudson */
3448 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
3449 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
3450 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
3451 SND_PCI_QUIRK(0x1179, 0xfb44, "Toshiba Satellite C870", 0), /* AMD Hudson */
3452 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
3453 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
3457 static void check_msi(struct azx *chip)
3459 const struct snd_pci_quirk *q;
3461 if (enable_msi >= 0) {
3462 chip->msi = !!enable_msi;
3465 chip->msi = 1; /* enable MSI as default */
3466 q = snd_pci_quirk_lookup(chip->pci, msi_black_list);
3469 "hda_intel: msi for device %04x:%04x set to %d\n",
3470 q->subvendor, q->subdevice, q->value);
3471 chip->msi = q->value;
3475 /* NVidia chipsets seem to cause troubles with MSI */
3476 if (chip->driver_caps & AZX_DCAPS_NO_MSI) {
3477 printk(KERN_INFO "hda_intel: Disabling MSI\n");
3482 /* check the snoop mode availability */
3483 static void azx_check_snoop_available(struct azx *chip)
3485 bool snoop = chip->snoop;
3487 switch (chip->driver_type) {
3488 case AZX_DRIVER_VIA:
3489 /* force to non-snoop mode for a new VIA controller
3494 pci_read_config_byte(chip->pci, 0x42, &val);
3495 if (!(val & 0x80) && chip->pci->revision == 0x30)
3499 case AZX_DRIVER_ATIHDMI_NS:
3500 /* new ATI HDMI requires non-snoop */
3503 case AZX_DRIVER_CTHDA:
3508 if (snoop != chip->snoop) {
3509 snd_printk(KERN_INFO SFX "%s: Force to %s mode\n",
3510 pci_name(chip->pci), snoop ? "snoop" : "non-snoop");
3511 chip->snoop = snoop;
3515 static void azx_probe_work(struct work_struct *work)
3517 azx_probe_continue(container_of(work, struct azx, probe_work));
3523 static int azx_create(struct snd_card *card, struct pci_dev *pci,
3524 int dev, unsigned int driver_caps,
3527 static struct snd_device_ops ops = {
3528 .dev_free = azx_dev_free,
3535 err = pci_enable_device(pci);
3539 chip = kzalloc(sizeof(*chip), GFP_KERNEL);
3541 snd_printk(KERN_ERR SFX "%s: Cannot allocate chip\n", pci_name(pci));
3542 pci_disable_device(pci);
3546 spin_lock_init(&chip->reg_lock);
3547 mutex_init(&chip->open_mutex);
3551 chip->driver_caps = driver_caps;
3552 chip->driver_type = driver_caps & 0xff;
3554 chip->dev_index = dev;
3555 INIT_WORK(&chip->irq_pending_work, azx_irq_pending_work);
3556 INIT_LIST_HEAD(&chip->pcm_list);
3557 INIT_LIST_HEAD(&chip->list);
3558 init_vga_switcheroo(chip);
3559 init_completion(&chip->probe_wait);
3561 chip->position_fix[0] = chip->position_fix[1] =
3562 check_position_fix(chip, position_fix[dev]);
3563 /* combo mode uses LPIB for playback */
3564 if (chip->position_fix[0] == POS_FIX_COMBO) {
3565 chip->position_fix[0] = POS_FIX_LPIB;
3566 chip->position_fix[1] = POS_FIX_AUTO;
3569 check_probe_mask(chip, dev);
3571 chip->single_cmd = single_cmd;
3572 chip->snoop = hda_snoop;
3573 azx_check_snoop_available(chip);
3575 if (bdl_pos_adj[dev] < 0) {
3576 switch (chip->driver_type) {
3577 case AZX_DRIVER_ICH:
3578 case AZX_DRIVER_PCH:
3579 bdl_pos_adj[dev] = 1;
3582 bdl_pos_adj[dev] = 32;
3587 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
3589 snd_printk(KERN_ERR SFX "%s: Error creating device [card]!\n",
3590 pci_name(chip->pci));
3595 /* continue probing in work context as may trigger request module */
3596 INIT_WORK(&chip->probe_work, azx_probe_work);
3603 static int azx_first_init(struct azx *chip)
3605 int dev = chip->dev_index;
3606 struct pci_dev *pci = chip->pci;
3607 struct snd_card *card = chip->card;
3609 unsigned short gcap;
3611 #if BITS_PER_LONG != 64
3612 /* Fix up base address on ULI M5461 */
3613 if (chip->driver_type == AZX_DRIVER_ULI) {
3615 pci_read_config_word(pci, 0x40, &tmp3);
3616 pci_write_config_word(pci, 0x40, tmp3 | 0x10);
3617 pci_write_config_dword(pci, PCI_BASE_ADDRESS_1, 0);
3621 err = pci_request_regions(pci, "ICH HD audio");
3624 chip->region_requested = 1;
3626 chip->addr = pci_resource_start(pci, 0);
3627 chip->remap_addr = pci_ioremap_bar(pci, 0);
3628 if (chip->remap_addr == NULL) {
3629 snd_printk(KERN_ERR SFX "%s: ioremap error\n", pci_name(chip->pci));
3634 if (pci_enable_msi(pci) < 0)
3637 if (azx_acquire_irq(chip, 0) < 0)
3640 pci_set_master(pci);
3641 synchronize_irq(chip->irq);
3643 gcap = azx_readw(chip, GCAP);
3644 snd_printdd(SFX "%s: chipset global capabilities = 0x%x\n", pci_name(chip->pci), gcap);
3646 /* disable SB600 64bit support for safety */
3647 if (chip->pci->vendor == PCI_VENDOR_ID_ATI) {
3648 struct pci_dev *p_smbus;
3649 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,
3650 PCI_DEVICE_ID_ATI_SBX00_SMBUS,
3653 if (p_smbus->revision < 0x30)
3654 gcap &= ~ICH6_GCAP_64OK;
3655 pci_dev_put(p_smbus);
3659 /* disable 64bit DMA address on some devices */
3660 if (chip->driver_caps & AZX_DCAPS_NO_64BIT) {
3661 snd_printd(SFX "%s: Disabling 64bit DMA\n", pci_name(chip->pci));
3662 gcap &= ~ICH6_GCAP_64OK;
3665 /* disable buffer size rounding to 128-byte multiples if supported */
3666 if (align_buffer_size >= 0)
3667 chip->align_buffer_size = !!align_buffer_size;
3669 if (chip->driver_caps & AZX_DCAPS_BUFSIZE)
3670 chip->align_buffer_size = 0;
3671 else if (chip->driver_caps & AZX_DCAPS_ALIGN_BUFSIZE)
3672 chip->align_buffer_size = 1;
3674 chip->align_buffer_size = 1;
3677 /* allow 64bit DMA address if supported by H/W */
3678 if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64)))
3679 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(64));
3681 pci_set_dma_mask(pci, DMA_BIT_MASK(32));
3682 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32));
3685 /* read number of streams from GCAP register instead of using
3688 chip->capture_streams = (gcap >> 8) & 0x0f;
3689 chip->playback_streams = (gcap >> 12) & 0x0f;
3690 if (!chip->playback_streams && !chip->capture_streams) {
3691 /* gcap didn't give any info, switching to old method */
3693 switch (chip->driver_type) {
3694 case AZX_DRIVER_ULI:
3695 chip->playback_streams = ULI_NUM_PLAYBACK;
3696 chip->capture_streams = ULI_NUM_CAPTURE;
3698 case AZX_DRIVER_ATIHDMI:
3699 case AZX_DRIVER_ATIHDMI_NS:
3700 chip->playback_streams = ATIHDMI_NUM_PLAYBACK;
3701 chip->capture_streams = ATIHDMI_NUM_CAPTURE;
3703 case AZX_DRIVER_GENERIC:
3705 chip->playback_streams = ICH6_NUM_PLAYBACK;
3706 chip->capture_streams = ICH6_NUM_CAPTURE;
3710 chip->capture_index_offset = 0;
3711 chip->playback_index_offset = chip->capture_streams;
3712 chip->num_streams = chip->playback_streams + chip->capture_streams;
3713 chip->azx_dev = kcalloc(chip->num_streams, sizeof(*chip->azx_dev),
3715 if (!chip->azx_dev) {
3716 snd_printk(KERN_ERR SFX "%s: cannot malloc azx_dev\n", pci_name(chip->pci));
3720 for (i = 0; i < chip->num_streams; i++) {
3721 dsp_lock_init(&chip->azx_dev[i]);
3722 /* allocate memory for the BDL for each stream */
3723 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
3724 snd_dma_pci_data(chip->pci),
3725 BDL_SIZE, &chip->azx_dev[i].bdl);
3727 snd_printk(KERN_ERR SFX "%s: cannot allocate BDL\n", pci_name(chip->pci));
3730 mark_pages_wc(chip, &chip->azx_dev[i].bdl, true);
3732 /* allocate memory for the position buffer */
3733 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
3734 snd_dma_pci_data(chip->pci),
3735 chip->num_streams * 8, &chip->posbuf);
3737 snd_printk(KERN_ERR SFX "%s: cannot allocate posbuf\n", pci_name(chip->pci));
3740 mark_pages_wc(chip, &chip->posbuf, true);
3741 /* allocate CORB/RIRB */
3742 err = azx_alloc_cmd_io(chip);
3746 /* initialize streams */
3747 azx_init_stream(chip);
3749 /* initialize chip */
3751 azx_init_chip(chip, (probe_only[dev] & 2) == 0);
3753 /* codec detection */
3754 if (!chip->codec_mask) {
3755 snd_printk(KERN_ERR SFX "%s: no codecs found!\n", pci_name(chip->pci));
3759 strcpy(card->driver, "HDA-Intel");
3760 strlcpy(card->shortname, driver_short_names[chip->driver_type],
3761 sizeof(card->shortname));
3762 snprintf(card->longname, sizeof(card->longname),
3763 "%s at 0x%lx irq %i",
3764 card->shortname, chip->addr, chip->irq);
3769 static void power_down_all_codecs(struct azx *chip)
3772 /* The codecs were powered up in snd_hda_codec_new().
3773 * Now all initialization done, so turn them down if possible
3775 struct hda_codec *codec;
3776 list_for_each_entry(codec, &chip->bus->codec_list, list) {
3777 snd_hda_power_down(codec);
3782 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3783 /* callback from request_firmware_nowait() */
3784 static void azx_firmware_cb(const struct firmware *fw, void *context)
3786 struct snd_card *card = context;
3787 struct azx *chip = card->private_data;
3788 struct pci_dev *pci = chip->pci;
3791 snd_printk(KERN_ERR SFX "%s: Cannot load firmware, aborting\n",
3792 pci_name(chip->pci));
3797 if (!chip->disabled) {
3798 /* continue probing */
3799 if (azx_probe_continue(chip))
3805 snd_card_free(card);
3806 pci_set_drvdata(pci, NULL);
3810 static int azx_probe(struct pci_dev *pci,
3811 const struct pci_device_id *pci_id)
3814 struct snd_card *card;
3816 bool schedule_probe;
3819 if (dev >= SNDRV_CARDS)
3826 err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
3828 snd_printk(KERN_ERR "hda-intel: Error creating card!\n");
3832 snd_card_set_dev(card, &pci->dev);
3834 err = azx_create(card, pci, dev, pci_id->driver_data, &chip);
3837 card->private_data = chip;
3839 pci_set_drvdata(pci, card);
3841 err = register_vga_switcheroo(chip);
3843 snd_printk(KERN_ERR SFX
3844 "%s: Error registering VGA-switcheroo client\n", pci_name(pci));
3848 if (check_hdmi_disabled(pci)) {
3849 snd_printk(KERN_INFO SFX "%s: VGA controller is disabled\n",
3851 snd_printk(KERN_INFO SFX "%s: Delaying initialization\n", pci_name(pci));
3852 chip->disabled = true;
3855 schedule_probe = !chip->disabled;
3857 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3858 if (patch[dev] && *patch[dev]) {
3859 snd_printk(KERN_ERR SFX "%s: Applying patch firmware '%s'\n",
3860 pci_name(pci), patch[dev]);
3861 err = request_firmware_nowait(THIS_MODULE, true, patch[dev],
3862 &pci->dev, GFP_KERNEL, card,
3866 schedule_probe = false; /* continued in azx_firmware_cb() */
3868 #endif /* CONFIG_SND_HDA_PATCH_LOADER */
3870 #ifndef CONFIG_SND_HDA_I915
3871 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
3872 snd_printk(KERN_ERR SFX "Haswell must build in CONFIG_SND_HDA_I915\n");
3876 schedule_work(&chip->probe_work);
3880 complete_all(&chip->probe_wait);
3884 snd_card_free(card);
3888 static int azx_probe_continue(struct azx *chip)
3890 struct pci_dev *pci = chip->pci;
3891 int dev = chip->dev_index;
3894 /* Request power well for Haswell HDA controller and codec */
3895 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {
3896 #ifdef CONFIG_SND_HDA_I915
3897 err = hda_i915_init();
3899 snd_printk(KERN_ERR SFX "Error request power-well from i915\n");
3903 hda_display_power(true);
3906 err = azx_first_init(chip);
3910 #ifdef CONFIG_SND_HDA_INPUT_BEEP
3911 chip->beep_mode = beep_mode[dev];
3914 /* create codec instances */
3915 err = azx_codec_create(chip, model[dev]);
3918 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3920 err = snd_hda_load_patch(chip->bus, chip->fw->size,
3925 release_firmware(chip->fw); /* no longer needed */
3930 if ((probe_only[dev] & 1) == 0) {
3931 err = azx_codec_configure(chip);
3936 /* create PCM streams */
3937 err = snd_hda_build_pcms(chip->bus);
3941 /* create mixer controls */
3942 err = azx_mixer_create(chip);
3946 err = snd_card_register(chip->card);
3951 power_down_all_codecs(chip);
3952 azx_notifier_register(chip);
3953 azx_add_card_list(chip);
3954 if ((chip->driver_caps & AZX_DCAPS_PM_RUNTIME) || chip->use_vga_switcheroo)
3955 pm_runtime_put_noidle(&pci->dev);
3959 chip->init_failed = 1;
3960 complete_all(&chip->probe_wait);
3964 static void azx_remove(struct pci_dev *pci)
3966 struct snd_card *card = pci_get_drvdata(pci);
3969 snd_card_free(card);
3973 static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
3975 { PCI_DEVICE(0x8086, 0x1c20),
3976 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3978 { PCI_DEVICE(0x8086, 0x1d20),
3979 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3981 { PCI_DEVICE(0x8086, 0x1e20),
3982 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3984 { PCI_DEVICE(0x8086, 0x8c20),
3985 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3987 { PCI_DEVICE(0x8086, 0x8d20),
3988 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3989 { PCI_DEVICE(0x8086, 0x8d21),
3990 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3992 { PCI_DEVICE(0x8086, 0x9c20),
3993 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3995 { PCI_DEVICE(0x8086, 0x9c21),
3996 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3997 /* Wildcat Point-LP */
3998 { PCI_DEVICE(0x8086, 0x9ca0),
3999 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
4001 { PCI_DEVICE(0x8086, 0x0a0c),
4002 .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
4003 { PCI_DEVICE(0x8086, 0x0c0c),
4004 .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
4005 { PCI_DEVICE(0x8086, 0x0d0c),
4006 .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
4008 { PCI_DEVICE(0x8086, 0x160c),
4009 .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL },
4011 { PCI_DEVICE(0x8086, 0x3b56),
4012 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
4014 { PCI_DEVICE(0x8086, 0x811b),
4015 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
4017 { PCI_DEVICE(0x8086, 0x080a),
4018 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
4020 { PCI_DEVICE(0x8086, 0x0f04),
4021 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
4023 { PCI_DEVICE(0x8086, 0x2668),
4024 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4025 AZX_DCAPS_BUFSIZE }, /* ICH6 */
4026 { PCI_DEVICE(0x8086, 0x27d8),
4027 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4028 AZX_DCAPS_BUFSIZE }, /* ICH7 */
4029 { PCI_DEVICE(0x8086, 0x269a),
4030 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4031 AZX_DCAPS_BUFSIZE }, /* ESB2 */
4032 { PCI_DEVICE(0x8086, 0x284b),
4033 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4034 AZX_DCAPS_BUFSIZE }, /* ICH8 */
4035 { PCI_DEVICE(0x8086, 0x293e),
4036 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4037 AZX_DCAPS_BUFSIZE }, /* ICH9 */
4038 { PCI_DEVICE(0x8086, 0x293f),
4039 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4040 AZX_DCAPS_BUFSIZE }, /* ICH9 */
4041 { PCI_DEVICE(0x8086, 0x3a3e),
4042 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4043 AZX_DCAPS_BUFSIZE }, /* ICH10 */
4044 { PCI_DEVICE(0x8086, 0x3a6e),
4045 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
4046 AZX_DCAPS_BUFSIZE }, /* ICH10 */
4048 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),
4049 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4050 .class_mask = 0xffffff,
4051 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_BUFSIZE },
4052 /* ATI SB 450/600/700/800/900 */
4053 { PCI_DEVICE(0x1002, 0x437b),
4054 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
4055 { PCI_DEVICE(0x1002, 0x4383),
4056 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
4058 { PCI_DEVICE(0x1022, 0x780d),
4059 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
4061 { PCI_DEVICE(0x1002, 0x793b),
4062 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4063 { PCI_DEVICE(0x1002, 0x7919),
4064 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4065 { PCI_DEVICE(0x1002, 0x960f),
4066 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4067 { PCI_DEVICE(0x1002, 0x970f),
4068 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4069 { PCI_DEVICE(0x1002, 0xaa00),
4070 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4071 { PCI_DEVICE(0x1002, 0xaa08),
4072 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4073 { PCI_DEVICE(0x1002, 0xaa10),
4074 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4075 { PCI_DEVICE(0x1002, 0xaa18),
4076 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4077 { PCI_DEVICE(0x1002, 0xaa20),
4078 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4079 { PCI_DEVICE(0x1002, 0xaa28),
4080 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4081 { PCI_DEVICE(0x1002, 0xaa30),
4082 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4083 { PCI_DEVICE(0x1002, 0xaa38),
4084 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4085 { PCI_DEVICE(0x1002, 0xaa40),
4086 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4087 { PCI_DEVICE(0x1002, 0xaa48),
4088 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4089 { PCI_DEVICE(0x1002, 0xaa50),
4090 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4091 { PCI_DEVICE(0x1002, 0xaa58),
4092 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4093 { PCI_DEVICE(0x1002, 0xaa60),
4094 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4095 { PCI_DEVICE(0x1002, 0xaa68),
4096 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4097 { PCI_DEVICE(0x1002, 0xaa80),
4098 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4099 { PCI_DEVICE(0x1002, 0xaa88),
4100 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4101 { PCI_DEVICE(0x1002, 0xaa90),
4102 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4103 { PCI_DEVICE(0x1002, 0xaa98),
4104 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4105 { PCI_DEVICE(0x1002, 0x9902),
4106 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4107 { PCI_DEVICE(0x1002, 0xaaa0),
4108 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4109 { PCI_DEVICE(0x1002, 0xaaa8),
4110 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4111 { PCI_DEVICE(0x1002, 0xaab0),
4112 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4113 /* VIA VT8251/VT8237A */
4114 { PCI_DEVICE(0x1106, 0x3288),
4115 .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
4116 /* VIA GFX VT7122/VX900 */
4117 { PCI_DEVICE(0x1106, 0x9170), .driver_data = AZX_DRIVER_GENERIC },
4118 /* VIA GFX VT6122/VX11 */
4119 { PCI_DEVICE(0x1106, 0x9140), .driver_data = AZX_DRIVER_GENERIC },
4121 { PCI_DEVICE(0x1039, 0x7502), .driver_data = AZX_DRIVER_SIS },
4123 { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI },
4125 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID),
4126 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4127 .class_mask = 0xffffff,
4128 .driver_data = AZX_DRIVER_NVIDIA | AZX_DCAPS_PRESET_NVIDIA },
4130 { PCI_DEVICE(0x6549, 0x1200),
4131 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
4132 { PCI_DEVICE(0x6549, 0x2200),
4133 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
4134 /* Creative X-Fi (CA0110-IBG) */
4136 { PCI_DEVICE(0x1102, 0x0010),
4137 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
4138 { PCI_DEVICE(0x1102, 0x0012),
4139 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
4140 #if !defined(CONFIG_SND_CTXFI) && !defined(CONFIG_SND_CTXFI_MODULE)
4141 /* the following entry conflicts with snd-ctxfi driver,
4142 * as ctxfi driver mutates from HD-audio to native mode with
4143 * a special command sequence.
4145 { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_ANY_ID),
4146 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4147 .class_mask = 0xffffff,
4148 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
4149 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
4151 /* this entry seems still valid -- i.e. without emu20kx chip */
4152 { PCI_DEVICE(0x1102, 0x0009),
4153 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
4154 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
4157 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
4158 /* VMware HDAudio */
4159 { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC },
4160 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */
4161 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID),
4162 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4163 .class_mask = 0xffffff,
4164 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
4165 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_ANY_ID),
4166 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4167 .class_mask = 0xffffff,
4168 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
4171 MODULE_DEVICE_TABLE(pci, azx_ids);
4173 /* pci_driver definition */
4174 static struct pci_driver azx_driver = {
4175 .name = KBUILD_MODNAME,
4176 .id_table = azx_ids,
4178 .remove = azx_remove,
4184 module_pci_driver(azx_driver);