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 power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
114 module_param(power_save, int, 0644);
115 MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
116 "(in second, 0 = disable).");
118 /* reset the HD-audio controller in power save mode.
119 * this may give more power-saving, but will take longer time to
122 static bool power_save_controller = 1;
123 module_param(power_save_controller, bool, 0644);
124 MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
127 static int align_buffer_size = -1;
128 module_param(align_buffer_size, bint, 0644);
129 MODULE_PARM_DESC(align_buffer_size,
130 "Force buffer and period sizes to be multiple of 128 bytes.");
133 static bool hda_snoop = true;
134 module_param_named(snoop, hda_snoop, bool, 0444);
135 MODULE_PARM_DESC(snoop, "Enable/disable snooping");
136 #define azx_snoop(chip) (chip)->snoop
138 #define hda_snoop true
139 #define azx_snoop(chip) true
143 MODULE_LICENSE("GPL");
144 MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
174 MODULE_DESCRIPTION("Intel HDA driver");
176 #ifdef CONFIG_SND_VERBOSE_PRINTK
177 #define SFX /* nop */
179 #define SFX "hda-intel: "
182 #if defined(CONFIG_PM) && defined(CONFIG_VGA_SWITCHEROO)
183 #ifdef CONFIG_SND_HDA_CODEC_HDMI
184 #define SUPPORT_VGA_SWITCHEROO
192 #define ICH6_REG_GCAP 0x00
193 #define ICH6_GCAP_64OK (1 << 0) /* 64bit address support */
194 #define ICH6_GCAP_NSDO (3 << 1) /* # of serial data out signals */
195 #define ICH6_GCAP_BSS (31 << 3) /* # of bidirectional streams */
196 #define ICH6_GCAP_ISS (15 << 8) /* # of input streams */
197 #define ICH6_GCAP_OSS (15 << 12) /* # of output streams */
198 #define ICH6_REG_VMIN 0x02
199 #define ICH6_REG_VMAJ 0x03
200 #define ICH6_REG_OUTPAY 0x04
201 #define ICH6_REG_INPAY 0x06
202 #define ICH6_REG_GCTL 0x08
203 #define ICH6_GCTL_RESET (1 << 0) /* controller reset */
204 #define ICH6_GCTL_FCNTRL (1 << 1) /* flush control */
205 #define ICH6_GCTL_UNSOL (1 << 8) /* accept unsol. response enable */
206 #define ICH6_REG_WAKEEN 0x0c
207 #define ICH6_REG_STATESTS 0x0e
208 #define ICH6_REG_GSTS 0x10
209 #define ICH6_GSTS_FSTS (1 << 1) /* flush status */
210 #define ICH6_REG_INTCTL 0x20
211 #define ICH6_REG_INTSTS 0x24
212 #define ICH6_REG_WALLCLK 0x30 /* 24Mhz source */
213 #define ICH6_REG_OLD_SSYNC 0x34 /* SSYNC for old ICH */
214 #define ICH6_REG_SSYNC 0x38
215 #define ICH6_REG_CORBLBASE 0x40
216 #define ICH6_REG_CORBUBASE 0x44
217 #define ICH6_REG_CORBWP 0x48
218 #define ICH6_REG_CORBRP 0x4a
219 #define ICH6_CORBRP_RST (1 << 15) /* read pointer reset */
220 #define ICH6_REG_CORBCTL 0x4c
221 #define ICH6_CORBCTL_RUN (1 << 1) /* enable DMA */
222 #define ICH6_CORBCTL_CMEIE (1 << 0) /* enable memory error irq */
223 #define ICH6_REG_CORBSTS 0x4d
224 #define ICH6_CORBSTS_CMEI (1 << 0) /* memory error indication */
225 #define ICH6_REG_CORBSIZE 0x4e
227 #define ICH6_REG_RIRBLBASE 0x50
228 #define ICH6_REG_RIRBUBASE 0x54
229 #define ICH6_REG_RIRBWP 0x58
230 #define ICH6_RIRBWP_RST (1 << 15) /* write pointer reset */
231 #define ICH6_REG_RINTCNT 0x5a
232 #define ICH6_REG_RIRBCTL 0x5c
233 #define ICH6_RBCTL_IRQ_EN (1 << 0) /* enable IRQ */
234 #define ICH6_RBCTL_DMA_EN (1 << 1) /* enable DMA */
235 #define ICH6_RBCTL_OVERRUN_EN (1 << 2) /* enable overrun irq */
236 #define ICH6_REG_RIRBSTS 0x5d
237 #define ICH6_RBSTS_IRQ (1 << 0) /* response irq */
238 #define ICH6_RBSTS_OVERRUN (1 << 2) /* overrun irq */
239 #define ICH6_REG_RIRBSIZE 0x5e
241 #define ICH6_REG_IC 0x60
242 #define ICH6_REG_IR 0x64
243 #define ICH6_REG_IRS 0x68
244 #define ICH6_IRS_VALID (1<<1)
245 #define ICH6_IRS_BUSY (1<<0)
247 #define ICH6_REG_DPLBASE 0x70
248 #define ICH6_REG_DPUBASE 0x74
249 #define ICH6_DPLBASE_ENABLE 0x1 /* Enable position buffer */
251 /* SD offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
252 enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
254 /* stream register offsets from stream base */
255 #define ICH6_REG_SD_CTL 0x00
256 #define ICH6_REG_SD_STS 0x03
257 #define ICH6_REG_SD_LPIB 0x04
258 #define ICH6_REG_SD_CBL 0x08
259 #define ICH6_REG_SD_LVI 0x0c
260 #define ICH6_REG_SD_FIFOW 0x0e
261 #define ICH6_REG_SD_FIFOSIZE 0x10
262 #define ICH6_REG_SD_FORMAT 0x12
263 #define ICH6_REG_SD_BDLPL 0x18
264 #define ICH6_REG_SD_BDLPU 0x1c
267 #define ICH6_PCIREG_TCSEL 0x44
273 /* max number of SDs */
274 /* ICH, ATI and VIA have 4 playback and 4 capture */
275 #define ICH6_NUM_CAPTURE 4
276 #define ICH6_NUM_PLAYBACK 4
278 /* ULI has 6 playback and 5 capture */
279 #define ULI_NUM_CAPTURE 5
280 #define ULI_NUM_PLAYBACK 6
282 /* ATI HDMI has 1 playback and 0 capture */
283 #define ATIHDMI_NUM_CAPTURE 0
284 #define ATIHDMI_NUM_PLAYBACK 1
286 /* TERA has 4 playback and 3 capture */
287 #define TERA_NUM_CAPTURE 3
288 #define TERA_NUM_PLAYBACK 4
290 /* this number is statically defined for simplicity */
291 #define MAX_AZX_DEV 16
293 /* max number of fragments - we may use more if allocating more pages for BDL */
294 #define BDL_SIZE 4096
295 #define AZX_MAX_BDL_ENTRIES (BDL_SIZE / 16)
296 #define AZX_MAX_FRAG 32
297 /* max buffer size - no h/w limit, you can increase as you like */
298 #define AZX_MAX_BUF_SIZE (1024*1024*1024)
300 /* RIRB int mask: overrun[2], response[0] */
301 #define RIRB_INT_RESPONSE 0x01
302 #define RIRB_INT_OVERRUN 0x04
303 #define RIRB_INT_MASK 0x05
305 /* STATESTS int mask: S3,SD2,SD1,SD0 */
306 #define AZX_MAX_CODECS 8
307 #define AZX_DEFAULT_CODECS 4
308 #define STATESTS_INT_MASK ((1 << AZX_MAX_CODECS) - 1)
311 #define SD_CTL_STREAM_RESET 0x01 /* stream reset bit */
312 #define SD_CTL_DMA_START 0x02 /* stream DMA start bit */
313 #define SD_CTL_STRIPE (3 << 16) /* stripe control */
314 #define SD_CTL_TRAFFIC_PRIO (1 << 18) /* traffic priority */
315 #define SD_CTL_DIR (1 << 19) /* bi-directional stream */
316 #define SD_CTL_STREAM_TAG_MASK (0xf << 20)
317 #define SD_CTL_STREAM_TAG_SHIFT 20
319 /* SD_CTL and SD_STS */
320 #define SD_INT_DESC_ERR 0x10 /* descriptor error interrupt */
321 #define SD_INT_FIFO_ERR 0x08 /* FIFO error interrupt */
322 #define SD_INT_COMPLETE 0x04 /* completion interrupt */
323 #define SD_INT_MASK (SD_INT_DESC_ERR|SD_INT_FIFO_ERR|\
327 #define SD_STS_FIFO_READY 0x20 /* FIFO ready */
329 /* INTCTL and INTSTS */
330 #define ICH6_INT_ALL_STREAM 0xff /* all stream interrupts */
331 #define ICH6_INT_CTRL_EN 0x40000000 /* controller interrupt enable bit */
332 #define ICH6_INT_GLOBAL_EN 0x80000000 /* global interrupt enable bit */
334 /* below are so far hardcoded - should read registers in future */
335 #define ICH6_MAX_CORB_ENTRIES 256
336 #define ICH6_MAX_RIRB_ENTRIES 256
338 /* position fix mode */
347 /* Defines for ATI HD Audio support in SB450 south bridge */
348 #define ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR 0x42
349 #define ATI_SB450_HDAUDIO_ENABLE_SNOOP 0x02
351 /* Defines for Nvidia HDA support */
352 #define NVIDIA_HDA_TRANSREG_ADDR 0x4e
353 #define NVIDIA_HDA_ENABLE_COHBITS 0x0f
354 #define NVIDIA_HDA_ISTRM_COH 0x4d
355 #define NVIDIA_HDA_OSTRM_COH 0x4c
356 #define NVIDIA_HDA_ENABLE_COHBIT 0x01
358 /* Defines for Intel SCH HDA snoop control */
359 #define INTEL_SCH_HDA_DEVC 0x78
360 #define INTEL_SCH_HDA_DEVC_NOSNOOP (0x1<<11)
362 /* Define IN stream 0 FIFO size offset in VIA controller */
363 #define VIA_IN_STREAM0_FIFO_SIZE_OFFSET 0x90
364 /* Define VIA HD Audio Device ID*/
365 #define VIA_HDAC_DEVICE_ID 0x3288
367 /* HD Audio class code */
368 #define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
374 struct snd_dma_buffer bdl; /* BDL buffer */
375 u32 *posbuf; /* position buffer pointer */
377 unsigned int bufsize; /* size of the play buffer in bytes */
378 unsigned int period_bytes; /* size of the period in bytes */
379 unsigned int frags; /* number for period in the play buffer */
380 unsigned int fifo_size; /* FIFO size */
381 unsigned long start_wallclk; /* start + minimum wallclk */
382 unsigned long period_wallclk; /* wallclk for period */
384 void __iomem *sd_addr; /* stream descriptor pointer */
386 u32 sd_int_sta_mask; /* stream int status mask */
389 struct snd_pcm_substream *substream; /* assigned substream,
392 unsigned int format_val; /* format value to be set in the
393 * controller and the codec
395 unsigned char stream_tag; /* assigned stream */
396 unsigned char index; /* stream index */
397 int assigned_key; /* last device# key assigned to */
399 unsigned int opened :1;
400 unsigned int running :1;
401 unsigned int irq_pending :1;
404 * A flag to ensure DMA position is 0
405 * when link position is not greater than FIFO size
407 unsigned int insufficient :1;
408 unsigned int wc_marked:1;
413 u32 *buf; /* CORB/RIRB buffer
414 * Each CORB entry is 4byte, RIRB is 8byte
416 dma_addr_t addr; /* physical address of CORB/RIRB buffer */
418 unsigned short rp, wp; /* read/write pointers */
419 int cmds[AZX_MAX_CODECS]; /* number of pending requests */
420 u32 res[AZX_MAX_CODECS]; /* last read value */
426 struct hda_codec *codec;
427 struct hda_pcm_stream *hinfo[2];
428 struct list_head list;
432 struct snd_card *card;
436 /* chip type specific */
438 unsigned int driver_caps;
439 int playback_streams;
440 int playback_index_offset;
442 int capture_index_offset;
447 void __iomem *remap_addr;
452 struct mutex open_mutex;
454 /* streams (x num_streams) */
455 struct azx_dev *azx_dev;
458 struct list_head pcm_list; /* azx_pcm list */
461 unsigned short codec_mask;
462 int codec_probe_mask; /* copied from probe_mask option */
464 unsigned int beep_mode;
470 /* CORB/RIRB and position buffers */
471 struct snd_dma_buffer rb;
472 struct snd_dma_buffer posbuf;
474 #ifdef CONFIG_SND_HDA_PATCH_LOADER
475 const struct firmware *fw;
479 int position_fix[2]; /* for both playback/capture streams */
481 unsigned int running :1;
482 unsigned int initialized :1;
483 unsigned int single_cmd :1;
484 unsigned int polling_mode :1;
486 unsigned int irq_pending_warned :1;
487 unsigned int probing :1; /* codec probing phase */
488 unsigned int snoop:1;
489 unsigned int align_buffer_size:1;
490 unsigned int region_requested:1;
492 /* VGA-switcheroo setup */
493 unsigned int use_vga_switcheroo:1;
494 unsigned int init_failed:1; /* delayed init failed */
495 unsigned int disabled:1; /* disabled by VGA-switcher */
498 unsigned int last_cmd[AZX_MAX_CODECS];
500 /* for pending irqs */
501 struct work_struct irq_pending_work;
503 /* reboot notifier (for mysterious hangup problem at power-down) */
504 struct notifier_block reboot_notifier;
514 AZX_DRIVER_ATIHDMI_NS,
523 AZX_NUM_DRIVERS, /* keep this as last entry */
526 /* driver quirks (capabilities) */
527 /* bits 0-7 are used for indicating driver type */
528 #define AZX_DCAPS_NO_TCSEL (1 << 8) /* No Intel TCSEL bit */
529 #define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
530 #define AZX_DCAPS_ATI_SNOOP (1 << 10) /* ATI snoop enable */
531 #define AZX_DCAPS_NVIDIA_SNOOP (1 << 11) /* Nvidia snoop enable */
532 #define AZX_DCAPS_SCH_SNOOP (1 << 12) /* SCH/PCH snoop enable */
533 #define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */
534 #define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */
535 #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
536 #define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */
537 #define AZX_DCAPS_POSFIX_VIA (1 << 17) /* Use VIACOMBO as default */
538 #define AZX_DCAPS_NO_64BIT (1 << 18) /* No 64bit address */
539 #define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */
540 #define AZX_DCAPS_OLD_SSYNC (1 << 20) /* Old SSYNC reg for ICH */
541 #define AZX_DCAPS_BUFSIZE (1 << 21) /* no buffer size alignment */
542 #define AZX_DCAPS_ALIGN_BUFSIZE (1 << 22) /* buffer size alignment */
543 #define AZX_DCAPS_4K_BDLE_BOUNDARY (1 << 23) /* BDLE in 4k boundary */
544 #define AZX_DCAPS_POSFIX_COMBO (1 << 24) /* Use COMBO as default */
546 /* quirks for ATI SB / AMD Hudson */
547 #define AZX_DCAPS_PRESET_ATI_SB \
548 (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
549 AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
551 /* quirks for ATI/AMD HDMI */
552 #define AZX_DCAPS_PRESET_ATI_HDMI \
553 (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
555 /* quirks for Nvidia */
556 #define AZX_DCAPS_PRESET_NVIDIA \
557 (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
558 AZX_DCAPS_ALIGN_BUFSIZE)
560 #define AZX_DCAPS_PRESET_CTHDA \
561 (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_4K_BDLE_BOUNDARY)
564 * VGA-switcher support
566 #ifdef SUPPORT_VGA_SWITCHEROO
567 #define DELAYED_INIT_MARK
568 #define DELAYED_INITDATA_MARK
569 #define use_vga_switcheroo(chip) ((chip)->use_vga_switcheroo)
571 #define DELAYED_INIT_MARK __devinit
572 #define DELAYED_INITDATA_MARK __devinitdata
573 #define use_vga_switcheroo(chip) 0
576 static char *driver_short_names[] DELAYED_INITDATA_MARK = {
577 [AZX_DRIVER_ICH] = "HDA Intel",
578 [AZX_DRIVER_PCH] = "HDA Intel PCH",
579 [AZX_DRIVER_SCH] = "HDA Intel MID",
580 [AZX_DRIVER_ATI] = "HDA ATI SB",
581 [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI",
582 [AZX_DRIVER_ATIHDMI_NS] = "HDA ATI HDMI",
583 [AZX_DRIVER_VIA] = "HDA VIA VT82xx",
584 [AZX_DRIVER_SIS] = "HDA SIS966",
585 [AZX_DRIVER_ULI] = "HDA ULI M5461",
586 [AZX_DRIVER_NVIDIA] = "HDA NVidia",
587 [AZX_DRIVER_TERA] = "HDA Teradici",
588 [AZX_DRIVER_CTX] = "HDA Creative",
589 [AZX_DRIVER_CTHDA] = "HDA Creative",
590 [AZX_DRIVER_GENERIC] = "HD-Audio Generic",
594 * macros for easy use
596 #define azx_writel(chip,reg,value) \
597 writel(value, (chip)->remap_addr + ICH6_REG_##reg)
598 #define azx_readl(chip,reg) \
599 readl((chip)->remap_addr + ICH6_REG_##reg)
600 #define azx_writew(chip,reg,value) \
601 writew(value, (chip)->remap_addr + ICH6_REG_##reg)
602 #define azx_readw(chip,reg) \
603 readw((chip)->remap_addr + ICH6_REG_##reg)
604 #define azx_writeb(chip,reg,value) \
605 writeb(value, (chip)->remap_addr + ICH6_REG_##reg)
606 #define azx_readb(chip,reg) \
607 readb((chip)->remap_addr + ICH6_REG_##reg)
609 #define azx_sd_writel(dev,reg,value) \
610 writel(value, (dev)->sd_addr + ICH6_REG_##reg)
611 #define azx_sd_readl(dev,reg) \
612 readl((dev)->sd_addr + ICH6_REG_##reg)
613 #define azx_sd_writew(dev,reg,value) \
614 writew(value, (dev)->sd_addr + ICH6_REG_##reg)
615 #define azx_sd_readw(dev,reg) \
616 readw((dev)->sd_addr + ICH6_REG_##reg)
617 #define azx_sd_writeb(dev,reg,value) \
618 writeb(value, (dev)->sd_addr + ICH6_REG_##reg)
619 #define azx_sd_readb(dev,reg) \
620 readb((dev)->sd_addr + ICH6_REG_##reg)
622 /* for pcm support */
623 #define get_azx_dev(substream) (substream->runtime->private_data)
626 static void __mark_pages_wc(struct azx *chip, void *addr, size_t size, bool on)
631 int pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
633 set_memory_wc((unsigned long)addr, pages);
635 set_memory_wb((unsigned long)addr, pages);
639 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
642 __mark_pages_wc(chip, buf->area, buf->bytes, on);
644 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
645 struct snd_pcm_runtime *runtime, bool on)
647 if (azx_dev->wc_marked != on) {
648 __mark_pages_wc(chip, runtime->dma_area, runtime->dma_bytes, on);
649 azx_dev->wc_marked = on;
653 /* NOP for other archs */
654 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
658 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
659 struct snd_pcm_runtime *runtime, bool on)
664 static int azx_acquire_irq(struct azx *chip, int do_disconnect);
665 static int azx_send_cmd(struct hda_bus *bus, unsigned int val);
667 * Interface for HD codec
671 * CORB / RIRB interface
673 static int azx_alloc_cmd_io(struct azx *chip)
677 /* single page (at least 4096 bytes) must suffice for both ringbuffes */
678 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
679 snd_dma_pci_data(chip->pci),
680 PAGE_SIZE, &chip->rb);
682 snd_printk(KERN_ERR SFX "cannot allocate CORB/RIRB\n");
685 mark_pages_wc(chip, &chip->rb, true);
689 static void azx_init_cmd_io(struct azx *chip)
691 spin_lock_irq(&chip->reg_lock);
693 chip->corb.addr = chip->rb.addr;
694 chip->corb.buf = (u32 *)chip->rb.area;
695 azx_writel(chip, CORBLBASE, (u32)chip->corb.addr);
696 azx_writel(chip, CORBUBASE, upper_32_bits(chip->corb.addr));
698 /* set the corb size to 256 entries (ULI requires explicitly) */
699 azx_writeb(chip, CORBSIZE, 0x02);
700 /* set the corb write pointer to 0 */
701 azx_writew(chip, CORBWP, 0);
702 /* reset the corb hw read pointer */
703 azx_writew(chip, CORBRP, ICH6_CORBRP_RST);
704 /* enable corb dma */
705 azx_writeb(chip, CORBCTL, ICH6_CORBCTL_RUN);
708 chip->rirb.addr = chip->rb.addr + 2048;
709 chip->rirb.buf = (u32 *)(chip->rb.area + 2048);
710 chip->rirb.wp = chip->rirb.rp = 0;
711 memset(chip->rirb.cmds, 0, sizeof(chip->rirb.cmds));
712 azx_writel(chip, RIRBLBASE, (u32)chip->rirb.addr);
713 azx_writel(chip, RIRBUBASE, upper_32_bits(chip->rirb.addr));
715 /* set the rirb size to 256 entries (ULI requires explicitly) */
716 azx_writeb(chip, RIRBSIZE, 0x02);
717 /* reset the rirb hw write pointer */
718 azx_writew(chip, RIRBWP, ICH6_RIRBWP_RST);
719 /* set N=1, get RIRB response interrupt for new entry */
720 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
721 azx_writew(chip, RINTCNT, 0xc0);
723 azx_writew(chip, RINTCNT, 1);
724 /* enable rirb dma and response irq */
725 azx_writeb(chip, RIRBCTL, ICH6_RBCTL_DMA_EN | ICH6_RBCTL_IRQ_EN);
726 spin_unlock_irq(&chip->reg_lock);
729 static void azx_free_cmd_io(struct azx *chip)
731 spin_lock_irq(&chip->reg_lock);
732 /* disable ringbuffer DMAs */
733 azx_writeb(chip, RIRBCTL, 0);
734 azx_writeb(chip, CORBCTL, 0);
735 spin_unlock_irq(&chip->reg_lock);
738 static unsigned int azx_command_addr(u32 cmd)
740 unsigned int addr = cmd >> 28;
742 if (addr >= AZX_MAX_CODECS) {
750 static unsigned int azx_response_addr(u32 res)
752 unsigned int addr = res & 0xf;
754 if (addr >= AZX_MAX_CODECS) {
763 static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
765 struct azx *chip = bus->private_data;
766 unsigned int addr = azx_command_addr(val);
769 spin_lock_irq(&chip->reg_lock);
771 /* add command to corb */
772 wp = azx_readb(chip, CORBWP);
774 wp %= ICH6_MAX_CORB_ENTRIES;
776 chip->rirb.cmds[addr]++;
777 chip->corb.buf[wp] = cpu_to_le32(val);
778 azx_writel(chip, CORBWP, wp);
780 spin_unlock_irq(&chip->reg_lock);
785 #define ICH6_RIRB_EX_UNSOL_EV (1<<4)
787 /* retrieve RIRB entry - called from interrupt handler */
788 static void azx_update_rirb(struct azx *chip)
794 wp = azx_readb(chip, RIRBWP);
795 if (wp == chip->rirb.wp)
799 while (chip->rirb.rp != wp) {
801 chip->rirb.rp %= ICH6_MAX_RIRB_ENTRIES;
803 rp = chip->rirb.rp << 1; /* an RIRB entry is 8-bytes */
804 res_ex = le32_to_cpu(chip->rirb.buf[rp + 1]);
805 res = le32_to_cpu(chip->rirb.buf[rp]);
806 addr = azx_response_addr(res_ex);
807 if (res_ex & ICH6_RIRB_EX_UNSOL_EV)
808 snd_hda_queue_unsol_event(chip->bus, res, res_ex);
809 else if (chip->rirb.cmds[addr]) {
810 chip->rirb.res[addr] = res;
812 chip->rirb.cmds[addr]--;
814 snd_printk(KERN_ERR SFX "spurious response %#x:%#x, "
817 chip->last_cmd[addr]);
821 /* receive a response */
822 static unsigned int azx_rirb_get_response(struct hda_bus *bus,
825 struct azx *chip = bus->private_data;
826 unsigned long timeout;
827 unsigned long loopcounter;
831 timeout = jiffies + msecs_to_jiffies(1000);
833 for (loopcounter = 0;; loopcounter++) {
834 if (chip->polling_mode || do_poll) {
835 spin_lock_irq(&chip->reg_lock);
836 azx_update_rirb(chip);
837 spin_unlock_irq(&chip->reg_lock);
839 if (!chip->rirb.cmds[addr]) {
844 chip->poll_count = 0;
845 return chip->rirb.res[addr]; /* the last value */
847 if (time_after(jiffies, timeout))
849 if (bus->needs_damn_long_delay || loopcounter > 3000)
850 msleep(2); /* temporary workaround */
857 if (!chip->polling_mode && chip->poll_count < 2) {
858 snd_printdd(SFX "azx_get_response timeout, "
859 "polling the codec once: last cmd=0x%08x\n",
860 chip->last_cmd[addr]);
867 if (!chip->polling_mode) {
868 snd_printk(KERN_WARNING SFX "azx_get_response timeout, "
869 "switching to polling mode: last cmd=0x%08x\n",
870 chip->last_cmd[addr]);
871 chip->polling_mode = 1;
876 snd_printk(KERN_WARNING SFX "No response from codec, "
877 "disabling MSI: last cmd=0x%08x\n",
878 chip->last_cmd[addr]);
879 free_irq(chip->irq, chip);
881 pci_disable_msi(chip->pci);
883 if (azx_acquire_irq(chip, 1) < 0) {
891 /* If this critical timeout happens during the codec probing
892 * phase, this is likely an access to a non-existing codec
893 * slot. Better to return an error and reset the system.
898 /* a fatal communication error; need either to reset or to fallback
899 * to the single_cmd mode
902 if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) {
903 bus->response_reset = 1;
904 return -1; /* give a chance to retry */
907 snd_printk(KERN_ERR "hda_intel: azx_get_response timeout, "
908 "switching to single_cmd mode: last cmd=0x%08x\n",
909 chip->last_cmd[addr]);
910 chip->single_cmd = 1;
911 bus->response_reset = 0;
912 /* release CORB/RIRB */
913 azx_free_cmd_io(chip);
914 /* disable unsolicited responses */
915 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL);
920 * Use the single immediate command instead of CORB/RIRB for simplicity
922 * Note: according to Intel, this is not preferred use. The command was
923 * intended for the BIOS only, and may get confused with unsolicited
924 * responses. So, we shouldn't use it for normal operation from the
926 * I left the codes, however, for debugging/testing purposes.
929 /* receive a response */
930 static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
935 /* check IRV busy bit */
936 if (azx_readw(chip, IRS) & ICH6_IRS_VALID) {
937 /* reuse rirb.res as the response return value */
938 chip->rirb.res[addr] = azx_readl(chip, IR);
943 if (printk_ratelimit())
944 snd_printd(SFX "get_response timeout: IRS=0x%x\n",
945 azx_readw(chip, IRS));
946 chip->rirb.res[addr] = -1;
951 static int azx_single_send_cmd(struct hda_bus *bus, u32 val)
953 struct azx *chip = bus->private_data;
954 unsigned int addr = azx_command_addr(val);
959 /* check ICB busy bit */
960 if (!((azx_readw(chip, IRS) & ICH6_IRS_BUSY))) {
961 /* Clear IRV valid bit */
962 azx_writew(chip, IRS, azx_readw(chip, IRS) |
964 azx_writel(chip, IC, val);
965 azx_writew(chip, IRS, azx_readw(chip, IRS) |
967 return azx_single_wait_for_response(chip, addr);
971 if (printk_ratelimit())
972 snd_printd(SFX "send_cmd timeout: IRS=0x%x, val=0x%x\n",
973 azx_readw(chip, IRS), val);
977 /* receive a response */
978 static unsigned int azx_single_get_response(struct hda_bus *bus,
981 struct azx *chip = bus->private_data;
982 return chip->rirb.res[addr];
986 * The below are the main callbacks from hda_codec.
988 * They are just the skeleton to call sub-callbacks according to the
989 * current setting of chip->single_cmd.
993 static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
995 struct azx *chip = bus->private_data;
999 chip->last_cmd[azx_command_addr(val)] = val;
1000 if (chip->single_cmd)
1001 return azx_single_send_cmd(bus, val);
1003 return azx_corb_send_cmd(bus, val);
1006 /* get a response */
1007 static unsigned int azx_get_response(struct hda_bus *bus,
1010 struct azx *chip = bus->private_data;
1013 if (chip->single_cmd)
1014 return azx_single_get_response(bus, addr);
1016 return azx_rirb_get_response(bus, addr);
1019 #ifdef CONFIG_SND_HDA_POWER_SAVE
1020 static void azx_power_notify(struct hda_bus *bus);
1023 /* reset codec link */
1024 static int azx_reset(struct azx *chip, int full_reset)
1031 /* clear STATESTS */
1032 azx_writeb(chip, STATESTS, STATESTS_INT_MASK);
1034 /* reset controller */
1035 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_RESET);
1038 while (azx_readb(chip, GCTL) && --count)
1041 /* delay for >= 100us for codec PLL to settle per spec
1042 * Rev 0.9 section 5.5.1
1046 /* Bring controller out of reset */
1047 azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | ICH6_GCTL_RESET);
1050 while (!azx_readb(chip, GCTL) && --count)
1053 /* Brent Chartrand said to wait >= 540us for codecs to initialize */
1057 /* check to see if controller is ready */
1058 if (!azx_readb(chip, GCTL)) {
1059 snd_printd(SFX "azx_reset: controller not ready!\n");
1063 /* Accept unsolicited responses */
1064 if (!chip->single_cmd)
1065 azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
1069 if (!chip->codec_mask) {
1070 chip->codec_mask = azx_readw(chip, STATESTS);
1071 snd_printdd(SFX "codec_mask = 0x%x\n", chip->codec_mask);
1079 * Lowlevel interface
1082 /* enable interrupts */
1083 static void azx_int_enable(struct azx *chip)
1085 /* enable controller CIE and GIE */
1086 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) |
1087 ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN);
1090 /* disable interrupts */
1091 static void azx_int_disable(struct azx *chip)
1095 /* disable interrupts in stream descriptor */
1096 for (i = 0; i < chip->num_streams; i++) {
1097 struct azx_dev *azx_dev = &chip->azx_dev[i];
1098 azx_sd_writeb(azx_dev, SD_CTL,
1099 azx_sd_readb(azx_dev, SD_CTL) & ~SD_INT_MASK);
1102 /* disable SIE for all streams */
1103 azx_writeb(chip, INTCTL, 0);
1105 /* disable controller CIE and GIE */
1106 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) &
1107 ~(ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN));
1110 /* clear interrupts */
1111 static void azx_int_clear(struct azx *chip)
1115 /* clear stream status */
1116 for (i = 0; i < chip->num_streams; i++) {
1117 struct azx_dev *azx_dev = &chip->azx_dev[i];
1118 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1121 /* clear STATESTS */
1122 azx_writeb(chip, STATESTS, STATESTS_INT_MASK);
1124 /* clear rirb status */
1125 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1127 /* clear int status */
1128 azx_writel(chip, INTSTS, ICH6_INT_CTRL_EN | ICH6_INT_ALL_STREAM);
1131 /* start a stream */
1132 static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev)
1135 * Before stream start, initialize parameter
1137 azx_dev->insufficient = 1;
1140 azx_writel(chip, INTCTL,
1141 azx_readl(chip, INTCTL) | (1 << azx_dev->index));
1142 /* set DMA start and interrupt mask */
1143 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1144 SD_CTL_DMA_START | SD_INT_MASK);
1148 static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev)
1150 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) &
1151 ~(SD_CTL_DMA_START | SD_INT_MASK));
1152 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); /* to be sure */
1156 static void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev)
1158 azx_stream_clear(chip, azx_dev);
1160 azx_writel(chip, INTCTL,
1161 azx_readl(chip, INTCTL) & ~(1 << azx_dev->index));
1166 * reset and start the controller registers
1168 static void azx_init_chip(struct azx *chip, int full_reset)
1170 if (chip->initialized)
1173 /* reset controller */
1174 azx_reset(chip, full_reset);
1176 /* initialize interrupts */
1177 azx_int_clear(chip);
1178 azx_int_enable(chip);
1180 /* initialize the codec command I/O */
1181 if (!chip->single_cmd)
1182 azx_init_cmd_io(chip);
1184 /* program the position buffer */
1185 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
1186 azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr));
1188 chip->initialized = 1;
1192 * initialize the PCI registers
1194 /* update bits in a PCI register byte */
1195 static void update_pci_byte(struct pci_dev *pci, unsigned int reg,
1196 unsigned char mask, unsigned char val)
1200 pci_read_config_byte(pci, reg, &data);
1202 data |= (val & mask);
1203 pci_write_config_byte(pci, reg, data);
1206 static void azx_init_pci(struct azx *chip)
1208 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
1209 * TCSEL == Traffic Class Select Register, which sets PCI express QOS
1210 * Ensuring these bits are 0 clears playback static on some HD Audio
1212 * The PCI register TCSEL is defined in the Intel manuals.
1214 if (!(chip->driver_caps & AZX_DCAPS_NO_TCSEL)) {
1215 snd_printdd(SFX "Clearing TCSEL\n");
1216 update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0);
1219 /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
1220 * we need to enable snoop.
1222 if (chip->driver_caps & AZX_DCAPS_ATI_SNOOP) {
1223 snd_printdd(SFX "Setting ATI snoop: %d\n", azx_snoop(chip));
1224 update_pci_byte(chip->pci,
1225 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR, 0x07,
1226 azx_snoop(chip) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP : 0);
1229 /* For NVIDIA HDA, enable snoop */
1230 if (chip->driver_caps & AZX_DCAPS_NVIDIA_SNOOP) {
1231 snd_printdd(SFX "Setting Nvidia snoop: %d\n", azx_snoop(chip));
1232 update_pci_byte(chip->pci,
1233 NVIDIA_HDA_TRANSREG_ADDR,
1234 0x0f, NVIDIA_HDA_ENABLE_COHBITS);
1235 update_pci_byte(chip->pci,
1236 NVIDIA_HDA_ISTRM_COH,
1237 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1238 update_pci_byte(chip->pci,
1239 NVIDIA_HDA_OSTRM_COH,
1240 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1243 /* Enable SCH/PCH snoop if needed */
1244 if (chip->driver_caps & AZX_DCAPS_SCH_SNOOP) {
1245 unsigned short snoop;
1246 pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);
1247 if ((!azx_snoop(chip) && !(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)) ||
1248 (azx_snoop(chip) && (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP))) {
1249 snoop &= ~INTEL_SCH_HDA_DEVC_NOSNOOP;
1250 if (!azx_snoop(chip))
1251 snoop |= INTEL_SCH_HDA_DEVC_NOSNOOP;
1252 pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, snoop);
1253 pci_read_config_word(chip->pci,
1254 INTEL_SCH_HDA_DEVC, &snoop);
1256 snd_printdd(SFX "SCH snoop: %s\n",
1257 (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)
1258 ? "Disabled" : "Enabled");
1263 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev);
1268 static irqreturn_t azx_interrupt(int irq, void *dev_id)
1270 struct azx *chip = dev_id;
1271 struct azx_dev *azx_dev;
1276 spin_lock(&chip->reg_lock);
1278 if (chip->disabled) {
1279 spin_unlock(&chip->reg_lock);
1283 status = azx_readl(chip, INTSTS);
1285 spin_unlock(&chip->reg_lock);
1289 for (i = 0; i < chip->num_streams; i++) {
1290 azx_dev = &chip->azx_dev[i];
1291 if (status & azx_dev->sd_int_sta_mask) {
1292 sd_status = azx_sd_readb(azx_dev, SD_STS);
1293 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1294 if (!azx_dev->substream || !azx_dev->running ||
1295 !(sd_status & SD_INT_COMPLETE))
1297 /* check whether this IRQ is really acceptable */
1298 ok = azx_position_ok(chip, azx_dev);
1300 azx_dev->irq_pending = 0;
1301 spin_unlock(&chip->reg_lock);
1302 snd_pcm_period_elapsed(azx_dev->substream);
1303 spin_lock(&chip->reg_lock);
1304 } else if (ok == 0 && chip->bus && chip->bus->workq) {
1305 /* bogus IRQ, process it later */
1306 azx_dev->irq_pending = 1;
1307 queue_work(chip->bus->workq,
1308 &chip->irq_pending_work);
1313 /* clear rirb int */
1314 status = azx_readb(chip, RIRBSTS);
1315 if (status & RIRB_INT_MASK) {
1316 if (status & RIRB_INT_RESPONSE) {
1317 if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY)
1319 azx_update_rirb(chip);
1321 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1325 /* clear state status int */
1326 if (azx_readb(chip, STATESTS) & 0x04)
1327 azx_writeb(chip, STATESTS, 0x04);
1329 spin_unlock(&chip->reg_lock);
1336 * set up a BDL entry
1338 static int setup_bdle(struct azx *chip,
1339 struct snd_pcm_substream *substream,
1340 struct azx_dev *azx_dev, u32 **bdlp,
1341 int ofs, int size, int with_ioc)
1349 if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES)
1352 addr = snd_pcm_sgbuf_get_addr(substream, ofs);
1353 /* program the address field of the BDL entry */
1354 bdl[0] = cpu_to_le32((u32)addr);
1355 bdl[1] = cpu_to_le32(upper_32_bits(addr));
1356 /* program the size field of the BDL entry */
1357 chunk = snd_pcm_sgbuf_get_chunk_size(substream, ofs, size);
1358 /* one BDLE cannot cross 4K boundary on CTHDA chips */
1359 if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) {
1360 u32 remain = 0x1000 - (ofs & 0xfff);
1364 bdl[2] = cpu_to_le32(chunk);
1365 /* program the IOC to enable interrupt
1366 * only when the whole fragment is processed
1369 bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01);
1379 * set up BDL entries
1381 static int azx_setup_periods(struct azx *chip,
1382 struct snd_pcm_substream *substream,
1383 struct azx_dev *azx_dev)
1386 int i, ofs, periods, period_bytes;
1389 /* reset BDL address */
1390 azx_sd_writel(azx_dev, SD_BDLPL, 0);
1391 azx_sd_writel(azx_dev, SD_BDLPU, 0);
1393 period_bytes = azx_dev->period_bytes;
1394 periods = azx_dev->bufsize / period_bytes;
1396 /* program the initial BDL entries */
1397 bdl = (u32 *)azx_dev->bdl.area;
1400 pos_adj = bdl_pos_adj[chip->dev_index];
1402 struct snd_pcm_runtime *runtime = substream->runtime;
1403 int pos_align = pos_adj;
1404 pos_adj = (pos_adj * runtime->rate + 47999) / 48000;
1406 pos_adj = pos_align;
1408 pos_adj = ((pos_adj + pos_align - 1) / pos_align) *
1410 pos_adj = frames_to_bytes(runtime, pos_adj);
1411 if (pos_adj >= period_bytes) {
1412 snd_printk(KERN_WARNING SFX "Too big adjustment %d\n",
1413 bdl_pos_adj[chip->dev_index]);
1416 ofs = setup_bdle(chip, substream, azx_dev,
1418 !substream->runtime->no_period_wakeup);
1424 for (i = 0; i < periods; i++) {
1425 if (i == periods - 1 && pos_adj)
1426 ofs = setup_bdle(chip, substream, azx_dev, &bdl, ofs,
1427 period_bytes - pos_adj, 0);
1429 ofs = setup_bdle(chip, substream, azx_dev, &bdl, ofs,
1431 !substream->runtime->no_period_wakeup);
1438 snd_printk(KERN_ERR SFX "Too many BDL entries: buffer=%d, period=%d\n",
1439 azx_dev->bufsize, period_bytes);
1444 static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev)
1449 azx_stream_clear(chip, azx_dev);
1451 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1452 SD_CTL_STREAM_RESET);
1455 while (!((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1458 val &= ~SD_CTL_STREAM_RESET;
1459 azx_sd_writeb(azx_dev, SD_CTL, val);
1463 /* waiting for hardware to report that the stream is out of reset */
1464 while (((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1468 /* reset first position - may not be synced with hw at this time */
1469 *azx_dev->posbuf = 0;
1473 * set up the SD for streaming
1475 static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev)
1478 /* make sure the run bit is zero for SD */
1479 azx_stream_clear(chip, azx_dev);
1480 /* program the stream_tag */
1481 val = azx_sd_readl(azx_dev, SD_CTL);
1482 val = (val & ~SD_CTL_STREAM_TAG_MASK) |
1483 (azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT);
1484 if (!azx_snoop(chip))
1485 val |= SD_CTL_TRAFFIC_PRIO;
1486 azx_sd_writel(azx_dev, SD_CTL, val);
1488 /* program the length of samples in cyclic buffer */
1489 azx_sd_writel(azx_dev, SD_CBL, azx_dev->bufsize);
1491 /* program the stream format */
1492 /* this value needs to be the same as the one programmed */
1493 azx_sd_writew(azx_dev, SD_FORMAT, azx_dev->format_val);
1495 /* program the stream LVI (last valid index) of the BDL */
1496 azx_sd_writew(azx_dev, SD_LVI, azx_dev->frags - 1);
1498 /* program the BDL address */
1499 /* lower BDL address */
1500 azx_sd_writel(azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr);
1501 /* upper BDL address */
1502 azx_sd_writel(azx_dev, SD_BDLPU, upper_32_bits(azx_dev->bdl.addr));
1504 /* enable the position buffer */
1505 if (chip->position_fix[0] != POS_FIX_LPIB ||
1506 chip->position_fix[1] != POS_FIX_LPIB) {
1507 if (!(azx_readl(chip, DPLBASE) & ICH6_DPLBASE_ENABLE))
1508 azx_writel(chip, DPLBASE,
1509 (u32)chip->posbuf.addr | ICH6_DPLBASE_ENABLE);
1512 /* set the interrupt enable bits in the descriptor control register */
1513 azx_sd_writel(azx_dev, SD_CTL,
1514 azx_sd_readl(azx_dev, SD_CTL) | SD_INT_MASK);
1520 * Probe the given codec address
1522 static int probe_codec(struct azx *chip, int addr)
1524 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1525 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1528 mutex_lock(&chip->bus->cmd_mutex);
1530 azx_send_cmd(chip->bus, cmd);
1531 res = azx_get_response(chip->bus, addr);
1533 mutex_unlock(&chip->bus->cmd_mutex);
1536 snd_printdd(SFX "codec #%d probed OK\n", addr);
1540 static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
1541 struct hda_pcm *cpcm);
1542 static void azx_stop_chip(struct azx *chip);
1544 static void azx_bus_reset(struct hda_bus *bus)
1546 struct azx *chip = bus->private_data;
1549 azx_stop_chip(chip);
1550 azx_init_chip(chip, 1);
1552 if (chip->initialized) {
1554 list_for_each_entry(p, &chip->pcm_list, list)
1555 snd_pcm_suspend_all(p->pcm);
1556 snd_hda_suspend(chip->bus);
1557 snd_hda_resume(chip->bus);
1564 * Codec initialization
1567 /* number of codec slots for each chipset: 0 = default slots (i.e. 4) */
1568 static unsigned int azx_max_codecs[AZX_NUM_DRIVERS] DELAYED_INITDATA_MARK = {
1569 [AZX_DRIVER_NVIDIA] = 8,
1570 [AZX_DRIVER_TERA] = 1,
1573 static int DELAYED_INIT_MARK azx_codec_create(struct azx *chip, const char *model)
1575 struct hda_bus_template bus_temp;
1579 memset(&bus_temp, 0, sizeof(bus_temp));
1580 bus_temp.private_data = chip;
1581 bus_temp.modelname = model;
1582 bus_temp.pci = chip->pci;
1583 bus_temp.ops.command = azx_send_cmd;
1584 bus_temp.ops.get_response = azx_get_response;
1585 bus_temp.ops.attach_pcm = azx_attach_pcm_stream;
1586 bus_temp.ops.bus_reset = azx_bus_reset;
1587 #ifdef CONFIG_SND_HDA_POWER_SAVE
1588 bus_temp.power_save = &power_save;
1589 bus_temp.ops.pm_notify = azx_power_notify;
1592 err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus);
1596 if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) {
1597 snd_printd(SFX "Enable delay in RIRB handling\n");
1598 chip->bus->needs_damn_long_delay = 1;
1602 max_slots = azx_max_codecs[chip->driver_type];
1604 max_slots = AZX_DEFAULT_CODECS;
1606 /* First try to probe all given codec slots */
1607 for (c = 0; c < max_slots; c++) {
1608 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1609 if (probe_codec(chip, c) < 0) {
1610 /* Some BIOSen give you wrong codec addresses
1613 snd_printk(KERN_WARNING SFX
1614 "Codec #%d probe error; "
1615 "disabling it...\n", c);
1616 chip->codec_mask &= ~(1 << c);
1617 /* More badly, accessing to a non-existing
1618 * codec often screws up the controller chip,
1619 * and disturbs the further communications.
1620 * Thus if an error occurs during probing,
1621 * better to reset the controller chip to
1622 * get back to the sanity state.
1624 azx_stop_chip(chip);
1625 azx_init_chip(chip, 1);
1630 /* AMD chipsets often cause the communication stalls upon certain
1631 * sequence like the pin-detection. It seems that forcing the synced
1632 * access works around the stall. Grrr...
1634 if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1635 snd_printd(SFX "Enable sync_write for stable communication\n");
1636 chip->bus->sync_write = 1;
1637 chip->bus->allow_bus_reset = 1;
1640 /* Then create codec instances */
1641 for (c = 0; c < max_slots; c++) {
1642 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1643 struct hda_codec *codec;
1644 err = snd_hda_codec_new(chip->bus, c, &codec);
1647 codec->beep_mode = chip->beep_mode;
1652 snd_printk(KERN_ERR SFX "no codecs initialized\n");
1658 /* configure each codec instance */
1659 static int __devinit azx_codec_configure(struct azx *chip)
1661 struct hda_codec *codec;
1662 list_for_each_entry(codec, &chip->bus->codec_list, list) {
1663 snd_hda_codec_configure(codec);
1673 /* assign a stream for the PCM */
1674 static inline struct azx_dev *
1675 azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
1678 struct azx_dev *res = NULL;
1679 /* make a non-zero unique key for the substream */
1680 int key = (substream->pcm->device << 16) | (substream->number << 2) |
1681 (substream->stream + 1);
1683 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
1684 dev = chip->playback_index_offset;
1685 nums = chip->playback_streams;
1687 dev = chip->capture_index_offset;
1688 nums = chip->capture_streams;
1690 for (i = 0; i < nums; i++, dev++)
1691 if (!chip->azx_dev[dev].opened) {
1692 res = &chip->azx_dev[dev];
1693 if (res->assigned_key == key)
1698 res->assigned_key = key;
1703 /* release the assigned stream */
1704 static inline void azx_release_device(struct azx_dev *azx_dev)
1706 azx_dev->opened = 0;
1709 static struct snd_pcm_hardware azx_pcm_hw = {
1710 .info = (SNDRV_PCM_INFO_MMAP |
1711 SNDRV_PCM_INFO_INTERLEAVED |
1712 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1713 SNDRV_PCM_INFO_MMAP_VALID |
1714 /* No full-resume yet implemented */
1715 /* SNDRV_PCM_INFO_RESUME |*/
1716 SNDRV_PCM_INFO_PAUSE |
1717 SNDRV_PCM_INFO_SYNC_START |
1718 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
1719 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1720 .rates = SNDRV_PCM_RATE_48000,
1725 .buffer_bytes_max = AZX_MAX_BUF_SIZE,
1726 .period_bytes_min = 128,
1727 .period_bytes_max = AZX_MAX_BUF_SIZE / 2,
1729 .periods_max = AZX_MAX_FRAG,
1733 static int azx_pcm_open(struct snd_pcm_substream *substream)
1735 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1736 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1737 struct azx *chip = apcm->chip;
1738 struct azx_dev *azx_dev;
1739 struct snd_pcm_runtime *runtime = substream->runtime;
1740 unsigned long flags;
1744 mutex_lock(&chip->open_mutex);
1745 azx_dev = azx_assign_device(chip, substream);
1746 if (azx_dev == NULL) {
1747 mutex_unlock(&chip->open_mutex);
1750 runtime->hw = azx_pcm_hw;
1751 runtime->hw.channels_min = hinfo->channels_min;
1752 runtime->hw.channels_max = hinfo->channels_max;
1753 runtime->hw.formats = hinfo->formats;
1754 runtime->hw.rates = hinfo->rates;
1755 snd_pcm_limit_hw_rates(runtime);
1756 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
1757 if (chip->align_buffer_size)
1758 /* constrain buffer sizes to be multiple of 128
1759 bytes. This is more efficient in terms of memory
1760 access but isn't required by the HDA spec and
1761 prevents users from specifying exact period/buffer
1762 sizes. For example for 44.1kHz, a period size set
1763 to 20ms will be rounded to 19.59ms. */
1766 /* Don't enforce steps on buffer sizes, still need to
1767 be multiple of 4 bytes (HDA spec). Tested on Intel
1768 HDA controllers, may not work on all devices where
1769 option needs to be disabled */
1772 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
1774 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
1776 snd_hda_power_up_d3wait(apcm->codec);
1777 err = hinfo->ops.open(hinfo, apcm->codec, substream);
1779 azx_release_device(azx_dev);
1780 snd_hda_power_down(apcm->codec);
1781 mutex_unlock(&chip->open_mutex);
1784 snd_pcm_limit_hw_rates(runtime);
1786 if (snd_BUG_ON(!runtime->hw.channels_min) ||
1787 snd_BUG_ON(!runtime->hw.channels_max) ||
1788 snd_BUG_ON(!runtime->hw.formats) ||
1789 snd_BUG_ON(!runtime->hw.rates)) {
1790 azx_release_device(azx_dev);
1791 hinfo->ops.close(hinfo, apcm->codec, substream);
1792 snd_hda_power_down(apcm->codec);
1793 mutex_unlock(&chip->open_mutex);
1796 spin_lock_irqsave(&chip->reg_lock, flags);
1797 azx_dev->substream = substream;
1798 azx_dev->running = 0;
1799 spin_unlock_irqrestore(&chip->reg_lock, flags);
1801 runtime->private_data = azx_dev;
1802 snd_pcm_set_sync(substream);
1803 mutex_unlock(&chip->open_mutex);
1807 static int azx_pcm_close(struct snd_pcm_substream *substream)
1809 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1810 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1811 struct azx *chip = apcm->chip;
1812 struct azx_dev *azx_dev = get_azx_dev(substream);
1813 unsigned long flags;
1815 mutex_lock(&chip->open_mutex);
1816 spin_lock_irqsave(&chip->reg_lock, flags);
1817 azx_dev->substream = NULL;
1818 azx_dev->running = 0;
1819 spin_unlock_irqrestore(&chip->reg_lock, flags);
1820 azx_release_device(azx_dev);
1821 hinfo->ops.close(hinfo, apcm->codec, substream);
1822 snd_hda_power_down(apcm->codec);
1823 mutex_unlock(&chip->open_mutex);
1827 static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
1828 struct snd_pcm_hw_params *hw_params)
1830 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1831 struct azx *chip = apcm->chip;
1832 struct snd_pcm_runtime *runtime = substream->runtime;
1833 struct azx_dev *azx_dev = get_azx_dev(substream);
1836 mark_runtime_wc(chip, azx_dev, runtime, false);
1837 azx_dev->bufsize = 0;
1838 azx_dev->period_bytes = 0;
1839 azx_dev->format_val = 0;
1840 ret = snd_pcm_lib_malloc_pages(substream,
1841 params_buffer_bytes(hw_params));
1844 mark_runtime_wc(chip, azx_dev, runtime, true);
1848 static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
1850 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1851 struct azx_dev *azx_dev = get_azx_dev(substream);
1852 struct azx *chip = apcm->chip;
1853 struct snd_pcm_runtime *runtime = substream->runtime;
1854 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1856 /* reset BDL address */
1857 azx_sd_writel(azx_dev, SD_BDLPL, 0);
1858 azx_sd_writel(azx_dev, SD_BDLPU, 0);
1859 azx_sd_writel(azx_dev, SD_CTL, 0);
1860 azx_dev->bufsize = 0;
1861 azx_dev->period_bytes = 0;
1862 azx_dev->format_val = 0;
1864 snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
1866 mark_runtime_wc(chip, azx_dev, runtime, false);
1867 return snd_pcm_lib_free_pages(substream);
1870 static int azx_pcm_prepare(struct snd_pcm_substream *substream)
1872 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1873 struct azx *chip = apcm->chip;
1874 struct azx_dev *azx_dev = get_azx_dev(substream);
1875 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1876 struct snd_pcm_runtime *runtime = substream->runtime;
1877 unsigned int bufsize, period_bytes, format_val, stream_tag;
1879 struct hda_spdif_out *spdif =
1880 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
1881 unsigned short ctls = spdif ? spdif->ctls : 0;
1883 azx_stream_reset(chip, azx_dev);
1884 format_val = snd_hda_calc_stream_format(runtime->rate,
1890 snd_printk(KERN_ERR SFX
1891 "invalid format_val, rate=%d, ch=%d, format=%d\n",
1892 runtime->rate, runtime->channels, runtime->format);
1896 bufsize = snd_pcm_lib_buffer_bytes(substream);
1897 period_bytes = snd_pcm_lib_period_bytes(substream);
1899 snd_printdd(SFX "azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
1900 bufsize, format_val);
1902 if (bufsize != azx_dev->bufsize ||
1903 period_bytes != azx_dev->period_bytes ||
1904 format_val != azx_dev->format_val) {
1905 azx_dev->bufsize = bufsize;
1906 azx_dev->period_bytes = period_bytes;
1907 azx_dev->format_val = format_val;
1908 err = azx_setup_periods(chip, substream, azx_dev);
1913 /* wallclk has 24Mhz clock source */
1914 azx_dev->period_wallclk = (((runtime->period_size * 24000) /
1915 runtime->rate) * 1000);
1916 azx_setup_controller(chip, azx_dev);
1917 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1918 azx_dev->fifo_size = azx_sd_readw(azx_dev, SD_FIFOSIZE) + 1;
1920 azx_dev->fifo_size = 0;
1922 stream_tag = azx_dev->stream_tag;
1923 /* CA-IBG chips need the playback stream starting from 1 */
1924 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
1925 stream_tag > chip->capture_streams)
1926 stream_tag -= chip->capture_streams;
1927 return snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
1928 azx_dev->format_val, substream);
1931 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
1933 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1934 struct azx *chip = apcm->chip;
1935 struct azx_dev *azx_dev;
1936 struct snd_pcm_substream *s;
1937 int rstart = 0, start, nsync = 0, sbits = 0;
1941 case SNDRV_PCM_TRIGGER_START:
1943 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1944 case SNDRV_PCM_TRIGGER_RESUME:
1947 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
1948 case SNDRV_PCM_TRIGGER_SUSPEND:
1949 case SNDRV_PCM_TRIGGER_STOP:
1956 snd_pcm_group_for_each_entry(s, substream) {
1957 if (s->pcm->card != substream->pcm->card)
1959 azx_dev = get_azx_dev(s);
1960 sbits |= 1 << azx_dev->index;
1962 snd_pcm_trigger_done(s, substream);
1965 spin_lock(&chip->reg_lock);
1967 /* first, set SYNC bits of corresponding streams */
1968 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
1969 azx_writel(chip, OLD_SSYNC,
1970 azx_readl(chip, OLD_SSYNC) | sbits);
1972 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits);
1974 snd_pcm_group_for_each_entry(s, substream) {
1975 if (s->pcm->card != substream->pcm->card)
1977 azx_dev = get_azx_dev(s);
1979 azx_dev->start_wallclk = azx_readl(chip, WALLCLK);
1981 azx_dev->start_wallclk -=
1982 azx_dev->period_wallclk;
1983 azx_stream_start(chip, azx_dev);
1985 azx_stream_stop(chip, azx_dev);
1987 azx_dev->running = start;
1989 spin_unlock(&chip->reg_lock);
1993 /* wait until all FIFOs get ready */
1994 for (timeout = 5000; timeout; timeout--) {
1996 snd_pcm_group_for_each_entry(s, substream) {
1997 if (s->pcm->card != substream->pcm->card)
1999 azx_dev = get_azx_dev(s);
2000 if (!(azx_sd_readb(azx_dev, SD_STS) &
2009 /* wait until all RUN bits are cleared */
2010 for (timeout = 5000; timeout; timeout--) {
2012 snd_pcm_group_for_each_entry(s, substream) {
2013 if (s->pcm->card != substream->pcm->card)
2015 azx_dev = get_azx_dev(s);
2016 if (azx_sd_readb(azx_dev, SD_CTL) &
2026 spin_lock(&chip->reg_lock);
2027 /* reset SYNC bits */
2028 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
2029 azx_writel(chip, OLD_SSYNC,
2030 azx_readl(chip, OLD_SSYNC) & ~sbits);
2032 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits);
2033 spin_unlock(&chip->reg_lock);
2038 /* get the current DMA position with correction on VIA chips */
2039 static unsigned int azx_via_get_position(struct azx *chip,
2040 struct azx_dev *azx_dev)
2042 unsigned int link_pos, mini_pos, bound_pos;
2043 unsigned int mod_link_pos, mod_dma_pos, mod_mini_pos;
2044 unsigned int fifo_size;
2046 link_pos = azx_sd_readl(azx_dev, SD_LPIB);
2047 if (azx_dev->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
2048 /* Playback, no problem using link position */
2054 * use mod to get the DMA position just like old chipset
2056 mod_dma_pos = le32_to_cpu(*azx_dev->posbuf);
2057 mod_dma_pos %= azx_dev->period_bytes;
2059 /* azx_dev->fifo_size can't get FIFO size of in stream.
2060 * Get from base address + offset.
2062 fifo_size = readw(chip->remap_addr + VIA_IN_STREAM0_FIFO_SIZE_OFFSET);
2064 if (azx_dev->insufficient) {
2065 /* Link position never gather than FIFO size */
2066 if (link_pos <= fifo_size)
2069 azx_dev->insufficient = 0;
2072 if (link_pos <= fifo_size)
2073 mini_pos = azx_dev->bufsize + link_pos - fifo_size;
2075 mini_pos = link_pos - fifo_size;
2077 /* Find nearest previous boudary */
2078 mod_mini_pos = mini_pos % azx_dev->period_bytes;
2079 mod_link_pos = link_pos % azx_dev->period_bytes;
2080 if (mod_link_pos >= fifo_size)
2081 bound_pos = link_pos - mod_link_pos;
2082 else if (mod_dma_pos >= mod_mini_pos)
2083 bound_pos = mini_pos - mod_mini_pos;
2085 bound_pos = mini_pos - mod_mini_pos + azx_dev->period_bytes;
2086 if (bound_pos >= azx_dev->bufsize)
2090 /* Calculate real DMA position we want */
2091 return bound_pos + mod_dma_pos;
2094 static unsigned int azx_get_position(struct azx *chip,
2095 struct azx_dev *azx_dev,
2099 int stream = azx_dev->substream->stream;
2101 switch (chip->position_fix[stream]) {
2104 pos = azx_sd_readl(azx_dev, SD_LPIB);
2106 case POS_FIX_VIACOMBO:
2107 pos = azx_via_get_position(chip, azx_dev);
2110 /* use the position buffer */
2111 pos = le32_to_cpu(*azx_dev->posbuf);
2112 if (with_check && chip->position_fix[stream] == POS_FIX_AUTO) {
2113 if (!pos || pos == (u32)-1) {
2115 "hda-intel: Invalid position buffer, "
2116 "using LPIB read method instead.\n");
2117 chip->position_fix[stream] = POS_FIX_LPIB;
2118 pos = azx_sd_readl(azx_dev, SD_LPIB);
2120 chip->position_fix[stream] = POS_FIX_POSBUF;
2125 if (pos >= azx_dev->bufsize)
2130 static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
2132 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2133 struct azx *chip = apcm->chip;
2134 struct azx_dev *azx_dev = get_azx_dev(substream);
2135 return bytes_to_frames(substream->runtime,
2136 azx_get_position(chip, azx_dev, false));
2140 * Check whether the current DMA position is acceptable for updating
2141 * periods. Returns non-zero if it's OK.
2143 * Many HD-audio controllers appear pretty inaccurate about
2144 * the update-IRQ timing. The IRQ is issued before actually the
2145 * data is processed. So, we need to process it afterwords in a
2148 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
2154 wallclk = azx_readl(chip, WALLCLK) - azx_dev->start_wallclk;
2155 if (wallclk < (azx_dev->period_wallclk * 2) / 3)
2156 return -1; /* bogus (too early) interrupt */
2158 stream = azx_dev->substream->stream;
2159 pos = azx_get_position(chip, azx_dev, true);
2161 if (WARN_ONCE(!azx_dev->period_bytes,
2162 "hda-intel: zero azx_dev->period_bytes"))
2163 return -1; /* this shouldn't happen! */
2164 if (wallclk < (azx_dev->period_wallclk * 5) / 4 &&
2165 pos % azx_dev->period_bytes > azx_dev->period_bytes / 2)
2166 /* NG - it's below the first next period boundary */
2167 return bdl_pos_adj[chip->dev_index] ? 0 : -1;
2168 azx_dev->start_wallclk += wallclk;
2169 return 1; /* OK, it's fine */
2173 * The work for pending PCM period updates.
2175 static void azx_irq_pending_work(struct work_struct *work)
2177 struct azx *chip = container_of(work, struct azx, irq_pending_work);
2180 if (!chip->irq_pending_warned) {
2182 "hda-intel: IRQ timing workaround is activated "
2183 "for card #%d. Suggest a bigger bdl_pos_adj.\n",
2184 chip->card->number);
2185 chip->irq_pending_warned = 1;
2190 spin_lock_irq(&chip->reg_lock);
2191 for (i = 0; i < chip->num_streams; i++) {
2192 struct azx_dev *azx_dev = &chip->azx_dev[i];
2193 if (!azx_dev->irq_pending ||
2194 !azx_dev->substream ||
2197 ok = azx_position_ok(chip, azx_dev);
2199 azx_dev->irq_pending = 0;
2200 spin_unlock(&chip->reg_lock);
2201 snd_pcm_period_elapsed(azx_dev->substream);
2202 spin_lock(&chip->reg_lock);
2203 } else if (ok < 0) {
2204 pending = 0; /* too early */
2208 spin_unlock_irq(&chip->reg_lock);
2215 /* clear irq_pending flags and assure no on-going workq */
2216 static void azx_clear_irq_pending(struct azx *chip)
2220 spin_lock_irq(&chip->reg_lock);
2221 for (i = 0; i < chip->num_streams; i++)
2222 chip->azx_dev[i].irq_pending = 0;
2223 spin_unlock_irq(&chip->reg_lock);
2227 static int azx_pcm_mmap(struct snd_pcm_substream *substream,
2228 struct vm_area_struct *area)
2230 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2231 struct azx *chip = apcm->chip;
2232 if (!azx_snoop(chip))
2233 area->vm_page_prot = pgprot_writecombine(area->vm_page_prot);
2234 return snd_pcm_lib_default_mmap(substream, area);
2237 #define azx_pcm_mmap NULL
2240 static struct snd_pcm_ops azx_pcm_ops = {
2241 .open = azx_pcm_open,
2242 .close = azx_pcm_close,
2243 .ioctl = snd_pcm_lib_ioctl,
2244 .hw_params = azx_pcm_hw_params,
2245 .hw_free = azx_pcm_hw_free,
2246 .prepare = azx_pcm_prepare,
2247 .trigger = azx_pcm_trigger,
2248 .pointer = azx_pcm_pointer,
2249 .mmap = azx_pcm_mmap,
2250 .page = snd_pcm_sgbuf_ops_page,
2253 static void azx_pcm_free(struct snd_pcm *pcm)
2255 struct azx_pcm *apcm = pcm->private_data;
2257 list_del(&apcm->list);
2262 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
2265 azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
2266 struct hda_pcm *cpcm)
2268 struct azx *chip = bus->private_data;
2269 struct snd_pcm *pcm;
2270 struct azx_pcm *apcm;
2271 int pcm_dev = cpcm->device;
2275 list_for_each_entry(apcm, &chip->pcm_list, list) {
2276 if (apcm->pcm->device == pcm_dev) {
2277 snd_printk(KERN_ERR SFX "PCM %d already exists\n", pcm_dev);
2281 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
2282 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
2283 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
2287 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
2288 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
2293 apcm->codec = codec;
2294 pcm->private_data = apcm;
2295 pcm->private_free = azx_pcm_free;
2296 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
2297 pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
2298 list_add_tail(&apcm->list, &chip->pcm_list);
2300 for (s = 0; s < 2; s++) {
2301 apcm->hinfo[s] = &cpcm->stream[s];
2302 if (cpcm->stream[s].substreams)
2303 snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
2305 /* buffer pre-allocation */
2306 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
2307 if (size > MAX_PREALLOC_SIZE)
2308 size = MAX_PREALLOC_SIZE;
2309 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
2310 snd_dma_pci_data(chip->pci),
2311 size, MAX_PREALLOC_SIZE);
2316 * mixer creation - all stuff is implemented in hda module
2318 static int __devinit azx_mixer_create(struct azx *chip)
2320 return snd_hda_build_controls(chip->bus);
2325 * initialize SD streams
2327 static int __devinit azx_init_stream(struct azx *chip)
2331 /* initialize each stream (aka device)
2332 * assign the starting bdl address to each stream (device)
2335 for (i = 0; i < chip->num_streams; i++) {
2336 struct azx_dev *azx_dev = &chip->azx_dev[i];
2337 azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8);
2338 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
2339 azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80);
2340 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
2341 azx_dev->sd_int_sta_mask = 1 << i;
2342 /* stream tag: must be non-zero and unique */
2344 azx_dev->stream_tag = i + 1;
2350 static int azx_acquire_irq(struct azx *chip, int do_disconnect)
2352 if (request_irq(chip->pci->irq, azx_interrupt,
2353 chip->msi ? 0 : IRQF_SHARED,
2354 KBUILD_MODNAME, chip)) {
2355 printk(KERN_ERR "hda-intel: unable to grab IRQ %d, "
2356 "disabling device\n", chip->pci->irq);
2358 snd_card_disconnect(chip->card);
2361 chip->irq = chip->pci->irq;
2362 pci_intx(chip->pci, !chip->msi);
2367 static void azx_stop_chip(struct azx *chip)
2369 if (!chip->initialized)
2372 /* disable interrupts */
2373 azx_int_disable(chip);
2374 azx_int_clear(chip);
2376 /* disable CORB/RIRB */
2377 azx_free_cmd_io(chip);
2379 /* disable position buffer */
2380 azx_writel(chip, DPLBASE, 0);
2381 azx_writel(chip, DPUBASE, 0);
2383 chip->initialized = 0;
2386 #ifdef CONFIG_SND_HDA_POWER_SAVE
2387 /* power-up/down the controller */
2388 static void azx_power_notify(struct hda_bus *bus)
2390 struct azx *chip = bus->private_data;
2391 struct hda_codec *c;
2394 list_for_each_entry(c, &bus->codec_list, list) {
2401 azx_init_chip(chip, 1);
2402 else if (chip->running && power_save_controller &&
2403 !bus->power_keep_link_on)
2404 azx_stop_chip(chip);
2406 #endif /* CONFIG_SND_HDA_POWER_SAVE */
2413 static int azx_suspend(struct device *dev)
2415 struct pci_dev *pci = to_pci_dev(dev);
2416 struct snd_card *card = dev_get_drvdata(dev);
2417 struct azx *chip = card->private_data;
2420 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2421 azx_clear_irq_pending(chip);
2422 list_for_each_entry(p, &chip->pcm_list, list)
2423 snd_pcm_suspend_all(p->pcm);
2424 if (chip->initialized)
2425 snd_hda_suspend(chip->bus);
2426 azx_stop_chip(chip);
2427 if (chip->irq >= 0) {
2428 free_irq(chip->irq, chip);
2432 pci_disable_msi(chip->pci);
2433 pci_disable_device(pci);
2434 pci_save_state(pci);
2435 pci_set_power_state(pci, PCI_D3hot);
2439 static int azx_resume(struct device *dev)
2441 struct pci_dev *pci = to_pci_dev(dev);
2442 struct snd_card *card = dev_get_drvdata(dev);
2443 struct azx *chip = card->private_data;
2445 pci_set_power_state(pci, PCI_D0);
2446 pci_restore_state(pci);
2447 if (pci_enable_device(pci) < 0) {
2448 printk(KERN_ERR "hda-intel: pci_enable_device failed, "
2449 "disabling device\n");
2450 snd_card_disconnect(card);
2453 pci_set_master(pci);
2455 if (pci_enable_msi(pci) < 0)
2457 if (azx_acquire_irq(chip, 1) < 0)
2461 azx_init_chip(chip, 1);
2463 snd_hda_resume(chip->bus);
2464 snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2467 static SIMPLE_DEV_PM_OPS(azx_pm, azx_suspend, azx_resume);
2468 #define AZX_PM_OPS &azx_pm
2470 #define azx_suspend(dev)
2471 #define azx_resume(dev)
2472 #define AZX_PM_OPS NULL
2473 #endif /* CONFIG_PM */
2477 * reboot notifier for hang-up problem at power-down
2479 static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
2481 struct azx *chip = container_of(nb, struct azx, reboot_notifier);
2482 snd_hda_bus_reboot_notify(chip->bus);
2483 azx_stop_chip(chip);
2487 static void azx_notifier_register(struct azx *chip)
2489 chip->reboot_notifier.notifier_call = azx_halt;
2490 register_reboot_notifier(&chip->reboot_notifier);
2493 static void azx_notifier_unregister(struct azx *chip)
2495 if (chip->reboot_notifier.notifier_call)
2496 unregister_reboot_notifier(&chip->reboot_notifier);
2499 static int DELAYED_INIT_MARK azx_first_init(struct azx *chip);
2500 static int DELAYED_INIT_MARK azx_probe_continue(struct azx *chip);
2502 #ifdef SUPPORT_VGA_SWITCHEROO
2503 static struct pci_dev __devinit *get_bound_vga(struct pci_dev *pci);
2505 static void azx_vs_set_state(struct pci_dev *pci,
2506 enum vga_switcheroo_state state)
2508 struct snd_card *card = pci_get_drvdata(pci);
2509 struct azx *chip = card->private_data;
2512 if (chip->init_failed)
2515 disabled = (state == VGA_SWITCHEROO_OFF);
2516 if (chip->disabled == disabled)
2520 chip->disabled = disabled;
2522 snd_printk(KERN_INFO SFX
2523 "%s: Start delayed initialization\n",
2524 pci_name(chip->pci));
2525 if (azx_first_init(chip) < 0 ||
2526 azx_probe_continue(chip) < 0) {
2527 snd_printk(KERN_ERR SFX
2528 "%s: initialization error\n",
2529 pci_name(chip->pci));
2530 chip->init_failed = true;
2534 snd_printk(KERN_INFO SFX
2535 "%s %s via VGA-switcheroo\n",
2536 disabled ? "Disabling" : "Enabling",
2537 pci_name(chip->pci));
2539 azx_suspend(&pci->dev);
2540 chip->disabled = true;
2541 snd_hda_lock_devices(chip->bus);
2543 snd_hda_unlock_devices(chip->bus);
2544 chip->disabled = false;
2545 azx_resume(&pci->dev);
2550 static bool azx_vs_can_switch(struct pci_dev *pci)
2552 struct snd_card *card = pci_get_drvdata(pci);
2553 struct azx *chip = card->private_data;
2555 if (chip->init_failed)
2557 if (chip->disabled || !chip->bus)
2559 if (snd_hda_lock_devices(chip->bus))
2561 snd_hda_unlock_devices(chip->bus);
2565 static void __devinit init_vga_switcheroo(struct azx *chip)
2567 struct pci_dev *p = get_bound_vga(chip->pci);
2569 snd_printk(KERN_INFO SFX
2570 "%s: Handle VGA-switcheroo audio client\n",
2571 pci_name(chip->pci));
2572 chip->use_vga_switcheroo = 1;
2577 static const struct vga_switcheroo_client_ops azx_vs_ops = {
2578 .set_gpu_state = azx_vs_set_state,
2579 .can_switch = azx_vs_can_switch,
2582 static int __devinit register_vga_switcheroo(struct azx *chip)
2584 if (!chip->use_vga_switcheroo)
2586 /* FIXME: currently only handling DIS controller
2587 * is there any machine with two switchable HDMI audio controllers?
2589 return vga_switcheroo_register_audio_client(chip->pci, &azx_vs_ops,
2594 #define init_vga_switcheroo(chip) /* NOP */
2595 #define register_vga_switcheroo(chip) 0
2596 #define check_hdmi_disabled(pci) false
2597 #endif /* SUPPORT_VGA_SWITCHER */
2602 static int azx_free(struct azx *chip)
2606 azx_notifier_unregister(chip);
2608 if (use_vga_switcheroo(chip)) {
2609 if (chip->disabled && chip->bus)
2610 snd_hda_unlock_devices(chip->bus);
2611 vga_switcheroo_unregister_client(chip->pci);
2614 if (chip->initialized) {
2615 azx_clear_irq_pending(chip);
2616 for (i = 0; i < chip->num_streams; i++)
2617 azx_stream_stop(chip, &chip->azx_dev[i]);
2618 azx_stop_chip(chip);
2622 free_irq(chip->irq, (void*)chip);
2624 pci_disable_msi(chip->pci);
2625 if (chip->remap_addr)
2626 iounmap(chip->remap_addr);
2628 if (chip->azx_dev) {
2629 for (i = 0; i < chip->num_streams; i++)
2630 if (chip->azx_dev[i].bdl.area) {
2631 mark_pages_wc(chip, &chip->azx_dev[i].bdl, false);
2632 snd_dma_free_pages(&chip->azx_dev[i].bdl);
2635 if (chip->rb.area) {
2636 mark_pages_wc(chip, &chip->rb, false);
2637 snd_dma_free_pages(&chip->rb);
2639 if (chip->posbuf.area) {
2640 mark_pages_wc(chip, &chip->posbuf, false);
2641 snd_dma_free_pages(&chip->posbuf);
2643 if (chip->region_requested)
2644 pci_release_regions(chip->pci);
2645 pci_disable_device(chip->pci);
2646 kfree(chip->azx_dev);
2647 #ifdef CONFIG_SND_HDA_PATCH_LOADER
2649 release_firmware(chip->fw);
2656 static int azx_dev_free(struct snd_device *device)
2658 return azx_free(device->device_data);
2661 #ifdef SUPPORT_VGA_SWITCHEROO
2663 * Check of disabled HDMI controller by vga-switcheroo
2665 static struct pci_dev __devinit *get_bound_vga(struct pci_dev *pci)
2669 /* check only discrete GPU */
2670 switch (pci->vendor) {
2671 case PCI_VENDOR_ID_ATI:
2672 case PCI_VENDOR_ID_AMD:
2673 case PCI_VENDOR_ID_NVIDIA:
2674 if (pci->devfn == 1) {
2675 p = pci_get_domain_bus_and_slot(pci_domain_nr(pci->bus),
2676 pci->bus->number, 0);
2678 if ((p->class >> 8) == PCI_CLASS_DISPLAY_VGA)
2688 static bool __devinit check_hdmi_disabled(struct pci_dev *pci)
2690 bool vga_inactive = false;
2691 struct pci_dev *p = get_bound_vga(pci);
2694 if (vga_switcheroo_get_client_state(p) == VGA_SWITCHEROO_OFF)
2695 vga_inactive = true;
2698 return vga_inactive;
2700 #endif /* SUPPORT_VGA_SWITCHEROO */
2703 * white/black-listing for position_fix
2705 static struct snd_pci_quirk position_fix_list[] __devinitdata = {
2706 SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
2707 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
2708 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
2709 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
2710 SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
2711 SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),
2712 SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),
2713 SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB),
2714 SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB),
2715 SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB),
2716 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
2717 SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB),
2718 SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB),
2719 SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB),
2723 static int __devinit check_position_fix(struct azx *chip, int fix)
2725 const struct snd_pci_quirk *q;
2729 case POS_FIX_POSBUF:
2730 case POS_FIX_VIACOMBO:
2735 q = snd_pci_quirk_lookup(chip->pci, position_fix_list);
2738 "hda_intel: position_fix set to %d "
2739 "for device %04x:%04x\n",
2740 q->value, q->subvendor, q->subdevice);
2744 /* Check VIA/ATI HD Audio Controller exist */
2745 if (chip->driver_caps & AZX_DCAPS_POSFIX_VIA) {
2746 snd_printd(SFX "Using VIACOMBO position fix\n");
2747 return POS_FIX_VIACOMBO;
2749 if (chip->driver_caps & AZX_DCAPS_POSFIX_LPIB) {
2750 snd_printd(SFX "Using LPIB position fix\n");
2751 return POS_FIX_LPIB;
2753 if (chip->driver_caps & AZX_DCAPS_POSFIX_COMBO) {
2754 snd_printd(SFX "Using COMBO position fix\n");
2755 return POS_FIX_COMBO;
2757 return POS_FIX_AUTO;
2761 * black-lists for probe_mask
2763 static struct snd_pci_quirk probe_mask_list[] __devinitdata = {
2764 /* Thinkpad often breaks the controller communication when accessing
2765 * to the non-working (or non-existing) modem codec slot.
2767 SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01),
2768 SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01),
2769 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01),
2771 SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),
2772 /* including bogus ALC268 in slot#2 that conflicts with ALC888 */
2773 SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),
2774 /* forced codec slots */
2775 SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),
2776 SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),
2777 /* WinFast VP200 H (Teradici) user reported broken communication */
2778 SND_PCI_QUIRK(0x3a21, 0x040d, "WinFast VP200 H", 0x101),
2782 #define AZX_FORCE_CODEC_MASK 0x100
2784 static void __devinit check_probe_mask(struct azx *chip, int dev)
2786 const struct snd_pci_quirk *q;
2788 chip->codec_probe_mask = probe_mask[dev];
2789 if (chip->codec_probe_mask == -1) {
2790 q = snd_pci_quirk_lookup(chip->pci, probe_mask_list);
2793 "hda_intel: probe_mask set to 0x%x "
2794 "for device %04x:%04x\n",
2795 q->value, q->subvendor, q->subdevice);
2796 chip->codec_probe_mask = q->value;
2800 /* check forced option */
2801 if (chip->codec_probe_mask != -1 &&
2802 (chip->codec_probe_mask & AZX_FORCE_CODEC_MASK)) {
2803 chip->codec_mask = chip->codec_probe_mask & 0xff;
2804 printk(KERN_INFO "hda_intel: codec_mask forced to 0x%x\n",
2810 * white/black-list for enable_msi
2812 static struct snd_pci_quirk msi_black_list[] __devinitdata = {
2813 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
2814 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
2815 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
2816 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
2817 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
2821 static void __devinit check_msi(struct azx *chip)
2823 const struct snd_pci_quirk *q;
2825 if (enable_msi >= 0) {
2826 chip->msi = !!enable_msi;
2829 chip->msi = 1; /* enable MSI as default */
2830 q = snd_pci_quirk_lookup(chip->pci, msi_black_list);
2833 "hda_intel: msi for device %04x:%04x set to %d\n",
2834 q->subvendor, q->subdevice, q->value);
2835 chip->msi = q->value;
2839 /* NVidia chipsets seem to cause troubles with MSI */
2840 if (chip->driver_caps & AZX_DCAPS_NO_MSI) {
2841 printk(KERN_INFO "hda_intel: Disabling MSI\n");
2846 /* check the snoop mode availability */
2847 static void __devinit azx_check_snoop_available(struct azx *chip)
2849 bool snoop = chip->snoop;
2851 switch (chip->driver_type) {
2852 case AZX_DRIVER_VIA:
2853 /* force to non-snoop mode for a new VIA controller
2858 pci_read_config_byte(chip->pci, 0x42, &val);
2859 if (!(val & 0x80) && chip->pci->revision == 0x30)
2863 case AZX_DRIVER_ATIHDMI_NS:
2864 /* new ATI HDMI requires non-snoop */
2869 if (snoop != chip->snoop) {
2870 snd_printk(KERN_INFO SFX "Force to %s mode\n",
2871 snoop ? "snoop" : "non-snoop");
2872 chip->snoop = snoop;
2879 static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
2880 int dev, unsigned int driver_caps,
2883 static struct snd_device_ops ops = {
2884 .dev_free = azx_dev_free,
2891 err = pci_enable_device(pci);
2895 chip = kzalloc(sizeof(*chip), GFP_KERNEL);
2897 snd_printk(KERN_ERR SFX "cannot allocate chip\n");
2898 pci_disable_device(pci);
2902 spin_lock_init(&chip->reg_lock);
2903 mutex_init(&chip->open_mutex);
2907 chip->driver_caps = driver_caps;
2908 chip->driver_type = driver_caps & 0xff;
2910 chip->dev_index = dev;
2911 INIT_WORK(&chip->irq_pending_work, azx_irq_pending_work);
2912 INIT_LIST_HEAD(&chip->pcm_list);
2913 init_vga_switcheroo(chip);
2915 chip->position_fix[0] = chip->position_fix[1] =
2916 check_position_fix(chip, position_fix[dev]);
2917 /* combo mode uses LPIB for playback */
2918 if (chip->position_fix[0] == POS_FIX_COMBO) {
2919 chip->position_fix[0] = POS_FIX_LPIB;
2920 chip->position_fix[1] = POS_FIX_AUTO;
2923 check_probe_mask(chip, dev);
2925 chip->single_cmd = single_cmd;
2926 chip->snoop = hda_snoop;
2927 azx_check_snoop_available(chip);
2929 if (bdl_pos_adj[dev] < 0) {
2930 switch (chip->driver_type) {
2931 case AZX_DRIVER_ICH:
2932 case AZX_DRIVER_PCH:
2933 bdl_pos_adj[dev] = 1;
2936 bdl_pos_adj[dev] = 32;
2941 if (check_hdmi_disabled(pci)) {
2942 snd_printk(KERN_INFO SFX "VGA controller for %s is disabled\n",
2944 if (use_vga_switcheroo(chip)) {
2945 snd_printk(KERN_INFO SFX "Delaying initialization\n");
2946 chip->disabled = true;
2950 pci_disable_device(pci);
2954 err = azx_first_init(chip);
2961 err = register_vga_switcheroo(chip);
2963 snd_printk(KERN_ERR SFX
2964 "Error registering VGA-switcheroo client\n");
2969 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
2971 snd_printk(KERN_ERR SFX "Error creating device [card]!\n");
2980 static int DELAYED_INIT_MARK azx_first_init(struct azx *chip)
2982 int dev = chip->dev_index;
2983 struct pci_dev *pci = chip->pci;
2984 struct snd_card *card = chip->card;
2986 unsigned short gcap;
2988 #if BITS_PER_LONG != 64
2989 /* Fix up base address on ULI M5461 */
2990 if (chip->driver_type == AZX_DRIVER_ULI) {
2992 pci_read_config_word(pci, 0x40, &tmp3);
2993 pci_write_config_word(pci, 0x40, tmp3 | 0x10);
2994 pci_write_config_dword(pci, PCI_BASE_ADDRESS_1, 0);
2998 err = pci_request_regions(pci, "ICH HD audio");
3001 chip->region_requested = 1;
3003 chip->addr = pci_resource_start(pci, 0);
3004 chip->remap_addr = pci_ioremap_bar(pci, 0);
3005 if (chip->remap_addr == NULL) {
3006 snd_printk(KERN_ERR SFX "ioremap error\n");
3011 if (pci_enable_msi(pci) < 0)
3014 if (azx_acquire_irq(chip, 0) < 0)
3017 pci_set_master(pci);
3018 synchronize_irq(chip->irq);
3020 gcap = azx_readw(chip, GCAP);
3021 snd_printdd(SFX "chipset global capabilities = 0x%x\n", gcap);
3023 /* disable SB600 64bit support for safety */
3024 if (chip->pci->vendor == PCI_VENDOR_ID_ATI) {
3025 struct pci_dev *p_smbus;
3026 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,
3027 PCI_DEVICE_ID_ATI_SBX00_SMBUS,
3030 if (p_smbus->revision < 0x30)
3031 gcap &= ~ICH6_GCAP_64OK;
3032 pci_dev_put(p_smbus);
3036 /* disable 64bit DMA address on some devices */
3037 if (chip->driver_caps & AZX_DCAPS_NO_64BIT) {
3038 snd_printd(SFX "Disabling 64bit DMA\n");
3039 gcap &= ~ICH6_GCAP_64OK;
3042 /* disable buffer size rounding to 128-byte multiples if supported */
3043 if (align_buffer_size >= 0)
3044 chip->align_buffer_size = !!align_buffer_size;
3046 if (chip->driver_caps & AZX_DCAPS_BUFSIZE)
3047 chip->align_buffer_size = 0;
3048 else if (chip->driver_caps & AZX_DCAPS_ALIGN_BUFSIZE)
3049 chip->align_buffer_size = 1;
3051 chip->align_buffer_size = 1;
3054 /* allow 64bit DMA address if supported by H/W */
3055 if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64)))
3056 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(64));
3058 pci_set_dma_mask(pci, DMA_BIT_MASK(32));
3059 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32));
3062 /* read number of streams from GCAP register instead of using
3065 chip->capture_streams = (gcap >> 8) & 0x0f;
3066 chip->playback_streams = (gcap >> 12) & 0x0f;
3067 if (!chip->playback_streams && !chip->capture_streams) {
3068 /* gcap didn't give any info, switching to old method */
3070 switch (chip->driver_type) {
3071 case AZX_DRIVER_ULI:
3072 chip->playback_streams = ULI_NUM_PLAYBACK;
3073 chip->capture_streams = ULI_NUM_CAPTURE;
3075 case AZX_DRIVER_ATIHDMI:
3076 case AZX_DRIVER_ATIHDMI_NS:
3077 chip->playback_streams = ATIHDMI_NUM_PLAYBACK;
3078 chip->capture_streams = ATIHDMI_NUM_CAPTURE;
3080 case AZX_DRIVER_GENERIC:
3082 chip->playback_streams = ICH6_NUM_PLAYBACK;
3083 chip->capture_streams = ICH6_NUM_CAPTURE;
3087 chip->capture_index_offset = 0;
3088 chip->playback_index_offset = chip->capture_streams;
3089 chip->num_streams = chip->playback_streams + chip->capture_streams;
3090 chip->azx_dev = kcalloc(chip->num_streams, sizeof(*chip->azx_dev),
3092 if (!chip->azx_dev) {
3093 snd_printk(KERN_ERR SFX "cannot malloc azx_dev\n");
3097 for (i = 0; i < chip->num_streams; i++) {
3098 /* allocate memory for the BDL for each stream */
3099 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
3100 snd_dma_pci_data(chip->pci),
3101 BDL_SIZE, &chip->azx_dev[i].bdl);
3103 snd_printk(KERN_ERR SFX "cannot allocate BDL\n");
3106 mark_pages_wc(chip, &chip->azx_dev[i].bdl, true);
3108 /* allocate memory for the position buffer */
3109 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
3110 snd_dma_pci_data(chip->pci),
3111 chip->num_streams * 8, &chip->posbuf);
3113 snd_printk(KERN_ERR SFX "cannot allocate posbuf\n");
3116 mark_pages_wc(chip, &chip->posbuf, true);
3117 /* allocate CORB/RIRB */
3118 err = azx_alloc_cmd_io(chip);
3122 /* initialize streams */
3123 azx_init_stream(chip);
3125 /* initialize chip */
3127 azx_init_chip(chip, (probe_only[dev] & 2) == 0);
3129 /* codec detection */
3130 if (!chip->codec_mask) {
3131 snd_printk(KERN_ERR SFX "no codecs found!\n");
3135 strcpy(card->driver, "HDA-Intel");
3136 strlcpy(card->shortname, driver_short_names[chip->driver_type],
3137 sizeof(card->shortname));
3138 snprintf(card->longname, sizeof(card->longname),
3139 "%s at 0x%lx irq %i",
3140 card->shortname, chip->addr, chip->irq);
3145 static void power_down_all_codecs(struct azx *chip)
3147 #ifdef CONFIG_SND_HDA_POWER_SAVE
3148 /* The codecs were powered up in snd_hda_codec_new().
3149 * Now all initialization done, so turn them down if possible
3151 struct hda_codec *codec;
3152 list_for_each_entry(codec, &chip->bus->codec_list, list) {
3153 snd_hda_power_down(codec);
3158 static int __devinit azx_probe(struct pci_dev *pci,
3159 const struct pci_device_id *pci_id)
3162 struct snd_card *card;
3166 if (dev >= SNDRV_CARDS)
3173 err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
3175 snd_printk(KERN_ERR SFX "Error creating card!\n");
3179 snd_card_set_dev(card, &pci->dev);
3181 err = azx_create(card, pci, dev, pci_id->driver_data, &chip);
3184 card->private_data = chip;
3186 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3187 if (patch[dev] && *patch[dev]) {
3188 snd_printk(KERN_ERR SFX "Applying patch firmware '%s'\n",
3190 err = request_firmware(&chip->fw, patch[dev], &pci->dev);
3194 #endif /* CONFIG_SND_HDA_PATCH_LOADER */
3196 if (!chip->disabled) {
3197 err = azx_probe_continue(chip);
3202 pci_set_drvdata(pci, card);
3208 snd_card_free(card);
3212 static int DELAYED_INIT_MARK azx_probe_continue(struct azx *chip)
3214 int dev = chip->dev_index;
3217 #ifdef CONFIG_SND_HDA_INPUT_BEEP
3218 chip->beep_mode = beep_mode[dev];
3221 /* create codec instances */
3222 err = azx_codec_create(chip, model[dev]);
3225 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3227 err = snd_hda_load_patch(chip->bus, chip->fw->size,
3231 release_firmware(chip->fw); /* no longer needed */
3235 if ((probe_only[dev] & 1) == 0) {
3236 err = azx_codec_configure(chip);
3241 /* create PCM streams */
3242 err = snd_hda_build_pcms(chip->bus);
3246 /* create mixer controls */
3247 err = azx_mixer_create(chip);
3251 err = snd_card_register(chip->card);
3256 power_down_all_codecs(chip);
3257 azx_notifier_register(chip);
3262 chip->init_failed = 1;
3266 static void __devexit azx_remove(struct pci_dev *pci)
3268 struct snd_card *card = pci_get_drvdata(pci);
3270 snd_card_free(card);
3271 pci_set_drvdata(pci, NULL);
3275 static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
3277 { PCI_DEVICE(0x8086, 0x1c20),
3278 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3279 AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_COMBO },
3281 { PCI_DEVICE(0x8086, 0x1d20),
3282 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3285 { PCI_DEVICE(0x8086, 0x1e20),
3286 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3287 AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_COMBO },
3289 { PCI_DEVICE(0x8086, 0x8c20),
3290 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3291 AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_COMBO },
3293 { PCI_DEVICE(0x8086, 0x0c0c),
3294 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
3295 AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_COMBO },
3297 { PCI_DEVICE(0x8086, 0x811b),
3298 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
3299 AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_LPIB }, /* Poulsbo */
3300 { PCI_DEVICE(0x8086, 0x080a),
3301 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
3302 AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_LPIB }, /* Oaktrail */
3304 { PCI_DEVICE(0x8086, 0x2668),
3305 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3306 AZX_DCAPS_BUFSIZE }, /* ICH6 */
3307 { PCI_DEVICE(0x8086, 0x27d8),
3308 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3309 AZX_DCAPS_BUFSIZE }, /* ICH7 */
3310 { PCI_DEVICE(0x8086, 0x269a),
3311 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3312 AZX_DCAPS_BUFSIZE }, /* ESB2 */
3313 { PCI_DEVICE(0x8086, 0x284b),
3314 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3315 AZX_DCAPS_BUFSIZE }, /* ICH8 */
3316 { PCI_DEVICE(0x8086, 0x293e),
3317 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3318 AZX_DCAPS_BUFSIZE }, /* ICH9 */
3319 { PCI_DEVICE(0x8086, 0x293f),
3320 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3321 AZX_DCAPS_BUFSIZE }, /* ICH9 */
3322 { PCI_DEVICE(0x8086, 0x3a3e),
3323 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3324 AZX_DCAPS_BUFSIZE }, /* ICH10 */
3325 { PCI_DEVICE(0x8086, 0x3a6e),
3326 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3327 AZX_DCAPS_BUFSIZE }, /* ICH10 */
3329 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),
3330 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3331 .class_mask = 0xffffff,
3332 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_BUFSIZE },
3333 /* ATI SB 450/600/700/800/900 */
3334 { PCI_DEVICE(0x1002, 0x437b),
3335 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
3336 { PCI_DEVICE(0x1002, 0x4383),
3337 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
3339 { PCI_DEVICE(0x1022, 0x780d),
3340 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
3342 { PCI_DEVICE(0x1002, 0x793b),
3343 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3344 { PCI_DEVICE(0x1002, 0x7919),
3345 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3346 { PCI_DEVICE(0x1002, 0x960f),
3347 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3348 { PCI_DEVICE(0x1002, 0x970f),
3349 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3350 { PCI_DEVICE(0x1002, 0xaa00),
3351 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3352 { PCI_DEVICE(0x1002, 0xaa08),
3353 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3354 { PCI_DEVICE(0x1002, 0xaa10),
3355 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3356 { PCI_DEVICE(0x1002, 0xaa18),
3357 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3358 { PCI_DEVICE(0x1002, 0xaa20),
3359 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3360 { PCI_DEVICE(0x1002, 0xaa28),
3361 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3362 { PCI_DEVICE(0x1002, 0xaa30),
3363 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3364 { PCI_DEVICE(0x1002, 0xaa38),
3365 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3366 { PCI_DEVICE(0x1002, 0xaa40),
3367 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3368 { PCI_DEVICE(0x1002, 0xaa48),
3369 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3370 { PCI_DEVICE(0x1002, 0x9902),
3371 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3372 { PCI_DEVICE(0x1002, 0xaaa0),
3373 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3374 { PCI_DEVICE(0x1002, 0xaaa8),
3375 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3376 { PCI_DEVICE(0x1002, 0xaab0),
3377 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3378 /* VIA VT8251/VT8237A */
3379 { PCI_DEVICE(0x1106, 0x3288),
3380 .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
3381 /* VIA GFX VT7122/VX900 */
3382 { PCI_DEVICE(0x1106, 0x9170), .driver_data = AZX_DRIVER_GENERIC },
3383 /* VIA GFX VT6122/VX11 */
3384 { PCI_DEVICE(0x1106, 0x9140), .driver_data = AZX_DRIVER_GENERIC },
3386 { PCI_DEVICE(0x1039, 0x7502), .driver_data = AZX_DRIVER_SIS },
3388 { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI },
3390 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID),
3391 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3392 .class_mask = 0xffffff,
3393 .driver_data = AZX_DRIVER_NVIDIA | AZX_DCAPS_PRESET_NVIDIA },
3395 { PCI_DEVICE(0x6549, 0x1200),
3396 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
3397 /* Creative X-Fi (CA0110-IBG) */
3399 { PCI_DEVICE(0x1102, 0x0010),
3400 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
3401 { PCI_DEVICE(0x1102, 0x0012),
3402 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
3403 #if !defined(CONFIG_SND_CTXFI) && !defined(CONFIG_SND_CTXFI_MODULE)
3404 /* the following entry conflicts with snd-ctxfi driver,
3405 * as ctxfi driver mutates from HD-audio to native mode with
3406 * a special command sequence.
3408 { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_ANY_ID),
3409 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3410 .class_mask = 0xffffff,
3411 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
3412 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
3414 /* this entry seems still valid -- i.e. without emu20kx chip */
3415 { PCI_DEVICE(0x1102, 0x0009),
3416 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
3417 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
3420 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
3421 /* VMware HDAudio */
3422 { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC },
3423 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */
3424 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID),
3425 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3426 .class_mask = 0xffffff,
3427 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
3428 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_ANY_ID),
3429 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3430 .class_mask = 0xffffff,
3431 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
3434 MODULE_DEVICE_TABLE(pci, azx_ids);
3436 /* pci_driver definition */
3437 static struct pci_driver azx_driver = {
3438 .name = KBUILD_MODNAME,
3439 .id_table = azx_ids,
3441 .remove = __devexit_p(azx_remove),
3447 module_pci_driver(azx_driver);