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>
50 /* for snoop control */
51 #include <asm/pgtable.h>
52 #include <asm/cacheflush.h>
54 #include <sound/core.h>
55 #include <sound/initval.h>
56 #include "hda_codec.h"
59 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
60 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
61 static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
62 static char *model[SNDRV_CARDS];
63 static int position_fix[SNDRV_CARDS];
64 static int bdl_pos_adj[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
65 static int probe_mask[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
66 static int probe_only[SNDRV_CARDS];
67 static int single_cmd;
68 static int enable_msi = -1;
69 #ifdef CONFIG_SND_HDA_PATCH_LOADER
70 static char *patch[SNDRV_CARDS];
72 #ifdef CONFIG_SND_HDA_INPUT_BEEP
73 static int beep_mode[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] =
74 CONFIG_SND_HDA_INPUT_BEEP_MODE};
77 module_param_array(index, int, NULL, 0444);
78 MODULE_PARM_DESC(index, "Index value for Intel HD audio interface.");
79 module_param_array(id, charp, NULL, 0444);
80 MODULE_PARM_DESC(id, "ID string for Intel HD audio interface.");
81 module_param_array(enable, bool, NULL, 0444);
82 MODULE_PARM_DESC(enable, "Enable Intel HD audio interface.");
83 module_param_array(model, charp, NULL, 0444);
84 MODULE_PARM_DESC(model, "Use the given board model.");
85 module_param_array(position_fix, int, NULL, 0444);
86 MODULE_PARM_DESC(position_fix, "DMA pointer read method."
87 "(0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO).");
88 module_param_array(bdl_pos_adj, int, NULL, 0644);
89 MODULE_PARM_DESC(bdl_pos_adj, "BDL position adjustment offset.");
90 module_param_array(probe_mask, int, NULL, 0444);
91 MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1).");
92 module_param_array(probe_only, int, NULL, 0444);
93 MODULE_PARM_DESC(probe_only, "Only probing and no codec initialization.");
94 module_param(single_cmd, bool, 0444);
95 MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs "
96 "(for debugging only).");
97 module_param(enable_msi, int, 0444);
98 MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)");
99 #ifdef CONFIG_SND_HDA_PATCH_LOADER
100 module_param_array(patch, charp, NULL, 0444);
101 MODULE_PARM_DESC(patch, "Patch file for Intel HD audio interface.");
103 #ifdef CONFIG_SND_HDA_INPUT_BEEP
104 module_param_array(beep_mode, int, NULL, 0444);
105 MODULE_PARM_DESC(beep_mode, "Select HDA Beep registration mode "
106 "(0=off, 1=on, 2=mute switch on/off) (default=1).");
109 #ifdef CONFIG_SND_HDA_POWER_SAVE
110 static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
111 module_param(power_save, int, 0644);
112 MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
113 "(in second, 0 = disable).");
115 /* reset the HD-audio controller in power save mode.
116 * this may give more power-saving, but will take longer time to
119 static int power_save_controller = 1;
120 module_param(power_save_controller, bool, 0644);
121 MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
124 static int align_buffer_size = 1;
125 module_param(align_buffer_size, bool, 0644);
126 MODULE_PARM_DESC(align_buffer_size,
127 "Force buffer and period sizes to be multiple of 128 bytes.");
130 static bool hda_snoop = true;
131 module_param_named(snoop, hda_snoop, bool, 0444);
132 MODULE_PARM_DESC(snoop, "Enable/disable snooping");
133 #define azx_snoop(chip) (chip)->snoop
135 #define hda_snoop true
136 #define azx_snoop(chip) true
140 MODULE_LICENSE("GPL");
141 MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
170 MODULE_DESCRIPTION("Intel HDA driver");
172 #ifdef CONFIG_SND_VERBOSE_PRINTK
173 #define SFX /* nop */
175 #define SFX "hda-intel: "
181 #define ICH6_REG_GCAP 0x00
182 #define ICH6_GCAP_64OK (1 << 0) /* 64bit address support */
183 #define ICH6_GCAP_NSDO (3 << 1) /* # of serial data out signals */
184 #define ICH6_GCAP_BSS (31 << 3) /* # of bidirectional streams */
185 #define ICH6_GCAP_ISS (15 << 8) /* # of input streams */
186 #define ICH6_GCAP_OSS (15 << 12) /* # of output streams */
187 #define ICH6_REG_VMIN 0x02
188 #define ICH6_REG_VMAJ 0x03
189 #define ICH6_REG_OUTPAY 0x04
190 #define ICH6_REG_INPAY 0x06
191 #define ICH6_REG_GCTL 0x08
192 #define ICH6_GCTL_RESET (1 << 0) /* controller reset */
193 #define ICH6_GCTL_FCNTRL (1 << 1) /* flush control */
194 #define ICH6_GCTL_UNSOL (1 << 8) /* accept unsol. response enable */
195 #define ICH6_REG_WAKEEN 0x0c
196 #define ICH6_REG_STATESTS 0x0e
197 #define ICH6_REG_GSTS 0x10
198 #define ICH6_GSTS_FSTS (1 << 1) /* flush status */
199 #define ICH6_REG_INTCTL 0x20
200 #define ICH6_REG_INTSTS 0x24
201 #define ICH6_REG_WALLCLK 0x30 /* 24Mhz source */
202 #define ICH6_REG_OLD_SSYNC 0x34 /* SSYNC for old ICH */
203 #define ICH6_REG_SSYNC 0x38
204 #define ICH6_REG_CORBLBASE 0x40
205 #define ICH6_REG_CORBUBASE 0x44
206 #define ICH6_REG_CORBWP 0x48
207 #define ICH6_REG_CORBRP 0x4a
208 #define ICH6_CORBRP_RST (1 << 15) /* read pointer reset */
209 #define ICH6_REG_CORBCTL 0x4c
210 #define ICH6_CORBCTL_RUN (1 << 1) /* enable DMA */
211 #define ICH6_CORBCTL_CMEIE (1 << 0) /* enable memory error irq */
212 #define ICH6_REG_CORBSTS 0x4d
213 #define ICH6_CORBSTS_CMEI (1 << 0) /* memory error indication */
214 #define ICH6_REG_CORBSIZE 0x4e
216 #define ICH6_REG_RIRBLBASE 0x50
217 #define ICH6_REG_RIRBUBASE 0x54
218 #define ICH6_REG_RIRBWP 0x58
219 #define ICH6_RIRBWP_RST (1 << 15) /* write pointer reset */
220 #define ICH6_REG_RINTCNT 0x5a
221 #define ICH6_REG_RIRBCTL 0x5c
222 #define ICH6_RBCTL_IRQ_EN (1 << 0) /* enable IRQ */
223 #define ICH6_RBCTL_DMA_EN (1 << 1) /* enable DMA */
224 #define ICH6_RBCTL_OVERRUN_EN (1 << 2) /* enable overrun irq */
225 #define ICH6_REG_RIRBSTS 0x5d
226 #define ICH6_RBSTS_IRQ (1 << 0) /* response irq */
227 #define ICH6_RBSTS_OVERRUN (1 << 2) /* overrun irq */
228 #define ICH6_REG_RIRBSIZE 0x5e
230 #define ICH6_REG_IC 0x60
231 #define ICH6_REG_IR 0x64
232 #define ICH6_REG_IRS 0x68
233 #define ICH6_IRS_VALID (1<<1)
234 #define ICH6_IRS_BUSY (1<<0)
236 #define ICH6_REG_DPLBASE 0x70
237 #define ICH6_REG_DPUBASE 0x74
238 #define ICH6_DPLBASE_ENABLE 0x1 /* Enable position buffer */
240 /* SD offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
241 enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
243 /* stream register offsets from stream base */
244 #define ICH6_REG_SD_CTL 0x00
245 #define ICH6_REG_SD_STS 0x03
246 #define ICH6_REG_SD_LPIB 0x04
247 #define ICH6_REG_SD_CBL 0x08
248 #define ICH6_REG_SD_LVI 0x0c
249 #define ICH6_REG_SD_FIFOW 0x0e
250 #define ICH6_REG_SD_FIFOSIZE 0x10
251 #define ICH6_REG_SD_FORMAT 0x12
252 #define ICH6_REG_SD_BDLPL 0x18
253 #define ICH6_REG_SD_BDLPU 0x1c
256 #define ICH6_PCIREG_TCSEL 0x44
262 /* max number of SDs */
263 /* ICH, ATI and VIA have 4 playback and 4 capture */
264 #define ICH6_NUM_CAPTURE 4
265 #define ICH6_NUM_PLAYBACK 4
267 /* ULI has 6 playback and 5 capture */
268 #define ULI_NUM_CAPTURE 5
269 #define ULI_NUM_PLAYBACK 6
271 /* ATI HDMI has 1 playback and 0 capture */
272 #define ATIHDMI_NUM_CAPTURE 0
273 #define ATIHDMI_NUM_PLAYBACK 1
275 /* TERA has 4 playback and 3 capture */
276 #define TERA_NUM_CAPTURE 3
277 #define TERA_NUM_PLAYBACK 4
279 /* this number is statically defined for simplicity */
280 #define MAX_AZX_DEV 16
282 /* max number of fragments - we may use more if allocating more pages for BDL */
283 #define BDL_SIZE 4096
284 #define AZX_MAX_BDL_ENTRIES (BDL_SIZE / 16)
285 #define AZX_MAX_FRAG 32
286 /* max buffer size - no h/w limit, you can increase as you like */
287 #define AZX_MAX_BUF_SIZE (1024*1024*1024)
289 /* RIRB int mask: overrun[2], response[0] */
290 #define RIRB_INT_RESPONSE 0x01
291 #define RIRB_INT_OVERRUN 0x04
292 #define RIRB_INT_MASK 0x05
294 /* STATESTS int mask: S3,SD2,SD1,SD0 */
295 #define AZX_MAX_CODECS 8
296 #define AZX_DEFAULT_CODECS 4
297 #define STATESTS_INT_MASK ((1 << AZX_MAX_CODECS) - 1)
300 #define SD_CTL_STREAM_RESET 0x01 /* stream reset bit */
301 #define SD_CTL_DMA_START 0x02 /* stream DMA start bit */
302 #define SD_CTL_STRIPE (3 << 16) /* stripe control */
303 #define SD_CTL_TRAFFIC_PRIO (1 << 18) /* traffic priority */
304 #define SD_CTL_DIR (1 << 19) /* bi-directional stream */
305 #define SD_CTL_STREAM_TAG_MASK (0xf << 20)
306 #define SD_CTL_STREAM_TAG_SHIFT 20
308 /* SD_CTL and SD_STS */
309 #define SD_INT_DESC_ERR 0x10 /* descriptor error interrupt */
310 #define SD_INT_FIFO_ERR 0x08 /* FIFO error interrupt */
311 #define SD_INT_COMPLETE 0x04 /* completion interrupt */
312 #define SD_INT_MASK (SD_INT_DESC_ERR|SD_INT_FIFO_ERR|\
316 #define SD_STS_FIFO_READY 0x20 /* FIFO ready */
318 /* INTCTL and INTSTS */
319 #define ICH6_INT_ALL_STREAM 0xff /* all stream interrupts */
320 #define ICH6_INT_CTRL_EN 0x40000000 /* controller interrupt enable bit */
321 #define ICH6_INT_GLOBAL_EN 0x80000000 /* global interrupt enable bit */
323 /* below are so far hardcoded - should read registers in future */
324 #define ICH6_MAX_CORB_ENTRIES 256
325 #define ICH6_MAX_RIRB_ENTRIES 256
327 /* position fix mode */
335 /* Defines for ATI HD Audio support in SB450 south bridge */
336 #define ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR 0x42
337 #define ATI_SB450_HDAUDIO_ENABLE_SNOOP 0x02
339 /* Defines for Nvidia HDA support */
340 #define NVIDIA_HDA_TRANSREG_ADDR 0x4e
341 #define NVIDIA_HDA_ENABLE_COHBITS 0x0f
342 #define NVIDIA_HDA_ISTRM_COH 0x4d
343 #define NVIDIA_HDA_OSTRM_COH 0x4c
344 #define NVIDIA_HDA_ENABLE_COHBIT 0x01
346 /* Defines for Intel SCH HDA snoop control */
347 #define INTEL_SCH_HDA_DEVC 0x78
348 #define INTEL_SCH_HDA_DEVC_NOSNOOP (0x1<<11)
350 /* Define IN stream 0 FIFO size offset in VIA controller */
351 #define VIA_IN_STREAM0_FIFO_SIZE_OFFSET 0x90
352 /* Define VIA HD Audio Device ID*/
353 #define VIA_HDAC_DEVICE_ID 0x3288
355 /* HD Audio class code */
356 #define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
362 struct snd_dma_buffer bdl; /* BDL buffer */
363 u32 *posbuf; /* position buffer pointer */
365 unsigned int bufsize; /* size of the play buffer in bytes */
366 unsigned int period_bytes; /* size of the period in bytes */
367 unsigned int frags; /* number for period in the play buffer */
368 unsigned int fifo_size; /* FIFO size */
369 unsigned long start_wallclk; /* start + minimum wallclk */
370 unsigned long period_wallclk; /* wallclk for period */
372 void __iomem *sd_addr; /* stream descriptor pointer */
374 u32 sd_int_sta_mask; /* stream int status mask */
377 struct snd_pcm_substream *substream; /* assigned substream,
380 unsigned int format_val; /* format value to be set in the
381 * controller and the codec
383 unsigned char stream_tag; /* assigned stream */
384 unsigned char index; /* stream index */
385 int assigned_key; /* last device# key assigned to */
387 unsigned int opened :1;
388 unsigned int running :1;
389 unsigned int irq_pending :1;
392 * A flag to ensure DMA position is 0
393 * when link position is not greater than FIFO size
395 unsigned int insufficient :1;
396 unsigned int wc_marked:1;
401 u32 *buf; /* CORB/RIRB buffer
402 * Each CORB entry is 4byte, RIRB is 8byte
404 dma_addr_t addr; /* physical address of CORB/RIRB buffer */
406 unsigned short rp, wp; /* read/write pointers */
407 int cmds[AZX_MAX_CODECS]; /* number of pending requests */
408 u32 res[AZX_MAX_CODECS]; /* last read value */
412 struct snd_card *card;
416 /* chip type specific */
418 unsigned int driver_caps;
419 int playback_streams;
420 int playback_index_offset;
422 int capture_index_offset;
427 void __iomem *remap_addr;
432 struct mutex open_mutex;
434 /* streams (x num_streams) */
435 struct azx_dev *azx_dev;
438 struct snd_pcm *pcm[HDA_MAX_PCMS];
441 unsigned short codec_mask;
442 int codec_probe_mask; /* copied from probe_mask option */
444 unsigned int beep_mode;
450 /* CORB/RIRB and position buffers */
451 struct snd_dma_buffer rb;
452 struct snd_dma_buffer posbuf;
455 int position_fix[2]; /* for both playback/capture streams */
457 unsigned int running :1;
458 unsigned int initialized :1;
459 unsigned int single_cmd :1;
460 unsigned int polling_mode :1;
462 unsigned int irq_pending_warned :1;
463 unsigned int probing :1; /* codec probing phase */
464 unsigned int snoop:1;
465 unsigned int align_buffer_size:1;
468 unsigned int last_cmd[AZX_MAX_CODECS];
470 /* for pending irqs */
471 struct work_struct irq_pending_work;
473 /* reboot notifier (for mysterious hangup problem at power-down) */
474 struct notifier_block reboot_notifier;
491 AZX_NUM_DRIVERS, /* keep this as last entry */
494 /* driver quirks (capabilities) */
495 /* bits 0-7 are used for indicating driver type */
496 #define AZX_DCAPS_NO_TCSEL (1 << 8) /* No Intel TCSEL bit */
497 #define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
498 #define AZX_DCAPS_ATI_SNOOP (1 << 10) /* ATI snoop enable */
499 #define AZX_DCAPS_NVIDIA_SNOOP (1 << 11) /* Nvidia snoop enable */
500 #define AZX_DCAPS_SCH_SNOOP (1 << 12) /* SCH/PCH snoop enable */
501 #define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */
502 #define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */
503 #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
504 #define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */
505 #define AZX_DCAPS_POSFIX_VIA (1 << 17) /* Use VIACOMBO as default */
506 #define AZX_DCAPS_NO_64BIT (1 << 18) /* No 64bit address */
507 #define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */
508 #define AZX_DCAPS_OLD_SSYNC (1 << 20) /* Old SSYNC reg for ICH */
509 #define AZX_DCAPS_BUFSIZE (1 << 21) /* no buffer size alignment */
511 /* quirks for ATI SB / AMD Hudson */
512 #define AZX_DCAPS_PRESET_ATI_SB \
513 (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
514 AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
516 /* quirks for ATI/AMD HDMI */
517 #define AZX_DCAPS_PRESET_ATI_HDMI \
518 (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
520 /* quirks for Nvidia */
521 #define AZX_DCAPS_PRESET_NVIDIA \
522 (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI)
524 static char *driver_short_names[] __devinitdata = {
525 [AZX_DRIVER_ICH] = "HDA Intel",
526 [AZX_DRIVER_PCH] = "HDA Intel PCH",
527 [AZX_DRIVER_SCH] = "HDA Intel MID",
528 [AZX_DRIVER_ATI] = "HDA ATI SB",
529 [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI",
530 [AZX_DRIVER_VIA] = "HDA VIA VT82xx",
531 [AZX_DRIVER_SIS] = "HDA SIS966",
532 [AZX_DRIVER_ULI] = "HDA ULI M5461",
533 [AZX_DRIVER_NVIDIA] = "HDA NVidia",
534 [AZX_DRIVER_TERA] = "HDA Teradici",
535 [AZX_DRIVER_CTX] = "HDA Creative",
536 [AZX_DRIVER_GENERIC] = "HD-Audio Generic",
540 * macros for easy use
542 #define azx_writel(chip,reg,value) \
543 writel(value, (chip)->remap_addr + ICH6_REG_##reg)
544 #define azx_readl(chip,reg) \
545 readl((chip)->remap_addr + ICH6_REG_##reg)
546 #define azx_writew(chip,reg,value) \
547 writew(value, (chip)->remap_addr + ICH6_REG_##reg)
548 #define azx_readw(chip,reg) \
549 readw((chip)->remap_addr + ICH6_REG_##reg)
550 #define azx_writeb(chip,reg,value) \
551 writeb(value, (chip)->remap_addr + ICH6_REG_##reg)
552 #define azx_readb(chip,reg) \
553 readb((chip)->remap_addr + ICH6_REG_##reg)
555 #define azx_sd_writel(dev,reg,value) \
556 writel(value, (dev)->sd_addr + ICH6_REG_##reg)
557 #define azx_sd_readl(dev,reg) \
558 readl((dev)->sd_addr + ICH6_REG_##reg)
559 #define azx_sd_writew(dev,reg,value) \
560 writew(value, (dev)->sd_addr + ICH6_REG_##reg)
561 #define azx_sd_readw(dev,reg) \
562 readw((dev)->sd_addr + ICH6_REG_##reg)
563 #define azx_sd_writeb(dev,reg,value) \
564 writeb(value, (dev)->sd_addr + ICH6_REG_##reg)
565 #define azx_sd_readb(dev,reg) \
566 readb((dev)->sd_addr + ICH6_REG_##reg)
568 /* for pcm support */
569 #define get_azx_dev(substream) (substream->runtime->private_data)
572 static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool on)
578 if (!dmab || !dmab->area || !dmab->bytes)
581 #ifdef CONFIG_SND_DMA_SGBUF
582 if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_SG) {
583 struct snd_sg_buf *sgbuf = dmab->private_data;
585 set_pages_array_wc(sgbuf->page_table, sgbuf->pages);
587 set_pages_array_wb(sgbuf->page_table, sgbuf->pages);
592 pages = (dmab->bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;
594 set_memory_wc((unsigned long)dmab->area, pages);
596 set_memory_wb((unsigned long)dmab->area, pages);
599 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
602 __mark_pages_wc(chip, buf, on);
604 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
605 struct snd_pcm_substream *substream, bool on)
607 if (azx_dev->wc_marked != on) {
608 __mark_pages_wc(chip, substream->runtime->dma_buffer_p, on);
609 azx_dev->wc_marked = on;
613 /* NOP for other archs */
614 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
618 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
619 struct snd_pcm_substream *substream, bool on)
624 static int azx_acquire_irq(struct azx *chip, int do_disconnect);
625 static int azx_send_cmd(struct hda_bus *bus, unsigned int val);
627 * Interface for HD codec
631 * CORB / RIRB interface
633 static int azx_alloc_cmd_io(struct azx *chip)
637 /* single page (at least 4096 bytes) must suffice for both ringbuffes */
638 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
639 snd_dma_pci_data(chip->pci),
640 PAGE_SIZE, &chip->rb);
642 snd_printk(KERN_ERR SFX "cannot allocate CORB/RIRB\n");
645 mark_pages_wc(chip, &chip->rb, true);
649 static void azx_init_cmd_io(struct azx *chip)
651 spin_lock_irq(&chip->reg_lock);
653 chip->corb.addr = chip->rb.addr;
654 chip->corb.buf = (u32 *)chip->rb.area;
655 azx_writel(chip, CORBLBASE, (u32)chip->corb.addr);
656 azx_writel(chip, CORBUBASE, upper_32_bits(chip->corb.addr));
658 /* set the corb size to 256 entries (ULI requires explicitly) */
659 azx_writeb(chip, CORBSIZE, 0x02);
660 /* set the corb write pointer to 0 */
661 azx_writew(chip, CORBWP, 0);
662 /* reset the corb hw read pointer */
663 azx_writew(chip, CORBRP, ICH6_CORBRP_RST);
664 /* enable corb dma */
665 azx_writeb(chip, CORBCTL, ICH6_CORBCTL_RUN);
668 chip->rirb.addr = chip->rb.addr + 2048;
669 chip->rirb.buf = (u32 *)(chip->rb.area + 2048);
670 chip->rirb.wp = chip->rirb.rp = 0;
671 memset(chip->rirb.cmds, 0, sizeof(chip->rirb.cmds));
672 azx_writel(chip, RIRBLBASE, (u32)chip->rirb.addr);
673 azx_writel(chip, RIRBUBASE, upper_32_bits(chip->rirb.addr));
675 /* set the rirb size to 256 entries (ULI requires explicitly) */
676 azx_writeb(chip, RIRBSIZE, 0x02);
677 /* reset the rirb hw write pointer */
678 azx_writew(chip, RIRBWP, ICH6_RIRBWP_RST);
679 /* set N=1, get RIRB response interrupt for new entry */
680 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
681 azx_writew(chip, RINTCNT, 0xc0);
683 azx_writew(chip, RINTCNT, 1);
684 /* enable rirb dma and response irq */
685 azx_writeb(chip, RIRBCTL, ICH6_RBCTL_DMA_EN | ICH6_RBCTL_IRQ_EN);
686 spin_unlock_irq(&chip->reg_lock);
689 static void azx_free_cmd_io(struct azx *chip)
691 spin_lock_irq(&chip->reg_lock);
692 /* disable ringbuffer DMAs */
693 azx_writeb(chip, RIRBCTL, 0);
694 azx_writeb(chip, CORBCTL, 0);
695 spin_unlock_irq(&chip->reg_lock);
698 static unsigned int azx_command_addr(u32 cmd)
700 unsigned int addr = cmd >> 28;
702 if (addr >= AZX_MAX_CODECS) {
710 static unsigned int azx_response_addr(u32 res)
712 unsigned int addr = res & 0xf;
714 if (addr >= AZX_MAX_CODECS) {
723 static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
725 struct azx *chip = bus->private_data;
726 unsigned int addr = azx_command_addr(val);
729 spin_lock_irq(&chip->reg_lock);
731 /* add command to corb */
732 wp = azx_readb(chip, CORBWP);
734 wp %= ICH6_MAX_CORB_ENTRIES;
736 chip->rirb.cmds[addr]++;
737 chip->corb.buf[wp] = cpu_to_le32(val);
738 azx_writel(chip, CORBWP, wp);
740 spin_unlock_irq(&chip->reg_lock);
745 #define ICH6_RIRB_EX_UNSOL_EV (1<<4)
747 /* retrieve RIRB entry - called from interrupt handler */
748 static void azx_update_rirb(struct azx *chip)
754 wp = azx_readb(chip, RIRBWP);
755 if (wp == chip->rirb.wp)
759 while (chip->rirb.rp != wp) {
761 chip->rirb.rp %= ICH6_MAX_RIRB_ENTRIES;
763 rp = chip->rirb.rp << 1; /* an RIRB entry is 8-bytes */
764 res_ex = le32_to_cpu(chip->rirb.buf[rp + 1]);
765 res = le32_to_cpu(chip->rirb.buf[rp]);
766 addr = azx_response_addr(res_ex);
767 if (res_ex & ICH6_RIRB_EX_UNSOL_EV)
768 snd_hda_queue_unsol_event(chip->bus, res, res_ex);
769 else if (chip->rirb.cmds[addr]) {
770 chip->rirb.res[addr] = res;
772 chip->rirb.cmds[addr]--;
774 snd_printk(KERN_ERR SFX "spurious response %#x:%#x, "
777 chip->last_cmd[addr]);
781 /* receive a response */
782 static unsigned int azx_rirb_get_response(struct hda_bus *bus,
785 struct azx *chip = bus->private_data;
786 unsigned long timeout;
787 unsigned long loopcounter;
791 timeout = jiffies + msecs_to_jiffies(1000);
793 for (loopcounter = 0;; loopcounter++) {
794 if (chip->polling_mode || do_poll) {
795 spin_lock_irq(&chip->reg_lock);
796 azx_update_rirb(chip);
797 spin_unlock_irq(&chip->reg_lock);
799 if (!chip->rirb.cmds[addr]) {
804 chip->poll_count = 0;
805 return chip->rirb.res[addr]; /* the last value */
807 if (time_after(jiffies, timeout))
809 if (bus->needs_damn_long_delay || loopcounter > 3000)
810 msleep(2); /* temporary workaround */
817 if (!chip->polling_mode && chip->poll_count < 2) {
818 snd_printdd(SFX "azx_get_response timeout, "
819 "polling the codec once: last cmd=0x%08x\n",
820 chip->last_cmd[addr]);
827 if (!chip->polling_mode) {
828 snd_printk(KERN_WARNING SFX "azx_get_response timeout, "
829 "switching to polling mode: last cmd=0x%08x\n",
830 chip->last_cmd[addr]);
831 chip->polling_mode = 1;
836 snd_printk(KERN_WARNING SFX "No response from codec, "
837 "disabling MSI: last cmd=0x%08x\n",
838 chip->last_cmd[addr]);
839 free_irq(chip->irq, chip);
841 pci_disable_msi(chip->pci);
843 if (azx_acquire_irq(chip, 1) < 0) {
851 /* If this critical timeout happens during the codec probing
852 * phase, this is likely an access to a non-existing codec
853 * slot. Better to return an error and reset the system.
858 /* a fatal communication error; need either to reset or to fallback
859 * to the single_cmd mode
862 if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) {
863 bus->response_reset = 1;
864 return -1; /* give a chance to retry */
867 snd_printk(KERN_ERR "hda_intel: azx_get_response timeout, "
868 "switching to single_cmd mode: last cmd=0x%08x\n",
869 chip->last_cmd[addr]);
870 chip->single_cmd = 1;
871 bus->response_reset = 0;
872 /* release CORB/RIRB */
873 azx_free_cmd_io(chip);
874 /* disable unsolicited responses */
875 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL);
880 * Use the single immediate command instead of CORB/RIRB for simplicity
882 * Note: according to Intel, this is not preferred use. The command was
883 * intended for the BIOS only, and may get confused with unsolicited
884 * responses. So, we shouldn't use it for normal operation from the
886 * I left the codes, however, for debugging/testing purposes.
889 /* receive a response */
890 static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
895 /* check IRV busy bit */
896 if (azx_readw(chip, IRS) & ICH6_IRS_VALID) {
897 /* reuse rirb.res as the response return value */
898 chip->rirb.res[addr] = azx_readl(chip, IR);
903 if (printk_ratelimit())
904 snd_printd(SFX "get_response timeout: IRS=0x%x\n",
905 azx_readw(chip, IRS));
906 chip->rirb.res[addr] = -1;
911 static int azx_single_send_cmd(struct hda_bus *bus, u32 val)
913 struct azx *chip = bus->private_data;
914 unsigned int addr = azx_command_addr(val);
919 /* check ICB busy bit */
920 if (!((azx_readw(chip, IRS) & ICH6_IRS_BUSY))) {
921 /* Clear IRV valid bit */
922 azx_writew(chip, IRS, azx_readw(chip, IRS) |
924 azx_writel(chip, IC, val);
925 azx_writew(chip, IRS, azx_readw(chip, IRS) |
927 return azx_single_wait_for_response(chip, addr);
931 if (printk_ratelimit())
932 snd_printd(SFX "send_cmd timeout: IRS=0x%x, val=0x%x\n",
933 azx_readw(chip, IRS), val);
937 /* receive a response */
938 static unsigned int azx_single_get_response(struct hda_bus *bus,
941 struct azx *chip = bus->private_data;
942 return chip->rirb.res[addr];
946 * The below are the main callbacks from hda_codec.
948 * They are just the skeleton to call sub-callbacks according to the
949 * current setting of chip->single_cmd.
953 static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
955 struct azx *chip = bus->private_data;
957 chip->last_cmd[azx_command_addr(val)] = val;
958 if (chip->single_cmd)
959 return azx_single_send_cmd(bus, val);
961 return azx_corb_send_cmd(bus, val);
965 static unsigned int azx_get_response(struct hda_bus *bus,
968 struct azx *chip = bus->private_data;
969 if (chip->single_cmd)
970 return azx_single_get_response(bus, addr);
972 return azx_rirb_get_response(bus, addr);
975 #ifdef CONFIG_SND_HDA_POWER_SAVE
976 static void azx_power_notify(struct hda_bus *bus);
979 /* reset codec link */
980 static int azx_reset(struct azx *chip, int full_reset)
988 azx_writeb(chip, STATESTS, STATESTS_INT_MASK);
990 /* reset controller */
991 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_RESET);
994 while (azx_readb(chip, GCTL) && --count)
997 /* delay for >= 100us for codec PLL to settle per spec
998 * Rev 0.9 section 5.5.1
1002 /* Bring controller out of reset */
1003 azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | ICH6_GCTL_RESET);
1006 while (!azx_readb(chip, GCTL) && --count)
1009 /* Brent Chartrand said to wait >= 540us for codecs to initialize */
1013 /* check to see if controller is ready */
1014 if (!azx_readb(chip, GCTL)) {
1015 snd_printd(SFX "azx_reset: controller not ready!\n");
1019 /* Accept unsolicited responses */
1020 if (!chip->single_cmd)
1021 azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
1025 if (!chip->codec_mask) {
1026 chip->codec_mask = azx_readw(chip, STATESTS);
1027 snd_printdd(SFX "codec_mask = 0x%x\n", chip->codec_mask);
1035 * Lowlevel interface
1038 /* enable interrupts */
1039 static void azx_int_enable(struct azx *chip)
1041 /* enable controller CIE and GIE */
1042 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) |
1043 ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN);
1046 /* disable interrupts */
1047 static void azx_int_disable(struct azx *chip)
1051 /* disable interrupts in stream descriptor */
1052 for (i = 0; i < chip->num_streams; i++) {
1053 struct azx_dev *azx_dev = &chip->azx_dev[i];
1054 azx_sd_writeb(azx_dev, SD_CTL,
1055 azx_sd_readb(azx_dev, SD_CTL) & ~SD_INT_MASK);
1058 /* disable SIE for all streams */
1059 azx_writeb(chip, INTCTL, 0);
1061 /* disable controller CIE and GIE */
1062 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) &
1063 ~(ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN));
1066 /* clear interrupts */
1067 static void azx_int_clear(struct azx *chip)
1071 /* clear stream status */
1072 for (i = 0; i < chip->num_streams; i++) {
1073 struct azx_dev *azx_dev = &chip->azx_dev[i];
1074 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1077 /* clear STATESTS */
1078 azx_writeb(chip, STATESTS, STATESTS_INT_MASK);
1080 /* clear rirb status */
1081 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1083 /* clear int status */
1084 azx_writel(chip, INTSTS, ICH6_INT_CTRL_EN | ICH6_INT_ALL_STREAM);
1087 /* start a stream */
1088 static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev)
1091 * Before stream start, initialize parameter
1093 azx_dev->insufficient = 1;
1096 azx_writel(chip, INTCTL,
1097 azx_readl(chip, INTCTL) | (1 << azx_dev->index));
1098 /* set DMA start and interrupt mask */
1099 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1100 SD_CTL_DMA_START | SD_INT_MASK);
1104 static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev)
1106 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) &
1107 ~(SD_CTL_DMA_START | SD_INT_MASK));
1108 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); /* to be sure */
1112 static void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev)
1114 azx_stream_clear(chip, azx_dev);
1116 azx_writel(chip, INTCTL,
1117 azx_readl(chip, INTCTL) & ~(1 << azx_dev->index));
1122 * reset and start the controller registers
1124 static void azx_init_chip(struct azx *chip, int full_reset)
1126 if (chip->initialized)
1129 /* reset controller */
1130 azx_reset(chip, full_reset);
1132 /* initialize interrupts */
1133 azx_int_clear(chip);
1134 azx_int_enable(chip);
1136 /* initialize the codec command I/O */
1137 if (!chip->single_cmd)
1138 azx_init_cmd_io(chip);
1140 /* program the position buffer */
1141 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
1142 azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr));
1144 chip->initialized = 1;
1148 * initialize the PCI registers
1150 /* update bits in a PCI register byte */
1151 static void update_pci_byte(struct pci_dev *pci, unsigned int reg,
1152 unsigned char mask, unsigned char val)
1156 pci_read_config_byte(pci, reg, &data);
1158 data |= (val & mask);
1159 pci_write_config_byte(pci, reg, data);
1162 static void azx_init_pci(struct azx *chip)
1164 /* force to non-snoop mode for a new VIA controller when BIOS is set */
1165 if (chip->snoop && chip->driver_type == AZX_DRIVER_VIA) {
1167 pci_read_config_byte(chip->pci, 0x42, &snoop);
1168 if (!(snoop & 0x80) && chip->pci->revision == 0x30) {
1170 snd_printdd(SFX "Force to non-snoop mode\n");
1174 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
1175 * TCSEL == Traffic Class Select Register, which sets PCI express QOS
1176 * Ensuring these bits are 0 clears playback static on some HD Audio
1178 * The PCI register TCSEL is defined in the Intel manuals.
1180 if (!(chip->driver_caps & AZX_DCAPS_NO_TCSEL)) {
1181 snd_printdd(SFX "Clearing TCSEL\n");
1182 update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0);
1185 /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
1186 * we need to enable snoop.
1188 if (chip->driver_caps & AZX_DCAPS_ATI_SNOOP) {
1189 snd_printdd(SFX "Setting ATI snoop: %d\n", azx_snoop(chip));
1190 update_pci_byte(chip->pci,
1191 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR, 0x07,
1192 azx_snoop(chip) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP : 0);
1195 /* For NVIDIA HDA, enable snoop */
1196 if (chip->driver_caps & AZX_DCAPS_NVIDIA_SNOOP) {
1197 snd_printdd(SFX "Setting Nvidia snoop: %d\n", azx_snoop(chip));
1198 update_pci_byte(chip->pci,
1199 NVIDIA_HDA_TRANSREG_ADDR,
1200 0x0f, NVIDIA_HDA_ENABLE_COHBITS);
1201 update_pci_byte(chip->pci,
1202 NVIDIA_HDA_ISTRM_COH,
1203 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1204 update_pci_byte(chip->pci,
1205 NVIDIA_HDA_OSTRM_COH,
1206 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1209 /* Enable SCH/PCH snoop if needed */
1210 if (chip->driver_caps & AZX_DCAPS_SCH_SNOOP) {
1211 unsigned short snoop;
1212 pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);
1213 if ((!azx_snoop(chip) && !(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)) ||
1214 (azx_snoop(chip) && (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP))) {
1215 snoop &= ~INTEL_SCH_HDA_DEVC_NOSNOOP;
1216 if (!azx_snoop(chip))
1217 snoop |= INTEL_SCH_HDA_DEVC_NOSNOOP;
1218 pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, snoop);
1219 pci_read_config_word(chip->pci,
1220 INTEL_SCH_HDA_DEVC, &snoop);
1222 snd_printdd(SFX "SCH snoop: %s\n",
1223 (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)
1224 ? "Disabled" : "Enabled");
1229 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev);
1234 static irqreturn_t azx_interrupt(int irq, void *dev_id)
1236 struct azx *chip = dev_id;
1237 struct azx_dev *azx_dev;
1242 spin_lock(&chip->reg_lock);
1244 status = azx_readl(chip, INTSTS);
1246 spin_unlock(&chip->reg_lock);
1250 for (i = 0; i < chip->num_streams; i++) {
1251 azx_dev = &chip->azx_dev[i];
1252 if (status & azx_dev->sd_int_sta_mask) {
1253 sd_status = azx_sd_readb(azx_dev, SD_STS);
1254 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1255 if (!azx_dev->substream || !azx_dev->running ||
1256 !(sd_status & SD_INT_COMPLETE))
1258 /* check whether this IRQ is really acceptable */
1259 ok = azx_position_ok(chip, azx_dev);
1261 azx_dev->irq_pending = 0;
1262 spin_unlock(&chip->reg_lock);
1263 snd_pcm_period_elapsed(azx_dev->substream);
1264 spin_lock(&chip->reg_lock);
1265 } else if (ok == 0 && chip->bus && chip->bus->workq) {
1266 /* bogus IRQ, process it later */
1267 azx_dev->irq_pending = 1;
1268 queue_work(chip->bus->workq,
1269 &chip->irq_pending_work);
1274 /* clear rirb int */
1275 status = azx_readb(chip, RIRBSTS);
1276 if (status & RIRB_INT_MASK) {
1277 if (status & RIRB_INT_RESPONSE) {
1278 if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY)
1280 azx_update_rirb(chip);
1282 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1286 /* clear state status int */
1287 if (azx_readb(chip, STATESTS) & 0x04)
1288 azx_writeb(chip, STATESTS, 0x04);
1290 spin_unlock(&chip->reg_lock);
1297 * set up a BDL entry
1299 static int setup_bdle(struct snd_pcm_substream *substream,
1300 struct azx_dev *azx_dev, u32 **bdlp,
1301 int ofs, int size, int with_ioc)
1309 if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES)
1312 addr = snd_pcm_sgbuf_get_addr(substream, ofs);
1313 /* program the address field of the BDL entry */
1314 bdl[0] = cpu_to_le32((u32)addr);
1315 bdl[1] = cpu_to_le32(upper_32_bits(addr));
1316 /* program the size field of the BDL entry */
1317 chunk = snd_pcm_sgbuf_get_chunk_size(substream, ofs, size);
1318 bdl[2] = cpu_to_le32(chunk);
1319 /* program the IOC to enable interrupt
1320 * only when the whole fragment is processed
1323 bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01);
1333 * set up BDL entries
1335 static int azx_setup_periods(struct azx *chip,
1336 struct snd_pcm_substream *substream,
1337 struct azx_dev *azx_dev)
1340 int i, ofs, periods, period_bytes;
1343 /* reset BDL address */
1344 azx_sd_writel(azx_dev, SD_BDLPL, 0);
1345 azx_sd_writel(azx_dev, SD_BDLPU, 0);
1347 period_bytes = azx_dev->period_bytes;
1348 periods = azx_dev->bufsize / period_bytes;
1350 /* program the initial BDL entries */
1351 bdl = (u32 *)azx_dev->bdl.area;
1354 pos_adj = bdl_pos_adj[chip->dev_index];
1356 struct snd_pcm_runtime *runtime = substream->runtime;
1357 int pos_align = pos_adj;
1358 pos_adj = (pos_adj * runtime->rate + 47999) / 48000;
1360 pos_adj = pos_align;
1362 pos_adj = ((pos_adj + pos_align - 1) / pos_align) *
1364 pos_adj = frames_to_bytes(runtime, pos_adj);
1365 if (pos_adj >= period_bytes) {
1366 snd_printk(KERN_WARNING SFX "Too big adjustment %d\n",
1367 bdl_pos_adj[chip->dev_index]);
1370 ofs = setup_bdle(substream, azx_dev,
1372 !substream->runtime->no_period_wakeup);
1378 for (i = 0; i < periods; i++) {
1379 if (i == periods - 1 && pos_adj)
1380 ofs = setup_bdle(substream, azx_dev, &bdl, ofs,
1381 period_bytes - pos_adj, 0);
1383 ofs = setup_bdle(substream, azx_dev, &bdl, ofs,
1385 !substream->runtime->no_period_wakeup);
1392 snd_printk(KERN_ERR SFX "Too many BDL entries: buffer=%d, period=%d\n",
1393 azx_dev->bufsize, period_bytes);
1398 static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev)
1403 azx_stream_clear(chip, azx_dev);
1405 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1406 SD_CTL_STREAM_RESET);
1409 while (!((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1412 val &= ~SD_CTL_STREAM_RESET;
1413 azx_sd_writeb(azx_dev, SD_CTL, val);
1417 /* waiting for hardware to report that the stream is out of reset */
1418 while (((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1422 /* reset first position - may not be synced with hw at this time */
1423 *azx_dev->posbuf = 0;
1427 * set up the SD for streaming
1429 static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev)
1432 /* make sure the run bit is zero for SD */
1433 azx_stream_clear(chip, azx_dev);
1434 /* program the stream_tag */
1435 val = azx_sd_readl(azx_dev, SD_CTL);
1436 val = (val & ~SD_CTL_STREAM_TAG_MASK) |
1437 (azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT);
1438 if (!azx_snoop(chip))
1439 val |= SD_CTL_TRAFFIC_PRIO;
1440 azx_sd_writel(azx_dev, SD_CTL, val);
1442 /* program the length of samples in cyclic buffer */
1443 azx_sd_writel(azx_dev, SD_CBL, azx_dev->bufsize);
1445 /* program the stream format */
1446 /* this value needs to be the same as the one programmed */
1447 azx_sd_writew(azx_dev, SD_FORMAT, azx_dev->format_val);
1449 /* program the stream LVI (last valid index) of the BDL */
1450 azx_sd_writew(azx_dev, SD_LVI, azx_dev->frags - 1);
1452 /* program the BDL address */
1453 /* lower BDL address */
1454 azx_sd_writel(azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr);
1455 /* upper BDL address */
1456 azx_sd_writel(azx_dev, SD_BDLPU, upper_32_bits(azx_dev->bdl.addr));
1458 /* enable the position buffer */
1459 if (chip->position_fix[0] != POS_FIX_LPIB ||
1460 chip->position_fix[1] != POS_FIX_LPIB) {
1461 if (!(azx_readl(chip, DPLBASE) & ICH6_DPLBASE_ENABLE))
1462 azx_writel(chip, DPLBASE,
1463 (u32)chip->posbuf.addr | ICH6_DPLBASE_ENABLE);
1466 /* set the interrupt enable bits in the descriptor control register */
1467 azx_sd_writel(azx_dev, SD_CTL,
1468 azx_sd_readl(azx_dev, SD_CTL) | SD_INT_MASK);
1474 * Probe the given codec address
1476 static int probe_codec(struct azx *chip, int addr)
1478 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1479 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1482 mutex_lock(&chip->bus->cmd_mutex);
1484 azx_send_cmd(chip->bus, cmd);
1485 res = azx_get_response(chip->bus, addr);
1487 mutex_unlock(&chip->bus->cmd_mutex);
1490 snd_printdd(SFX "codec #%d probed OK\n", addr);
1494 static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
1495 struct hda_pcm *cpcm);
1496 static void azx_stop_chip(struct azx *chip);
1498 static void azx_bus_reset(struct hda_bus *bus)
1500 struct azx *chip = bus->private_data;
1503 azx_stop_chip(chip);
1504 azx_init_chip(chip, 1);
1506 if (chip->initialized) {
1509 for (i = 0; i < HDA_MAX_PCMS; i++)
1510 snd_pcm_suspend_all(chip->pcm[i]);
1511 snd_hda_suspend(chip->bus);
1512 snd_hda_resume(chip->bus);
1519 * Codec initialization
1522 /* number of codec slots for each chipset: 0 = default slots (i.e. 4) */
1523 static unsigned int azx_max_codecs[AZX_NUM_DRIVERS] __devinitdata = {
1524 [AZX_DRIVER_NVIDIA] = 8,
1525 [AZX_DRIVER_TERA] = 1,
1528 static int __devinit azx_codec_create(struct azx *chip, const char *model)
1530 struct hda_bus_template bus_temp;
1534 memset(&bus_temp, 0, sizeof(bus_temp));
1535 bus_temp.private_data = chip;
1536 bus_temp.modelname = model;
1537 bus_temp.pci = chip->pci;
1538 bus_temp.ops.command = azx_send_cmd;
1539 bus_temp.ops.get_response = azx_get_response;
1540 bus_temp.ops.attach_pcm = azx_attach_pcm_stream;
1541 bus_temp.ops.bus_reset = azx_bus_reset;
1542 #ifdef CONFIG_SND_HDA_POWER_SAVE
1543 bus_temp.power_save = &power_save;
1544 bus_temp.ops.pm_notify = azx_power_notify;
1547 err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus);
1551 if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) {
1552 snd_printd(SFX "Enable delay in RIRB handling\n");
1553 chip->bus->needs_damn_long_delay = 1;
1557 max_slots = azx_max_codecs[chip->driver_type];
1559 max_slots = AZX_DEFAULT_CODECS;
1561 /* First try to probe all given codec slots */
1562 for (c = 0; c < max_slots; c++) {
1563 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1564 if (probe_codec(chip, c) < 0) {
1565 /* Some BIOSen give you wrong codec addresses
1568 snd_printk(KERN_WARNING SFX
1569 "Codec #%d probe error; "
1570 "disabling it...\n", c);
1571 chip->codec_mask &= ~(1 << c);
1572 /* More badly, accessing to a non-existing
1573 * codec often screws up the controller chip,
1574 * and disturbs the further communications.
1575 * Thus if an error occurs during probing,
1576 * better to reset the controller chip to
1577 * get back to the sanity state.
1579 azx_stop_chip(chip);
1580 azx_init_chip(chip, 1);
1585 /* AMD chipsets often cause the communication stalls upon certain
1586 * sequence like the pin-detection. It seems that forcing the synced
1587 * access works around the stall. Grrr...
1589 if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1590 snd_printd(SFX "Enable sync_write for stable communication\n");
1591 chip->bus->sync_write = 1;
1592 chip->bus->allow_bus_reset = 1;
1595 /* Then create codec instances */
1596 for (c = 0; c < max_slots; c++) {
1597 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1598 struct hda_codec *codec;
1599 err = snd_hda_codec_new(chip->bus, c, &codec);
1602 codec->beep_mode = chip->beep_mode;
1607 snd_printk(KERN_ERR SFX "no codecs initialized\n");
1613 /* configure each codec instance */
1614 static int __devinit azx_codec_configure(struct azx *chip)
1616 struct hda_codec *codec;
1617 list_for_each_entry(codec, &chip->bus->codec_list, list) {
1618 snd_hda_codec_configure(codec);
1628 /* assign a stream for the PCM */
1629 static inline struct azx_dev *
1630 azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
1633 struct azx_dev *res = NULL;
1634 /* make a non-zero unique key for the substream */
1635 int key = (substream->pcm->device << 16) | (substream->number << 2) |
1636 (substream->stream + 1);
1638 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
1639 dev = chip->playback_index_offset;
1640 nums = chip->playback_streams;
1642 dev = chip->capture_index_offset;
1643 nums = chip->capture_streams;
1645 for (i = 0; i < nums; i++, dev++)
1646 if (!chip->azx_dev[dev].opened) {
1647 res = &chip->azx_dev[dev];
1648 if (res->assigned_key == key)
1653 res->assigned_key = key;
1658 /* release the assigned stream */
1659 static inline void azx_release_device(struct azx_dev *azx_dev)
1661 azx_dev->opened = 0;
1664 static struct snd_pcm_hardware azx_pcm_hw = {
1665 .info = (SNDRV_PCM_INFO_MMAP |
1666 SNDRV_PCM_INFO_INTERLEAVED |
1667 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1668 SNDRV_PCM_INFO_MMAP_VALID |
1669 /* No full-resume yet implemented */
1670 /* SNDRV_PCM_INFO_RESUME |*/
1671 SNDRV_PCM_INFO_PAUSE |
1672 SNDRV_PCM_INFO_SYNC_START |
1673 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
1674 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1675 .rates = SNDRV_PCM_RATE_48000,
1680 .buffer_bytes_max = AZX_MAX_BUF_SIZE,
1681 .period_bytes_min = 128,
1682 .period_bytes_max = AZX_MAX_BUF_SIZE / 2,
1684 .periods_max = AZX_MAX_FRAG,
1690 struct hda_codec *codec;
1691 struct hda_pcm_stream *hinfo[2];
1694 static int azx_pcm_open(struct snd_pcm_substream *substream)
1696 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1697 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1698 struct azx *chip = apcm->chip;
1699 struct azx_dev *azx_dev;
1700 struct snd_pcm_runtime *runtime = substream->runtime;
1701 unsigned long flags;
1705 mutex_lock(&chip->open_mutex);
1706 azx_dev = azx_assign_device(chip, substream);
1707 if (azx_dev == NULL) {
1708 mutex_unlock(&chip->open_mutex);
1711 runtime->hw = azx_pcm_hw;
1712 runtime->hw.channels_min = hinfo->channels_min;
1713 runtime->hw.channels_max = hinfo->channels_max;
1714 runtime->hw.formats = hinfo->formats;
1715 runtime->hw.rates = hinfo->rates;
1716 snd_pcm_limit_hw_rates(runtime);
1717 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
1718 if (chip->align_buffer_size)
1719 /* constrain buffer sizes to be multiple of 128
1720 bytes. This is more efficient in terms of memory
1721 access but isn't required by the HDA spec and
1722 prevents users from specifying exact period/buffer
1723 sizes. For example for 44.1kHz, a period size set
1724 to 20ms will be rounded to 19.59ms. */
1727 /* Don't enforce steps on buffer sizes, still need to
1728 be multiple of 4 bytes (HDA spec). Tested on Intel
1729 HDA controllers, may not work on all devices where
1730 option needs to be disabled */
1733 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
1735 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
1737 snd_hda_power_up(apcm->codec);
1738 err = hinfo->ops.open(hinfo, apcm->codec, substream);
1740 azx_release_device(azx_dev);
1741 snd_hda_power_down(apcm->codec);
1742 mutex_unlock(&chip->open_mutex);
1745 snd_pcm_limit_hw_rates(runtime);
1747 if (snd_BUG_ON(!runtime->hw.channels_min) ||
1748 snd_BUG_ON(!runtime->hw.channels_max) ||
1749 snd_BUG_ON(!runtime->hw.formats) ||
1750 snd_BUG_ON(!runtime->hw.rates)) {
1751 azx_release_device(azx_dev);
1752 hinfo->ops.close(hinfo, apcm->codec, substream);
1753 snd_hda_power_down(apcm->codec);
1754 mutex_unlock(&chip->open_mutex);
1757 spin_lock_irqsave(&chip->reg_lock, flags);
1758 azx_dev->substream = substream;
1759 azx_dev->running = 0;
1760 spin_unlock_irqrestore(&chip->reg_lock, flags);
1762 runtime->private_data = azx_dev;
1763 snd_pcm_set_sync(substream);
1764 mutex_unlock(&chip->open_mutex);
1768 static int azx_pcm_close(struct snd_pcm_substream *substream)
1770 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1771 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1772 struct azx *chip = apcm->chip;
1773 struct azx_dev *azx_dev = get_azx_dev(substream);
1774 unsigned long flags;
1776 mutex_lock(&chip->open_mutex);
1777 spin_lock_irqsave(&chip->reg_lock, flags);
1778 azx_dev->substream = NULL;
1779 azx_dev->running = 0;
1780 spin_unlock_irqrestore(&chip->reg_lock, flags);
1781 azx_release_device(azx_dev);
1782 hinfo->ops.close(hinfo, apcm->codec, substream);
1783 snd_hda_power_down(apcm->codec);
1784 mutex_unlock(&chip->open_mutex);
1788 static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
1789 struct snd_pcm_hw_params *hw_params)
1791 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1792 struct azx *chip = apcm->chip;
1793 struct azx_dev *azx_dev = get_azx_dev(substream);
1796 mark_runtime_wc(chip, azx_dev, substream, false);
1797 azx_dev->bufsize = 0;
1798 azx_dev->period_bytes = 0;
1799 azx_dev->format_val = 0;
1800 ret = snd_pcm_lib_malloc_pages(substream,
1801 params_buffer_bytes(hw_params));
1804 mark_runtime_wc(chip, azx_dev, substream, true);
1808 static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
1810 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1811 struct azx_dev *azx_dev = get_azx_dev(substream);
1812 struct azx *chip = apcm->chip;
1813 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1815 /* reset BDL address */
1816 azx_sd_writel(azx_dev, SD_BDLPL, 0);
1817 azx_sd_writel(azx_dev, SD_BDLPU, 0);
1818 azx_sd_writel(azx_dev, SD_CTL, 0);
1819 azx_dev->bufsize = 0;
1820 azx_dev->period_bytes = 0;
1821 azx_dev->format_val = 0;
1823 snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
1825 mark_runtime_wc(chip, azx_dev, substream, false);
1826 return snd_pcm_lib_free_pages(substream);
1829 static int azx_pcm_prepare(struct snd_pcm_substream *substream)
1831 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1832 struct azx *chip = apcm->chip;
1833 struct azx_dev *azx_dev = get_azx_dev(substream);
1834 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1835 struct snd_pcm_runtime *runtime = substream->runtime;
1836 unsigned int bufsize, period_bytes, format_val, stream_tag;
1838 struct hda_spdif_out *spdif =
1839 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
1840 unsigned short ctls = spdif ? spdif->ctls : 0;
1842 azx_stream_reset(chip, azx_dev);
1843 format_val = snd_hda_calc_stream_format(runtime->rate,
1849 snd_printk(KERN_ERR SFX
1850 "invalid format_val, rate=%d, ch=%d, format=%d\n",
1851 runtime->rate, runtime->channels, runtime->format);
1855 bufsize = snd_pcm_lib_buffer_bytes(substream);
1856 period_bytes = snd_pcm_lib_period_bytes(substream);
1858 snd_printdd(SFX "azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
1859 bufsize, format_val);
1861 if (bufsize != azx_dev->bufsize ||
1862 period_bytes != azx_dev->period_bytes ||
1863 format_val != azx_dev->format_val) {
1864 azx_dev->bufsize = bufsize;
1865 azx_dev->period_bytes = period_bytes;
1866 azx_dev->format_val = format_val;
1867 err = azx_setup_periods(chip, substream, azx_dev);
1872 /* wallclk has 24Mhz clock source */
1873 azx_dev->period_wallclk = (((runtime->period_size * 24000) /
1874 runtime->rate) * 1000);
1875 azx_setup_controller(chip, azx_dev);
1876 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1877 azx_dev->fifo_size = azx_sd_readw(azx_dev, SD_FIFOSIZE) + 1;
1879 azx_dev->fifo_size = 0;
1881 stream_tag = azx_dev->stream_tag;
1882 /* CA-IBG chips need the playback stream starting from 1 */
1883 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
1884 stream_tag > chip->capture_streams)
1885 stream_tag -= chip->capture_streams;
1886 return snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
1887 azx_dev->format_val, substream);
1890 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
1892 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1893 struct azx *chip = apcm->chip;
1894 struct azx_dev *azx_dev;
1895 struct snd_pcm_substream *s;
1896 int rstart = 0, start, nsync = 0, sbits = 0;
1900 case SNDRV_PCM_TRIGGER_START:
1902 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1903 case SNDRV_PCM_TRIGGER_RESUME:
1906 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1907 case SNDRV_PCM_TRIGGER_SUSPEND:
1908 case SNDRV_PCM_TRIGGER_STOP:
1915 snd_pcm_group_for_each_entry(s, substream) {
1916 if (s->pcm->card != substream->pcm->card)
1918 azx_dev = get_azx_dev(s);
1919 sbits |= 1 << azx_dev->index;
1921 snd_pcm_trigger_done(s, substream);
1924 spin_lock(&chip->reg_lock);
1926 /* first, set SYNC bits of corresponding streams */
1927 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
1928 azx_writel(chip, OLD_SSYNC,
1929 azx_readl(chip, OLD_SSYNC) | sbits);
1931 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits);
1933 snd_pcm_group_for_each_entry(s, substream) {
1934 if (s->pcm->card != substream->pcm->card)
1936 azx_dev = get_azx_dev(s);
1938 azx_dev->start_wallclk = azx_readl(chip, WALLCLK);
1940 azx_dev->start_wallclk -=
1941 azx_dev->period_wallclk;
1942 azx_stream_start(chip, azx_dev);
1944 azx_stream_stop(chip, azx_dev);
1946 azx_dev->running = start;
1948 spin_unlock(&chip->reg_lock);
1952 /* wait until all FIFOs get ready */
1953 for (timeout = 5000; timeout; timeout--) {
1955 snd_pcm_group_for_each_entry(s, substream) {
1956 if (s->pcm->card != substream->pcm->card)
1958 azx_dev = get_azx_dev(s);
1959 if (!(azx_sd_readb(azx_dev, SD_STS) &
1968 /* wait until all RUN bits are cleared */
1969 for (timeout = 5000; timeout; timeout--) {
1971 snd_pcm_group_for_each_entry(s, substream) {
1972 if (s->pcm->card != substream->pcm->card)
1974 azx_dev = get_azx_dev(s);
1975 if (azx_sd_readb(azx_dev, SD_CTL) &
1985 spin_lock(&chip->reg_lock);
1986 /* reset SYNC bits */
1987 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
1988 azx_writel(chip, OLD_SSYNC,
1989 azx_readl(chip, OLD_SSYNC) & ~sbits);
1991 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits);
1992 spin_unlock(&chip->reg_lock);
1997 /* get the current DMA position with correction on VIA chips */
1998 static unsigned int azx_via_get_position(struct azx *chip,
1999 struct azx_dev *azx_dev)
2001 unsigned int link_pos, mini_pos, bound_pos;
2002 unsigned int mod_link_pos, mod_dma_pos, mod_mini_pos;
2003 unsigned int fifo_size;
2005 link_pos = azx_sd_readl(azx_dev, SD_LPIB);
2006 if (azx_dev->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
2007 /* Playback, no problem using link position */
2013 * use mod to get the DMA position just like old chipset
2015 mod_dma_pos = le32_to_cpu(*azx_dev->posbuf);
2016 mod_dma_pos %= azx_dev->period_bytes;
2018 /* azx_dev->fifo_size can't get FIFO size of in stream.
2019 * Get from base address + offset.
2021 fifo_size = readw(chip->remap_addr + VIA_IN_STREAM0_FIFO_SIZE_OFFSET);
2023 if (azx_dev->insufficient) {
2024 /* Link position never gather than FIFO size */
2025 if (link_pos <= fifo_size)
2028 azx_dev->insufficient = 0;
2031 if (link_pos <= fifo_size)
2032 mini_pos = azx_dev->bufsize + link_pos - fifo_size;
2034 mini_pos = link_pos - fifo_size;
2036 /* Find nearest previous boudary */
2037 mod_mini_pos = mini_pos % azx_dev->period_bytes;
2038 mod_link_pos = link_pos % azx_dev->period_bytes;
2039 if (mod_link_pos >= fifo_size)
2040 bound_pos = link_pos - mod_link_pos;
2041 else if (mod_dma_pos >= mod_mini_pos)
2042 bound_pos = mini_pos - mod_mini_pos;
2044 bound_pos = mini_pos - mod_mini_pos + azx_dev->period_bytes;
2045 if (bound_pos >= azx_dev->bufsize)
2049 /* Calculate real DMA position we want */
2050 return bound_pos + mod_dma_pos;
2053 static unsigned int azx_get_position(struct azx *chip,
2054 struct azx_dev *azx_dev,
2058 int stream = azx_dev->substream->stream;
2060 switch (chip->position_fix[stream]) {
2063 pos = azx_sd_readl(azx_dev, SD_LPIB);
2065 case POS_FIX_VIACOMBO:
2066 pos = azx_via_get_position(chip, azx_dev);
2069 /* use the position buffer */
2070 pos = le32_to_cpu(*azx_dev->posbuf);
2071 if (with_check && chip->position_fix[stream] == POS_FIX_AUTO) {
2072 if (!pos || pos == (u32)-1) {
2074 "hda-intel: Invalid position buffer, "
2075 "using LPIB read method instead.\n");
2076 chip->position_fix[stream] = POS_FIX_LPIB;
2077 pos = azx_sd_readl(azx_dev, SD_LPIB);
2079 chip->position_fix[stream] = POS_FIX_POSBUF;
2084 if (pos >= azx_dev->bufsize)
2089 static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
2091 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2092 struct azx *chip = apcm->chip;
2093 struct azx_dev *azx_dev = get_azx_dev(substream);
2094 return bytes_to_frames(substream->runtime,
2095 azx_get_position(chip, azx_dev, false));
2099 * Check whether the current DMA position is acceptable for updating
2100 * periods. Returns non-zero if it's OK.
2102 * Many HD-audio controllers appear pretty inaccurate about
2103 * the update-IRQ timing. The IRQ is issued before actually the
2104 * data is processed. So, we need to process it afterwords in a
2107 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
2113 wallclk = azx_readl(chip, WALLCLK) - azx_dev->start_wallclk;
2114 if (wallclk < (azx_dev->period_wallclk * 2) / 3)
2115 return -1; /* bogus (too early) interrupt */
2117 stream = azx_dev->substream->stream;
2118 pos = azx_get_position(chip, azx_dev, true);
2120 if (WARN_ONCE(!azx_dev->period_bytes,
2121 "hda-intel: zero azx_dev->period_bytes"))
2122 return -1; /* this shouldn't happen! */
2123 if (wallclk < (azx_dev->period_wallclk * 5) / 4 &&
2124 pos % azx_dev->period_bytes > azx_dev->period_bytes / 2)
2125 /* NG - it's below the first next period boundary */
2126 return bdl_pos_adj[chip->dev_index] ? 0 : -1;
2127 azx_dev->start_wallclk += wallclk;
2128 return 1; /* OK, it's fine */
2132 * The work for pending PCM period updates.
2134 static void azx_irq_pending_work(struct work_struct *work)
2136 struct azx *chip = container_of(work, struct azx, irq_pending_work);
2139 if (!chip->irq_pending_warned) {
2141 "hda-intel: IRQ timing workaround is activated "
2142 "for card #%d. Suggest a bigger bdl_pos_adj.\n",
2143 chip->card->number);
2144 chip->irq_pending_warned = 1;
2149 spin_lock_irq(&chip->reg_lock);
2150 for (i = 0; i < chip->num_streams; i++) {
2151 struct azx_dev *azx_dev = &chip->azx_dev[i];
2152 if (!azx_dev->irq_pending ||
2153 !azx_dev->substream ||
2156 ok = azx_position_ok(chip, azx_dev);
2158 azx_dev->irq_pending = 0;
2159 spin_unlock(&chip->reg_lock);
2160 snd_pcm_period_elapsed(azx_dev->substream);
2161 spin_lock(&chip->reg_lock);
2162 } else if (ok < 0) {
2163 pending = 0; /* too early */
2167 spin_unlock_irq(&chip->reg_lock);
2174 /* clear irq_pending flags and assure no on-going workq */
2175 static void azx_clear_irq_pending(struct azx *chip)
2179 spin_lock_irq(&chip->reg_lock);
2180 for (i = 0; i < chip->num_streams; i++)
2181 chip->azx_dev[i].irq_pending = 0;
2182 spin_unlock_irq(&chip->reg_lock);
2186 static int azx_pcm_mmap(struct snd_pcm_substream *substream,
2187 struct vm_area_struct *area)
2189 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2190 struct azx *chip = apcm->chip;
2191 if (!azx_snoop(chip))
2192 area->vm_page_prot = pgprot_writecombine(area->vm_page_prot);
2193 return snd_pcm_lib_default_mmap(substream, area);
2196 #define azx_pcm_mmap NULL
2199 static struct snd_pcm_ops azx_pcm_ops = {
2200 .open = azx_pcm_open,
2201 .close = azx_pcm_close,
2202 .ioctl = snd_pcm_lib_ioctl,
2203 .hw_params = azx_pcm_hw_params,
2204 .hw_free = azx_pcm_hw_free,
2205 .prepare = azx_pcm_prepare,
2206 .trigger = azx_pcm_trigger,
2207 .pointer = azx_pcm_pointer,
2208 .mmap = azx_pcm_mmap,
2209 .page = snd_pcm_sgbuf_ops_page,
2212 static void azx_pcm_free(struct snd_pcm *pcm)
2214 struct azx_pcm *apcm = pcm->private_data;
2216 apcm->chip->pcm[pcm->device] = NULL;
2221 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
2224 azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
2225 struct hda_pcm *cpcm)
2227 struct azx *chip = bus->private_data;
2228 struct snd_pcm *pcm;
2229 struct azx_pcm *apcm;
2230 int pcm_dev = cpcm->device;
2234 if (pcm_dev >= HDA_MAX_PCMS) {
2235 snd_printk(KERN_ERR SFX "Invalid PCM device number %d\n",
2239 if (chip->pcm[pcm_dev]) {
2240 snd_printk(KERN_ERR SFX "PCM %d already exists\n", pcm_dev);
2243 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
2244 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
2245 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
2249 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
2250 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
2254 apcm->codec = codec;
2255 pcm->private_data = apcm;
2256 pcm->private_free = azx_pcm_free;
2257 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
2258 pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
2259 chip->pcm[pcm_dev] = pcm;
2261 for (s = 0; s < 2; s++) {
2262 apcm->hinfo[s] = &cpcm->stream[s];
2263 if (cpcm->stream[s].substreams)
2264 snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
2266 /* buffer pre-allocation */
2267 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
2268 if (size > MAX_PREALLOC_SIZE)
2269 size = MAX_PREALLOC_SIZE;
2270 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
2271 snd_dma_pci_data(chip->pci),
2272 size, MAX_PREALLOC_SIZE);
2277 * mixer creation - all stuff is implemented in hda module
2279 static int __devinit azx_mixer_create(struct azx *chip)
2281 return snd_hda_build_controls(chip->bus);
2286 * initialize SD streams
2288 static int __devinit azx_init_stream(struct azx *chip)
2292 /* initialize each stream (aka device)
2293 * assign the starting bdl address to each stream (device)
2296 for (i = 0; i < chip->num_streams; i++) {
2297 struct azx_dev *azx_dev = &chip->azx_dev[i];
2298 azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8);
2299 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
2300 azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80);
2301 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
2302 azx_dev->sd_int_sta_mask = 1 << i;
2303 /* stream tag: must be non-zero and unique */
2305 azx_dev->stream_tag = i + 1;
2311 static int azx_acquire_irq(struct azx *chip, int do_disconnect)
2313 if (request_irq(chip->pci->irq, azx_interrupt,
2314 chip->msi ? 0 : IRQF_SHARED,
2315 KBUILD_MODNAME, chip)) {
2316 printk(KERN_ERR "hda-intel: unable to grab IRQ %d, "
2317 "disabling device\n", chip->pci->irq);
2319 snd_card_disconnect(chip->card);
2322 chip->irq = chip->pci->irq;
2323 pci_intx(chip->pci, !chip->msi);
2328 static void azx_stop_chip(struct azx *chip)
2330 if (!chip->initialized)
2333 /* disable interrupts */
2334 azx_int_disable(chip);
2335 azx_int_clear(chip);
2337 /* disable CORB/RIRB */
2338 azx_free_cmd_io(chip);
2340 /* disable position buffer */
2341 azx_writel(chip, DPLBASE, 0);
2342 azx_writel(chip, DPUBASE, 0);
2344 chip->initialized = 0;
2347 #ifdef CONFIG_SND_HDA_POWER_SAVE
2348 /* power-up/down the controller */
2349 static void azx_power_notify(struct hda_bus *bus)
2351 struct azx *chip = bus->private_data;
2352 struct hda_codec *c;
2355 list_for_each_entry(c, &bus->codec_list, list) {
2362 azx_init_chip(chip, 1);
2363 else if (chip->running && power_save_controller &&
2364 !bus->power_keep_link_on)
2365 azx_stop_chip(chip);
2367 #endif /* CONFIG_SND_HDA_POWER_SAVE */
2374 static int snd_hda_codecs_inuse(struct hda_bus *bus)
2376 struct hda_codec *codec;
2378 list_for_each_entry(codec, &bus->codec_list, list) {
2379 if (snd_hda_codec_needs_resume(codec))
2385 static int azx_suspend(struct pci_dev *pci, pm_message_t state)
2387 struct snd_card *card = pci_get_drvdata(pci);
2388 struct azx *chip = card->private_data;
2391 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2392 azx_clear_irq_pending(chip);
2393 for (i = 0; i < HDA_MAX_PCMS; i++)
2394 snd_pcm_suspend_all(chip->pcm[i]);
2395 if (chip->initialized)
2396 snd_hda_suspend(chip->bus);
2397 azx_stop_chip(chip);
2398 if (chip->irq >= 0) {
2399 free_irq(chip->irq, chip);
2403 pci_disable_msi(chip->pci);
2404 pci_disable_device(pci);
2405 pci_save_state(pci);
2406 pci_set_power_state(pci, pci_choose_state(pci, state));
2410 static int azx_resume(struct pci_dev *pci)
2412 struct snd_card *card = pci_get_drvdata(pci);
2413 struct azx *chip = card->private_data;
2415 pci_set_power_state(pci, PCI_D0);
2416 pci_restore_state(pci);
2417 if (pci_enable_device(pci) < 0) {
2418 printk(KERN_ERR "hda-intel: pci_enable_device failed, "
2419 "disabling device\n");
2420 snd_card_disconnect(card);
2423 pci_set_master(pci);
2425 if (pci_enable_msi(pci) < 0)
2427 if (azx_acquire_irq(chip, 1) < 0)
2431 if (snd_hda_codecs_inuse(chip->bus))
2432 azx_init_chip(chip, 1);
2434 snd_hda_resume(chip->bus);
2435 snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2438 #endif /* CONFIG_PM */
2442 * reboot notifier for hang-up problem at power-down
2444 static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
2446 struct azx *chip = container_of(nb, struct azx, reboot_notifier);
2447 snd_hda_bus_reboot_notify(chip->bus);
2448 azx_stop_chip(chip);
2452 static void azx_notifier_register(struct azx *chip)
2454 chip->reboot_notifier.notifier_call = azx_halt;
2455 register_reboot_notifier(&chip->reboot_notifier);
2458 static void azx_notifier_unregister(struct azx *chip)
2460 if (chip->reboot_notifier.notifier_call)
2461 unregister_reboot_notifier(&chip->reboot_notifier);
2467 static int azx_free(struct azx *chip)
2471 azx_notifier_unregister(chip);
2473 if (chip->initialized) {
2474 azx_clear_irq_pending(chip);
2475 for (i = 0; i < chip->num_streams; i++)
2476 azx_stream_stop(chip, &chip->azx_dev[i]);
2477 azx_stop_chip(chip);
2481 free_irq(chip->irq, (void*)chip);
2483 pci_disable_msi(chip->pci);
2484 if (chip->remap_addr)
2485 iounmap(chip->remap_addr);
2487 if (chip->azx_dev) {
2488 for (i = 0; i < chip->num_streams; i++)
2489 if (chip->azx_dev[i].bdl.area) {
2490 mark_pages_wc(chip, &chip->azx_dev[i].bdl, false);
2491 snd_dma_free_pages(&chip->azx_dev[i].bdl);
2494 if (chip->rb.area) {
2495 mark_pages_wc(chip, &chip->rb, false);
2496 snd_dma_free_pages(&chip->rb);
2498 if (chip->posbuf.area) {
2499 mark_pages_wc(chip, &chip->posbuf, false);
2500 snd_dma_free_pages(&chip->posbuf);
2502 pci_release_regions(chip->pci);
2503 pci_disable_device(chip->pci);
2504 kfree(chip->azx_dev);
2510 static int azx_dev_free(struct snd_device *device)
2512 return azx_free(device->device_data);
2516 * white/black-listing for position_fix
2518 static struct snd_pci_quirk position_fix_list[] __devinitdata = {
2519 SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
2520 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
2521 SND_PCI_QUIRK(0x1028, 0x02c6, "Dell Inspiron 1010", POS_FIX_LPIB),
2522 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
2523 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
2524 SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
2525 SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),
2526 SND_PCI_QUIRK(0x1043, 0x83ce, "ASUS 1101HA", POS_FIX_LPIB),
2527 SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),
2528 SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB),
2529 SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB),
2530 SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB),
2531 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
2532 SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB),
2533 SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB),
2534 SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB),
2538 static int __devinit check_position_fix(struct azx *chip, int fix)
2540 const struct snd_pci_quirk *q;
2544 case POS_FIX_POSBUF:
2545 case POS_FIX_VIACOMBO:
2549 q = snd_pci_quirk_lookup(chip->pci, position_fix_list);
2552 "hda_intel: position_fix set to %d "
2553 "for device %04x:%04x\n",
2554 q->value, q->subvendor, q->subdevice);
2558 /* Check VIA/ATI HD Audio Controller exist */
2559 if (chip->driver_caps & AZX_DCAPS_POSFIX_VIA) {
2560 snd_printd(SFX "Using VIACOMBO position fix\n");
2561 return POS_FIX_VIACOMBO;
2563 if (chip->driver_caps & AZX_DCAPS_POSFIX_LPIB) {
2564 snd_printd(SFX "Using LPIB position fix\n");
2565 return POS_FIX_LPIB;
2567 return POS_FIX_AUTO;
2571 * black-lists for probe_mask
2573 static struct snd_pci_quirk probe_mask_list[] __devinitdata = {
2574 /* Thinkpad often breaks the controller communication when accessing
2575 * to the non-working (or non-existing) modem codec slot.
2577 SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01),
2578 SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01),
2579 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01),
2581 SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),
2582 /* including bogus ALC268 in slot#2 that conflicts with ALC888 */
2583 SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),
2584 /* forced codec slots */
2585 SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),
2586 SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),
2590 #define AZX_FORCE_CODEC_MASK 0x100
2592 static void __devinit check_probe_mask(struct azx *chip, int dev)
2594 const struct snd_pci_quirk *q;
2596 chip->codec_probe_mask = probe_mask[dev];
2597 if (chip->codec_probe_mask == -1) {
2598 q = snd_pci_quirk_lookup(chip->pci, probe_mask_list);
2601 "hda_intel: probe_mask set to 0x%x "
2602 "for device %04x:%04x\n",
2603 q->value, q->subvendor, q->subdevice);
2604 chip->codec_probe_mask = q->value;
2608 /* check forced option */
2609 if (chip->codec_probe_mask != -1 &&
2610 (chip->codec_probe_mask & AZX_FORCE_CODEC_MASK)) {
2611 chip->codec_mask = chip->codec_probe_mask & 0xff;
2612 printk(KERN_INFO "hda_intel: codec_mask forced to 0x%x\n",
2618 * white/black-list for enable_msi
2620 static struct snd_pci_quirk msi_black_list[] __devinitdata = {
2621 SND_PCI_QUIRK(0x103c, 0x2191, "HP", 0), /* AMD Hudson */
2622 SND_PCI_QUIRK(0x103c, 0x2192, "HP", 0), /* AMD Hudson */
2623 SND_PCI_QUIRK(0x103c, 0x21f7, "HP", 0), /* AMD Hudson */
2624 SND_PCI_QUIRK(0x103c, 0x21fa, "HP", 0), /* AMD Hudson */
2625 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
2626 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
2627 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
2628 SND_PCI_QUIRK(0x1179, 0xfb44, "Toshiba Satellite C870", 0), /* AMD Hudson */
2629 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
2630 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
2634 static void __devinit check_msi(struct azx *chip)
2636 const struct snd_pci_quirk *q;
2638 if (enable_msi >= 0) {
2639 chip->msi = !!enable_msi;
2642 chip->msi = 1; /* enable MSI as default */
2643 q = snd_pci_quirk_lookup(chip->pci, msi_black_list);
2646 "hda_intel: msi for device %04x:%04x set to %d\n",
2647 q->subvendor, q->subdevice, q->value);
2648 chip->msi = q->value;
2652 /* NVidia chipsets seem to cause troubles with MSI */
2653 if (chip->driver_caps & AZX_DCAPS_NO_MSI) {
2654 printk(KERN_INFO "hda_intel: Disabling MSI\n");
2663 static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
2664 int dev, unsigned int driver_caps,
2669 unsigned short gcap;
2670 unsigned int dma_bits = 64;
2671 static struct snd_device_ops ops = {
2672 .dev_free = azx_dev_free,
2677 err = pci_enable_device(pci);
2681 chip = kzalloc(sizeof(*chip), GFP_KERNEL);
2683 snd_printk(KERN_ERR SFX "cannot allocate chip\n");
2684 pci_disable_device(pci);
2688 spin_lock_init(&chip->reg_lock);
2689 mutex_init(&chip->open_mutex);
2693 chip->driver_caps = driver_caps;
2694 chip->driver_type = driver_caps & 0xff;
2696 chip->dev_index = dev;
2697 INIT_WORK(&chip->irq_pending_work, azx_irq_pending_work);
2699 chip->position_fix[0] = chip->position_fix[1] =
2700 check_position_fix(chip, position_fix[dev]);
2701 check_probe_mask(chip, dev);
2703 chip->single_cmd = single_cmd;
2704 chip->snoop = hda_snoop;
2706 if (bdl_pos_adj[dev] < 0) {
2707 switch (chip->driver_type) {
2708 case AZX_DRIVER_ICH:
2709 case AZX_DRIVER_PCH:
2710 bdl_pos_adj[dev] = 1;
2713 bdl_pos_adj[dev] = 32;
2718 #if BITS_PER_LONG != 64
2719 /* Fix up base address on ULI M5461 */
2720 if (chip->driver_type == AZX_DRIVER_ULI) {
2722 pci_read_config_word(pci, 0x40, &tmp3);
2723 pci_write_config_word(pci, 0x40, tmp3 | 0x10);
2724 pci_write_config_dword(pci, PCI_BASE_ADDRESS_1, 0);
2728 err = pci_request_regions(pci, "ICH HD audio");
2731 pci_disable_device(pci);
2735 chip->addr = pci_resource_start(pci, 0);
2736 chip->remap_addr = pci_ioremap_bar(pci, 0);
2737 if (chip->remap_addr == NULL) {
2738 snd_printk(KERN_ERR SFX "ioremap error\n");
2744 if (pci_enable_msi(pci) < 0)
2747 if (azx_acquire_irq(chip, 0) < 0) {
2752 pci_set_master(pci);
2753 synchronize_irq(chip->irq);
2755 gcap = azx_readw(chip, GCAP);
2756 snd_printdd(SFX "chipset global capabilities = 0x%x\n", gcap);
2758 /* AMD devices support 40 or 48bit DMA, take the safe one */
2759 if (chip->pci->vendor == PCI_VENDOR_ID_AMD)
2762 /* disable SB600 64bit support for safety */
2763 if (chip->pci->vendor == PCI_VENDOR_ID_ATI) {
2764 struct pci_dev *p_smbus;
2766 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,
2767 PCI_DEVICE_ID_ATI_SBX00_SMBUS,
2770 if (p_smbus->revision < 0x30)
2771 gcap &= ~ICH6_GCAP_64OK;
2772 pci_dev_put(p_smbus);
2776 /* disable 64bit DMA address on some devices */
2777 if (chip->driver_caps & AZX_DCAPS_NO_64BIT) {
2778 snd_printd(SFX "Disabling 64bit DMA\n");
2779 gcap &= ~ICH6_GCAP_64OK;
2782 /* disable buffer size rounding to 128-byte multiples if supported */
2783 chip->align_buffer_size = align_buffer_size;
2784 if (chip->driver_caps & AZX_DCAPS_BUFSIZE)
2785 chip->align_buffer_size = 0;
2787 /* allow 64bit DMA address if supported by H/W */
2788 if (!(gcap & ICH6_GCAP_64OK))
2790 if (!pci_set_dma_mask(pci, DMA_BIT_MASK(dma_bits))) {
2791 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(dma_bits));
2793 pci_set_dma_mask(pci, DMA_BIT_MASK(32));
2794 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32));
2797 /* read number of streams from GCAP register instead of using
2800 chip->capture_streams = (gcap >> 8) & 0x0f;
2801 chip->playback_streams = (gcap >> 12) & 0x0f;
2802 if (!chip->playback_streams && !chip->capture_streams) {
2803 /* gcap didn't give any info, switching to old method */
2805 switch (chip->driver_type) {
2806 case AZX_DRIVER_ULI:
2807 chip->playback_streams = ULI_NUM_PLAYBACK;
2808 chip->capture_streams = ULI_NUM_CAPTURE;
2810 case AZX_DRIVER_ATIHDMI:
2811 chip->playback_streams = ATIHDMI_NUM_PLAYBACK;
2812 chip->capture_streams = ATIHDMI_NUM_CAPTURE;
2814 case AZX_DRIVER_GENERIC:
2816 chip->playback_streams = ICH6_NUM_PLAYBACK;
2817 chip->capture_streams = ICH6_NUM_CAPTURE;
2821 chip->capture_index_offset = 0;
2822 chip->playback_index_offset = chip->capture_streams;
2823 chip->num_streams = chip->playback_streams + chip->capture_streams;
2824 chip->azx_dev = kcalloc(chip->num_streams, sizeof(*chip->azx_dev),
2826 if (!chip->azx_dev) {
2827 snd_printk(KERN_ERR SFX "cannot malloc azx_dev\n");
2831 for (i = 0; i < chip->num_streams; i++) {
2832 /* allocate memory for the BDL for each stream */
2833 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
2834 snd_dma_pci_data(chip->pci),
2835 BDL_SIZE, &chip->azx_dev[i].bdl);
2837 snd_printk(KERN_ERR SFX "cannot allocate BDL\n");
2840 mark_pages_wc(chip, &chip->azx_dev[i].bdl, true);
2842 /* allocate memory for the position buffer */
2843 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
2844 snd_dma_pci_data(chip->pci),
2845 chip->num_streams * 8, &chip->posbuf);
2847 snd_printk(KERN_ERR SFX "cannot allocate posbuf\n");
2850 mark_pages_wc(chip, &chip->posbuf, true);
2851 /* allocate CORB/RIRB */
2852 err = azx_alloc_cmd_io(chip);
2856 /* initialize streams */
2857 azx_init_stream(chip);
2859 /* initialize chip */
2861 azx_init_chip(chip, (probe_only[dev] & 2) == 0);
2863 /* codec detection */
2864 if (!chip->codec_mask) {
2865 snd_printk(KERN_ERR SFX "no codecs found!\n");
2870 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
2872 snd_printk(KERN_ERR SFX "Error creating device [card]!\n");
2876 strcpy(card->driver, "HDA-Intel");
2877 strlcpy(card->shortname, driver_short_names[chip->driver_type],
2878 sizeof(card->shortname));
2879 snprintf(card->longname, sizeof(card->longname),
2880 "%s at 0x%lx irq %i",
2881 card->shortname, chip->addr, chip->irq);
2891 static void power_down_all_codecs(struct azx *chip)
2893 #ifdef CONFIG_SND_HDA_POWER_SAVE
2894 /* The codecs were powered up in snd_hda_codec_new().
2895 * Now all initialization done, so turn them down if possible
2897 struct hda_codec *codec;
2898 list_for_each_entry(codec, &chip->bus->codec_list, list) {
2899 snd_hda_power_down(codec);
2904 static int __devinit azx_probe(struct pci_dev *pci,
2905 const struct pci_device_id *pci_id)
2908 struct snd_card *card;
2912 if (dev >= SNDRV_CARDS)
2919 err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
2921 snd_printk(KERN_ERR SFX "Error creating card!\n");
2925 /* set this here since it's referred in snd_hda_load_patch() */
2926 snd_card_set_dev(card, &pci->dev);
2928 err = azx_create(card, pci, dev, pci_id->driver_data, &chip);
2931 card->private_data = chip;
2933 #ifdef CONFIG_SND_HDA_INPUT_BEEP
2934 chip->beep_mode = beep_mode[dev];
2937 /* create codec instances */
2938 err = azx_codec_create(chip, model[dev]);
2941 #ifdef CONFIG_SND_HDA_PATCH_LOADER
2942 if (patch[dev] && *patch[dev]) {
2943 snd_printk(KERN_ERR SFX "Applying patch firmware '%s'\n",
2945 err = snd_hda_load_patch(chip->bus, patch[dev]);
2950 if ((probe_only[dev] & 1) == 0) {
2951 err = azx_codec_configure(chip);
2956 /* create PCM streams */
2957 err = snd_hda_build_pcms(chip->bus);
2961 /* create mixer controls */
2962 err = azx_mixer_create(chip);
2966 err = snd_card_register(card);
2970 pci_set_drvdata(pci, card);
2972 power_down_all_codecs(chip);
2973 azx_notifier_register(chip);
2978 snd_card_free(card);
2982 static void __devexit azx_remove(struct pci_dev *pci)
2984 snd_card_free(pci_get_drvdata(pci));
2985 pci_set_drvdata(pci, NULL);
2989 static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
2991 { PCI_DEVICE(0x8086, 0x1c20),
2992 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
2993 AZX_DCAPS_BUFSIZE },
2995 { PCI_DEVICE(0x8086, 0x1d20),
2996 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
2999 { PCI_DEVICE(0x8086, 0x1e20),
3000 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3003 { PCI_DEVICE(0x8086, 0x8c20),
3004 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3007 { PCI_DEVICE(0x8086, 0x811b),
3008 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
3009 AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_LPIB }, /* Poulsbo */
3011 { PCI_DEVICE(0x8086, 0x2668),
3012 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3013 AZX_DCAPS_BUFSIZE }, /* ICH6 */
3014 { PCI_DEVICE(0x8086, 0x27d8),
3015 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3016 AZX_DCAPS_BUFSIZE }, /* ICH7 */
3017 { PCI_DEVICE(0x8086, 0x269a),
3018 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3019 AZX_DCAPS_BUFSIZE }, /* ESB2 */
3020 { PCI_DEVICE(0x8086, 0x284b),
3021 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3022 AZX_DCAPS_BUFSIZE }, /* ICH8 */
3023 { PCI_DEVICE(0x8086, 0x293e),
3024 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3025 AZX_DCAPS_BUFSIZE }, /* ICH9 */
3026 { PCI_DEVICE(0x8086, 0x293f),
3027 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3028 AZX_DCAPS_BUFSIZE }, /* ICH9 */
3029 { PCI_DEVICE(0x8086, 0x3a3e),
3030 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3031 AZX_DCAPS_BUFSIZE }, /* ICH10 */
3032 { PCI_DEVICE(0x8086, 0x3a6e),
3033 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3034 AZX_DCAPS_BUFSIZE }, /* ICH10 */
3036 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),
3037 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3038 .class_mask = 0xffffff,
3039 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_BUFSIZE },
3040 /* ATI SB 450/600/700/800/900 */
3041 { PCI_DEVICE(0x1002, 0x437b),
3042 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
3043 { PCI_DEVICE(0x1002, 0x4383),
3044 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
3046 { PCI_DEVICE(0x1022, 0x780d),
3047 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
3049 { PCI_DEVICE(0x1022, 0x15e3),
3050 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
3052 { PCI_DEVICE(0x1002, 0x793b),
3053 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3054 { PCI_DEVICE(0x1002, 0x7919),
3055 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3056 { PCI_DEVICE(0x1002, 0x960f),
3057 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3058 { PCI_DEVICE(0x1002, 0x970f),
3059 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3060 { PCI_DEVICE(0x1002, 0xaa00),
3061 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3062 { PCI_DEVICE(0x1002, 0xaa08),
3063 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3064 { PCI_DEVICE(0x1002, 0xaa10),
3065 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3066 { PCI_DEVICE(0x1002, 0xaa18),
3067 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3068 { PCI_DEVICE(0x1002, 0xaa20),
3069 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3070 { PCI_DEVICE(0x1002, 0xaa28),
3071 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3072 { PCI_DEVICE(0x1002, 0xaa30),
3073 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3074 { PCI_DEVICE(0x1002, 0xaa38),
3075 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3076 { PCI_DEVICE(0x1002, 0xaa40),
3077 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3078 { PCI_DEVICE(0x1002, 0xaa48),
3079 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3080 /* VIA VT8251/VT8237A */
3081 { PCI_DEVICE(0x1106, 0x3288),
3082 .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
3084 { PCI_DEVICE(0x1039, 0x7502), .driver_data = AZX_DRIVER_SIS },
3086 { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI },
3088 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID),
3089 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3090 .class_mask = 0xffffff,
3091 .driver_data = AZX_DRIVER_NVIDIA | AZX_DCAPS_PRESET_NVIDIA },
3093 { PCI_DEVICE(0x6549, 0x1200),
3094 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
3095 /* Creative X-Fi (CA0110-IBG) */
3096 #if !defined(CONFIG_SND_CTXFI) && !defined(CONFIG_SND_CTXFI_MODULE)
3097 /* the following entry conflicts with snd-ctxfi driver,
3098 * as ctxfi driver mutates from HD-audio to native mode with
3099 * a special command sequence.
3101 { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_ANY_ID),
3102 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3103 .class_mask = 0xffffff,
3104 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
3105 AZX_DCAPS_NO_64BIT |
3106 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
3108 /* this entry seems still valid -- i.e. without emu20kx chip */
3109 { PCI_DEVICE(0x1102, 0x0009),
3110 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
3111 AZX_DCAPS_NO_64BIT |
3112 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
3115 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
3116 /* VMware HDAudio */
3117 { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC },
3118 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */
3119 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID),
3120 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3121 .class_mask = 0xffffff,
3122 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
3123 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_ANY_ID),
3124 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3125 .class_mask = 0xffffff,
3126 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
3129 MODULE_DEVICE_TABLE(pci, azx_ids);
3131 /* pci_driver definition */
3132 static struct pci_driver driver = {
3133 .name = KBUILD_MODNAME,
3134 .id_table = azx_ids,
3136 .remove = __devexit_p(azx_remove),
3138 .suspend = azx_suspend,
3139 .resume = azx_resume,
3143 static int __init alsa_card_azx_init(void)
3145 return pci_register_driver(&driver);
3148 static void __exit alsa_card_azx_exit(void)
3150 pci_unregister_driver(&driver);
3153 module_init(alsa_card_azx_init)
3154 module_exit(alsa_card_azx_exit)