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 <linux/vgaarb.h>
57 #include <linux/vga_switcheroo.h>
58 #include <linux/firmware.h>
59 #include "hda_codec.h"
62 static int index
[SNDRV_CARDS
] = SNDRV_DEFAULT_IDX
;
63 static char *id
[SNDRV_CARDS
] = SNDRV_DEFAULT_STR
;
64 static bool enable
[SNDRV_CARDS
] = SNDRV_DEFAULT_ENABLE_PNP
;
65 static char *model
[SNDRV_CARDS
];
66 static int position_fix
[SNDRV_CARDS
];
67 static int bdl_pos_adj
[SNDRV_CARDS
] = {[0 ... (SNDRV_CARDS
-1)] = -1};
68 static int probe_mask
[SNDRV_CARDS
] = {[0 ... (SNDRV_CARDS
-1)] = -1};
69 static int probe_only
[SNDRV_CARDS
];
70 static bool single_cmd
;
71 static int enable_msi
= -1;
72 #ifdef CONFIG_SND_HDA_PATCH_LOADER
73 static char *patch
[SNDRV_CARDS
];
75 #ifdef CONFIG_SND_HDA_INPUT_BEEP
76 static bool beep_mode
[SNDRV_CARDS
] = {[0 ... (SNDRV_CARDS
-1)] =
77 CONFIG_SND_HDA_INPUT_BEEP_MODE
};
80 module_param_array(index
, int, NULL
, 0444);
81 MODULE_PARM_DESC(index
, "Index value for Intel HD audio interface.");
82 module_param_array(id
, charp
, NULL
, 0444);
83 MODULE_PARM_DESC(id
, "ID string for Intel HD audio interface.");
84 module_param_array(enable
, bool, NULL
, 0444);
85 MODULE_PARM_DESC(enable
, "Enable Intel HD audio interface.");
86 module_param_array(model
, charp
, NULL
, 0444);
87 MODULE_PARM_DESC(model
, "Use the given board model.");
88 module_param_array(position_fix
, int, NULL
, 0444);
89 MODULE_PARM_DESC(position_fix
, "DMA pointer read method."
90 "(0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO).");
91 module_param_array(bdl_pos_adj
, int, NULL
, 0644);
92 MODULE_PARM_DESC(bdl_pos_adj
, "BDL position adjustment offset.");
93 module_param_array(probe_mask
, int, NULL
, 0444);
94 MODULE_PARM_DESC(probe_mask
, "Bitmask to probe codecs (default = -1).");
95 module_param_array(probe_only
, int, NULL
, 0444);
96 MODULE_PARM_DESC(probe_only
, "Only probing and no codec initialization.");
97 module_param(single_cmd
, bool, 0444);
98 MODULE_PARM_DESC(single_cmd
, "Use single command to communicate with codecs "
99 "(for debugging only).");
100 module_param(enable_msi
, bint
, 0444);
101 MODULE_PARM_DESC(enable_msi
, "Enable Message Signaled Interrupt (MSI)");
102 #ifdef CONFIG_SND_HDA_PATCH_LOADER
103 module_param_array(patch
, charp
, NULL
, 0444);
104 MODULE_PARM_DESC(patch
, "Patch file for Intel HD audio interface.");
106 #ifdef CONFIG_SND_HDA_INPUT_BEEP
107 module_param_array(beep_mode
, bool, NULL
, 0444);
108 MODULE_PARM_DESC(beep_mode
, "Select HDA Beep registration mode "
109 "(0=off, 1=on) (default=1).");
112 #ifdef CONFIG_SND_HDA_POWER_SAVE
113 static int param_set_xint(const char *val
, const struct kernel_param
*kp
);
114 static struct kernel_param_ops param_ops_xint
= {
115 .set
= param_set_xint
,
116 .get
= param_get_int
,
118 #define param_check_xint param_check_int
120 static int power_save
= CONFIG_SND_HDA_POWER_SAVE_DEFAULT
;
121 module_param(power_save
, xint
, 0644);
122 MODULE_PARM_DESC(power_save
, "Automatic power-saving timeout "
123 "(in second, 0 = disable).");
125 /* reset the HD-audio controller in power save mode.
126 * this may give more power-saving, but will take longer time to
129 static bool power_save_controller
= 1;
130 module_param(power_save_controller
, bool, 0644);
131 MODULE_PARM_DESC(power_save_controller
, "Reset controller in power save mode.");
134 static int align_buffer_size
= -1;
135 module_param(align_buffer_size
, bint
, 0644);
136 MODULE_PARM_DESC(align_buffer_size
,
137 "Force buffer and period sizes to be multiple of 128 bytes.");
140 static bool hda_snoop
= true;
141 module_param_named(snoop
, hda_snoop
, bool, 0444);
142 MODULE_PARM_DESC(snoop
, "Enable/disable snooping");
143 #define azx_snoop(chip) (chip)->snoop
145 #define hda_snoop true
146 #define azx_snoop(chip) true
150 MODULE_LICENSE("GPL");
151 MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
182 MODULE_DESCRIPTION("Intel HDA driver");
184 #ifdef CONFIG_SND_VERBOSE_PRINTK
185 #define SFX /* nop */
187 #define SFX "hda-intel: "
190 #if defined(CONFIG_PM) && defined(CONFIG_VGA_SWITCHEROO)
191 #ifdef CONFIG_SND_HDA_CODEC_HDMI
192 #define SUPPORT_VGA_SWITCHEROO
200 #define ICH6_REG_GCAP 0x00
201 #define ICH6_GCAP_64OK (1 << 0) /* 64bit address support */
202 #define ICH6_GCAP_NSDO (3 << 1) /* # of serial data out signals */
203 #define ICH6_GCAP_BSS (31 << 3) /* # of bidirectional streams */
204 #define ICH6_GCAP_ISS (15 << 8) /* # of input streams */
205 #define ICH6_GCAP_OSS (15 << 12) /* # of output streams */
206 #define ICH6_REG_VMIN 0x02
207 #define ICH6_REG_VMAJ 0x03
208 #define ICH6_REG_OUTPAY 0x04
209 #define ICH6_REG_INPAY 0x06
210 #define ICH6_REG_GCTL 0x08
211 #define ICH6_GCTL_RESET (1 << 0) /* controller reset */
212 #define ICH6_GCTL_FCNTRL (1 << 1) /* flush control */
213 #define ICH6_GCTL_UNSOL (1 << 8) /* accept unsol. response enable */
214 #define ICH6_REG_WAKEEN 0x0c
215 #define ICH6_REG_STATESTS 0x0e
216 #define ICH6_REG_GSTS 0x10
217 #define ICH6_GSTS_FSTS (1 << 1) /* flush status */
218 #define ICH6_REG_INTCTL 0x20
219 #define ICH6_REG_INTSTS 0x24
220 #define ICH6_REG_WALLCLK 0x30 /* 24Mhz source */
221 #define ICH6_REG_OLD_SSYNC 0x34 /* SSYNC for old ICH */
222 #define ICH6_REG_SSYNC 0x38
223 #define ICH6_REG_CORBLBASE 0x40
224 #define ICH6_REG_CORBUBASE 0x44
225 #define ICH6_REG_CORBWP 0x48
226 #define ICH6_REG_CORBRP 0x4a
227 #define ICH6_CORBRP_RST (1 << 15) /* read pointer reset */
228 #define ICH6_REG_CORBCTL 0x4c
229 #define ICH6_CORBCTL_RUN (1 << 1) /* enable DMA */
230 #define ICH6_CORBCTL_CMEIE (1 << 0) /* enable memory error irq */
231 #define ICH6_REG_CORBSTS 0x4d
232 #define ICH6_CORBSTS_CMEI (1 << 0) /* memory error indication */
233 #define ICH6_REG_CORBSIZE 0x4e
235 #define ICH6_REG_RIRBLBASE 0x50
236 #define ICH6_REG_RIRBUBASE 0x54
237 #define ICH6_REG_RIRBWP 0x58
238 #define ICH6_RIRBWP_RST (1 << 15) /* write pointer reset */
239 #define ICH6_REG_RINTCNT 0x5a
240 #define ICH6_REG_RIRBCTL 0x5c
241 #define ICH6_RBCTL_IRQ_EN (1 << 0) /* enable IRQ */
242 #define ICH6_RBCTL_DMA_EN (1 << 1) /* enable DMA */
243 #define ICH6_RBCTL_OVERRUN_EN (1 << 2) /* enable overrun irq */
244 #define ICH6_REG_RIRBSTS 0x5d
245 #define ICH6_RBSTS_IRQ (1 << 0) /* response irq */
246 #define ICH6_RBSTS_OVERRUN (1 << 2) /* overrun irq */
247 #define ICH6_REG_RIRBSIZE 0x5e
249 #define ICH6_REG_IC 0x60
250 #define ICH6_REG_IR 0x64
251 #define ICH6_REG_IRS 0x68
252 #define ICH6_IRS_VALID (1<<1)
253 #define ICH6_IRS_BUSY (1<<0)
255 #define ICH6_REG_DPLBASE 0x70
256 #define ICH6_REG_DPUBASE 0x74
257 #define ICH6_DPLBASE_ENABLE 0x1 /* Enable position buffer */
259 /* SD offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
260 enum { SDI0
, SDI1
, SDI2
, SDI3
, SDO0
, SDO1
, SDO2
, SDO3
};
262 /* stream register offsets from stream base */
263 #define ICH6_REG_SD_CTL 0x00
264 #define ICH6_REG_SD_STS 0x03
265 #define ICH6_REG_SD_LPIB 0x04
266 #define ICH6_REG_SD_CBL 0x08
267 #define ICH6_REG_SD_LVI 0x0c
268 #define ICH6_REG_SD_FIFOW 0x0e
269 #define ICH6_REG_SD_FIFOSIZE 0x10
270 #define ICH6_REG_SD_FORMAT 0x12
271 #define ICH6_REG_SD_BDLPL 0x18
272 #define ICH6_REG_SD_BDLPU 0x1c
275 #define ICH6_PCIREG_TCSEL 0x44
281 /* max number of SDs */
282 /* ICH, ATI and VIA have 4 playback and 4 capture */
283 #define ICH6_NUM_CAPTURE 4
284 #define ICH6_NUM_PLAYBACK 4
286 /* ULI has 6 playback and 5 capture */
287 #define ULI_NUM_CAPTURE 5
288 #define ULI_NUM_PLAYBACK 6
290 /* ATI HDMI has 1 playback and 0 capture */
291 #define ATIHDMI_NUM_CAPTURE 0
292 #define ATIHDMI_NUM_PLAYBACK 1
294 /* TERA has 4 playback and 3 capture */
295 #define TERA_NUM_CAPTURE 3
296 #define TERA_NUM_PLAYBACK 4
298 /* this number is statically defined for simplicity */
299 #define MAX_AZX_DEV 16
301 /* max number of fragments - we may use more if allocating more pages for BDL */
302 #define BDL_SIZE 4096
303 #define AZX_MAX_BDL_ENTRIES (BDL_SIZE / 16)
304 #define AZX_MAX_FRAG 32
305 /* max buffer size - no h/w limit, you can increase as you like */
306 #define AZX_MAX_BUF_SIZE (1024*1024*1024)
308 /* RIRB int mask: overrun[2], response[0] */
309 #define RIRB_INT_RESPONSE 0x01
310 #define RIRB_INT_OVERRUN 0x04
311 #define RIRB_INT_MASK 0x05
313 /* STATESTS int mask: S3,SD2,SD1,SD0 */
314 #define AZX_MAX_CODECS 8
315 #define AZX_DEFAULT_CODECS 4
316 #define STATESTS_INT_MASK ((1 << AZX_MAX_CODECS) - 1)
319 #define SD_CTL_STREAM_RESET 0x01 /* stream reset bit */
320 #define SD_CTL_DMA_START 0x02 /* stream DMA start bit */
321 #define SD_CTL_STRIPE (3 << 16) /* stripe control */
322 #define SD_CTL_TRAFFIC_PRIO (1 << 18) /* traffic priority */
323 #define SD_CTL_DIR (1 << 19) /* bi-directional stream */
324 #define SD_CTL_STREAM_TAG_MASK (0xf << 20)
325 #define SD_CTL_STREAM_TAG_SHIFT 20
327 /* SD_CTL and SD_STS */
328 #define SD_INT_DESC_ERR 0x10 /* descriptor error interrupt */
329 #define SD_INT_FIFO_ERR 0x08 /* FIFO error interrupt */
330 #define SD_INT_COMPLETE 0x04 /* completion interrupt */
331 #define SD_INT_MASK (SD_INT_DESC_ERR|SD_INT_FIFO_ERR|\
335 #define SD_STS_FIFO_READY 0x20 /* FIFO ready */
337 /* INTCTL and INTSTS */
338 #define ICH6_INT_ALL_STREAM 0xff /* all stream interrupts */
339 #define ICH6_INT_CTRL_EN 0x40000000 /* controller interrupt enable bit */
340 #define ICH6_INT_GLOBAL_EN 0x80000000 /* global interrupt enable bit */
342 /* below are so far hardcoded - should read registers in future */
343 #define ICH6_MAX_CORB_ENTRIES 256
344 #define ICH6_MAX_RIRB_ENTRIES 256
346 /* position fix mode */
355 /* Defines for ATI HD Audio support in SB450 south bridge */
356 #define ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR 0x42
357 #define ATI_SB450_HDAUDIO_ENABLE_SNOOP 0x02
359 /* Defines for Nvidia HDA support */
360 #define NVIDIA_HDA_TRANSREG_ADDR 0x4e
361 #define NVIDIA_HDA_ENABLE_COHBITS 0x0f
362 #define NVIDIA_HDA_ISTRM_COH 0x4d
363 #define NVIDIA_HDA_OSTRM_COH 0x4c
364 #define NVIDIA_HDA_ENABLE_COHBIT 0x01
366 /* Defines for Intel SCH HDA snoop control */
367 #define INTEL_SCH_HDA_DEVC 0x78
368 #define INTEL_SCH_HDA_DEVC_NOSNOOP (0x1<<11)
370 /* Define IN stream 0 FIFO size offset in VIA controller */
371 #define VIA_IN_STREAM0_FIFO_SIZE_OFFSET 0x90
372 /* Define VIA HD Audio Device ID*/
373 #define VIA_HDAC_DEVICE_ID 0x3288
375 /* HD Audio class code */
376 #define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
382 struct snd_dma_buffer bdl
; /* BDL buffer */
383 u32
*posbuf
; /* position buffer pointer */
385 unsigned int bufsize
; /* size of the play buffer in bytes */
386 unsigned int period_bytes
; /* size of the period in bytes */
387 unsigned int frags
; /* number for period in the play buffer */
388 unsigned int fifo_size
; /* FIFO size */
389 unsigned long start_wallclk
; /* start + minimum wallclk */
390 unsigned long period_wallclk
; /* wallclk for period */
392 void __iomem
*sd_addr
; /* stream descriptor pointer */
394 u32 sd_int_sta_mask
; /* stream int status mask */
397 struct snd_pcm_substream
*substream
; /* assigned substream,
400 unsigned int format_val
; /* format value to be set in the
401 * controller and the codec
403 unsigned char stream_tag
; /* assigned stream */
404 unsigned char index
; /* stream index */
405 int assigned_key
; /* last device# key assigned to */
407 unsigned int opened
:1;
408 unsigned int running
:1;
409 unsigned int irq_pending
:1;
412 * A flag to ensure DMA position is 0
413 * when link position is not greater than FIFO size
415 unsigned int insufficient
:1;
416 unsigned int wc_marked
:1;
421 u32
*buf
; /* CORB/RIRB buffer
422 * Each CORB entry is 4byte, RIRB is 8byte
424 dma_addr_t addr
; /* physical address of CORB/RIRB buffer */
426 unsigned short rp
, wp
; /* read/write pointers */
427 int cmds
[AZX_MAX_CODECS
]; /* number of pending requests */
428 u32 res
[AZX_MAX_CODECS
]; /* last read value */
434 struct hda_codec
*codec
;
435 struct hda_pcm_stream
*hinfo
[2];
436 struct list_head list
;
440 struct snd_card
*card
;
444 /* chip type specific */
446 unsigned int driver_caps
;
447 int playback_streams
;
448 int playback_index_offset
;
450 int capture_index_offset
;
455 void __iomem
*remap_addr
;
460 struct mutex open_mutex
;
462 /* streams (x num_streams) */
463 struct azx_dev
*azx_dev
;
466 struct list_head pcm_list
; /* azx_pcm list */
469 unsigned short codec_mask
;
470 int codec_probe_mask
; /* copied from probe_mask option */
472 unsigned int beep_mode
;
478 /* CORB/RIRB and position buffers */
479 struct snd_dma_buffer rb
;
480 struct snd_dma_buffer posbuf
;
482 #ifdef CONFIG_SND_HDA_PATCH_LOADER
483 const struct firmware
*fw
;
487 int position_fix
[2]; /* for both playback/capture streams */
489 unsigned int running
:1;
490 unsigned int initialized
:1;
491 unsigned int single_cmd
:1;
492 unsigned int polling_mode
:1;
494 unsigned int irq_pending_warned
:1;
495 unsigned int probing
:1; /* codec probing phase */
496 unsigned int snoop
:1;
497 unsigned int align_buffer_size
:1;
498 unsigned int region_requested
:1;
500 /* VGA-switcheroo setup */
501 unsigned int use_vga_switcheroo
:1;
502 unsigned int init_failed
:1; /* delayed init failed */
503 unsigned int disabled
:1; /* disabled by VGA-switcher */
506 unsigned int last_cmd
[AZX_MAX_CODECS
];
508 /* for pending irqs */
509 struct work_struct irq_pending_work
;
511 /* reboot notifier (for mysterious hangup problem at power-down) */
512 struct notifier_block reboot_notifier
;
514 /* card list (for power_save trigger) */
515 struct list_head list
;
525 AZX_DRIVER_ATIHDMI_NS
,
534 AZX_NUM_DRIVERS
, /* keep this as last entry */
537 /* driver quirks (capabilities) */
538 /* bits 0-7 are used for indicating driver type */
539 #define AZX_DCAPS_NO_TCSEL (1 << 8) /* No Intel TCSEL bit */
540 #define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
541 #define AZX_DCAPS_ATI_SNOOP (1 << 10) /* ATI snoop enable */
542 #define AZX_DCAPS_NVIDIA_SNOOP (1 << 11) /* Nvidia snoop enable */
543 #define AZX_DCAPS_SCH_SNOOP (1 << 12) /* SCH/PCH snoop enable */
544 #define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */
545 #define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */
546 #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
547 #define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */
548 #define AZX_DCAPS_POSFIX_VIA (1 << 17) /* Use VIACOMBO as default */
549 #define AZX_DCAPS_NO_64BIT (1 << 18) /* No 64bit address */
550 #define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */
551 #define AZX_DCAPS_OLD_SSYNC (1 << 20) /* Old SSYNC reg for ICH */
552 #define AZX_DCAPS_BUFSIZE (1 << 21) /* no buffer size alignment */
553 #define AZX_DCAPS_ALIGN_BUFSIZE (1 << 22) /* buffer size alignment */
554 #define AZX_DCAPS_4K_BDLE_BOUNDARY (1 << 23) /* BDLE in 4k boundary */
555 #define AZX_DCAPS_POSFIX_COMBO (1 << 24) /* Use COMBO as default */
557 /* quirks for ATI SB / AMD Hudson */
558 #define AZX_DCAPS_PRESET_ATI_SB \
559 (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
560 AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
562 /* quirks for ATI/AMD HDMI */
563 #define AZX_DCAPS_PRESET_ATI_HDMI \
564 (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
566 /* quirks for Nvidia */
567 #define AZX_DCAPS_PRESET_NVIDIA \
568 (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
569 AZX_DCAPS_ALIGN_BUFSIZE)
571 #define AZX_DCAPS_PRESET_CTHDA \
572 (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_4K_BDLE_BOUNDARY)
575 * VGA-switcher support
577 #ifdef SUPPORT_VGA_SWITCHEROO
578 #define use_vga_switcheroo(chip) ((chip)->use_vga_switcheroo)
580 #define use_vga_switcheroo(chip) 0
583 #if defined(SUPPORT_VGA_SWITCHEROO) || defined(CONFIG_SND_HDA_PATCH_LOADER)
584 #define DELAYED_INIT_MARK
585 #define DELAYED_INITDATA_MARK
587 #define DELAYED_INIT_MARK __devinit
588 #define DELAYED_INITDATA_MARK __devinitdata
591 static char *driver_short_names
[] DELAYED_INITDATA_MARK
= {
592 [AZX_DRIVER_ICH
] = "HDA Intel",
593 [AZX_DRIVER_PCH
] = "HDA Intel PCH",
594 [AZX_DRIVER_SCH
] = "HDA Intel MID",
595 [AZX_DRIVER_ATI
] = "HDA ATI SB",
596 [AZX_DRIVER_ATIHDMI
] = "HDA ATI HDMI",
597 [AZX_DRIVER_ATIHDMI_NS
] = "HDA ATI HDMI",
598 [AZX_DRIVER_VIA
] = "HDA VIA VT82xx",
599 [AZX_DRIVER_SIS
] = "HDA SIS966",
600 [AZX_DRIVER_ULI
] = "HDA ULI M5461",
601 [AZX_DRIVER_NVIDIA
] = "HDA NVidia",
602 [AZX_DRIVER_TERA
] = "HDA Teradici",
603 [AZX_DRIVER_CTX
] = "HDA Creative",
604 [AZX_DRIVER_CTHDA
] = "HDA Creative",
605 [AZX_DRIVER_GENERIC
] = "HD-Audio Generic",
609 * macros for easy use
611 #define azx_writel(chip,reg,value) \
612 writel(value, (chip)->remap_addr + ICH6_REG_##reg)
613 #define azx_readl(chip,reg) \
614 readl((chip)->remap_addr + ICH6_REG_##reg)
615 #define azx_writew(chip,reg,value) \
616 writew(value, (chip)->remap_addr + ICH6_REG_##reg)
617 #define azx_readw(chip,reg) \
618 readw((chip)->remap_addr + ICH6_REG_##reg)
619 #define azx_writeb(chip,reg,value) \
620 writeb(value, (chip)->remap_addr + ICH6_REG_##reg)
621 #define azx_readb(chip,reg) \
622 readb((chip)->remap_addr + ICH6_REG_##reg)
624 #define azx_sd_writel(dev,reg,value) \
625 writel(value, (dev)->sd_addr + ICH6_REG_##reg)
626 #define azx_sd_readl(dev,reg) \
627 readl((dev)->sd_addr + ICH6_REG_##reg)
628 #define azx_sd_writew(dev,reg,value) \
629 writew(value, (dev)->sd_addr + ICH6_REG_##reg)
630 #define azx_sd_readw(dev,reg) \
631 readw((dev)->sd_addr + ICH6_REG_##reg)
632 #define azx_sd_writeb(dev,reg,value) \
633 writeb(value, (dev)->sd_addr + ICH6_REG_##reg)
634 #define azx_sd_readb(dev,reg) \
635 readb((dev)->sd_addr + ICH6_REG_##reg)
637 /* for pcm support */
638 #define get_azx_dev(substream) (substream->runtime->private_data)
641 static void __mark_pages_wc(struct azx
*chip
, void *addr
, size_t size
, bool on
)
646 int pages
= (size
+ PAGE_SIZE
- 1) >> PAGE_SHIFT
;
648 set_memory_wc((unsigned long)addr
, pages
);
650 set_memory_wb((unsigned long)addr
, pages
);
654 static inline void mark_pages_wc(struct azx
*chip
, struct snd_dma_buffer
*buf
,
657 __mark_pages_wc(chip
, buf
->area
, buf
->bytes
, on
);
659 static inline void mark_runtime_wc(struct azx
*chip
, struct azx_dev
*azx_dev
,
660 struct snd_pcm_runtime
*runtime
, bool on
)
662 if (azx_dev
->wc_marked
!= on
) {
663 __mark_pages_wc(chip
, runtime
->dma_area
, runtime
->dma_bytes
, on
);
664 azx_dev
->wc_marked
= on
;
668 /* NOP for other archs */
669 static inline void mark_pages_wc(struct azx
*chip
, struct snd_dma_buffer
*buf
,
673 static inline void mark_runtime_wc(struct azx
*chip
, struct azx_dev
*azx_dev
,
674 struct snd_pcm_runtime
*runtime
, bool on
)
679 static int azx_acquire_irq(struct azx
*chip
, int do_disconnect
);
680 static int azx_send_cmd(struct hda_bus
*bus
, unsigned int val
);
682 * Interface for HD codec
686 * CORB / RIRB interface
688 static int azx_alloc_cmd_io(struct azx
*chip
)
692 /* single page (at least 4096 bytes) must suffice for both ringbuffes */
693 err
= snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV
,
694 snd_dma_pci_data(chip
->pci
),
695 PAGE_SIZE
, &chip
->rb
);
697 snd_printk(KERN_ERR SFX
"cannot allocate CORB/RIRB\n");
700 mark_pages_wc(chip
, &chip
->rb
, true);
704 static void azx_init_cmd_io(struct azx
*chip
)
706 spin_lock_irq(&chip
->reg_lock
);
708 chip
->corb
.addr
= chip
->rb
.addr
;
709 chip
->corb
.buf
= (u32
*)chip
->rb
.area
;
710 azx_writel(chip
, CORBLBASE
, (u32
)chip
->corb
.addr
);
711 azx_writel(chip
, CORBUBASE
, upper_32_bits(chip
->corb
.addr
));
713 /* set the corb size to 256 entries (ULI requires explicitly) */
714 azx_writeb(chip
, CORBSIZE
, 0x02);
715 /* set the corb write pointer to 0 */
716 azx_writew(chip
, CORBWP
, 0);
717 /* reset the corb hw read pointer */
718 azx_writew(chip
, CORBRP
, ICH6_CORBRP_RST
);
719 /* enable corb dma */
720 azx_writeb(chip
, CORBCTL
, ICH6_CORBCTL_RUN
);
723 chip
->rirb
.addr
= chip
->rb
.addr
+ 2048;
724 chip
->rirb
.buf
= (u32
*)(chip
->rb
.area
+ 2048);
725 chip
->rirb
.wp
= chip
->rirb
.rp
= 0;
726 memset(chip
->rirb
.cmds
, 0, sizeof(chip
->rirb
.cmds
));
727 azx_writel(chip
, RIRBLBASE
, (u32
)chip
->rirb
.addr
);
728 azx_writel(chip
, RIRBUBASE
, upper_32_bits(chip
->rirb
.addr
));
730 /* set the rirb size to 256 entries (ULI requires explicitly) */
731 azx_writeb(chip
, RIRBSIZE
, 0x02);
732 /* reset the rirb hw write pointer */
733 azx_writew(chip
, RIRBWP
, ICH6_RIRBWP_RST
);
734 /* set N=1, get RIRB response interrupt for new entry */
735 if (chip
->driver_caps
& AZX_DCAPS_CTX_WORKAROUND
)
736 azx_writew(chip
, RINTCNT
, 0xc0);
738 azx_writew(chip
, RINTCNT
, 1);
739 /* enable rirb dma and response irq */
740 azx_writeb(chip
, RIRBCTL
, ICH6_RBCTL_DMA_EN
| ICH6_RBCTL_IRQ_EN
);
741 spin_unlock_irq(&chip
->reg_lock
);
744 static void azx_free_cmd_io(struct azx
*chip
)
746 spin_lock_irq(&chip
->reg_lock
);
747 /* disable ringbuffer DMAs */
748 azx_writeb(chip
, RIRBCTL
, 0);
749 azx_writeb(chip
, CORBCTL
, 0);
750 spin_unlock_irq(&chip
->reg_lock
);
753 static unsigned int azx_command_addr(u32 cmd
)
755 unsigned int addr
= cmd
>> 28;
757 if (addr
>= AZX_MAX_CODECS
) {
765 static unsigned int azx_response_addr(u32 res
)
767 unsigned int addr
= res
& 0xf;
769 if (addr
>= AZX_MAX_CODECS
) {
778 static int azx_corb_send_cmd(struct hda_bus
*bus
, u32 val
)
780 struct azx
*chip
= bus
->private_data
;
781 unsigned int addr
= azx_command_addr(val
);
784 spin_lock_irq(&chip
->reg_lock
);
786 /* add command to corb */
787 wp
= azx_readb(chip
, CORBWP
);
789 wp
%= ICH6_MAX_CORB_ENTRIES
;
791 chip
->rirb
.cmds
[addr
]++;
792 chip
->corb
.buf
[wp
] = cpu_to_le32(val
);
793 azx_writel(chip
, CORBWP
, wp
);
795 spin_unlock_irq(&chip
->reg_lock
);
800 #define ICH6_RIRB_EX_UNSOL_EV (1<<4)
802 /* retrieve RIRB entry - called from interrupt handler */
803 static void azx_update_rirb(struct azx
*chip
)
809 wp
= azx_readb(chip
, RIRBWP
);
810 if (wp
== chip
->rirb
.wp
)
814 while (chip
->rirb
.rp
!= wp
) {
816 chip
->rirb
.rp
%= ICH6_MAX_RIRB_ENTRIES
;
818 rp
= chip
->rirb
.rp
<< 1; /* an RIRB entry is 8-bytes */
819 res_ex
= le32_to_cpu(chip
->rirb
.buf
[rp
+ 1]);
820 res
= le32_to_cpu(chip
->rirb
.buf
[rp
]);
821 addr
= azx_response_addr(res_ex
);
822 if (res_ex
& ICH6_RIRB_EX_UNSOL_EV
)
823 snd_hda_queue_unsol_event(chip
->bus
, res
, res_ex
);
824 else if (chip
->rirb
.cmds
[addr
]) {
825 chip
->rirb
.res
[addr
] = res
;
827 chip
->rirb
.cmds
[addr
]--;
829 snd_printk(KERN_ERR SFX
"spurious response %#x:%#x, "
832 chip
->last_cmd
[addr
]);
836 /* receive a response */
837 static unsigned int azx_rirb_get_response(struct hda_bus
*bus
,
840 struct azx
*chip
= bus
->private_data
;
841 unsigned long timeout
;
842 unsigned long loopcounter
;
846 timeout
= jiffies
+ msecs_to_jiffies(1000);
848 for (loopcounter
= 0;; loopcounter
++) {
849 if (chip
->polling_mode
|| do_poll
) {
850 spin_lock_irq(&chip
->reg_lock
);
851 azx_update_rirb(chip
);
852 spin_unlock_irq(&chip
->reg_lock
);
854 if (!chip
->rirb
.cmds
[addr
]) {
859 chip
->poll_count
= 0;
860 return chip
->rirb
.res
[addr
]; /* the last value */
862 if (time_after(jiffies
, timeout
))
864 if (bus
->needs_damn_long_delay
|| loopcounter
> 3000)
865 msleep(2); /* temporary workaround */
872 if (!chip
->polling_mode
&& chip
->poll_count
< 2) {
873 snd_printdd(SFX
"azx_get_response timeout, "
874 "polling the codec once: last cmd=0x%08x\n",
875 chip
->last_cmd
[addr
]);
882 if (!chip
->polling_mode
) {
883 snd_printk(KERN_WARNING SFX
"azx_get_response timeout, "
884 "switching to polling mode: last cmd=0x%08x\n",
885 chip
->last_cmd
[addr
]);
886 chip
->polling_mode
= 1;
891 snd_printk(KERN_WARNING SFX
"No response from codec, "
892 "disabling MSI: last cmd=0x%08x\n",
893 chip
->last_cmd
[addr
]);
894 free_irq(chip
->irq
, chip
);
896 pci_disable_msi(chip
->pci
);
898 if (azx_acquire_irq(chip
, 1) < 0) {
906 /* If this critical timeout happens during the codec probing
907 * phase, this is likely an access to a non-existing codec
908 * slot. Better to return an error and reset the system.
913 /* a fatal communication error; need either to reset or to fallback
914 * to the single_cmd mode
917 if (bus
->allow_bus_reset
&& !bus
->response_reset
&& !bus
->in_reset
) {
918 bus
->response_reset
= 1;
919 return -1; /* give a chance to retry */
922 snd_printk(KERN_ERR
"hda_intel: azx_get_response timeout, "
923 "switching to single_cmd mode: last cmd=0x%08x\n",
924 chip
->last_cmd
[addr
]);
925 chip
->single_cmd
= 1;
926 bus
->response_reset
= 0;
927 /* release CORB/RIRB */
928 azx_free_cmd_io(chip
);
929 /* disable unsolicited responses */
930 azx_writel(chip
, GCTL
, azx_readl(chip
, GCTL
) & ~ICH6_GCTL_UNSOL
);
935 * Use the single immediate command instead of CORB/RIRB for simplicity
937 * Note: according to Intel, this is not preferred use. The command was
938 * intended for the BIOS only, and may get confused with unsolicited
939 * responses. So, we shouldn't use it for normal operation from the
941 * I left the codes, however, for debugging/testing purposes.
944 /* receive a response */
945 static int azx_single_wait_for_response(struct azx
*chip
, unsigned int addr
)
950 /* check IRV busy bit */
951 if (azx_readw(chip
, IRS
) & ICH6_IRS_VALID
) {
952 /* reuse rirb.res as the response return value */
953 chip
->rirb
.res
[addr
] = azx_readl(chip
, IR
);
958 if (printk_ratelimit())
959 snd_printd(SFX
"get_response timeout: IRS=0x%x\n",
960 azx_readw(chip
, IRS
));
961 chip
->rirb
.res
[addr
] = -1;
966 static int azx_single_send_cmd(struct hda_bus
*bus
, u32 val
)
968 struct azx
*chip
= bus
->private_data
;
969 unsigned int addr
= azx_command_addr(val
);
974 /* check ICB busy bit */
975 if (!((azx_readw(chip
, IRS
) & ICH6_IRS_BUSY
))) {
976 /* Clear IRV valid bit */
977 azx_writew(chip
, IRS
, azx_readw(chip
, IRS
) |
979 azx_writel(chip
, IC
, val
);
980 azx_writew(chip
, IRS
, azx_readw(chip
, IRS
) |
982 return azx_single_wait_for_response(chip
, addr
);
986 if (printk_ratelimit())
987 snd_printd(SFX
"send_cmd timeout: IRS=0x%x, val=0x%x\n",
988 azx_readw(chip
, IRS
), val
);
992 /* receive a response */
993 static unsigned int azx_single_get_response(struct hda_bus
*bus
,
996 struct azx
*chip
= bus
->private_data
;
997 return chip
->rirb
.res
[addr
];
1001 * The below are the main callbacks from hda_codec.
1003 * They are just the skeleton to call sub-callbacks according to the
1004 * current setting of chip->single_cmd.
1007 /* send a command */
1008 static int azx_send_cmd(struct hda_bus
*bus
, unsigned int val
)
1010 struct azx
*chip
= bus
->private_data
;
1014 chip
->last_cmd
[azx_command_addr(val
)] = val
;
1015 if (chip
->single_cmd
)
1016 return azx_single_send_cmd(bus
, val
);
1018 return azx_corb_send_cmd(bus
, val
);
1021 /* get a response */
1022 static unsigned int azx_get_response(struct hda_bus
*bus
,
1025 struct azx
*chip
= bus
->private_data
;
1028 if (chip
->single_cmd
)
1029 return azx_single_get_response(bus
, addr
);
1031 return azx_rirb_get_response(bus
, addr
);
1034 #ifdef CONFIG_SND_HDA_POWER_SAVE
1035 static void azx_power_notify(struct hda_bus
*bus
);
1038 /* reset codec link */
1039 static int azx_reset(struct azx
*chip
, int full_reset
)
1046 /* clear STATESTS */
1047 azx_writeb(chip
, STATESTS
, STATESTS_INT_MASK
);
1049 /* reset controller */
1050 azx_writel(chip
, GCTL
, azx_readl(chip
, GCTL
) & ~ICH6_GCTL_RESET
);
1053 while (azx_readb(chip
, GCTL
) && --count
)
1056 /* delay for >= 100us for codec PLL to settle per spec
1057 * Rev 0.9 section 5.5.1
1061 /* Bring controller out of reset */
1062 azx_writeb(chip
, GCTL
, azx_readb(chip
, GCTL
) | ICH6_GCTL_RESET
);
1065 while (!azx_readb(chip
, GCTL
) && --count
)
1068 /* Brent Chartrand said to wait >= 540us for codecs to initialize */
1072 /* check to see if controller is ready */
1073 if (!azx_readb(chip
, GCTL
)) {
1074 snd_printd(SFX
"azx_reset: controller not ready!\n");
1078 /* Accept unsolicited responses */
1079 if (!chip
->single_cmd
)
1080 azx_writel(chip
, GCTL
, azx_readl(chip
, GCTL
) |
1084 if (!chip
->codec_mask
) {
1085 chip
->codec_mask
= azx_readw(chip
, STATESTS
);
1086 snd_printdd(SFX
"codec_mask = 0x%x\n", chip
->codec_mask
);
1094 * Lowlevel interface
1097 /* enable interrupts */
1098 static void azx_int_enable(struct azx
*chip
)
1100 /* enable controller CIE and GIE */
1101 azx_writel(chip
, INTCTL
, azx_readl(chip
, INTCTL
) |
1102 ICH6_INT_CTRL_EN
| ICH6_INT_GLOBAL_EN
);
1105 /* disable interrupts */
1106 static void azx_int_disable(struct azx
*chip
)
1110 /* disable interrupts in stream descriptor */
1111 for (i
= 0; i
< chip
->num_streams
; i
++) {
1112 struct azx_dev
*azx_dev
= &chip
->azx_dev
[i
];
1113 azx_sd_writeb(azx_dev
, SD_CTL
,
1114 azx_sd_readb(azx_dev
, SD_CTL
) & ~SD_INT_MASK
);
1117 /* disable SIE for all streams */
1118 azx_writeb(chip
, INTCTL
, 0);
1120 /* disable controller CIE and GIE */
1121 azx_writel(chip
, INTCTL
, azx_readl(chip
, INTCTL
) &
1122 ~(ICH6_INT_CTRL_EN
| ICH6_INT_GLOBAL_EN
));
1125 /* clear interrupts */
1126 static void azx_int_clear(struct azx
*chip
)
1130 /* clear stream status */
1131 for (i
= 0; i
< chip
->num_streams
; i
++) {
1132 struct azx_dev
*azx_dev
= &chip
->azx_dev
[i
];
1133 azx_sd_writeb(azx_dev
, SD_STS
, SD_INT_MASK
);
1136 /* clear STATESTS */
1137 azx_writeb(chip
, STATESTS
, STATESTS_INT_MASK
);
1139 /* clear rirb status */
1140 azx_writeb(chip
, RIRBSTS
, RIRB_INT_MASK
);
1142 /* clear int status */
1143 azx_writel(chip
, INTSTS
, ICH6_INT_CTRL_EN
| ICH6_INT_ALL_STREAM
);
1146 /* start a stream */
1147 static void azx_stream_start(struct azx
*chip
, struct azx_dev
*azx_dev
)
1150 * Before stream start, initialize parameter
1152 azx_dev
->insufficient
= 1;
1155 azx_writel(chip
, INTCTL
,
1156 azx_readl(chip
, INTCTL
) | (1 << azx_dev
->index
));
1157 /* set DMA start and interrupt mask */
1158 azx_sd_writeb(azx_dev
, SD_CTL
, azx_sd_readb(azx_dev
, SD_CTL
) |
1159 SD_CTL_DMA_START
| SD_INT_MASK
);
1163 static void azx_stream_clear(struct azx
*chip
, struct azx_dev
*azx_dev
)
1165 azx_sd_writeb(azx_dev
, SD_CTL
, azx_sd_readb(azx_dev
, SD_CTL
) &
1166 ~(SD_CTL_DMA_START
| SD_INT_MASK
));
1167 azx_sd_writeb(azx_dev
, SD_STS
, SD_INT_MASK
); /* to be sure */
1171 static void azx_stream_stop(struct azx
*chip
, struct azx_dev
*azx_dev
)
1173 azx_stream_clear(chip
, azx_dev
);
1175 azx_writel(chip
, INTCTL
,
1176 azx_readl(chip
, INTCTL
) & ~(1 << azx_dev
->index
));
1181 * reset and start the controller registers
1183 static void azx_init_chip(struct azx
*chip
, int full_reset
)
1185 if (chip
->initialized
)
1188 /* reset controller */
1189 azx_reset(chip
, full_reset
);
1191 /* initialize interrupts */
1192 azx_int_clear(chip
);
1193 azx_int_enable(chip
);
1195 /* initialize the codec command I/O */
1196 if (!chip
->single_cmd
)
1197 azx_init_cmd_io(chip
);
1199 /* program the position buffer */
1200 azx_writel(chip
, DPLBASE
, (u32
)chip
->posbuf
.addr
);
1201 azx_writel(chip
, DPUBASE
, upper_32_bits(chip
->posbuf
.addr
));
1203 chip
->initialized
= 1;
1207 * initialize the PCI registers
1209 /* update bits in a PCI register byte */
1210 static void update_pci_byte(struct pci_dev
*pci
, unsigned int reg
,
1211 unsigned char mask
, unsigned char val
)
1215 pci_read_config_byte(pci
, reg
, &data
);
1217 data
|= (val
& mask
);
1218 pci_write_config_byte(pci
, reg
, data
);
1221 static void azx_init_pci(struct azx
*chip
)
1223 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
1224 * TCSEL == Traffic Class Select Register, which sets PCI express QOS
1225 * Ensuring these bits are 0 clears playback static on some HD Audio
1227 * The PCI register TCSEL is defined in the Intel manuals.
1229 if (!(chip
->driver_caps
& AZX_DCAPS_NO_TCSEL
)) {
1230 snd_printdd(SFX
"Clearing TCSEL\n");
1231 update_pci_byte(chip
->pci
, ICH6_PCIREG_TCSEL
, 0x07, 0);
1234 /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
1235 * we need to enable snoop.
1237 if (chip
->driver_caps
& AZX_DCAPS_ATI_SNOOP
) {
1238 snd_printdd(SFX
"Setting ATI snoop: %d\n", azx_snoop(chip
));
1239 update_pci_byte(chip
->pci
,
1240 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR
, 0x07,
1241 azx_snoop(chip
) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP
: 0);
1244 /* For NVIDIA HDA, enable snoop */
1245 if (chip
->driver_caps
& AZX_DCAPS_NVIDIA_SNOOP
) {
1246 snd_printdd(SFX
"Setting Nvidia snoop: %d\n", azx_snoop(chip
));
1247 update_pci_byte(chip
->pci
,
1248 NVIDIA_HDA_TRANSREG_ADDR
,
1249 0x0f, NVIDIA_HDA_ENABLE_COHBITS
);
1250 update_pci_byte(chip
->pci
,
1251 NVIDIA_HDA_ISTRM_COH
,
1252 0x01, NVIDIA_HDA_ENABLE_COHBIT
);
1253 update_pci_byte(chip
->pci
,
1254 NVIDIA_HDA_OSTRM_COH
,
1255 0x01, NVIDIA_HDA_ENABLE_COHBIT
);
1258 /* Enable SCH/PCH snoop if needed */
1259 if (chip
->driver_caps
& AZX_DCAPS_SCH_SNOOP
) {
1260 unsigned short snoop
;
1261 pci_read_config_word(chip
->pci
, INTEL_SCH_HDA_DEVC
, &snoop
);
1262 if ((!azx_snoop(chip
) && !(snoop
& INTEL_SCH_HDA_DEVC_NOSNOOP
)) ||
1263 (azx_snoop(chip
) && (snoop
& INTEL_SCH_HDA_DEVC_NOSNOOP
))) {
1264 snoop
&= ~INTEL_SCH_HDA_DEVC_NOSNOOP
;
1265 if (!azx_snoop(chip
))
1266 snoop
|= INTEL_SCH_HDA_DEVC_NOSNOOP
;
1267 pci_write_config_word(chip
->pci
, INTEL_SCH_HDA_DEVC
, snoop
);
1268 pci_read_config_word(chip
->pci
,
1269 INTEL_SCH_HDA_DEVC
, &snoop
);
1271 snd_printdd(SFX
"SCH snoop: %s\n",
1272 (snoop
& INTEL_SCH_HDA_DEVC_NOSNOOP
)
1273 ? "Disabled" : "Enabled");
1278 static int azx_position_ok(struct azx
*chip
, struct azx_dev
*azx_dev
);
1283 static irqreturn_t
azx_interrupt(int irq
, void *dev_id
)
1285 struct azx
*chip
= dev_id
;
1286 struct azx_dev
*azx_dev
;
1291 spin_lock(&chip
->reg_lock
);
1293 if (chip
->disabled
) {
1294 spin_unlock(&chip
->reg_lock
);
1298 status
= azx_readl(chip
, INTSTS
);
1300 spin_unlock(&chip
->reg_lock
);
1304 for (i
= 0; i
< chip
->num_streams
; i
++) {
1305 azx_dev
= &chip
->azx_dev
[i
];
1306 if (status
& azx_dev
->sd_int_sta_mask
) {
1307 sd_status
= azx_sd_readb(azx_dev
, SD_STS
);
1308 azx_sd_writeb(azx_dev
, SD_STS
, SD_INT_MASK
);
1309 if (!azx_dev
->substream
|| !azx_dev
->running
||
1310 !(sd_status
& SD_INT_COMPLETE
))
1312 /* check whether this IRQ is really acceptable */
1313 ok
= azx_position_ok(chip
, azx_dev
);
1315 azx_dev
->irq_pending
= 0;
1316 spin_unlock(&chip
->reg_lock
);
1317 snd_pcm_period_elapsed(azx_dev
->substream
);
1318 spin_lock(&chip
->reg_lock
);
1319 } else if (ok
== 0 && chip
->bus
&& chip
->bus
->workq
) {
1320 /* bogus IRQ, process it later */
1321 azx_dev
->irq_pending
= 1;
1322 queue_work(chip
->bus
->workq
,
1323 &chip
->irq_pending_work
);
1328 /* clear rirb int */
1329 status
= azx_readb(chip
, RIRBSTS
);
1330 if (status
& RIRB_INT_MASK
) {
1331 if (status
& RIRB_INT_RESPONSE
) {
1332 if (chip
->driver_caps
& AZX_DCAPS_RIRB_PRE_DELAY
)
1334 azx_update_rirb(chip
);
1336 azx_writeb(chip
, RIRBSTS
, RIRB_INT_MASK
);
1340 /* clear state status int */
1341 if (azx_readb(chip
, STATESTS
) & 0x04)
1342 azx_writeb(chip
, STATESTS
, 0x04);
1344 spin_unlock(&chip
->reg_lock
);
1351 * set up a BDL entry
1353 static int setup_bdle(struct azx
*chip
,
1354 struct snd_pcm_substream
*substream
,
1355 struct azx_dev
*azx_dev
, u32
**bdlp
,
1356 int ofs
, int size
, int with_ioc
)
1364 if (azx_dev
->frags
>= AZX_MAX_BDL_ENTRIES
)
1367 addr
= snd_pcm_sgbuf_get_addr(substream
, ofs
);
1368 /* program the address field of the BDL entry */
1369 bdl
[0] = cpu_to_le32((u32
)addr
);
1370 bdl
[1] = cpu_to_le32(upper_32_bits(addr
));
1371 /* program the size field of the BDL entry */
1372 chunk
= snd_pcm_sgbuf_get_chunk_size(substream
, ofs
, size
);
1373 /* one BDLE cannot cross 4K boundary on CTHDA chips */
1374 if (chip
->driver_caps
& AZX_DCAPS_4K_BDLE_BOUNDARY
) {
1375 u32 remain
= 0x1000 - (ofs
& 0xfff);
1379 bdl
[2] = cpu_to_le32(chunk
);
1380 /* program the IOC to enable interrupt
1381 * only when the whole fragment is processed
1384 bdl
[3] = (size
|| !with_ioc
) ? 0 : cpu_to_le32(0x01);
1394 * set up BDL entries
1396 static int azx_setup_periods(struct azx
*chip
,
1397 struct snd_pcm_substream
*substream
,
1398 struct azx_dev
*azx_dev
)
1401 int i
, ofs
, periods
, period_bytes
;
1404 /* reset BDL address */
1405 azx_sd_writel(azx_dev
, SD_BDLPL
, 0);
1406 azx_sd_writel(azx_dev
, SD_BDLPU
, 0);
1408 period_bytes
= azx_dev
->period_bytes
;
1409 periods
= azx_dev
->bufsize
/ period_bytes
;
1411 /* program the initial BDL entries */
1412 bdl
= (u32
*)azx_dev
->bdl
.area
;
1415 pos_adj
= bdl_pos_adj
[chip
->dev_index
];
1417 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
1418 int pos_align
= pos_adj
;
1419 pos_adj
= (pos_adj
* runtime
->rate
+ 47999) / 48000;
1421 pos_adj
= pos_align
;
1423 pos_adj
= ((pos_adj
+ pos_align
- 1) / pos_align
) *
1425 pos_adj
= frames_to_bytes(runtime
, pos_adj
);
1426 if (pos_adj
>= period_bytes
) {
1427 snd_printk(KERN_WARNING SFX
"Too big adjustment %d\n",
1428 bdl_pos_adj
[chip
->dev_index
]);
1431 ofs
= setup_bdle(chip
, substream
, azx_dev
,
1433 !substream
->runtime
->no_period_wakeup
);
1439 for (i
= 0; i
< periods
; i
++) {
1440 if (i
== periods
- 1 && pos_adj
)
1441 ofs
= setup_bdle(chip
, substream
, azx_dev
, &bdl
, ofs
,
1442 period_bytes
- pos_adj
, 0);
1444 ofs
= setup_bdle(chip
, substream
, azx_dev
, &bdl
, ofs
,
1446 !substream
->runtime
->no_period_wakeup
);
1453 snd_printk(KERN_ERR SFX
"Too many BDL entries: buffer=%d, period=%d\n",
1454 azx_dev
->bufsize
, period_bytes
);
1459 static void azx_stream_reset(struct azx
*chip
, struct azx_dev
*azx_dev
)
1464 azx_stream_clear(chip
, azx_dev
);
1466 azx_sd_writeb(azx_dev
, SD_CTL
, azx_sd_readb(azx_dev
, SD_CTL
) |
1467 SD_CTL_STREAM_RESET
);
1470 while (!((val
= azx_sd_readb(azx_dev
, SD_CTL
)) & SD_CTL_STREAM_RESET
) &&
1473 val
&= ~SD_CTL_STREAM_RESET
;
1474 azx_sd_writeb(azx_dev
, SD_CTL
, val
);
1478 /* waiting for hardware to report that the stream is out of reset */
1479 while (((val
= azx_sd_readb(azx_dev
, SD_CTL
)) & SD_CTL_STREAM_RESET
) &&
1483 /* reset first position - may not be synced with hw at this time */
1484 *azx_dev
->posbuf
= 0;
1488 * set up the SD for streaming
1490 static int azx_setup_controller(struct azx
*chip
, struct azx_dev
*azx_dev
)
1493 /* make sure the run bit is zero for SD */
1494 azx_stream_clear(chip
, azx_dev
);
1495 /* program the stream_tag */
1496 val
= azx_sd_readl(azx_dev
, SD_CTL
);
1497 val
= (val
& ~SD_CTL_STREAM_TAG_MASK
) |
1498 (azx_dev
->stream_tag
<< SD_CTL_STREAM_TAG_SHIFT
);
1499 if (!azx_snoop(chip
))
1500 val
|= SD_CTL_TRAFFIC_PRIO
;
1501 azx_sd_writel(azx_dev
, SD_CTL
, val
);
1503 /* program the length of samples in cyclic buffer */
1504 azx_sd_writel(azx_dev
, SD_CBL
, azx_dev
->bufsize
);
1506 /* program the stream format */
1507 /* this value needs to be the same as the one programmed */
1508 azx_sd_writew(azx_dev
, SD_FORMAT
, azx_dev
->format_val
);
1510 /* program the stream LVI (last valid index) of the BDL */
1511 azx_sd_writew(azx_dev
, SD_LVI
, azx_dev
->frags
- 1);
1513 /* program the BDL address */
1514 /* lower BDL address */
1515 azx_sd_writel(azx_dev
, SD_BDLPL
, (u32
)azx_dev
->bdl
.addr
);
1516 /* upper BDL address */
1517 azx_sd_writel(azx_dev
, SD_BDLPU
, upper_32_bits(azx_dev
->bdl
.addr
));
1519 /* enable the position buffer */
1520 if (chip
->position_fix
[0] != POS_FIX_LPIB
||
1521 chip
->position_fix
[1] != POS_FIX_LPIB
) {
1522 if (!(azx_readl(chip
, DPLBASE
) & ICH6_DPLBASE_ENABLE
))
1523 azx_writel(chip
, DPLBASE
,
1524 (u32
)chip
->posbuf
.addr
| ICH6_DPLBASE_ENABLE
);
1527 /* set the interrupt enable bits in the descriptor control register */
1528 azx_sd_writel(azx_dev
, SD_CTL
,
1529 azx_sd_readl(azx_dev
, SD_CTL
) | SD_INT_MASK
);
1535 * Probe the given codec address
1537 static int probe_codec(struct azx
*chip
, int addr
)
1539 unsigned int cmd
= (addr
<< 28) | (AC_NODE_ROOT
<< 20) |
1540 (AC_VERB_PARAMETERS
<< 8) | AC_PAR_VENDOR_ID
;
1543 mutex_lock(&chip
->bus
->cmd_mutex
);
1545 azx_send_cmd(chip
->bus
, cmd
);
1546 res
= azx_get_response(chip
->bus
, addr
);
1548 mutex_unlock(&chip
->bus
->cmd_mutex
);
1551 snd_printdd(SFX
"codec #%d probed OK\n", addr
);
1555 static int azx_attach_pcm_stream(struct hda_bus
*bus
, struct hda_codec
*codec
,
1556 struct hda_pcm
*cpcm
);
1557 static void azx_stop_chip(struct azx
*chip
);
1559 static void azx_bus_reset(struct hda_bus
*bus
)
1561 struct azx
*chip
= bus
->private_data
;
1564 azx_stop_chip(chip
);
1565 azx_init_chip(chip
, 1);
1567 if (chip
->initialized
) {
1569 list_for_each_entry(p
, &chip
->pcm_list
, list
)
1570 snd_pcm_suspend_all(p
->pcm
);
1571 snd_hda_suspend(chip
->bus
);
1572 snd_hda_resume(chip
->bus
);
1579 * Codec initialization
1582 /* number of codec slots for each chipset: 0 = default slots (i.e. 4) */
1583 static unsigned int azx_max_codecs
[AZX_NUM_DRIVERS
] DELAYED_INITDATA_MARK
= {
1584 [AZX_DRIVER_NVIDIA
] = 8,
1585 [AZX_DRIVER_TERA
] = 1,
1588 static int DELAYED_INIT_MARK
azx_codec_create(struct azx
*chip
, const char *model
)
1590 struct hda_bus_template bus_temp
;
1594 memset(&bus_temp
, 0, sizeof(bus_temp
));
1595 bus_temp
.private_data
= chip
;
1596 bus_temp
.modelname
= model
;
1597 bus_temp
.pci
= chip
->pci
;
1598 bus_temp
.ops
.command
= azx_send_cmd
;
1599 bus_temp
.ops
.get_response
= azx_get_response
;
1600 bus_temp
.ops
.attach_pcm
= azx_attach_pcm_stream
;
1601 bus_temp
.ops
.bus_reset
= azx_bus_reset
;
1602 #ifdef CONFIG_SND_HDA_POWER_SAVE
1603 bus_temp
.power_save
= &power_save
;
1604 bus_temp
.ops
.pm_notify
= azx_power_notify
;
1607 err
= snd_hda_bus_new(chip
->card
, &bus_temp
, &chip
->bus
);
1611 if (chip
->driver_caps
& AZX_DCAPS_RIRB_DELAY
) {
1612 snd_printd(SFX
"Enable delay in RIRB handling\n");
1613 chip
->bus
->needs_damn_long_delay
= 1;
1617 max_slots
= azx_max_codecs
[chip
->driver_type
];
1619 max_slots
= AZX_DEFAULT_CODECS
;
1621 /* First try to probe all given codec slots */
1622 for (c
= 0; c
< max_slots
; c
++) {
1623 if ((chip
->codec_mask
& (1 << c
)) & chip
->codec_probe_mask
) {
1624 if (probe_codec(chip
, c
) < 0) {
1625 /* Some BIOSen give you wrong codec addresses
1628 snd_printk(KERN_WARNING SFX
1629 "Codec #%d probe error; "
1630 "disabling it...\n", c
);
1631 chip
->codec_mask
&= ~(1 << c
);
1632 /* More badly, accessing to a non-existing
1633 * codec often screws up the controller chip,
1634 * and disturbs the further communications.
1635 * Thus if an error occurs during probing,
1636 * better to reset the controller chip to
1637 * get back to the sanity state.
1639 azx_stop_chip(chip
);
1640 azx_init_chip(chip
, 1);
1645 /* AMD chipsets often cause the communication stalls upon certain
1646 * sequence like the pin-detection. It seems that forcing the synced
1647 * access works around the stall. Grrr...
1649 if (chip
->driver_caps
& AZX_DCAPS_SYNC_WRITE
) {
1650 snd_printd(SFX
"Enable sync_write for stable communication\n");
1651 chip
->bus
->sync_write
= 1;
1652 chip
->bus
->allow_bus_reset
= 1;
1655 /* Then create codec instances */
1656 for (c
= 0; c
< max_slots
; c
++) {
1657 if ((chip
->codec_mask
& (1 << c
)) & chip
->codec_probe_mask
) {
1658 struct hda_codec
*codec
;
1659 err
= snd_hda_codec_new(chip
->bus
, c
, &codec
);
1662 codec
->beep_mode
= chip
->beep_mode
;
1667 snd_printk(KERN_ERR SFX
"no codecs initialized\n");
1673 /* configure each codec instance */
1674 static int __devinit
azx_codec_configure(struct azx
*chip
)
1676 struct hda_codec
*codec
;
1677 list_for_each_entry(codec
, &chip
->bus
->codec_list
, list
) {
1678 snd_hda_codec_configure(codec
);
1688 /* assign a stream for the PCM */
1689 static inline struct azx_dev
*
1690 azx_assign_device(struct azx
*chip
, struct snd_pcm_substream
*substream
)
1693 struct azx_dev
*res
= NULL
;
1694 /* make a non-zero unique key for the substream */
1695 int key
= (substream
->pcm
->device
<< 16) | (substream
->number
<< 2) |
1696 (substream
->stream
+ 1);
1698 if (substream
->stream
== SNDRV_PCM_STREAM_PLAYBACK
) {
1699 dev
= chip
->playback_index_offset
;
1700 nums
= chip
->playback_streams
;
1702 dev
= chip
->capture_index_offset
;
1703 nums
= chip
->capture_streams
;
1705 for (i
= 0; i
< nums
; i
++, dev
++)
1706 if (!chip
->azx_dev
[dev
].opened
) {
1707 res
= &chip
->azx_dev
[dev
];
1708 if (res
->assigned_key
== key
)
1713 res
->assigned_key
= key
;
1718 /* release the assigned stream */
1719 static inline void azx_release_device(struct azx_dev
*azx_dev
)
1721 azx_dev
->opened
= 0;
1724 static struct snd_pcm_hardware azx_pcm_hw
= {
1725 .info
= (SNDRV_PCM_INFO_MMAP
|
1726 SNDRV_PCM_INFO_INTERLEAVED
|
1727 SNDRV_PCM_INFO_BLOCK_TRANSFER
|
1728 SNDRV_PCM_INFO_MMAP_VALID
|
1729 /* No full-resume yet implemented */
1730 /* SNDRV_PCM_INFO_RESUME |*/
1731 SNDRV_PCM_INFO_PAUSE
|
1732 SNDRV_PCM_INFO_SYNC_START
|
1733 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP
),
1734 .formats
= SNDRV_PCM_FMTBIT_S16_LE
,
1735 .rates
= SNDRV_PCM_RATE_48000
,
1740 .buffer_bytes_max
= AZX_MAX_BUF_SIZE
,
1741 .period_bytes_min
= 128,
1742 .period_bytes_max
= AZX_MAX_BUF_SIZE
/ 2,
1744 .periods_max
= AZX_MAX_FRAG
,
1748 static int azx_pcm_open(struct snd_pcm_substream
*substream
)
1750 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
1751 struct hda_pcm_stream
*hinfo
= apcm
->hinfo
[substream
->stream
];
1752 struct azx
*chip
= apcm
->chip
;
1753 struct azx_dev
*azx_dev
;
1754 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
1755 unsigned long flags
;
1759 mutex_lock(&chip
->open_mutex
);
1760 azx_dev
= azx_assign_device(chip
, substream
);
1761 if (azx_dev
== NULL
) {
1762 mutex_unlock(&chip
->open_mutex
);
1765 runtime
->hw
= azx_pcm_hw
;
1766 runtime
->hw
.channels_min
= hinfo
->channels_min
;
1767 runtime
->hw
.channels_max
= hinfo
->channels_max
;
1768 runtime
->hw
.formats
= hinfo
->formats
;
1769 runtime
->hw
.rates
= hinfo
->rates
;
1770 snd_pcm_limit_hw_rates(runtime
);
1771 snd_pcm_hw_constraint_integer(runtime
, SNDRV_PCM_HW_PARAM_PERIODS
);
1772 if (chip
->align_buffer_size
)
1773 /* constrain buffer sizes to be multiple of 128
1774 bytes. This is more efficient in terms of memory
1775 access but isn't required by the HDA spec and
1776 prevents users from specifying exact period/buffer
1777 sizes. For example for 44.1kHz, a period size set
1778 to 20ms will be rounded to 19.59ms. */
1781 /* Don't enforce steps on buffer sizes, still need to
1782 be multiple of 4 bytes (HDA spec). Tested on Intel
1783 HDA controllers, may not work on all devices where
1784 option needs to be disabled */
1787 snd_pcm_hw_constraint_step(runtime
, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES
,
1789 snd_pcm_hw_constraint_step(runtime
, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES
,
1791 snd_hda_power_up_d3wait(apcm
->codec
);
1792 err
= hinfo
->ops
.open(hinfo
, apcm
->codec
, substream
);
1794 azx_release_device(azx_dev
);
1795 snd_hda_power_down(apcm
->codec
);
1796 mutex_unlock(&chip
->open_mutex
);
1799 snd_pcm_limit_hw_rates(runtime
);
1801 if (snd_BUG_ON(!runtime
->hw
.channels_min
) ||
1802 snd_BUG_ON(!runtime
->hw
.channels_max
) ||
1803 snd_BUG_ON(!runtime
->hw
.formats
) ||
1804 snd_BUG_ON(!runtime
->hw
.rates
)) {
1805 azx_release_device(azx_dev
);
1806 hinfo
->ops
.close(hinfo
, apcm
->codec
, substream
);
1807 snd_hda_power_down(apcm
->codec
);
1808 mutex_unlock(&chip
->open_mutex
);
1811 spin_lock_irqsave(&chip
->reg_lock
, flags
);
1812 azx_dev
->substream
= substream
;
1813 azx_dev
->running
= 0;
1814 spin_unlock_irqrestore(&chip
->reg_lock
, flags
);
1816 runtime
->private_data
= azx_dev
;
1817 snd_pcm_set_sync(substream
);
1818 mutex_unlock(&chip
->open_mutex
);
1822 static int azx_pcm_close(struct snd_pcm_substream
*substream
)
1824 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
1825 struct hda_pcm_stream
*hinfo
= apcm
->hinfo
[substream
->stream
];
1826 struct azx
*chip
= apcm
->chip
;
1827 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
1828 unsigned long flags
;
1830 mutex_lock(&chip
->open_mutex
);
1831 spin_lock_irqsave(&chip
->reg_lock
, flags
);
1832 azx_dev
->substream
= NULL
;
1833 azx_dev
->running
= 0;
1834 spin_unlock_irqrestore(&chip
->reg_lock
, flags
);
1835 azx_release_device(azx_dev
);
1836 hinfo
->ops
.close(hinfo
, apcm
->codec
, substream
);
1837 snd_hda_power_down(apcm
->codec
);
1838 mutex_unlock(&chip
->open_mutex
);
1842 static int azx_pcm_hw_params(struct snd_pcm_substream
*substream
,
1843 struct snd_pcm_hw_params
*hw_params
)
1845 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
1846 struct azx
*chip
= apcm
->chip
;
1847 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
1848 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
1851 mark_runtime_wc(chip
, azx_dev
, runtime
, false);
1852 azx_dev
->bufsize
= 0;
1853 azx_dev
->period_bytes
= 0;
1854 azx_dev
->format_val
= 0;
1855 ret
= snd_pcm_lib_malloc_pages(substream
,
1856 params_buffer_bytes(hw_params
));
1859 mark_runtime_wc(chip
, azx_dev
, runtime
, true);
1863 static int azx_pcm_hw_free(struct snd_pcm_substream
*substream
)
1865 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
1866 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
1867 struct azx
*chip
= apcm
->chip
;
1868 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
1869 struct hda_pcm_stream
*hinfo
= apcm
->hinfo
[substream
->stream
];
1871 /* reset BDL address */
1872 azx_sd_writel(azx_dev
, SD_BDLPL
, 0);
1873 azx_sd_writel(azx_dev
, SD_BDLPU
, 0);
1874 azx_sd_writel(azx_dev
, SD_CTL
, 0);
1875 azx_dev
->bufsize
= 0;
1876 azx_dev
->period_bytes
= 0;
1877 azx_dev
->format_val
= 0;
1879 snd_hda_codec_cleanup(apcm
->codec
, hinfo
, substream
);
1881 mark_runtime_wc(chip
, azx_dev
, runtime
, false);
1882 return snd_pcm_lib_free_pages(substream
);
1885 static int azx_pcm_prepare(struct snd_pcm_substream
*substream
)
1887 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
1888 struct azx
*chip
= apcm
->chip
;
1889 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
1890 struct hda_pcm_stream
*hinfo
= apcm
->hinfo
[substream
->stream
];
1891 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
1892 unsigned int bufsize
, period_bytes
, format_val
, stream_tag
;
1894 struct hda_spdif_out
*spdif
=
1895 snd_hda_spdif_out_of_nid(apcm
->codec
, hinfo
->nid
);
1896 unsigned short ctls
= spdif
? spdif
->ctls
: 0;
1898 azx_stream_reset(chip
, azx_dev
);
1899 format_val
= snd_hda_calc_stream_format(runtime
->rate
,
1905 snd_printk(KERN_ERR SFX
1906 "invalid format_val, rate=%d, ch=%d, format=%d\n",
1907 runtime
->rate
, runtime
->channels
, runtime
->format
);
1911 bufsize
= snd_pcm_lib_buffer_bytes(substream
);
1912 period_bytes
= snd_pcm_lib_period_bytes(substream
);
1914 snd_printdd(SFX
"azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
1915 bufsize
, format_val
);
1917 if (bufsize
!= azx_dev
->bufsize
||
1918 period_bytes
!= azx_dev
->period_bytes
||
1919 format_val
!= azx_dev
->format_val
) {
1920 azx_dev
->bufsize
= bufsize
;
1921 azx_dev
->period_bytes
= period_bytes
;
1922 azx_dev
->format_val
= format_val
;
1923 err
= azx_setup_periods(chip
, substream
, azx_dev
);
1928 /* wallclk has 24Mhz clock source */
1929 azx_dev
->period_wallclk
= (((runtime
->period_size
* 24000) /
1930 runtime
->rate
) * 1000);
1931 azx_setup_controller(chip
, azx_dev
);
1932 if (substream
->stream
== SNDRV_PCM_STREAM_PLAYBACK
)
1933 azx_dev
->fifo_size
= azx_sd_readw(azx_dev
, SD_FIFOSIZE
) + 1;
1935 azx_dev
->fifo_size
= 0;
1937 stream_tag
= azx_dev
->stream_tag
;
1938 /* CA-IBG chips need the playback stream starting from 1 */
1939 if ((chip
->driver_caps
& AZX_DCAPS_CTX_WORKAROUND
) &&
1940 stream_tag
> chip
->capture_streams
)
1941 stream_tag
-= chip
->capture_streams
;
1942 return snd_hda_codec_prepare(apcm
->codec
, hinfo
, stream_tag
,
1943 azx_dev
->format_val
, substream
);
1946 static int azx_pcm_trigger(struct snd_pcm_substream
*substream
, int cmd
)
1948 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
1949 struct azx
*chip
= apcm
->chip
;
1950 struct azx_dev
*azx_dev
;
1951 struct snd_pcm_substream
*s
;
1952 int rstart
= 0, start
, nsync
= 0, sbits
= 0;
1956 case SNDRV_PCM_TRIGGER_START
:
1958 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
1959 case SNDRV_PCM_TRIGGER_RESUME
:
1962 case SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
1963 case SNDRV_PCM_TRIGGER_SUSPEND
:
1964 case SNDRV_PCM_TRIGGER_STOP
:
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 sbits
|= 1 << azx_dev
->index
;
1977 snd_pcm_trigger_done(s
, substream
);
1980 spin_lock(&chip
->reg_lock
);
1982 /* first, set SYNC bits of corresponding streams */
1983 if (chip
->driver_caps
& AZX_DCAPS_OLD_SSYNC
)
1984 azx_writel(chip
, OLD_SSYNC
,
1985 azx_readl(chip
, OLD_SSYNC
) | sbits
);
1987 azx_writel(chip
, SSYNC
, azx_readl(chip
, SSYNC
) | sbits
);
1989 snd_pcm_group_for_each_entry(s
, substream
) {
1990 if (s
->pcm
->card
!= substream
->pcm
->card
)
1992 azx_dev
= get_azx_dev(s
);
1994 azx_dev
->start_wallclk
= azx_readl(chip
, WALLCLK
);
1996 azx_dev
->start_wallclk
-=
1997 azx_dev
->period_wallclk
;
1998 azx_stream_start(chip
, azx_dev
);
2000 azx_stream_stop(chip
, azx_dev
);
2002 azx_dev
->running
= start
;
2004 spin_unlock(&chip
->reg_lock
);
2008 /* wait until all FIFOs get ready */
2009 for (timeout
= 5000; timeout
; timeout
--) {
2011 snd_pcm_group_for_each_entry(s
, substream
) {
2012 if (s
->pcm
->card
!= substream
->pcm
->card
)
2014 azx_dev
= get_azx_dev(s
);
2015 if (!(azx_sd_readb(azx_dev
, SD_STS
) &
2024 /* wait until all RUN bits are cleared */
2025 for (timeout
= 5000; timeout
; timeout
--) {
2027 snd_pcm_group_for_each_entry(s
, substream
) {
2028 if (s
->pcm
->card
!= substream
->pcm
->card
)
2030 azx_dev
= get_azx_dev(s
);
2031 if (azx_sd_readb(azx_dev
, SD_CTL
) &
2041 spin_lock(&chip
->reg_lock
);
2042 /* reset SYNC bits */
2043 if (chip
->driver_caps
& AZX_DCAPS_OLD_SSYNC
)
2044 azx_writel(chip
, OLD_SSYNC
,
2045 azx_readl(chip
, OLD_SSYNC
) & ~sbits
);
2047 azx_writel(chip
, SSYNC
, azx_readl(chip
, SSYNC
) & ~sbits
);
2048 spin_unlock(&chip
->reg_lock
);
2053 /* get the current DMA position with correction on VIA chips */
2054 static unsigned int azx_via_get_position(struct azx
*chip
,
2055 struct azx_dev
*azx_dev
)
2057 unsigned int link_pos
, mini_pos
, bound_pos
;
2058 unsigned int mod_link_pos
, mod_dma_pos
, mod_mini_pos
;
2059 unsigned int fifo_size
;
2061 link_pos
= azx_sd_readl(azx_dev
, SD_LPIB
);
2062 if (azx_dev
->substream
->stream
== SNDRV_PCM_STREAM_PLAYBACK
) {
2063 /* Playback, no problem using link position */
2069 * use mod to get the DMA position just like old chipset
2071 mod_dma_pos
= le32_to_cpu(*azx_dev
->posbuf
);
2072 mod_dma_pos
%= azx_dev
->period_bytes
;
2074 /* azx_dev->fifo_size can't get FIFO size of in stream.
2075 * Get from base address + offset.
2077 fifo_size
= readw(chip
->remap_addr
+ VIA_IN_STREAM0_FIFO_SIZE_OFFSET
);
2079 if (azx_dev
->insufficient
) {
2080 /* Link position never gather than FIFO size */
2081 if (link_pos
<= fifo_size
)
2084 azx_dev
->insufficient
= 0;
2087 if (link_pos
<= fifo_size
)
2088 mini_pos
= azx_dev
->bufsize
+ link_pos
- fifo_size
;
2090 mini_pos
= link_pos
- fifo_size
;
2092 /* Find nearest previous boudary */
2093 mod_mini_pos
= mini_pos
% azx_dev
->period_bytes
;
2094 mod_link_pos
= link_pos
% azx_dev
->period_bytes
;
2095 if (mod_link_pos
>= fifo_size
)
2096 bound_pos
= link_pos
- mod_link_pos
;
2097 else if (mod_dma_pos
>= mod_mini_pos
)
2098 bound_pos
= mini_pos
- mod_mini_pos
;
2100 bound_pos
= mini_pos
- mod_mini_pos
+ azx_dev
->period_bytes
;
2101 if (bound_pos
>= azx_dev
->bufsize
)
2105 /* Calculate real DMA position we want */
2106 return bound_pos
+ mod_dma_pos
;
2109 static unsigned int azx_get_position(struct azx
*chip
,
2110 struct azx_dev
*azx_dev
,
2114 int stream
= azx_dev
->substream
->stream
;
2116 switch (chip
->position_fix
[stream
]) {
2119 pos
= azx_sd_readl(azx_dev
, SD_LPIB
);
2121 case POS_FIX_VIACOMBO
:
2122 pos
= azx_via_get_position(chip
, azx_dev
);
2125 /* use the position buffer */
2126 pos
= le32_to_cpu(*azx_dev
->posbuf
);
2127 if (with_check
&& chip
->position_fix
[stream
] == POS_FIX_AUTO
) {
2128 if (!pos
|| pos
== (u32
)-1) {
2130 "hda-intel: Invalid position buffer, "
2131 "using LPIB read method instead.\n");
2132 chip
->position_fix
[stream
] = POS_FIX_LPIB
;
2133 pos
= azx_sd_readl(azx_dev
, SD_LPIB
);
2135 chip
->position_fix
[stream
] = POS_FIX_POSBUF
;
2140 if (pos
>= azx_dev
->bufsize
)
2145 static snd_pcm_uframes_t
azx_pcm_pointer(struct snd_pcm_substream
*substream
)
2147 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
2148 struct azx
*chip
= apcm
->chip
;
2149 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
2150 return bytes_to_frames(substream
->runtime
,
2151 azx_get_position(chip
, azx_dev
, false));
2155 * Check whether the current DMA position is acceptable for updating
2156 * periods. Returns non-zero if it's OK.
2158 * Many HD-audio controllers appear pretty inaccurate about
2159 * the update-IRQ timing. The IRQ is issued before actually the
2160 * data is processed. So, we need to process it afterwords in a
2163 static int azx_position_ok(struct azx
*chip
, struct azx_dev
*azx_dev
)
2169 wallclk
= azx_readl(chip
, WALLCLK
) - azx_dev
->start_wallclk
;
2170 if (wallclk
< (azx_dev
->period_wallclk
* 2) / 3)
2171 return -1; /* bogus (too early) interrupt */
2173 stream
= azx_dev
->substream
->stream
;
2174 pos
= azx_get_position(chip
, azx_dev
, true);
2176 if (WARN_ONCE(!azx_dev
->period_bytes
,
2177 "hda-intel: zero azx_dev->period_bytes"))
2178 return -1; /* this shouldn't happen! */
2179 if (wallclk
< (azx_dev
->period_wallclk
* 5) / 4 &&
2180 pos
% azx_dev
->period_bytes
> azx_dev
->period_bytes
/ 2)
2181 /* NG - it's below the first next period boundary */
2182 return bdl_pos_adj
[chip
->dev_index
] ? 0 : -1;
2183 azx_dev
->start_wallclk
+= wallclk
;
2184 return 1; /* OK, it's fine */
2188 * The work for pending PCM period updates.
2190 static void azx_irq_pending_work(struct work_struct
*work
)
2192 struct azx
*chip
= container_of(work
, struct azx
, irq_pending_work
);
2195 if (!chip
->irq_pending_warned
) {
2197 "hda-intel: IRQ timing workaround is activated "
2198 "for card #%d. Suggest a bigger bdl_pos_adj.\n",
2199 chip
->card
->number
);
2200 chip
->irq_pending_warned
= 1;
2205 spin_lock_irq(&chip
->reg_lock
);
2206 for (i
= 0; i
< chip
->num_streams
; i
++) {
2207 struct azx_dev
*azx_dev
= &chip
->azx_dev
[i
];
2208 if (!azx_dev
->irq_pending
||
2209 !azx_dev
->substream
||
2212 ok
= azx_position_ok(chip
, azx_dev
);
2214 azx_dev
->irq_pending
= 0;
2215 spin_unlock(&chip
->reg_lock
);
2216 snd_pcm_period_elapsed(azx_dev
->substream
);
2217 spin_lock(&chip
->reg_lock
);
2218 } else if (ok
< 0) {
2219 pending
= 0; /* too early */
2223 spin_unlock_irq(&chip
->reg_lock
);
2230 /* clear irq_pending flags and assure no on-going workq */
2231 static void azx_clear_irq_pending(struct azx
*chip
)
2235 spin_lock_irq(&chip
->reg_lock
);
2236 for (i
= 0; i
< chip
->num_streams
; i
++)
2237 chip
->azx_dev
[i
].irq_pending
= 0;
2238 spin_unlock_irq(&chip
->reg_lock
);
2242 static int azx_pcm_mmap(struct snd_pcm_substream
*substream
,
2243 struct vm_area_struct
*area
)
2245 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
2246 struct azx
*chip
= apcm
->chip
;
2247 if (!azx_snoop(chip
))
2248 area
->vm_page_prot
= pgprot_writecombine(area
->vm_page_prot
);
2249 return snd_pcm_lib_default_mmap(substream
, area
);
2252 #define azx_pcm_mmap NULL
2255 static struct snd_pcm_ops azx_pcm_ops
= {
2256 .open
= azx_pcm_open
,
2257 .close
= azx_pcm_close
,
2258 .ioctl
= snd_pcm_lib_ioctl
,
2259 .hw_params
= azx_pcm_hw_params
,
2260 .hw_free
= azx_pcm_hw_free
,
2261 .prepare
= azx_pcm_prepare
,
2262 .trigger
= azx_pcm_trigger
,
2263 .pointer
= azx_pcm_pointer
,
2264 .mmap
= azx_pcm_mmap
,
2265 .page
= snd_pcm_sgbuf_ops_page
,
2268 static void azx_pcm_free(struct snd_pcm
*pcm
)
2270 struct azx_pcm
*apcm
= pcm
->private_data
;
2272 list_del(&apcm
->list
);
2277 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
2280 azx_attach_pcm_stream(struct hda_bus
*bus
, struct hda_codec
*codec
,
2281 struct hda_pcm
*cpcm
)
2283 struct azx
*chip
= bus
->private_data
;
2284 struct snd_pcm
*pcm
;
2285 struct azx_pcm
*apcm
;
2286 int pcm_dev
= cpcm
->device
;
2290 list_for_each_entry(apcm
, &chip
->pcm_list
, list
) {
2291 if (apcm
->pcm
->device
== pcm_dev
) {
2292 snd_printk(KERN_ERR SFX
"PCM %d already exists\n", pcm_dev
);
2296 err
= snd_pcm_new(chip
->card
, cpcm
->name
, pcm_dev
,
2297 cpcm
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].substreams
,
2298 cpcm
->stream
[SNDRV_PCM_STREAM_CAPTURE
].substreams
,
2302 strlcpy(pcm
->name
, cpcm
->name
, sizeof(pcm
->name
));
2303 apcm
= kzalloc(sizeof(*apcm
), GFP_KERNEL
);
2308 apcm
->codec
= codec
;
2309 pcm
->private_data
= apcm
;
2310 pcm
->private_free
= azx_pcm_free
;
2311 if (cpcm
->pcm_type
== HDA_PCM_TYPE_MODEM
)
2312 pcm
->dev_class
= SNDRV_PCM_CLASS_MODEM
;
2313 list_add_tail(&apcm
->list
, &chip
->pcm_list
);
2315 for (s
= 0; s
< 2; s
++) {
2316 apcm
->hinfo
[s
] = &cpcm
->stream
[s
];
2317 if (cpcm
->stream
[s
].substreams
)
2318 snd_pcm_set_ops(pcm
, s
, &azx_pcm_ops
);
2320 /* buffer pre-allocation */
2321 size
= CONFIG_SND_HDA_PREALLOC_SIZE
* 1024;
2322 if (size
> MAX_PREALLOC_SIZE
)
2323 size
= MAX_PREALLOC_SIZE
;
2324 snd_pcm_lib_preallocate_pages_for_all(pcm
, SNDRV_DMA_TYPE_DEV_SG
,
2325 snd_dma_pci_data(chip
->pci
),
2326 size
, MAX_PREALLOC_SIZE
);
2331 * mixer creation - all stuff is implemented in hda module
2333 static int __devinit
azx_mixer_create(struct azx
*chip
)
2335 return snd_hda_build_controls(chip
->bus
);
2340 * initialize SD streams
2342 static int __devinit
azx_init_stream(struct azx
*chip
)
2346 /* initialize each stream (aka device)
2347 * assign the starting bdl address to each stream (device)
2350 for (i
= 0; i
< chip
->num_streams
; i
++) {
2351 struct azx_dev
*azx_dev
= &chip
->azx_dev
[i
];
2352 azx_dev
->posbuf
= (u32 __iomem
*)(chip
->posbuf
.area
+ i
* 8);
2353 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
2354 azx_dev
->sd_addr
= chip
->remap_addr
+ (0x20 * i
+ 0x80);
2355 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
2356 azx_dev
->sd_int_sta_mask
= 1 << i
;
2357 /* stream tag: must be non-zero and unique */
2359 azx_dev
->stream_tag
= i
+ 1;
2365 static int azx_acquire_irq(struct azx
*chip
, int do_disconnect
)
2367 if (request_irq(chip
->pci
->irq
, azx_interrupt
,
2368 chip
->msi
? 0 : IRQF_SHARED
,
2369 KBUILD_MODNAME
, chip
)) {
2370 printk(KERN_ERR
"hda-intel: unable to grab IRQ %d, "
2371 "disabling device\n", chip
->pci
->irq
);
2373 snd_card_disconnect(chip
->card
);
2376 chip
->irq
= chip
->pci
->irq
;
2377 pci_intx(chip
->pci
, !chip
->msi
);
2382 static void azx_stop_chip(struct azx
*chip
)
2384 if (!chip
->initialized
)
2387 /* disable interrupts */
2388 azx_int_disable(chip
);
2389 azx_int_clear(chip
);
2391 /* disable CORB/RIRB */
2392 azx_free_cmd_io(chip
);
2394 /* disable position buffer */
2395 azx_writel(chip
, DPLBASE
, 0);
2396 azx_writel(chip
, DPUBASE
, 0);
2398 chip
->initialized
= 0;
2401 #ifdef CONFIG_SND_HDA_POWER_SAVE
2402 /* power-up/down the controller */
2403 static void azx_power_notify(struct hda_bus
*bus
)
2405 struct azx
*chip
= bus
->private_data
;
2406 struct hda_codec
*c
;
2409 list_for_each_entry(c
, &bus
->codec_list
, list
) {
2416 azx_init_chip(chip
, 1);
2417 else if (chip
->running
&& power_save_controller
&&
2418 !bus
->power_keep_link_on
)
2419 azx_stop_chip(chip
);
2422 static DEFINE_MUTEX(card_list_lock
);
2423 static LIST_HEAD(card_list
);
2425 static void azx_add_card_list(struct azx
*chip
)
2427 mutex_lock(&card_list_lock
);
2428 list_add(&chip
->list
, &card_list
);
2429 mutex_unlock(&card_list_lock
);
2432 static void azx_del_card_list(struct azx
*chip
)
2434 mutex_lock(&card_list_lock
);
2435 list_del_init(&chip
->list
);
2436 mutex_unlock(&card_list_lock
);
2439 /* trigger power-save check at writing parameter */
2440 static int param_set_xint(const char *val
, const struct kernel_param
*kp
)
2443 struct hda_codec
*c
;
2444 int prev
= power_save
;
2445 int ret
= param_set_int(val
, kp
);
2447 if (ret
|| prev
== power_save
)
2450 mutex_lock(&card_list_lock
);
2451 list_for_each_entry(chip
, &card_list
, list
) {
2452 if (!chip
->bus
|| chip
->disabled
)
2454 list_for_each_entry(c
, &chip
->bus
->codec_list
, list
)
2455 snd_hda_power_sync(c
);
2457 mutex_unlock(&card_list_lock
);
2461 #define azx_add_card_list(chip) /* NOP */
2462 #define azx_del_card_list(chip) /* NOP */
2463 #endif /* CONFIG_SND_HDA_POWER_SAVE */
2465 #if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO)
2469 static int azx_suspend(struct device
*dev
)
2471 struct pci_dev
*pci
= to_pci_dev(dev
);
2472 struct snd_card
*card
= dev_get_drvdata(dev
);
2473 struct azx
*chip
= card
->private_data
;
2476 snd_power_change_state(card
, SNDRV_CTL_POWER_D3hot
);
2477 azx_clear_irq_pending(chip
);
2478 list_for_each_entry(p
, &chip
->pcm_list
, list
)
2479 snd_pcm_suspend_all(p
->pcm
);
2480 if (chip
->initialized
)
2481 snd_hda_suspend(chip
->bus
);
2482 azx_stop_chip(chip
);
2483 if (chip
->irq
>= 0) {
2484 free_irq(chip
->irq
, chip
);
2488 pci_disable_msi(chip
->pci
);
2489 pci_disable_device(pci
);
2490 pci_save_state(pci
);
2491 pci_set_power_state(pci
, PCI_D3hot
);
2495 static int azx_resume(struct device
*dev
)
2497 struct pci_dev
*pci
= to_pci_dev(dev
);
2498 struct snd_card
*card
= dev_get_drvdata(dev
);
2499 struct azx
*chip
= card
->private_data
;
2501 pci_set_power_state(pci
, PCI_D0
);
2502 pci_restore_state(pci
);
2503 if (pci_enable_device(pci
) < 0) {
2504 printk(KERN_ERR
"hda-intel: pci_enable_device failed, "
2505 "disabling device\n");
2506 snd_card_disconnect(card
);
2509 pci_set_master(pci
);
2511 if (pci_enable_msi(pci
) < 0)
2513 if (azx_acquire_irq(chip
, 1) < 0)
2517 azx_init_chip(chip
, 1);
2519 snd_hda_resume(chip
->bus
);
2520 snd_power_change_state(card
, SNDRV_CTL_POWER_D0
);
2523 static SIMPLE_DEV_PM_OPS(azx_pm
, azx_suspend
, azx_resume
);
2524 #define AZX_PM_OPS &azx_pm
2526 #define AZX_PM_OPS NULL
2527 #endif /* CONFIG_PM_SLEEP || SUPPORT_VGA_SWITCHEROO */
2531 * reboot notifier for hang-up problem at power-down
2533 static int azx_halt(struct notifier_block
*nb
, unsigned long event
, void *buf
)
2535 struct azx
*chip
= container_of(nb
, struct azx
, reboot_notifier
);
2536 snd_hda_bus_reboot_notify(chip
->bus
);
2537 azx_stop_chip(chip
);
2541 static void azx_notifier_register(struct azx
*chip
)
2543 chip
->reboot_notifier
.notifier_call
= azx_halt
;
2544 register_reboot_notifier(&chip
->reboot_notifier
);
2547 static void azx_notifier_unregister(struct azx
*chip
)
2549 if (chip
->reboot_notifier
.notifier_call
)
2550 unregister_reboot_notifier(&chip
->reboot_notifier
);
2553 static int DELAYED_INIT_MARK
azx_first_init(struct azx
*chip
);
2554 static int DELAYED_INIT_MARK
azx_probe_continue(struct azx
*chip
);
2556 #ifdef SUPPORT_VGA_SWITCHEROO
2557 static struct pci_dev __devinit
*get_bound_vga(struct pci_dev
*pci
);
2559 static void azx_vs_set_state(struct pci_dev
*pci
,
2560 enum vga_switcheroo_state state
)
2562 struct snd_card
*card
= pci_get_drvdata(pci
);
2563 struct azx
*chip
= card
->private_data
;
2566 if (chip
->init_failed
)
2569 disabled
= (state
== VGA_SWITCHEROO_OFF
);
2570 if (chip
->disabled
== disabled
)
2574 chip
->disabled
= disabled
;
2576 snd_printk(KERN_INFO SFX
2577 "%s: Start delayed initialization\n",
2578 pci_name(chip
->pci
));
2579 if (azx_first_init(chip
) < 0 ||
2580 azx_probe_continue(chip
) < 0) {
2581 snd_printk(KERN_ERR SFX
2582 "%s: initialization error\n",
2583 pci_name(chip
->pci
));
2584 chip
->init_failed
= true;
2588 snd_printk(KERN_INFO SFX
2589 "%s %s via VGA-switcheroo\n",
2590 disabled
? "Disabling" : "Enabling",
2591 pci_name(chip
->pci
));
2593 azx_suspend(&pci
->dev
);
2594 chip
->disabled
= true;
2595 snd_hda_lock_devices(chip
->bus
);
2597 snd_hda_unlock_devices(chip
->bus
);
2598 chip
->disabled
= false;
2599 azx_resume(&pci
->dev
);
2604 static bool azx_vs_can_switch(struct pci_dev
*pci
)
2606 struct snd_card
*card
= pci_get_drvdata(pci
);
2607 struct azx
*chip
= card
->private_data
;
2609 if (chip
->init_failed
)
2611 if (chip
->disabled
|| !chip
->bus
)
2613 if (snd_hda_lock_devices(chip
->bus
))
2615 snd_hda_unlock_devices(chip
->bus
);
2619 static void __devinit
init_vga_switcheroo(struct azx
*chip
)
2621 struct pci_dev
*p
= get_bound_vga(chip
->pci
);
2623 snd_printk(KERN_INFO SFX
2624 "%s: Handle VGA-switcheroo audio client\n",
2625 pci_name(chip
->pci
));
2626 chip
->use_vga_switcheroo
= 1;
2631 static const struct vga_switcheroo_client_ops azx_vs_ops
= {
2632 .set_gpu_state
= azx_vs_set_state
,
2633 .can_switch
= azx_vs_can_switch
,
2636 static int __devinit
register_vga_switcheroo(struct azx
*chip
)
2638 if (!chip
->use_vga_switcheroo
)
2640 /* FIXME: currently only handling DIS controller
2641 * is there any machine with two switchable HDMI audio controllers?
2643 return vga_switcheroo_register_audio_client(chip
->pci
, &azx_vs_ops
,
2648 #define init_vga_switcheroo(chip) /* NOP */
2649 #define register_vga_switcheroo(chip) 0
2650 #define check_hdmi_disabled(pci) false
2651 #endif /* SUPPORT_VGA_SWITCHER */
2656 static int azx_free(struct azx
*chip
)
2660 azx_del_card_list(chip
);
2662 azx_notifier_unregister(chip
);
2664 if (use_vga_switcheroo(chip
)) {
2665 if (chip
->disabled
&& chip
->bus
)
2666 snd_hda_unlock_devices(chip
->bus
);
2667 vga_switcheroo_unregister_client(chip
->pci
);
2670 if (chip
->initialized
) {
2671 azx_clear_irq_pending(chip
);
2672 for (i
= 0; i
< chip
->num_streams
; i
++)
2673 azx_stream_stop(chip
, &chip
->azx_dev
[i
]);
2674 azx_stop_chip(chip
);
2678 free_irq(chip
->irq
, (void*)chip
);
2680 pci_disable_msi(chip
->pci
);
2681 if (chip
->remap_addr
)
2682 iounmap(chip
->remap_addr
);
2684 if (chip
->azx_dev
) {
2685 for (i
= 0; i
< chip
->num_streams
; i
++)
2686 if (chip
->azx_dev
[i
].bdl
.area
) {
2687 mark_pages_wc(chip
, &chip
->azx_dev
[i
].bdl
, false);
2688 snd_dma_free_pages(&chip
->azx_dev
[i
].bdl
);
2691 if (chip
->rb
.area
) {
2692 mark_pages_wc(chip
, &chip
->rb
, false);
2693 snd_dma_free_pages(&chip
->rb
);
2695 if (chip
->posbuf
.area
) {
2696 mark_pages_wc(chip
, &chip
->posbuf
, false);
2697 snd_dma_free_pages(&chip
->posbuf
);
2699 if (chip
->region_requested
)
2700 pci_release_regions(chip
->pci
);
2701 pci_disable_device(chip
->pci
);
2702 kfree(chip
->azx_dev
);
2703 #ifdef CONFIG_SND_HDA_PATCH_LOADER
2705 release_firmware(chip
->fw
);
2712 static int azx_dev_free(struct snd_device
*device
)
2714 return azx_free(device
->device_data
);
2717 #ifdef SUPPORT_VGA_SWITCHEROO
2719 * Check of disabled HDMI controller by vga-switcheroo
2721 static struct pci_dev __devinit
*get_bound_vga(struct pci_dev
*pci
)
2725 /* check only discrete GPU */
2726 switch (pci
->vendor
) {
2727 case PCI_VENDOR_ID_ATI
:
2728 case PCI_VENDOR_ID_AMD
:
2729 case PCI_VENDOR_ID_NVIDIA
:
2730 if (pci
->devfn
== 1) {
2731 p
= pci_get_domain_bus_and_slot(pci_domain_nr(pci
->bus
),
2732 pci
->bus
->number
, 0);
2734 if ((p
->class >> 8) == PCI_CLASS_DISPLAY_VGA
)
2744 static bool __devinit
check_hdmi_disabled(struct pci_dev
*pci
)
2746 bool vga_inactive
= false;
2747 struct pci_dev
*p
= get_bound_vga(pci
);
2750 if (vga_switcheroo_get_client_state(p
) == VGA_SWITCHEROO_OFF
)
2751 vga_inactive
= true;
2754 return vga_inactive
;
2756 #endif /* SUPPORT_VGA_SWITCHEROO */
2759 * white/black-listing for position_fix
2761 static struct snd_pci_quirk position_fix_list
[] __devinitdata
= {
2762 SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB
),
2763 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB
),
2764 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB
),
2765 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB
),
2766 SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB
),
2767 SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB
),
2768 SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB
),
2769 SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB
),
2770 SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB
),
2771 SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB
),
2772 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB
),
2773 SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB
),
2774 SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB
),
2775 SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB
),
2779 static int __devinit
check_position_fix(struct azx
*chip
, int fix
)
2781 const struct snd_pci_quirk
*q
;
2785 case POS_FIX_POSBUF
:
2786 case POS_FIX_VIACOMBO
:
2791 q
= snd_pci_quirk_lookup(chip
->pci
, position_fix_list
);
2794 "hda_intel: position_fix set to %d "
2795 "for device %04x:%04x\n",
2796 q
->value
, q
->subvendor
, q
->subdevice
);
2800 /* Check VIA/ATI HD Audio Controller exist */
2801 if (chip
->driver_caps
& AZX_DCAPS_POSFIX_VIA
) {
2802 snd_printd(SFX
"Using VIACOMBO position fix\n");
2803 return POS_FIX_VIACOMBO
;
2805 if (chip
->driver_caps
& AZX_DCAPS_POSFIX_LPIB
) {
2806 snd_printd(SFX
"Using LPIB position fix\n");
2807 return POS_FIX_LPIB
;
2809 if (chip
->driver_caps
& AZX_DCAPS_POSFIX_COMBO
) {
2810 snd_printd(SFX
"Using COMBO position fix\n");
2811 return POS_FIX_COMBO
;
2813 return POS_FIX_AUTO
;
2817 * black-lists for probe_mask
2819 static struct snd_pci_quirk probe_mask_list
[] __devinitdata
= {
2820 /* Thinkpad often breaks the controller communication when accessing
2821 * to the non-working (or non-existing) modem codec slot.
2823 SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01),
2824 SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01),
2825 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01),
2827 SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),
2828 /* including bogus ALC268 in slot#2 that conflicts with ALC888 */
2829 SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),
2830 /* forced codec slots */
2831 SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),
2832 SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),
2833 /* WinFast VP200 H (Teradici) user reported broken communication */
2834 SND_PCI_QUIRK(0x3a21, 0x040d, "WinFast VP200 H", 0x101),
2838 #define AZX_FORCE_CODEC_MASK 0x100
2840 static void __devinit
check_probe_mask(struct azx
*chip
, int dev
)
2842 const struct snd_pci_quirk
*q
;
2844 chip
->codec_probe_mask
= probe_mask
[dev
];
2845 if (chip
->codec_probe_mask
== -1) {
2846 q
= snd_pci_quirk_lookup(chip
->pci
, probe_mask_list
);
2849 "hda_intel: probe_mask set to 0x%x "
2850 "for device %04x:%04x\n",
2851 q
->value
, q
->subvendor
, q
->subdevice
);
2852 chip
->codec_probe_mask
= q
->value
;
2856 /* check forced option */
2857 if (chip
->codec_probe_mask
!= -1 &&
2858 (chip
->codec_probe_mask
& AZX_FORCE_CODEC_MASK
)) {
2859 chip
->codec_mask
= chip
->codec_probe_mask
& 0xff;
2860 printk(KERN_INFO
"hda_intel: codec_mask forced to 0x%x\n",
2866 * white/black-list for enable_msi
2868 static struct snd_pci_quirk msi_black_list
[] __devinitdata
= {
2869 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
2870 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
2871 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
2872 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
2873 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
2877 static void __devinit
check_msi(struct azx
*chip
)
2879 const struct snd_pci_quirk
*q
;
2881 if (enable_msi
>= 0) {
2882 chip
->msi
= !!enable_msi
;
2885 chip
->msi
= 1; /* enable MSI as default */
2886 q
= snd_pci_quirk_lookup(chip
->pci
, msi_black_list
);
2889 "hda_intel: msi for device %04x:%04x set to %d\n",
2890 q
->subvendor
, q
->subdevice
, q
->value
);
2891 chip
->msi
= q
->value
;
2895 /* NVidia chipsets seem to cause troubles with MSI */
2896 if (chip
->driver_caps
& AZX_DCAPS_NO_MSI
) {
2897 printk(KERN_INFO
"hda_intel: Disabling MSI\n");
2902 /* check the snoop mode availability */
2903 static void __devinit
azx_check_snoop_available(struct azx
*chip
)
2905 bool snoop
= chip
->snoop
;
2907 switch (chip
->driver_type
) {
2908 case AZX_DRIVER_VIA
:
2909 /* force to non-snoop mode for a new VIA controller
2914 pci_read_config_byte(chip
->pci
, 0x42, &val
);
2915 if (!(val
& 0x80) && chip
->pci
->revision
== 0x30)
2919 case AZX_DRIVER_ATIHDMI_NS
:
2920 /* new ATI HDMI requires non-snoop */
2925 if (snoop
!= chip
->snoop
) {
2926 snd_printk(KERN_INFO SFX
"Force to %s mode\n",
2927 snoop
? "snoop" : "non-snoop");
2928 chip
->snoop
= snoop
;
2935 static int __devinit
azx_create(struct snd_card
*card
, struct pci_dev
*pci
,
2936 int dev
, unsigned int driver_caps
,
2939 static struct snd_device_ops ops
= {
2940 .dev_free
= azx_dev_free
,
2947 err
= pci_enable_device(pci
);
2951 chip
= kzalloc(sizeof(*chip
), GFP_KERNEL
);
2953 snd_printk(KERN_ERR SFX
"cannot allocate chip\n");
2954 pci_disable_device(pci
);
2958 spin_lock_init(&chip
->reg_lock
);
2959 mutex_init(&chip
->open_mutex
);
2963 chip
->driver_caps
= driver_caps
;
2964 chip
->driver_type
= driver_caps
& 0xff;
2966 chip
->dev_index
= dev
;
2967 INIT_WORK(&chip
->irq_pending_work
, azx_irq_pending_work
);
2968 INIT_LIST_HEAD(&chip
->pcm_list
);
2969 INIT_LIST_HEAD(&chip
->list
);
2970 init_vga_switcheroo(chip
);
2972 chip
->position_fix
[0] = chip
->position_fix
[1] =
2973 check_position_fix(chip
, position_fix
[dev
]);
2974 /* combo mode uses LPIB for playback */
2975 if (chip
->position_fix
[0] == POS_FIX_COMBO
) {
2976 chip
->position_fix
[0] = POS_FIX_LPIB
;
2977 chip
->position_fix
[1] = POS_FIX_AUTO
;
2980 check_probe_mask(chip
, dev
);
2982 chip
->single_cmd
= single_cmd
;
2983 chip
->snoop
= hda_snoop
;
2984 azx_check_snoop_available(chip
);
2986 if (bdl_pos_adj
[dev
] < 0) {
2987 switch (chip
->driver_type
) {
2988 case AZX_DRIVER_ICH
:
2989 case AZX_DRIVER_PCH
:
2990 bdl_pos_adj
[dev
] = 1;
2993 bdl_pos_adj
[dev
] = 32;
2998 if (check_hdmi_disabled(pci
)) {
2999 snd_printk(KERN_INFO SFX
"VGA controller for %s is disabled\n",
3001 if (use_vga_switcheroo(chip
)) {
3002 snd_printk(KERN_INFO SFX
"Delaying initialization\n");
3003 chip
->disabled
= true;
3007 pci_disable_device(pci
);
3011 err
= azx_first_init(chip
);
3018 err
= register_vga_switcheroo(chip
);
3020 snd_printk(KERN_ERR SFX
3021 "Error registering VGA-switcheroo client\n");
3026 err
= snd_device_new(card
, SNDRV_DEV_LOWLEVEL
, chip
, &ops
);
3028 snd_printk(KERN_ERR SFX
"Error creating device [card]!\n");
3037 static int DELAYED_INIT_MARK
azx_first_init(struct azx
*chip
)
3039 int dev
= chip
->dev_index
;
3040 struct pci_dev
*pci
= chip
->pci
;
3041 struct snd_card
*card
= chip
->card
;
3043 unsigned short gcap
;
3045 #if BITS_PER_LONG != 64
3046 /* Fix up base address on ULI M5461 */
3047 if (chip
->driver_type
== AZX_DRIVER_ULI
) {
3049 pci_read_config_word(pci
, 0x40, &tmp3
);
3050 pci_write_config_word(pci
, 0x40, tmp3
| 0x10);
3051 pci_write_config_dword(pci
, PCI_BASE_ADDRESS_1
, 0);
3055 err
= pci_request_regions(pci
, "ICH HD audio");
3058 chip
->region_requested
= 1;
3060 chip
->addr
= pci_resource_start(pci
, 0);
3061 chip
->remap_addr
= pci_ioremap_bar(pci
, 0);
3062 if (chip
->remap_addr
== NULL
) {
3063 snd_printk(KERN_ERR SFX
"ioremap error\n");
3068 if (pci_enable_msi(pci
) < 0)
3071 if (azx_acquire_irq(chip
, 0) < 0)
3074 pci_set_master(pci
);
3075 synchronize_irq(chip
->irq
);
3077 gcap
= azx_readw(chip
, GCAP
);
3078 snd_printdd(SFX
"chipset global capabilities = 0x%x\n", gcap
);
3080 /* disable SB600 64bit support for safety */
3081 if (chip
->pci
->vendor
== PCI_VENDOR_ID_ATI
) {
3082 struct pci_dev
*p_smbus
;
3083 p_smbus
= pci_get_device(PCI_VENDOR_ID_ATI
,
3084 PCI_DEVICE_ID_ATI_SBX00_SMBUS
,
3087 if (p_smbus
->revision
< 0x30)
3088 gcap
&= ~ICH6_GCAP_64OK
;
3089 pci_dev_put(p_smbus
);
3093 /* disable 64bit DMA address on some devices */
3094 if (chip
->driver_caps
& AZX_DCAPS_NO_64BIT
) {
3095 snd_printd(SFX
"Disabling 64bit DMA\n");
3096 gcap
&= ~ICH6_GCAP_64OK
;
3099 /* disable buffer size rounding to 128-byte multiples if supported */
3100 if (align_buffer_size
>= 0)
3101 chip
->align_buffer_size
= !!align_buffer_size
;
3103 if (chip
->driver_caps
& AZX_DCAPS_BUFSIZE
)
3104 chip
->align_buffer_size
= 0;
3105 else if (chip
->driver_caps
& AZX_DCAPS_ALIGN_BUFSIZE
)
3106 chip
->align_buffer_size
= 1;
3108 chip
->align_buffer_size
= 1;
3111 /* allow 64bit DMA address if supported by H/W */
3112 if ((gcap
& ICH6_GCAP_64OK
) && !pci_set_dma_mask(pci
, DMA_BIT_MASK(64)))
3113 pci_set_consistent_dma_mask(pci
, DMA_BIT_MASK(64));
3115 pci_set_dma_mask(pci
, DMA_BIT_MASK(32));
3116 pci_set_consistent_dma_mask(pci
, DMA_BIT_MASK(32));
3119 /* read number of streams from GCAP register instead of using
3122 chip
->capture_streams
= (gcap
>> 8) & 0x0f;
3123 chip
->playback_streams
= (gcap
>> 12) & 0x0f;
3124 if (!chip
->playback_streams
&& !chip
->capture_streams
) {
3125 /* gcap didn't give any info, switching to old method */
3127 switch (chip
->driver_type
) {
3128 case AZX_DRIVER_ULI
:
3129 chip
->playback_streams
= ULI_NUM_PLAYBACK
;
3130 chip
->capture_streams
= ULI_NUM_CAPTURE
;
3132 case AZX_DRIVER_ATIHDMI
:
3133 case AZX_DRIVER_ATIHDMI_NS
:
3134 chip
->playback_streams
= ATIHDMI_NUM_PLAYBACK
;
3135 chip
->capture_streams
= ATIHDMI_NUM_CAPTURE
;
3137 case AZX_DRIVER_GENERIC
:
3139 chip
->playback_streams
= ICH6_NUM_PLAYBACK
;
3140 chip
->capture_streams
= ICH6_NUM_CAPTURE
;
3144 chip
->capture_index_offset
= 0;
3145 chip
->playback_index_offset
= chip
->capture_streams
;
3146 chip
->num_streams
= chip
->playback_streams
+ chip
->capture_streams
;
3147 chip
->azx_dev
= kcalloc(chip
->num_streams
, sizeof(*chip
->azx_dev
),
3149 if (!chip
->azx_dev
) {
3150 snd_printk(KERN_ERR SFX
"cannot malloc azx_dev\n");
3154 for (i
= 0; i
< chip
->num_streams
; i
++) {
3155 /* allocate memory for the BDL for each stream */
3156 err
= snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV
,
3157 snd_dma_pci_data(chip
->pci
),
3158 BDL_SIZE
, &chip
->azx_dev
[i
].bdl
);
3160 snd_printk(KERN_ERR SFX
"cannot allocate BDL\n");
3163 mark_pages_wc(chip
, &chip
->azx_dev
[i
].bdl
, true);
3165 /* allocate memory for the position buffer */
3166 err
= snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV
,
3167 snd_dma_pci_data(chip
->pci
),
3168 chip
->num_streams
* 8, &chip
->posbuf
);
3170 snd_printk(KERN_ERR SFX
"cannot allocate posbuf\n");
3173 mark_pages_wc(chip
, &chip
->posbuf
, true);
3174 /* allocate CORB/RIRB */
3175 err
= azx_alloc_cmd_io(chip
);
3179 /* initialize streams */
3180 azx_init_stream(chip
);
3182 /* initialize chip */
3184 azx_init_chip(chip
, (probe_only
[dev
] & 2) == 0);
3186 /* codec detection */
3187 if (!chip
->codec_mask
) {
3188 snd_printk(KERN_ERR SFX
"no codecs found!\n");
3192 strcpy(card
->driver
, "HDA-Intel");
3193 strlcpy(card
->shortname
, driver_short_names
[chip
->driver_type
],
3194 sizeof(card
->shortname
));
3195 snprintf(card
->longname
, sizeof(card
->longname
),
3196 "%s at 0x%lx irq %i",
3197 card
->shortname
, chip
->addr
, chip
->irq
);
3202 static void power_down_all_codecs(struct azx
*chip
)
3204 #ifdef CONFIG_SND_HDA_POWER_SAVE
3205 /* The codecs were powered up in snd_hda_codec_new().
3206 * Now all initialization done, so turn them down if possible
3208 struct hda_codec
*codec
;
3209 list_for_each_entry(codec
, &chip
->bus
->codec_list
, list
) {
3210 snd_hda_power_down(codec
);
3215 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3216 /* callback from request_firmware_nowait() */
3217 static void azx_firmware_cb(const struct firmware
*fw
, void *context
)
3219 struct snd_card
*card
= context
;
3220 struct azx
*chip
= card
->private_data
;
3221 struct pci_dev
*pci
= chip
->pci
;
3224 snd_printk(KERN_ERR SFX
"Cannot load firmware, aborting\n");
3229 if (!chip
->disabled
) {
3230 /* continue probing */
3231 if (azx_probe_continue(chip
))
3237 snd_card_free(card
);
3238 pci_set_drvdata(pci
, NULL
);
3242 static int __devinit
azx_probe(struct pci_dev
*pci
,
3243 const struct pci_device_id
*pci_id
)
3246 struct snd_card
*card
;
3251 if (dev
>= SNDRV_CARDS
)
3258 err
= snd_card_create(index
[dev
], id
[dev
], THIS_MODULE
, 0, &card
);
3260 snd_printk(KERN_ERR SFX
"Error creating card!\n");
3264 snd_card_set_dev(card
, &pci
->dev
);
3266 err
= azx_create(card
, pci
, dev
, pci_id
->driver_data
, &chip
);
3269 card
->private_data
= chip
;
3270 probe_now
= !chip
->disabled
;
3272 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3273 if (patch
[dev
] && *patch
[dev
]) {
3274 snd_printk(KERN_ERR SFX
"Applying patch firmware '%s'\n",
3276 err
= request_firmware_nowait(THIS_MODULE
, true, patch
[dev
],
3277 &pci
->dev
, GFP_KERNEL
, card
,
3281 probe_now
= false; /* continued in azx_firmware_cb() */
3283 #endif /* CONFIG_SND_HDA_PATCH_LOADER */
3286 err
= azx_probe_continue(chip
);
3291 pci_set_drvdata(pci
, card
);
3297 snd_card_free(card
);
3301 static int DELAYED_INIT_MARK
azx_probe_continue(struct azx
*chip
)
3303 int dev
= chip
->dev_index
;
3306 #ifdef CONFIG_SND_HDA_INPUT_BEEP
3307 chip
->beep_mode
= beep_mode
[dev
];
3310 /* create codec instances */
3311 err
= azx_codec_create(chip
, model
[dev
]);
3314 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3316 err
= snd_hda_load_patch(chip
->bus
, chip
->fw
->size
,
3320 release_firmware(chip
->fw
); /* no longer needed */
3324 if ((probe_only
[dev
] & 1) == 0) {
3325 err
= azx_codec_configure(chip
);
3330 /* create PCM streams */
3331 err
= snd_hda_build_pcms(chip
->bus
);
3335 /* create mixer controls */
3336 err
= azx_mixer_create(chip
);
3340 err
= snd_card_register(chip
->card
);
3345 power_down_all_codecs(chip
);
3346 azx_notifier_register(chip
);
3347 azx_add_card_list(chip
);
3352 chip
->init_failed
= 1;
3356 static void __devexit
azx_remove(struct pci_dev
*pci
)
3358 struct snd_card
*card
= pci_get_drvdata(pci
);
3360 snd_card_free(card
);
3361 pci_set_drvdata(pci
, NULL
);
3365 static DEFINE_PCI_DEVICE_TABLE(azx_ids
) = {
3367 { PCI_DEVICE(0x8086, 0x1c20),
3368 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_SCH_SNOOP
|
3369 AZX_DCAPS_BUFSIZE
| AZX_DCAPS_POSFIX_COMBO
},
3371 { PCI_DEVICE(0x8086, 0x1d20),
3372 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_SCH_SNOOP
|
3375 { PCI_DEVICE(0x8086, 0x1e20),
3376 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_SCH_SNOOP
|
3377 AZX_DCAPS_BUFSIZE
| AZX_DCAPS_POSFIX_COMBO
},
3379 { PCI_DEVICE(0x8086, 0x8c20),
3380 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_SCH_SNOOP
|
3381 AZX_DCAPS_BUFSIZE
| AZX_DCAPS_POSFIX_COMBO
},
3383 { PCI_DEVICE(0x8086, 0x9c20),
3384 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_SCH_SNOOP
|
3385 AZX_DCAPS_BUFSIZE
| AZX_DCAPS_POSFIX_COMBO
},
3387 { PCI_DEVICE(0x8086, 0x9c21),
3388 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_SCH_SNOOP
|
3389 AZX_DCAPS_BUFSIZE
| AZX_DCAPS_POSFIX_COMBO
},
3391 { PCI_DEVICE(0x8086, 0x0c0c),
3392 .driver_data
= AZX_DRIVER_SCH
| AZX_DCAPS_SCH_SNOOP
|
3393 AZX_DCAPS_BUFSIZE
| AZX_DCAPS_POSFIX_COMBO
},
3395 { PCI_DEVICE(0x8086, 0x811b),
3396 .driver_data
= AZX_DRIVER_SCH
| AZX_DCAPS_SCH_SNOOP
|
3397 AZX_DCAPS_BUFSIZE
| AZX_DCAPS_POSFIX_LPIB
}, /* Poulsbo */
3398 { PCI_DEVICE(0x8086, 0x080a),
3399 .driver_data
= AZX_DRIVER_SCH
| AZX_DCAPS_SCH_SNOOP
|
3400 AZX_DCAPS_BUFSIZE
| AZX_DCAPS_POSFIX_LPIB
}, /* Oaktrail */
3402 { PCI_DEVICE(0x8086, 0x2668),
3403 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
3404 AZX_DCAPS_BUFSIZE
}, /* ICH6 */
3405 { PCI_DEVICE(0x8086, 0x27d8),
3406 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
3407 AZX_DCAPS_BUFSIZE
}, /* ICH7 */
3408 { PCI_DEVICE(0x8086, 0x269a),
3409 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
3410 AZX_DCAPS_BUFSIZE
}, /* ESB2 */
3411 { PCI_DEVICE(0x8086, 0x284b),
3412 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
3413 AZX_DCAPS_BUFSIZE
}, /* ICH8 */
3414 { PCI_DEVICE(0x8086, 0x293e),
3415 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
3416 AZX_DCAPS_BUFSIZE
}, /* ICH9 */
3417 { PCI_DEVICE(0x8086, 0x293f),
3418 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
3419 AZX_DCAPS_BUFSIZE
}, /* ICH9 */
3420 { PCI_DEVICE(0x8086, 0x3a3e),
3421 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
3422 AZX_DCAPS_BUFSIZE
}, /* ICH10 */
3423 { PCI_DEVICE(0x8086, 0x3a6e),
3424 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
3425 AZX_DCAPS_BUFSIZE
}, /* ICH10 */
3427 { PCI_DEVICE(PCI_VENDOR_ID_INTEL
, PCI_ANY_ID
),
3428 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO
<< 8,
3429 .class_mask
= 0xffffff,
3430 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_BUFSIZE
},
3431 /* ATI SB 450/600/700/800/900 */
3432 { PCI_DEVICE(0x1002, 0x437b),
3433 .driver_data
= AZX_DRIVER_ATI
| AZX_DCAPS_PRESET_ATI_SB
},
3434 { PCI_DEVICE(0x1002, 0x4383),
3435 .driver_data
= AZX_DRIVER_ATI
| AZX_DCAPS_PRESET_ATI_SB
},
3437 { PCI_DEVICE(0x1022, 0x780d),
3438 .driver_data
= AZX_DRIVER_GENERIC
| AZX_DCAPS_PRESET_ATI_SB
},
3440 { PCI_DEVICE(0x1002, 0x793b),
3441 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3442 { PCI_DEVICE(0x1002, 0x7919),
3443 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3444 { PCI_DEVICE(0x1002, 0x960f),
3445 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3446 { PCI_DEVICE(0x1002, 0x970f),
3447 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3448 { PCI_DEVICE(0x1002, 0xaa00),
3449 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3450 { PCI_DEVICE(0x1002, 0xaa08),
3451 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3452 { PCI_DEVICE(0x1002, 0xaa10),
3453 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3454 { PCI_DEVICE(0x1002, 0xaa18),
3455 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3456 { PCI_DEVICE(0x1002, 0xaa20),
3457 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3458 { PCI_DEVICE(0x1002, 0xaa28),
3459 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3460 { PCI_DEVICE(0x1002, 0xaa30),
3461 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3462 { PCI_DEVICE(0x1002, 0xaa38),
3463 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3464 { PCI_DEVICE(0x1002, 0xaa40),
3465 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3466 { PCI_DEVICE(0x1002, 0xaa48),
3467 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
3468 { PCI_DEVICE(0x1002, 0x9902),
3469 .driver_data
= AZX_DRIVER_ATIHDMI_NS
| AZX_DCAPS_PRESET_ATI_HDMI
},
3470 { PCI_DEVICE(0x1002, 0xaaa0),
3471 .driver_data
= AZX_DRIVER_ATIHDMI_NS
| AZX_DCAPS_PRESET_ATI_HDMI
},
3472 { PCI_DEVICE(0x1002, 0xaaa8),
3473 .driver_data
= AZX_DRIVER_ATIHDMI_NS
| AZX_DCAPS_PRESET_ATI_HDMI
},
3474 { PCI_DEVICE(0x1002, 0xaab0),
3475 .driver_data
= AZX_DRIVER_ATIHDMI_NS
| AZX_DCAPS_PRESET_ATI_HDMI
},
3476 /* VIA VT8251/VT8237A */
3477 { PCI_DEVICE(0x1106, 0x3288),
3478 .driver_data
= AZX_DRIVER_VIA
| AZX_DCAPS_POSFIX_VIA
},
3479 /* VIA GFX VT7122/VX900 */
3480 { PCI_DEVICE(0x1106, 0x9170), .driver_data
= AZX_DRIVER_GENERIC
},
3481 /* VIA GFX VT6122/VX11 */
3482 { PCI_DEVICE(0x1106, 0x9140), .driver_data
= AZX_DRIVER_GENERIC
},
3484 { PCI_DEVICE(0x1039, 0x7502), .driver_data
= AZX_DRIVER_SIS
},
3486 { PCI_DEVICE(0x10b9, 0x5461), .driver_data
= AZX_DRIVER_ULI
},
3488 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA
, PCI_ANY_ID
),
3489 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO
<< 8,
3490 .class_mask
= 0xffffff,
3491 .driver_data
= AZX_DRIVER_NVIDIA
| AZX_DCAPS_PRESET_NVIDIA
},
3493 { PCI_DEVICE(0x6549, 0x1200),
3494 .driver_data
= AZX_DRIVER_TERA
| AZX_DCAPS_NO_64BIT
},
3495 /* Creative X-Fi (CA0110-IBG) */
3497 { PCI_DEVICE(0x1102, 0x0010),
3498 .driver_data
= AZX_DRIVER_CTHDA
| AZX_DCAPS_PRESET_CTHDA
},
3499 { PCI_DEVICE(0x1102, 0x0012),
3500 .driver_data
= AZX_DRIVER_CTHDA
| AZX_DCAPS_PRESET_CTHDA
},
3501 #if !defined(CONFIG_SND_CTXFI) && !defined(CONFIG_SND_CTXFI_MODULE)
3502 /* the following entry conflicts with snd-ctxfi driver,
3503 * as ctxfi driver mutates from HD-audio to native mode with
3504 * a special command sequence.
3506 { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE
, PCI_ANY_ID
),
3507 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO
<< 8,
3508 .class_mask
= 0xffffff,
3509 .driver_data
= AZX_DRIVER_CTX
| AZX_DCAPS_CTX_WORKAROUND
|
3510 AZX_DCAPS_RIRB_PRE_DELAY
| AZX_DCAPS_POSFIX_LPIB
},
3512 /* this entry seems still valid -- i.e. without emu20kx chip */
3513 { PCI_DEVICE(0x1102, 0x0009),
3514 .driver_data
= AZX_DRIVER_CTX
| AZX_DCAPS_CTX_WORKAROUND
|
3515 AZX_DCAPS_RIRB_PRE_DELAY
| AZX_DCAPS_POSFIX_LPIB
},
3518 { PCI_DEVICE(0x17f3, 0x3010), .driver_data
= AZX_DRIVER_GENERIC
},
3519 /* VMware HDAudio */
3520 { PCI_DEVICE(0x15ad, 0x1977), .driver_data
= AZX_DRIVER_GENERIC
},
3521 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */
3522 { PCI_DEVICE(PCI_VENDOR_ID_ATI
, PCI_ANY_ID
),
3523 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO
<< 8,
3524 .class_mask
= 0xffffff,
3525 .driver_data
= AZX_DRIVER_GENERIC
| AZX_DCAPS_PRESET_ATI_HDMI
},
3526 { PCI_DEVICE(PCI_VENDOR_ID_AMD
, PCI_ANY_ID
),
3527 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO
<< 8,
3528 .class_mask
= 0xffffff,
3529 .driver_data
= AZX_DRIVER_GENERIC
| AZX_DCAPS_PRESET_ATI_HDMI
},
3532 MODULE_DEVICE_TABLE(pci
, azx_ids
);
3534 /* pci_driver definition */
3535 static struct pci_driver azx_driver
= {
3536 .name
= KBUILD_MODNAME
,
3537 .id_table
= azx_ids
,
3539 .remove
= __devexit_p(azx_remove
),
3545 module_pci_driver(azx_driver
);