3 * hda_intel.c - Implementation of primary alsa driver code base
6 * Copyright(c) 2004 Intel Corporation. All rights reserved.
8 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
9 * PeiSen Hou <pshou@realtek.com.tw>
11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the Free
13 * Software Foundation; either version 2 of the License, or (at your option)
16 * This program is distributed in the hope that it will be useful, but WITHOUT
17 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
21 * You should have received a copy of the GNU General Public License along with
22 * this program; if not, write to the Free Software Foundation, Inc., 59
23 * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 * Matt Jared matt.jared@intel.com
28 * Andy Kopp andy.kopp@intel.com
29 * Dan Kogan dan.d.kogan@intel.com
33 * 2004.12.01 Major rewrite by tiwai, merged the work of pshou
37 #include <linux/delay.h>
38 #include <linux/interrupt.h>
39 #include <linux/kernel.h>
40 #include <linux/module.h>
41 #include <linux/dma-mapping.h>
42 #include <linux/moduleparam.h>
43 #include <linux/init.h>
44 #include <linux/slab.h>
45 #include <linux/pci.h>
46 #include <linux/mutex.h>
47 #include <linux/reboot.h>
49 #include <linux/pm_runtime.h>
50 #include <linux/clocksource.h>
51 #include <linux/time.h>
52 #include <linux/completion.h>
55 /* for snoop control */
56 #include <asm/pgtable.h>
57 #include <asm/cacheflush.h>
59 #include <sound/core.h>
60 #include <sound/initval.h>
61 #include <linux/vgaarb.h>
62 #include <linux/vga_switcheroo.h>
63 #include <linux/firmware.h>
64 #include "hda_codec.h"
67 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
68 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
69 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
70 static char *model[SNDRV_CARDS];
71 static int position_fix[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
72 static int bdl_pos_adj[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
73 static int probe_mask[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
74 static int probe_only[SNDRV_CARDS];
75 static int jackpoll_ms[SNDRV_CARDS];
76 static bool single_cmd;
77 static int enable_msi = -1;
78 #ifdef CONFIG_SND_HDA_PATCH_LOADER
79 static char *patch[SNDRV_CARDS];
81 #ifdef CONFIG_SND_HDA_INPUT_BEEP
82 static bool beep_mode[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] =
83 CONFIG_SND_HDA_INPUT_BEEP_MODE};
86 module_param_array(index, int, NULL, 0444);
87 MODULE_PARM_DESC(index, "Index value for Intel HD audio interface.");
88 module_param_array(id, charp, NULL, 0444);
89 MODULE_PARM_DESC(id, "ID string for Intel HD audio interface.");
90 module_param_array(enable, bool, NULL, 0444);
91 MODULE_PARM_DESC(enable, "Enable Intel HD audio interface.");
92 module_param_array(model, charp, NULL, 0444);
93 MODULE_PARM_DESC(model, "Use the given board model.");
94 module_param_array(position_fix, int, NULL, 0444);
95 MODULE_PARM_DESC(position_fix, "DMA pointer read method."
96 "(-1 = system default, 0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO).");
97 module_param_array(bdl_pos_adj, int, NULL, 0644);
98 MODULE_PARM_DESC(bdl_pos_adj, "BDL position adjustment offset.");
99 module_param_array(probe_mask, int, NULL, 0444);
100 MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1).");
101 module_param_array(probe_only, int, NULL, 0444);
102 MODULE_PARM_DESC(probe_only, "Only probing and no codec initialization.");
103 module_param_array(jackpoll_ms, int, NULL, 0444);
104 MODULE_PARM_DESC(jackpoll_ms, "Ms between polling for jack events (default = 0, using unsol events only)");
105 module_param(single_cmd, bool, 0444);
106 MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs "
107 "(for debugging only).");
108 module_param(enable_msi, bint, 0444);
109 MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)");
110 #ifdef CONFIG_SND_HDA_PATCH_LOADER
111 module_param_array(patch, charp, NULL, 0444);
112 MODULE_PARM_DESC(patch, "Patch file for Intel HD audio interface.");
114 #ifdef CONFIG_SND_HDA_INPUT_BEEP
115 module_param_array(beep_mode, bool, NULL, 0444);
116 MODULE_PARM_DESC(beep_mode, "Select HDA Beep registration mode "
117 "(0=off, 1=on) (default=1).");
121 static int param_set_xint(const char *val, const struct kernel_param *kp);
122 static struct kernel_param_ops param_ops_xint = {
123 .set = param_set_xint,
124 .get = param_get_int,
126 #define param_check_xint param_check_int
128 static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
129 module_param(power_save, xint, 0644);
130 MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
131 "(in second, 0 = disable).");
133 /* reset the HD-audio controller in power save mode.
134 * this may give more power-saving, but will take longer time to
137 static bool power_save_controller = 1;
138 module_param(power_save_controller, bool, 0644);
139 MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
140 #endif /* CONFIG_PM */
142 static int align_buffer_size = -1;
143 module_param(align_buffer_size, bint, 0644);
144 MODULE_PARM_DESC(align_buffer_size,
145 "Force buffer and period sizes to be multiple of 128 bytes.");
148 static bool hda_snoop = true;
149 module_param_named(snoop, hda_snoop, bool, 0444);
150 MODULE_PARM_DESC(snoop, "Enable/disable snooping");
151 #define azx_snoop(chip) (chip)->snoop
153 #define hda_snoop true
154 #define azx_snoop(chip) true
158 MODULE_LICENSE("GPL");
159 MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
190 MODULE_DESCRIPTION("Intel HDA driver");
192 #ifdef CONFIG_SND_VERBOSE_PRINTK
193 #define SFX /* nop */
195 #define SFX "hda-intel "
198 #if defined(CONFIG_PM) && defined(CONFIG_VGA_SWITCHEROO)
199 #ifdef CONFIG_SND_HDA_CODEC_HDMI
200 #define SUPPORT_VGA_SWITCHEROO
208 #define ICH6_REG_GCAP 0x00
209 #define ICH6_GCAP_64OK (1 << 0) /* 64bit address support */
210 #define ICH6_GCAP_NSDO (3 << 1) /* # of serial data out signals */
211 #define ICH6_GCAP_BSS (31 << 3) /* # of bidirectional streams */
212 #define ICH6_GCAP_ISS (15 << 8) /* # of input streams */
213 #define ICH6_GCAP_OSS (15 << 12) /* # of output streams */
214 #define ICH6_REG_VMIN 0x02
215 #define ICH6_REG_VMAJ 0x03
216 #define ICH6_REG_OUTPAY 0x04
217 #define ICH6_REG_INPAY 0x06
218 #define ICH6_REG_GCTL 0x08
219 #define ICH6_GCTL_RESET (1 << 0) /* controller reset */
220 #define ICH6_GCTL_FCNTRL (1 << 1) /* flush control */
221 #define ICH6_GCTL_UNSOL (1 << 8) /* accept unsol. response enable */
222 #define ICH6_REG_WAKEEN 0x0c
223 #define ICH6_REG_STATESTS 0x0e
224 #define ICH6_REG_GSTS 0x10
225 #define ICH6_GSTS_FSTS (1 << 1) /* flush status */
226 #define ICH6_REG_INTCTL 0x20
227 #define ICH6_REG_INTSTS 0x24
228 #define ICH6_REG_WALLCLK 0x30 /* 24Mhz source */
229 #define ICH6_REG_OLD_SSYNC 0x34 /* SSYNC for old ICH */
230 #define ICH6_REG_SSYNC 0x38
231 #define ICH6_REG_CORBLBASE 0x40
232 #define ICH6_REG_CORBUBASE 0x44
233 #define ICH6_REG_CORBWP 0x48
234 #define ICH6_REG_CORBRP 0x4a
235 #define ICH6_CORBRP_RST (1 << 15) /* read pointer reset */
236 #define ICH6_REG_CORBCTL 0x4c
237 #define ICH6_CORBCTL_RUN (1 << 1) /* enable DMA */
238 #define ICH6_CORBCTL_CMEIE (1 << 0) /* enable memory error irq */
239 #define ICH6_REG_CORBSTS 0x4d
240 #define ICH6_CORBSTS_CMEI (1 << 0) /* memory error indication */
241 #define ICH6_REG_CORBSIZE 0x4e
243 #define ICH6_REG_RIRBLBASE 0x50
244 #define ICH6_REG_RIRBUBASE 0x54
245 #define ICH6_REG_RIRBWP 0x58
246 #define ICH6_RIRBWP_RST (1 << 15) /* write pointer reset */
247 #define ICH6_REG_RINTCNT 0x5a
248 #define ICH6_REG_RIRBCTL 0x5c
249 #define ICH6_RBCTL_IRQ_EN (1 << 0) /* enable IRQ */
250 #define ICH6_RBCTL_DMA_EN (1 << 1) /* enable DMA */
251 #define ICH6_RBCTL_OVERRUN_EN (1 << 2) /* enable overrun irq */
252 #define ICH6_REG_RIRBSTS 0x5d
253 #define ICH6_RBSTS_IRQ (1 << 0) /* response irq */
254 #define ICH6_RBSTS_OVERRUN (1 << 2) /* overrun irq */
255 #define ICH6_REG_RIRBSIZE 0x5e
257 #define ICH6_REG_IC 0x60
258 #define ICH6_REG_IR 0x64
259 #define ICH6_REG_IRS 0x68
260 #define ICH6_IRS_VALID (1<<1)
261 #define ICH6_IRS_BUSY (1<<0)
263 #define ICH6_REG_DPLBASE 0x70
264 #define ICH6_REG_DPUBASE 0x74
265 #define ICH6_DPLBASE_ENABLE 0x1 /* Enable position buffer */
267 /* SD offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
268 enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
270 /* stream register offsets from stream base */
271 #define ICH6_REG_SD_CTL 0x00
272 #define ICH6_REG_SD_STS 0x03
273 #define ICH6_REG_SD_LPIB 0x04
274 #define ICH6_REG_SD_CBL 0x08
275 #define ICH6_REG_SD_LVI 0x0c
276 #define ICH6_REG_SD_FIFOW 0x0e
277 #define ICH6_REG_SD_FIFOSIZE 0x10
278 #define ICH6_REG_SD_FORMAT 0x12
279 #define ICH6_REG_SD_BDLPL 0x18
280 #define ICH6_REG_SD_BDLPU 0x1c
283 #define ICH6_PCIREG_TCSEL 0x44
289 /* max number of SDs */
290 /* ICH, ATI and VIA have 4 playback and 4 capture */
291 #define ICH6_NUM_CAPTURE 4
292 #define ICH6_NUM_PLAYBACK 4
294 /* ULI has 6 playback and 5 capture */
295 #define ULI_NUM_CAPTURE 5
296 #define ULI_NUM_PLAYBACK 6
298 /* ATI HDMI has 1 playback and 0 capture */
299 #define ATIHDMI_NUM_CAPTURE 0
300 #define ATIHDMI_NUM_PLAYBACK 1
302 /* TERA has 4 playback and 3 capture */
303 #define TERA_NUM_CAPTURE 3
304 #define TERA_NUM_PLAYBACK 4
306 /* this number is statically defined for simplicity */
307 #define MAX_AZX_DEV 16
309 /* max number of fragments - we may use more if allocating more pages for BDL */
310 #define BDL_SIZE 4096
311 #define AZX_MAX_BDL_ENTRIES (BDL_SIZE / 16)
312 #define AZX_MAX_FRAG 32
313 /* max buffer size - no h/w limit, you can increase as you like */
314 #define AZX_MAX_BUF_SIZE (1024*1024*1024)
316 /* RIRB int mask: overrun[2], response[0] */
317 #define RIRB_INT_RESPONSE 0x01
318 #define RIRB_INT_OVERRUN 0x04
319 #define RIRB_INT_MASK 0x05
321 /* STATESTS int mask: S3,SD2,SD1,SD0 */
322 #define AZX_MAX_CODECS 8
323 #define AZX_DEFAULT_CODECS 4
324 #define STATESTS_INT_MASK ((1 << AZX_MAX_CODECS) - 1)
327 #define SD_CTL_STREAM_RESET 0x01 /* stream reset bit */
328 #define SD_CTL_DMA_START 0x02 /* stream DMA start bit */
329 #define SD_CTL_STRIPE (3 << 16) /* stripe control */
330 #define SD_CTL_TRAFFIC_PRIO (1 << 18) /* traffic priority */
331 #define SD_CTL_DIR (1 << 19) /* bi-directional stream */
332 #define SD_CTL_STREAM_TAG_MASK (0xf << 20)
333 #define SD_CTL_STREAM_TAG_SHIFT 20
335 /* SD_CTL and SD_STS */
336 #define SD_INT_DESC_ERR 0x10 /* descriptor error interrupt */
337 #define SD_INT_FIFO_ERR 0x08 /* FIFO error interrupt */
338 #define SD_INT_COMPLETE 0x04 /* completion interrupt */
339 #define SD_INT_MASK (SD_INT_DESC_ERR|SD_INT_FIFO_ERR|\
343 #define SD_STS_FIFO_READY 0x20 /* FIFO ready */
345 /* INTCTL and INTSTS */
346 #define ICH6_INT_ALL_STREAM 0xff /* all stream interrupts */
347 #define ICH6_INT_CTRL_EN 0x40000000 /* controller interrupt enable bit */
348 #define ICH6_INT_GLOBAL_EN 0x80000000 /* global interrupt enable bit */
350 /* below are so far hardcoded - should read registers in future */
351 #define ICH6_MAX_CORB_ENTRIES 256
352 #define ICH6_MAX_RIRB_ENTRIES 256
354 /* position fix mode */
363 /* Defines for ATI HD Audio support in SB450 south bridge */
364 #define ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR 0x42
365 #define ATI_SB450_HDAUDIO_ENABLE_SNOOP 0x02
367 /* Defines for Nvidia HDA support */
368 #define NVIDIA_HDA_TRANSREG_ADDR 0x4e
369 #define NVIDIA_HDA_ENABLE_COHBITS 0x0f
370 #define NVIDIA_HDA_ISTRM_COH 0x4d
371 #define NVIDIA_HDA_OSTRM_COH 0x4c
372 #define NVIDIA_HDA_ENABLE_COHBIT 0x01
374 /* Defines for Intel SCH HDA snoop control */
375 #define INTEL_SCH_HDA_DEVC 0x78
376 #define INTEL_SCH_HDA_DEVC_NOSNOOP (0x1<<11)
378 /* Define IN stream 0 FIFO size offset in VIA controller */
379 #define VIA_IN_STREAM0_FIFO_SIZE_OFFSET 0x90
380 /* Define VIA HD Audio Device ID*/
381 #define VIA_HDAC_DEVICE_ID 0x3288
383 /* HD Audio class code */
384 #define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
390 struct snd_dma_buffer bdl; /* BDL buffer */
391 u32 *posbuf; /* position buffer pointer */
393 unsigned int bufsize; /* size of the play buffer in bytes */
394 unsigned int period_bytes; /* size of the period in bytes */
395 unsigned int frags; /* number for period in the play buffer */
396 unsigned int fifo_size; /* FIFO size */
397 unsigned long start_wallclk; /* start + minimum wallclk */
398 unsigned long period_wallclk; /* wallclk for period */
400 void __iomem *sd_addr; /* stream descriptor pointer */
402 u32 sd_int_sta_mask; /* stream int status mask */
405 struct snd_pcm_substream *substream; /* assigned substream,
408 unsigned int format_val; /* format value to be set in the
409 * controller and the codec
411 unsigned char stream_tag; /* assigned stream */
412 unsigned char index; /* stream index */
413 int assigned_key; /* last device# key assigned to */
415 unsigned int opened :1;
416 unsigned int running :1;
417 unsigned int irq_pending :1;
418 unsigned int prepared:1;
419 unsigned int locked:1;
422 * A flag to ensure DMA position is 0
423 * when link position is not greater than FIFO size
425 unsigned int insufficient :1;
426 unsigned int wc_marked:1;
427 unsigned int no_period_wakeup:1;
429 struct timecounter azx_tc;
430 struct cyclecounter azx_cc;
432 #ifdef CONFIG_SND_HDA_DSP_LOADER
433 struct mutex dsp_mutex;
437 /* DSP lock helpers */
438 #ifdef CONFIG_SND_HDA_DSP_LOADER
439 #define dsp_lock_init(dev) mutex_init(&(dev)->dsp_mutex)
440 #define dsp_lock(dev) mutex_lock(&(dev)->dsp_mutex)
441 #define dsp_unlock(dev) mutex_unlock(&(dev)->dsp_mutex)
442 #define dsp_is_locked(dev) ((dev)->locked)
444 #define dsp_lock_init(dev) do {} while (0)
445 #define dsp_lock(dev) do {} while (0)
446 #define dsp_unlock(dev) do {} while (0)
447 #define dsp_is_locked(dev) 0
452 u32 *buf; /* CORB/RIRB buffer
453 * Each CORB entry is 4byte, RIRB is 8byte
455 dma_addr_t addr; /* physical address of CORB/RIRB buffer */
457 unsigned short rp, wp; /* read/write pointers */
458 int cmds[AZX_MAX_CODECS]; /* number of pending requests */
459 u32 res[AZX_MAX_CODECS]; /* last read value */
465 struct hda_codec *codec;
466 struct hda_pcm_stream *hinfo[2];
467 struct list_head list;
471 struct snd_card *card;
475 /* chip type specific */
477 unsigned int driver_caps;
478 int playback_streams;
479 int playback_index_offset;
481 int capture_index_offset;
486 void __iomem *remap_addr;
491 struct mutex open_mutex;
492 struct completion probe_wait;
494 /* streams (x num_streams) */
495 struct azx_dev *azx_dev;
498 struct list_head pcm_list; /* azx_pcm list */
501 unsigned short codec_mask;
502 int codec_probe_mask; /* copied from probe_mask option */
504 unsigned int beep_mode;
510 /* CORB/RIRB and position buffers */
511 struct snd_dma_buffer rb;
512 struct snd_dma_buffer posbuf;
514 #ifdef CONFIG_SND_HDA_PATCH_LOADER
515 const struct firmware *fw;
519 int position_fix[2]; /* for both playback/capture streams */
521 unsigned int running :1;
522 unsigned int initialized :1;
523 unsigned int single_cmd :1;
524 unsigned int polling_mode :1;
526 unsigned int irq_pending_warned :1;
527 unsigned int probing :1; /* codec probing phase */
528 unsigned int snoop:1;
529 unsigned int align_buffer_size:1;
530 unsigned int region_requested:1;
532 /* VGA-switcheroo setup */
533 unsigned int use_vga_switcheroo:1;
534 unsigned int vga_switcheroo_registered:1;
535 unsigned int init_failed:1; /* delayed init failed */
536 unsigned int disabled:1; /* disabled by VGA-switcher */
539 unsigned int last_cmd[AZX_MAX_CODECS];
541 /* for pending irqs */
542 struct work_struct irq_pending_work;
544 /* reboot notifier (for mysterious hangup problem at power-down) */
545 struct notifier_block reboot_notifier;
547 /* card list (for power_save trigger) */
548 struct list_head list;
550 #ifdef CONFIG_SND_HDA_DSP_LOADER
551 struct azx_dev saved_azx_dev;
555 #define CREATE_TRACE_POINTS
556 #include "hda_intel_trace.h"
565 AZX_DRIVER_ATIHDMI_NS,
574 AZX_NUM_DRIVERS, /* keep this as last entry */
577 /* driver quirks (capabilities) */
578 /* bits 0-7 are used for indicating driver type */
579 #define AZX_DCAPS_NO_TCSEL (1 << 8) /* No Intel TCSEL bit */
580 #define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
581 #define AZX_DCAPS_ATI_SNOOP (1 << 10) /* ATI snoop enable */
582 #define AZX_DCAPS_NVIDIA_SNOOP (1 << 11) /* Nvidia snoop enable */
583 #define AZX_DCAPS_SCH_SNOOP (1 << 12) /* SCH/PCH snoop enable */
584 #define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */
585 #define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */
586 #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
587 #define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */
588 #define AZX_DCAPS_POSFIX_VIA (1 << 17) /* Use VIACOMBO as default */
589 #define AZX_DCAPS_NO_64BIT (1 << 18) /* No 64bit address */
590 #define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */
591 #define AZX_DCAPS_OLD_SSYNC (1 << 20) /* Old SSYNC reg for ICH */
592 #define AZX_DCAPS_BUFSIZE (1 << 21) /* no buffer size alignment */
593 #define AZX_DCAPS_ALIGN_BUFSIZE (1 << 22) /* buffer size alignment */
594 #define AZX_DCAPS_4K_BDLE_BOUNDARY (1 << 23) /* BDLE in 4k boundary */
595 #define AZX_DCAPS_COUNT_LPIB_DELAY (1 << 25) /* Take LPIB as delay */
596 #define AZX_DCAPS_PM_RUNTIME (1 << 26) /* runtime PM support */
598 /* quirks for Intel PCH */
599 #define AZX_DCAPS_INTEL_PCH_NOPM \
600 (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_BUFSIZE | \
601 AZX_DCAPS_COUNT_LPIB_DELAY)
603 #define AZX_DCAPS_INTEL_PCH \
604 (AZX_DCAPS_INTEL_PCH_NOPM | AZX_DCAPS_PM_RUNTIME)
606 /* quirks for ATI SB / AMD Hudson */
607 #define AZX_DCAPS_PRESET_ATI_SB \
608 (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
609 AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
611 /* quirks for ATI/AMD HDMI */
612 #define AZX_DCAPS_PRESET_ATI_HDMI \
613 (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
615 /* quirks for Nvidia */
616 #define AZX_DCAPS_PRESET_NVIDIA \
617 (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
618 AZX_DCAPS_ALIGN_BUFSIZE | AZX_DCAPS_NO_64BIT)
620 #define AZX_DCAPS_PRESET_CTHDA \
621 (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_4K_BDLE_BOUNDARY)
624 * VGA-switcher support
626 #ifdef SUPPORT_VGA_SWITCHEROO
627 #define use_vga_switcheroo(chip) ((chip)->use_vga_switcheroo)
629 #define use_vga_switcheroo(chip) 0
632 static char *driver_short_names[] = {
633 [AZX_DRIVER_ICH] = "HDA Intel",
634 [AZX_DRIVER_PCH] = "HDA Intel PCH",
635 [AZX_DRIVER_SCH] = "HDA Intel MID",
636 [AZX_DRIVER_ATI] = "HDA ATI SB",
637 [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI",
638 [AZX_DRIVER_ATIHDMI_NS] = "HDA ATI HDMI",
639 [AZX_DRIVER_VIA] = "HDA VIA VT82xx",
640 [AZX_DRIVER_SIS] = "HDA SIS966",
641 [AZX_DRIVER_ULI] = "HDA ULI M5461",
642 [AZX_DRIVER_NVIDIA] = "HDA NVidia",
643 [AZX_DRIVER_TERA] = "HDA Teradici",
644 [AZX_DRIVER_CTX] = "HDA Creative",
645 [AZX_DRIVER_CTHDA] = "HDA Creative",
646 [AZX_DRIVER_GENERIC] = "HD-Audio Generic",
650 * macros for easy use
652 #define azx_writel(chip,reg,value) \
653 writel(value, (chip)->remap_addr + ICH6_REG_##reg)
654 #define azx_readl(chip,reg) \
655 readl((chip)->remap_addr + ICH6_REG_##reg)
656 #define azx_writew(chip,reg,value) \
657 writew(value, (chip)->remap_addr + ICH6_REG_##reg)
658 #define azx_readw(chip,reg) \
659 readw((chip)->remap_addr + ICH6_REG_##reg)
660 #define azx_writeb(chip,reg,value) \
661 writeb(value, (chip)->remap_addr + ICH6_REG_##reg)
662 #define azx_readb(chip,reg) \
663 readb((chip)->remap_addr + ICH6_REG_##reg)
665 #define azx_sd_writel(dev,reg,value) \
666 writel(value, (dev)->sd_addr + ICH6_REG_##reg)
667 #define azx_sd_readl(dev,reg) \
668 readl((dev)->sd_addr + ICH6_REG_##reg)
669 #define azx_sd_writew(dev,reg,value) \
670 writew(value, (dev)->sd_addr + ICH6_REG_##reg)
671 #define azx_sd_readw(dev,reg) \
672 readw((dev)->sd_addr + ICH6_REG_##reg)
673 #define azx_sd_writeb(dev,reg,value) \
674 writeb(value, (dev)->sd_addr + ICH6_REG_##reg)
675 #define azx_sd_readb(dev,reg) \
676 readb((dev)->sd_addr + ICH6_REG_##reg)
678 /* for pcm support */
679 #define get_azx_dev(substream) (substream->runtime->private_data)
682 static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool on)
688 if (!dmab || !dmab->area || !dmab->bytes)
691 #ifdef CONFIG_SND_DMA_SGBUF
692 if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_SG) {
693 struct snd_sg_buf *sgbuf = dmab->private_data;
695 set_pages_array_wc(sgbuf->page_table, sgbuf->pages);
697 set_pages_array_wb(sgbuf->page_table, sgbuf->pages);
702 pages = (dmab->bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;
704 set_memory_wc((unsigned long)dmab->area, pages);
706 set_memory_wb((unsigned long)dmab->area, pages);
709 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
712 __mark_pages_wc(chip, buf, on);
714 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
715 struct snd_pcm_substream *substream, bool on)
717 if (azx_dev->wc_marked != on) {
718 __mark_pages_wc(chip, snd_pcm_get_dma_buf(substream), on);
719 azx_dev->wc_marked = on;
723 /* NOP for other archs */
724 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
728 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
729 struct snd_pcm_substream *substream, bool on)
734 static int azx_acquire_irq(struct azx *chip, int do_disconnect);
735 static int azx_send_cmd(struct hda_bus *bus, unsigned int val);
737 * Interface for HD codec
741 * CORB / RIRB interface
743 static int azx_alloc_cmd_io(struct azx *chip)
747 /* single page (at least 4096 bytes) must suffice for both ringbuffes */
748 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
749 snd_dma_pci_data(chip->pci),
750 PAGE_SIZE, &chip->rb);
752 snd_printk(KERN_ERR SFX "%s: cannot allocate CORB/RIRB\n", pci_name(chip->pci));
755 mark_pages_wc(chip, &chip->rb, true);
759 static void azx_init_cmd_io(struct azx *chip)
761 spin_lock_irq(&chip->reg_lock);
763 chip->corb.addr = chip->rb.addr;
764 chip->corb.buf = (u32 *)chip->rb.area;
765 azx_writel(chip, CORBLBASE, (u32)chip->corb.addr);
766 azx_writel(chip, CORBUBASE, upper_32_bits(chip->corb.addr));
768 /* set the corb size to 256 entries (ULI requires explicitly) */
769 azx_writeb(chip, CORBSIZE, 0x02);
770 /* set the corb write pointer to 0 */
771 azx_writew(chip, CORBWP, 0);
772 /* reset the corb hw read pointer */
773 azx_writew(chip, CORBRP, ICH6_CORBRP_RST);
774 /* enable corb dma */
775 azx_writeb(chip, CORBCTL, ICH6_CORBCTL_RUN);
778 chip->rirb.addr = chip->rb.addr + 2048;
779 chip->rirb.buf = (u32 *)(chip->rb.area + 2048);
780 chip->rirb.wp = chip->rirb.rp = 0;
781 memset(chip->rirb.cmds, 0, sizeof(chip->rirb.cmds));
782 azx_writel(chip, RIRBLBASE, (u32)chip->rirb.addr);
783 azx_writel(chip, RIRBUBASE, upper_32_bits(chip->rirb.addr));
785 /* set the rirb size to 256 entries (ULI requires explicitly) */
786 azx_writeb(chip, RIRBSIZE, 0x02);
787 /* reset the rirb hw write pointer */
788 azx_writew(chip, RIRBWP, ICH6_RIRBWP_RST);
789 /* set N=1, get RIRB response interrupt for new entry */
790 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
791 azx_writew(chip, RINTCNT, 0xc0);
793 azx_writew(chip, RINTCNT, 1);
794 /* enable rirb dma and response irq */
795 azx_writeb(chip, RIRBCTL, ICH6_RBCTL_DMA_EN | ICH6_RBCTL_IRQ_EN);
796 spin_unlock_irq(&chip->reg_lock);
799 static void azx_free_cmd_io(struct azx *chip)
801 spin_lock_irq(&chip->reg_lock);
802 /* disable ringbuffer DMAs */
803 azx_writeb(chip, RIRBCTL, 0);
804 azx_writeb(chip, CORBCTL, 0);
805 spin_unlock_irq(&chip->reg_lock);
808 static unsigned int azx_command_addr(u32 cmd)
810 unsigned int addr = cmd >> 28;
812 if (addr >= AZX_MAX_CODECS) {
820 static unsigned int azx_response_addr(u32 res)
822 unsigned int addr = res & 0xf;
824 if (addr >= AZX_MAX_CODECS) {
833 static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
835 struct azx *chip = bus->private_data;
836 unsigned int addr = azx_command_addr(val);
839 spin_lock_irq(&chip->reg_lock);
841 /* add command to corb */
842 wp = azx_readw(chip, CORBWP);
844 /* something wrong, controller likely turned to D3 */
845 spin_unlock_irq(&chip->reg_lock);
849 wp %= ICH6_MAX_CORB_ENTRIES;
851 rp = azx_readw(chip, CORBRP);
853 /* oops, it's full */
854 spin_unlock_irq(&chip->reg_lock);
858 chip->rirb.cmds[addr]++;
859 chip->corb.buf[wp] = cpu_to_le32(val);
860 azx_writel(chip, CORBWP, wp);
862 spin_unlock_irq(&chip->reg_lock);
867 #define ICH6_RIRB_EX_UNSOL_EV (1<<4)
869 /* retrieve RIRB entry - called from interrupt handler */
870 static void azx_update_rirb(struct azx *chip)
876 wp = azx_readw(chip, RIRBWP);
878 /* something wrong, controller likely turned to D3 */
882 if (wp == chip->rirb.wp)
886 while (chip->rirb.rp != wp) {
888 chip->rirb.rp %= ICH6_MAX_RIRB_ENTRIES;
890 rp = chip->rirb.rp << 1; /* an RIRB entry is 8-bytes */
891 res_ex = le32_to_cpu(chip->rirb.buf[rp + 1]);
892 res = le32_to_cpu(chip->rirb.buf[rp]);
893 addr = azx_response_addr(res_ex);
894 if (res_ex & ICH6_RIRB_EX_UNSOL_EV)
895 snd_hda_queue_unsol_event(chip->bus, res, res_ex);
896 else if (chip->rirb.cmds[addr]) {
897 chip->rirb.res[addr] = res;
899 chip->rirb.cmds[addr]--;
901 snd_printk(KERN_ERR SFX "%s: spurious response %#x:%#x, "
905 chip->last_cmd[addr]);
909 /* receive a response */
910 static unsigned int azx_rirb_get_response(struct hda_bus *bus,
913 struct azx *chip = bus->private_data;
914 unsigned long timeout;
915 unsigned long loopcounter;
919 timeout = jiffies + msecs_to_jiffies(1000);
921 for (loopcounter = 0;; loopcounter++) {
922 if (chip->polling_mode || do_poll) {
923 spin_lock_irq(&chip->reg_lock);
924 azx_update_rirb(chip);
925 spin_unlock_irq(&chip->reg_lock);
927 if (!chip->rirb.cmds[addr]) {
932 chip->poll_count = 0;
933 return chip->rirb.res[addr]; /* the last value */
935 if (time_after(jiffies, timeout))
937 if (bus->needs_damn_long_delay || loopcounter > 3000)
938 msleep(2); /* temporary workaround */
945 if (!bus->no_response_fallback)
948 if (!chip->polling_mode && chip->poll_count < 2) {
949 snd_printdd(SFX "%s: azx_get_response timeout, "
950 "polling the codec once: last cmd=0x%08x\n",
951 pci_name(chip->pci), chip->last_cmd[addr]);
958 if (!chip->polling_mode) {
959 snd_printk(KERN_WARNING SFX "%s: azx_get_response timeout, "
960 "switching to polling mode: last cmd=0x%08x\n",
961 pci_name(chip->pci), chip->last_cmd[addr]);
962 chip->polling_mode = 1;
967 snd_printk(KERN_WARNING SFX "%s: No response from codec, "
968 "disabling MSI: last cmd=0x%08x\n",
969 pci_name(chip->pci), chip->last_cmd[addr]);
970 free_irq(chip->irq, chip);
972 pci_disable_msi(chip->pci);
974 if (azx_acquire_irq(chip, 1) < 0) {
982 /* If this critical timeout happens during the codec probing
983 * phase, this is likely an access to a non-existing codec
984 * slot. Better to return an error and reset the system.
989 /* a fatal communication error; need either to reset or to fallback
990 * to the single_cmd mode
993 if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) {
994 bus->response_reset = 1;
995 return -1; /* give a chance to retry */
998 snd_printk(KERN_ERR "hda_intel: azx_get_response timeout, "
999 "switching to single_cmd mode: last cmd=0x%08x\n",
1000 chip->last_cmd[addr]);
1001 chip->single_cmd = 1;
1002 bus->response_reset = 0;
1003 /* release CORB/RIRB */
1004 azx_free_cmd_io(chip);
1005 /* disable unsolicited responses */
1006 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL);
1011 * Use the single immediate command instead of CORB/RIRB for simplicity
1013 * Note: according to Intel, this is not preferred use. The command was
1014 * intended for the BIOS only, and may get confused with unsolicited
1015 * responses. So, we shouldn't use it for normal operation from the
1017 * I left the codes, however, for debugging/testing purposes.
1020 /* receive a response */
1021 static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
1026 /* check IRV busy bit */
1027 if (azx_readw(chip, IRS) & ICH6_IRS_VALID) {
1028 /* reuse rirb.res as the response return value */
1029 chip->rirb.res[addr] = azx_readl(chip, IR);
1034 if (printk_ratelimit())
1035 snd_printd(SFX "%s: get_response timeout: IRS=0x%x\n",
1036 pci_name(chip->pci), azx_readw(chip, IRS));
1037 chip->rirb.res[addr] = -1;
1041 /* send a command */
1042 static int azx_single_send_cmd(struct hda_bus *bus, u32 val)
1044 struct azx *chip = bus->private_data;
1045 unsigned int addr = azx_command_addr(val);
1048 bus->rirb_error = 0;
1050 /* check ICB busy bit */
1051 if (!((azx_readw(chip, IRS) & ICH6_IRS_BUSY))) {
1052 /* Clear IRV valid bit */
1053 azx_writew(chip, IRS, azx_readw(chip, IRS) |
1055 azx_writel(chip, IC, val);
1056 azx_writew(chip, IRS, azx_readw(chip, IRS) |
1058 return azx_single_wait_for_response(chip, addr);
1062 if (printk_ratelimit())
1063 snd_printd(SFX "%s: send_cmd timeout: IRS=0x%x, val=0x%x\n",
1064 pci_name(chip->pci), azx_readw(chip, IRS), val);
1068 /* receive a response */
1069 static unsigned int azx_single_get_response(struct hda_bus *bus,
1072 struct azx *chip = bus->private_data;
1073 return chip->rirb.res[addr];
1077 * The below are the main callbacks from hda_codec.
1079 * They are just the skeleton to call sub-callbacks according to the
1080 * current setting of chip->single_cmd.
1083 /* send a command */
1084 static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
1086 struct azx *chip = bus->private_data;
1090 chip->last_cmd[azx_command_addr(val)] = val;
1091 if (chip->single_cmd)
1092 return azx_single_send_cmd(bus, val);
1094 return azx_corb_send_cmd(bus, val);
1097 /* get a response */
1098 static unsigned int azx_get_response(struct hda_bus *bus,
1101 struct azx *chip = bus->private_data;
1104 if (chip->single_cmd)
1105 return azx_single_get_response(bus, addr);
1107 return azx_rirb_get_response(bus, addr);
1111 static void azx_power_notify(struct hda_bus *bus, bool power_up);
1114 #ifdef CONFIG_SND_HDA_DSP_LOADER
1115 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format,
1116 unsigned int byte_size,
1117 struct snd_dma_buffer *bufp);
1118 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start);
1119 static void azx_load_dsp_cleanup(struct hda_bus *bus,
1120 struct snd_dma_buffer *dmab);
1123 /* reset codec link */
1124 static int azx_reset(struct azx *chip, int full_reset)
1126 unsigned long timeout;
1131 /* clear STATESTS */
1132 azx_writeb(chip, STATESTS, STATESTS_INT_MASK);
1134 /* reset controller */
1135 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_RESET);
1137 timeout = jiffies + msecs_to_jiffies(100);
1138 while (azx_readb(chip, GCTL) &&
1139 time_before(jiffies, timeout))
1140 usleep_range(500, 1000);
1142 /* delay for >= 100us for codec PLL to settle per spec
1143 * Rev 0.9 section 5.5.1
1145 usleep_range(500, 1000);
1147 /* Bring controller out of reset */
1148 azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | ICH6_GCTL_RESET);
1150 timeout = jiffies + msecs_to_jiffies(100);
1151 while (!azx_readb(chip, GCTL) &&
1152 time_before(jiffies, timeout))
1153 usleep_range(500, 1000);
1155 /* Brent Chartrand said to wait >= 540us for codecs to initialize */
1156 usleep_range(1000, 1200);
1159 /* check to see if controller is ready */
1160 if (!azx_readb(chip, GCTL)) {
1161 snd_printd(SFX "%s: azx_reset: controller not ready!\n", pci_name(chip->pci));
1165 /* Accept unsolicited responses */
1166 if (!chip->single_cmd)
1167 azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
1171 if (!chip->codec_mask) {
1172 chip->codec_mask = azx_readw(chip, STATESTS);
1173 snd_printdd(SFX "%s: codec_mask = 0x%x\n", pci_name(chip->pci), chip->codec_mask);
1181 * Lowlevel interface
1184 /* enable interrupts */
1185 static void azx_int_enable(struct azx *chip)
1187 /* enable controller CIE and GIE */
1188 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) |
1189 ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN);
1192 /* disable interrupts */
1193 static void azx_int_disable(struct azx *chip)
1197 /* disable interrupts in stream descriptor */
1198 for (i = 0; i < chip->num_streams; i++) {
1199 struct azx_dev *azx_dev = &chip->azx_dev[i];
1200 azx_sd_writeb(azx_dev, SD_CTL,
1201 azx_sd_readb(azx_dev, SD_CTL) & ~SD_INT_MASK);
1204 /* disable SIE for all streams */
1205 azx_writeb(chip, INTCTL, 0);
1207 /* disable controller CIE and GIE */
1208 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) &
1209 ~(ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN));
1212 /* clear interrupts */
1213 static void azx_int_clear(struct azx *chip)
1217 /* clear stream status */
1218 for (i = 0; i < chip->num_streams; i++) {
1219 struct azx_dev *azx_dev = &chip->azx_dev[i];
1220 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1223 /* clear STATESTS */
1224 azx_writeb(chip, STATESTS, STATESTS_INT_MASK);
1226 /* clear rirb status */
1227 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1229 /* clear int status */
1230 azx_writel(chip, INTSTS, ICH6_INT_CTRL_EN | ICH6_INT_ALL_STREAM);
1233 /* start a stream */
1234 static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev)
1237 * Before stream start, initialize parameter
1239 azx_dev->insufficient = 1;
1242 azx_writel(chip, INTCTL,
1243 azx_readl(chip, INTCTL) | (1 << azx_dev->index));
1244 /* set DMA start and interrupt mask */
1245 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1246 SD_CTL_DMA_START | SD_INT_MASK);
1250 static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev)
1252 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) &
1253 ~(SD_CTL_DMA_START | SD_INT_MASK));
1254 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); /* to be sure */
1258 static void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev)
1260 azx_stream_clear(chip, azx_dev);
1262 azx_writel(chip, INTCTL,
1263 azx_readl(chip, INTCTL) & ~(1 << azx_dev->index));
1268 * reset and start the controller registers
1270 static void azx_init_chip(struct azx *chip, int full_reset)
1272 if (chip->initialized)
1275 /* reset controller */
1276 azx_reset(chip, full_reset);
1278 /* initialize interrupts */
1279 azx_int_clear(chip);
1280 azx_int_enable(chip);
1282 /* initialize the codec command I/O */
1283 if (!chip->single_cmd)
1284 azx_init_cmd_io(chip);
1286 /* program the position buffer */
1287 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
1288 azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr));
1290 chip->initialized = 1;
1294 * initialize the PCI registers
1296 /* update bits in a PCI register byte */
1297 static void update_pci_byte(struct pci_dev *pci, unsigned int reg,
1298 unsigned char mask, unsigned char val)
1302 pci_read_config_byte(pci, reg, &data);
1304 data |= (val & mask);
1305 pci_write_config_byte(pci, reg, data);
1308 static void azx_init_pci(struct azx *chip)
1310 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
1311 * TCSEL == Traffic Class Select Register, which sets PCI express QOS
1312 * Ensuring these bits are 0 clears playback static on some HD Audio
1314 * The PCI register TCSEL is defined in the Intel manuals.
1316 if (!(chip->driver_caps & AZX_DCAPS_NO_TCSEL)) {
1317 snd_printdd(SFX "%s: Clearing TCSEL\n", pci_name(chip->pci));
1318 update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0);
1321 /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
1322 * we need to enable snoop.
1324 if (chip->driver_caps & AZX_DCAPS_ATI_SNOOP) {
1325 snd_printdd(SFX "%s: Setting ATI snoop: %d\n", pci_name(chip->pci), azx_snoop(chip));
1326 update_pci_byte(chip->pci,
1327 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR, 0x07,
1328 azx_snoop(chip) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP : 0);
1331 /* For NVIDIA HDA, enable snoop */
1332 if (chip->driver_caps & AZX_DCAPS_NVIDIA_SNOOP) {
1333 snd_printdd(SFX "%s: Setting Nvidia snoop: %d\n", pci_name(chip->pci), azx_snoop(chip));
1334 update_pci_byte(chip->pci,
1335 NVIDIA_HDA_TRANSREG_ADDR,
1336 0x0f, NVIDIA_HDA_ENABLE_COHBITS);
1337 update_pci_byte(chip->pci,
1338 NVIDIA_HDA_ISTRM_COH,
1339 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1340 update_pci_byte(chip->pci,
1341 NVIDIA_HDA_OSTRM_COH,
1342 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1345 /* Enable SCH/PCH snoop if needed */
1346 if (chip->driver_caps & AZX_DCAPS_SCH_SNOOP) {
1347 unsigned short snoop;
1348 pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);
1349 if ((!azx_snoop(chip) && !(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)) ||
1350 (azx_snoop(chip) && (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP))) {
1351 snoop &= ~INTEL_SCH_HDA_DEVC_NOSNOOP;
1352 if (!azx_snoop(chip))
1353 snoop |= INTEL_SCH_HDA_DEVC_NOSNOOP;
1354 pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, snoop);
1355 pci_read_config_word(chip->pci,
1356 INTEL_SCH_HDA_DEVC, &snoop);
1358 snd_printdd(SFX "%s: SCH snoop: %s\n",
1359 pci_name(chip->pci), (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)
1360 ? "Disabled" : "Enabled");
1365 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev);
1370 static irqreturn_t azx_interrupt(int irq, void *dev_id)
1372 struct azx *chip = dev_id;
1373 struct azx_dev *azx_dev;
1378 #ifdef CONFIG_PM_RUNTIME
1379 if (chip->pci->dev.power.runtime_status != RPM_ACTIVE)
1383 spin_lock(&chip->reg_lock);
1385 if (chip->disabled) {
1386 spin_unlock(&chip->reg_lock);
1390 status = azx_readl(chip, INTSTS);
1392 spin_unlock(&chip->reg_lock);
1396 for (i = 0; i < chip->num_streams; i++) {
1397 azx_dev = &chip->azx_dev[i];
1398 if (status & azx_dev->sd_int_sta_mask) {
1399 sd_status = azx_sd_readb(azx_dev, SD_STS);
1400 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1401 if (!azx_dev->substream || !azx_dev->running ||
1402 !(sd_status & SD_INT_COMPLETE))
1404 /* check whether this IRQ is really acceptable */
1405 ok = azx_position_ok(chip, azx_dev);
1407 azx_dev->irq_pending = 0;
1408 spin_unlock(&chip->reg_lock);
1409 snd_pcm_period_elapsed(azx_dev->substream);
1410 spin_lock(&chip->reg_lock);
1411 } else if (ok == 0 && chip->bus && chip->bus->workq) {
1412 /* bogus IRQ, process it later */
1413 azx_dev->irq_pending = 1;
1414 queue_work(chip->bus->workq,
1415 &chip->irq_pending_work);
1420 /* clear rirb int */
1421 status = azx_readb(chip, RIRBSTS);
1422 if (status & RIRB_INT_MASK) {
1423 if (status & RIRB_INT_RESPONSE) {
1424 if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY)
1426 azx_update_rirb(chip);
1428 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1432 /* clear state status int */
1433 if (azx_readb(chip, STATESTS) & 0x04)
1434 azx_writeb(chip, STATESTS, 0x04);
1436 spin_unlock(&chip->reg_lock);
1443 * set up a BDL entry
1445 static int setup_bdle(struct azx *chip,
1446 struct snd_dma_buffer *dmab,
1447 struct azx_dev *azx_dev, u32 **bdlp,
1448 int ofs, int size, int with_ioc)
1456 if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES)
1459 addr = snd_sgbuf_get_addr(dmab, ofs);
1460 /* program the address field of the BDL entry */
1461 bdl[0] = cpu_to_le32((u32)addr);
1462 bdl[1] = cpu_to_le32(upper_32_bits(addr));
1463 /* program the size field of the BDL entry */
1464 chunk = snd_sgbuf_get_chunk_size(dmab, ofs, size);
1465 /* one BDLE cannot cross 4K boundary on CTHDA chips */
1466 if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) {
1467 u32 remain = 0x1000 - (ofs & 0xfff);
1471 bdl[2] = cpu_to_le32(chunk);
1472 /* program the IOC to enable interrupt
1473 * only when the whole fragment is processed
1476 bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01);
1486 * set up BDL entries
1488 static int azx_setup_periods(struct azx *chip,
1489 struct snd_pcm_substream *substream,
1490 struct azx_dev *azx_dev)
1493 int i, ofs, periods, period_bytes;
1496 /* reset BDL address */
1497 azx_sd_writel(azx_dev, SD_BDLPL, 0);
1498 azx_sd_writel(azx_dev, SD_BDLPU, 0);
1500 period_bytes = azx_dev->period_bytes;
1501 periods = azx_dev->bufsize / period_bytes;
1503 /* program the initial BDL entries */
1504 bdl = (u32 *)azx_dev->bdl.area;
1507 pos_adj = bdl_pos_adj[chip->dev_index];
1508 if (!azx_dev->no_period_wakeup && pos_adj > 0) {
1509 struct snd_pcm_runtime *runtime = substream->runtime;
1510 int pos_align = pos_adj;
1511 pos_adj = (pos_adj * runtime->rate + 47999) / 48000;
1513 pos_adj = pos_align;
1515 pos_adj = ((pos_adj + pos_align - 1) / pos_align) *
1517 pos_adj = frames_to_bytes(runtime, pos_adj);
1518 if (pos_adj >= period_bytes) {
1519 snd_printk(KERN_WARNING SFX "%s: Too big adjustment %d\n",
1520 pci_name(chip->pci), bdl_pos_adj[chip->dev_index]);
1523 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1525 &bdl, ofs, pos_adj, true);
1531 for (i = 0; i < periods; i++) {
1532 if (i == periods - 1 && pos_adj)
1533 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1535 period_bytes - pos_adj, 0);
1537 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1540 !azx_dev->no_period_wakeup);
1547 snd_printk(KERN_ERR SFX "%s: Too many BDL entries: buffer=%d, period=%d\n",
1548 pci_name(chip->pci), azx_dev->bufsize, period_bytes);
1553 static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev)
1558 azx_stream_clear(chip, azx_dev);
1560 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1561 SD_CTL_STREAM_RESET);
1564 while (!((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1567 val &= ~SD_CTL_STREAM_RESET;
1568 azx_sd_writeb(azx_dev, SD_CTL, val);
1572 /* waiting for hardware to report that the stream is out of reset */
1573 while (((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1577 /* reset first position - may not be synced with hw at this time */
1578 *azx_dev->posbuf = 0;
1582 * set up the SD for streaming
1584 static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev)
1587 /* make sure the run bit is zero for SD */
1588 azx_stream_clear(chip, azx_dev);
1589 /* program the stream_tag */
1590 val = azx_sd_readl(azx_dev, SD_CTL);
1591 val = (val & ~SD_CTL_STREAM_TAG_MASK) |
1592 (azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT);
1593 if (!azx_snoop(chip))
1594 val |= SD_CTL_TRAFFIC_PRIO;
1595 azx_sd_writel(azx_dev, SD_CTL, val);
1597 /* program the length of samples in cyclic buffer */
1598 azx_sd_writel(azx_dev, SD_CBL, azx_dev->bufsize);
1600 /* program the stream format */
1601 /* this value needs to be the same as the one programmed */
1602 azx_sd_writew(azx_dev, SD_FORMAT, azx_dev->format_val);
1604 /* program the stream LVI (last valid index) of the BDL */
1605 azx_sd_writew(azx_dev, SD_LVI, azx_dev->frags - 1);
1607 /* program the BDL address */
1608 /* lower BDL address */
1609 azx_sd_writel(azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr);
1610 /* upper BDL address */
1611 azx_sd_writel(azx_dev, SD_BDLPU, upper_32_bits(azx_dev->bdl.addr));
1613 /* enable the position buffer */
1614 if (chip->position_fix[0] != POS_FIX_LPIB ||
1615 chip->position_fix[1] != POS_FIX_LPIB) {
1616 if (!(azx_readl(chip, DPLBASE) & ICH6_DPLBASE_ENABLE))
1617 azx_writel(chip, DPLBASE,
1618 (u32)chip->posbuf.addr | ICH6_DPLBASE_ENABLE);
1621 /* set the interrupt enable bits in the descriptor control register */
1622 azx_sd_writel(azx_dev, SD_CTL,
1623 azx_sd_readl(azx_dev, SD_CTL) | SD_INT_MASK);
1629 * Probe the given codec address
1631 static int probe_codec(struct azx *chip, int addr)
1633 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1634 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1637 mutex_lock(&chip->bus->cmd_mutex);
1639 azx_send_cmd(chip->bus, cmd);
1640 res = azx_get_response(chip->bus, addr);
1642 mutex_unlock(&chip->bus->cmd_mutex);
1645 snd_printdd(SFX "%s: codec #%d probed OK\n", pci_name(chip->pci), addr);
1649 static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
1650 struct hda_pcm *cpcm);
1651 static void azx_stop_chip(struct azx *chip);
1653 static void azx_bus_reset(struct hda_bus *bus)
1655 struct azx *chip = bus->private_data;
1658 azx_stop_chip(chip);
1659 azx_init_chip(chip, 1);
1661 if (chip->initialized) {
1663 list_for_each_entry(p, &chip->pcm_list, list)
1664 snd_pcm_suspend_all(p->pcm);
1665 snd_hda_suspend(chip->bus);
1666 snd_hda_resume(chip->bus);
1672 static int get_jackpoll_interval(struct azx *chip)
1674 int i = jackpoll_ms[chip->dev_index];
1678 if (i < 50 || i > 60000)
1681 j = msecs_to_jiffies(i);
1683 snd_printk(KERN_WARNING SFX
1684 "jackpoll_ms value out of range: %d\n", i);
1689 * Codec initialization
1692 /* number of codec slots for each chipset: 0 = default slots (i.e. 4) */
1693 static unsigned int azx_max_codecs[AZX_NUM_DRIVERS] = {
1694 [AZX_DRIVER_NVIDIA] = 8,
1695 [AZX_DRIVER_TERA] = 1,
1698 static int azx_codec_create(struct azx *chip, const char *model)
1700 struct hda_bus_template bus_temp;
1704 memset(&bus_temp, 0, sizeof(bus_temp));
1705 bus_temp.private_data = chip;
1706 bus_temp.modelname = model;
1707 bus_temp.pci = chip->pci;
1708 bus_temp.ops.command = azx_send_cmd;
1709 bus_temp.ops.get_response = azx_get_response;
1710 bus_temp.ops.attach_pcm = azx_attach_pcm_stream;
1711 bus_temp.ops.bus_reset = azx_bus_reset;
1713 bus_temp.power_save = &power_save;
1714 bus_temp.ops.pm_notify = azx_power_notify;
1716 #ifdef CONFIG_SND_HDA_DSP_LOADER
1717 bus_temp.ops.load_dsp_prepare = azx_load_dsp_prepare;
1718 bus_temp.ops.load_dsp_trigger = azx_load_dsp_trigger;
1719 bus_temp.ops.load_dsp_cleanup = azx_load_dsp_cleanup;
1722 err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus);
1726 if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) {
1727 snd_printd(SFX "%s: Enable delay in RIRB handling\n", pci_name(chip->pci));
1728 chip->bus->needs_damn_long_delay = 1;
1732 max_slots = azx_max_codecs[chip->driver_type];
1734 max_slots = AZX_DEFAULT_CODECS;
1736 /* First try to probe all given codec slots */
1737 for (c = 0; c < max_slots; c++) {
1738 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1739 if (probe_codec(chip, c) < 0) {
1740 /* Some BIOSen give you wrong codec addresses
1743 snd_printk(KERN_WARNING SFX
1744 "%s: Codec #%d probe error; "
1745 "disabling it...\n", pci_name(chip->pci), c);
1746 chip->codec_mask &= ~(1 << c);
1747 /* More badly, accessing to a non-existing
1748 * codec often screws up the controller chip,
1749 * and disturbs the further communications.
1750 * Thus if an error occurs during probing,
1751 * better to reset the controller chip to
1752 * get back to the sanity state.
1754 azx_stop_chip(chip);
1755 azx_init_chip(chip, 1);
1760 /* AMD chipsets often cause the communication stalls upon certain
1761 * sequence like the pin-detection. It seems that forcing the synced
1762 * access works around the stall. Grrr...
1764 if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1765 snd_printd(SFX "%s: Enable sync_write for stable communication\n",
1766 pci_name(chip->pci));
1767 chip->bus->sync_write = 1;
1768 chip->bus->allow_bus_reset = 1;
1771 /* Then create codec instances */
1772 for (c = 0; c < max_slots; c++) {
1773 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1774 struct hda_codec *codec;
1775 err = snd_hda_codec_new(chip->bus, c, &codec);
1778 codec->jackpoll_interval = get_jackpoll_interval(chip);
1779 codec->beep_mode = chip->beep_mode;
1784 snd_printk(KERN_ERR SFX "%s: no codecs initialized\n", pci_name(chip->pci));
1790 /* configure each codec instance */
1791 static int azx_codec_configure(struct azx *chip)
1793 struct hda_codec *codec;
1794 list_for_each_entry(codec, &chip->bus->codec_list, list) {
1795 snd_hda_codec_configure(codec);
1805 /* assign a stream for the PCM */
1806 static inline struct azx_dev *
1807 azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
1810 struct azx_dev *res = NULL;
1811 /* make a non-zero unique key for the substream */
1812 int key = (substream->pcm->device << 16) | (substream->number << 2) |
1813 (substream->stream + 1);
1815 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
1816 dev = chip->playback_index_offset;
1817 nums = chip->playback_streams;
1819 dev = chip->capture_index_offset;
1820 nums = chip->capture_streams;
1822 for (i = 0; i < nums; i++, dev++) {
1823 struct azx_dev *azx_dev = &chip->azx_dev[dev];
1825 if (!azx_dev->opened && !dsp_is_locked(azx_dev)) {
1827 if (res->assigned_key == key) {
1829 res->assigned_key = key;
1830 dsp_unlock(azx_dev);
1834 dsp_unlock(azx_dev);
1839 res->assigned_key = key;
1845 /* release the assigned stream */
1846 static inline void azx_release_device(struct azx_dev *azx_dev)
1848 azx_dev->opened = 0;
1851 static cycle_t azx_cc_read(const struct cyclecounter *cc)
1853 struct azx_dev *azx_dev = container_of(cc, struct azx_dev, azx_cc);
1854 struct snd_pcm_substream *substream = azx_dev->substream;
1855 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1856 struct azx *chip = apcm->chip;
1858 return azx_readl(chip, WALLCLK);
1861 static void azx_timecounter_init(struct snd_pcm_substream *substream,
1862 bool force, cycle_t last)
1864 struct azx_dev *azx_dev = get_azx_dev(substream);
1865 struct timecounter *tc = &azx_dev->azx_tc;
1866 struct cyclecounter *cc = &azx_dev->azx_cc;
1869 cc->read = azx_cc_read;
1870 cc->mask = CLOCKSOURCE_MASK(32);
1873 * Converting from 24 MHz to ns means applying a 125/3 factor.
1874 * To avoid any saturation issues in intermediate operations,
1875 * the 125 factor is applied first. The division is applied
1876 * last after reading the timecounter value.
1877 * Applying the 1/3 factor as part of the multiplication
1878 * requires at least 20 bits for a decent precision, however
1879 * overflows occur after about 4 hours or less, not a option.
1882 cc->mult = 125; /* saturation after 195 years */
1885 nsec = 0; /* audio time is elapsed time since trigger */
1886 timecounter_init(tc, cc, nsec);
1889 * force timecounter to use predefined value,
1890 * used for synchronized starts
1892 tc->cycle_last = last;
1895 static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream,
1898 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1899 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1900 u64 codec_frames, codec_nsecs;
1902 if (!hinfo->ops.get_delay)
1905 codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream);
1906 codec_nsecs = div_u64(codec_frames * 1000000000LL,
1907 substream->runtime->rate);
1909 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
1910 return nsec + codec_nsecs;
1912 return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0;
1915 static int azx_get_wallclock_tstamp(struct snd_pcm_substream *substream,
1916 struct timespec *ts)
1918 struct azx_dev *azx_dev = get_azx_dev(substream);
1921 nsec = timecounter_read(&azx_dev->azx_tc);
1922 nsec = div_u64(nsec, 3); /* can be optimized */
1923 nsec = azx_adjust_codec_delay(substream, nsec);
1925 *ts = ns_to_timespec(nsec);
1930 static struct snd_pcm_hardware azx_pcm_hw = {
1931 .info = (SNDRV_PCM_INFO_MMAP |
1932 SNDRV_PCM_INFO_INTERLEAVED |
1933 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1934 SNDRV_PCM_INFO_MMAP_VALID |
1935 /* No full-resume yet implemented */
1936 /* SNDRV_PCM_INFO_RESUME |*/
1937 SNDRV_PCM_INFO_PAUSE |
1938 SNDRV_PCM_INFO_SYNC_START |
1939 SNDRV_PCM_INFO_HAS_WALL_CLOCK |
1940 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
1941 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1942 .rates = SNDRV_PCM_RATE_48000,
1947 .buffer_bytes_max = AZX_MAX_BUF_SIZE,
1948 .period_bytes_min = 128,
1949 .period_bytes_max = AZX_MAX_BUF_SIZE / 2,
1951 .periods_max = AZX_MAX_FRAG,
1955 static int azx_pcm_open(struct snd_pcm_substream *substream)
1957 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1958 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1959 struct azx *chip = apcm->chip;
1960 struct azx_dev *azx_dev;
1961 struct snd_pcm_runtime *runtime = substream->runtime;
1962 unsigned long flags;
1966 mutex_lock(&chip->open_mutex);
1967 azx_dev = azx_assign_device(chip, substream);
1968 if (azx_dev == NULL) {
1969 mutex_unlock(&chip->open_mutex);
1972 runtime->hw = azx_pcm_hw;
1973 runtime->hw.channels_min = hinfo->channels_min;
1974 runtime->hw.channels_max = hinfo->channels_max;
1975 runtime->hw.formats = hinfo->formats;
1976 runtime->hw.rates = hinfo->rates;
1977 snd_pcm_limit_hw_rates(runtime);
1978 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
1980 /* avoid wrap-around with wall-clock */
1981 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME,
1985 if (chip->align_buffer_size)
1986 /* constrain buffer sizes to be multiple of 128
1987 bytes. This is more efficient in terms of memory
1988 access but isn't required by the HDA spec and
1989 prevents users from specifying exact period/buffer
1990 sizes. For example for 44.1kHz, a period size set
1991 to 20ms will be rounded to 19.59ms. */
1994 /* Don't enforce steps on buffer sizes, still need to
1995 be multiple of 4 bytes (HDA spec). Tested on Intel
1996 HDA controllers, may not work on all devices where
1997 option needs to be disabled */
2000 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
2002 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
2004 snd_hda_power_up_d3wait(apcm->codec);
2005 err = hinfo->ops.open(hinfo, apcm->codec, substream);
2007 azx_release_device(azx_dev);
2008 snd_hda_power_down(apcm->codec);
2009 mutex_unlock(&chip->open_mutex);
2012 snd_pcm_limit_hw_rates(runtime);
2014 if (snd_BUG_ON(!runtime->hw.channels_min) ||
2015 snd_BUG_ON(!runtime->hw.channels_max) ||
2016 snd_BUG_ON(!runtime->hw.formats) ||
2017 snd_BUG_ON(!runtime->hw.rates)) {
2018 azx_release_device(azx_dev);
2019 hinfo->ops.close(hinfo, apcm->codec, substream);
2020 snd_hda_power_down(apcm->codec);
2021 mutex_unlock(&chip->open_mutex);
2025 /* disable WALLCLOCK timestamps for capture streams
2026 until we figure out how to handle digital inputs */
2027 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
2028 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK;
2030 spin_lock_irqsave(&chip->reg_lock, flags);
2031 azx_dev->substream = substream;
2032 azx_dev->running = 0;
2033 spin_unlock_irqrestore(&chip->reg_lock, flags);
2035 runtime->private_data = azx_dev;
2036 snd_pcm_set_sync(substream);
2037 mutex_unlock(&chip->open_mutex);
2041 static int azx_pcm_close(struct snd_pcm_substream *substream)
2043 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2044 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2045 struct azx *chip = apcm->chip;
2046 struct azx_dev *azx_dev = get_azx_dev(substream);
2047 unsigned long flags;
2049 mutex_lock(&chip->open_mutex);
2050 spin_lock_irqsave(&chip->reg_lock, flags);
2051 azx_dev->substream = NULL;
2052 azx_dev->running = 0;
2053 spin_unlock_irqrestore(&chip->reg_lock, flags);
2054 azx_release_device(azx_dev);
2055 hinfo->ops.close(hinfo, apcm->codec, substream);
2056 snd_hda_power_down(apcm->codec);
2057 mutex_unlock(&chip->open_mutex);
2061 static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
2062 struct snd_pcm_hw_params *hw_params)
2064 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2065 struct azx *chip = apcm->chip;
2066 struct azx_dev *azx_dev = get_azx_dev(substream);
2070 if (dsp_is_locked(azx_dev)) {
2075 mark_runtime_wc(chip, azx_dev, substream, false);
2076 azx_dev->bufsize = 0;
2077 azx_dev->period_bytes = 0;
2078 azx_dev->format_val = 0;
2079 ret = snd_pcm_lib_malloc_pages(substream,
2080 params_buffer_bytes(hw_params));
2083 mark_runtime_wc(chip, azx_dev, substream, true);
2085 dsp_unlock(azx_dev);
2089 static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
2091 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2092 struct azx_dev *azx_dev = get_azx_dev(substream);
2093 struct azx *chip = apcm->chip;
2094 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2096 /* reset BDL address */
2098 if (!dsp_is_locked(azx_dev)) {
2099 azx_sd_writel(azx_dev, SD_BDLPL, 0);
2100 azx_sd_writel(azx_dev, SD_BDLPU, 0);
2101 azx_sd_writel(azx_dev, SD_CTL, 0);
2102 azx_dev->bufsize = 0;
2103 azx_dev->period_bytes = 0;
2104 azx_dev->format_val = 0;
2107 snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
2109 mark_runtime_wc(chip, azx_dev, substream, false);
2110 azx_dev->prepared = 0;
2111 dsp_unlock(azx_dev);
2112 return snd_pcm_lib_free_pages(substream);
2115 static int azx_pcm_prepare(struct snd_pcm_substream *substream)
2117 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2118 struct azx *chip = apcm->chip;
2119 struct azx_dev *azx_dev = get_azx_dev(substream);
2120 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2121 struct snd_pcm_runtime *runtime = substream->runtime;
2122 unsigned int bufsize, period_bytes, format_val, stream_tag;
2124 struct hda_spdif_out *spdif =
2125 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
2126 unsigned short ctls = spdif ? spdif->ctls : 0;
2129 if (dsp_is_locked(azx_dev)) {
2134 azx_stream_reset(chip, azx_dev);
2135 format_val = snd_hda_calc_stream_format(runtime->rate,
2141 snd_printk(KERN_ERR SFX
2142 "%s: invalid format_val, rate=%d, ch=%d, format=%d\n",
2143 pci_name(chip->pci), runtime->rate, runtime->channels, runtime->format);
2148 bufsize = snd_pcm_lib_buffer_bytes(substream);
2149 period_bytes = snd_pcm_lib_period_bytes(substream);
2151 snd_printdd(SFX "%s: azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
2152 pci_name(chip->pci), bufsize, format_val);
2154 if (bufsize != azx_dev->bufsize ||
2155 period_bytes != azx_dev->period_bytes ||
2156 format_val != azx_dev->format_val ||
2157 runtime->no_period_wakeup != azx_dev->no_period_wakeup) {
2158 azx_dev->bufsize = bufsize;
2159 azx_dev->period_bytes = period_bytes;
2160 azx_dev->format_val = format_val;
2161 azx_dev->no_period_wakeup = runtime->no_period_wakeup;
2162 err = azx_setup_periods(chip, substream, azx_dev);
2167 /* wallclk has 24Mhz clock source */
2168 azx_dev->period_wallclk = (((runtime->period_size * 24000) /
2169 runtime->rate) * 1000);
2170 azx_setup_controller(chip, azx_dev);
2171 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
2172 azx_dev->fifo_size = azx_sd_readw(azx_dev, SD_FIFOSIZE) + 1;
2174 azx_dev->fifo_size = 0;
2176 stream_tag = azx_dev->stream_tag;
2177 /* CA-IBG chips need the playback stream starting from 1 */
2178 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
2179 stream_tag > chip->capture_streams)
2180 stream_tag -= chip->capture_streams;
2181 err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
2182 azx_dev->format_val, substream);
2186 azx_dev->prepared = 1;
2187 dsp_unlock(azx_dev);
2191 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
2193 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2194 struct azx *chip = apcm->chip;
2195 struct azx_dev *azx_dev;
2196 struct snd_pcm_substream *s;
2197 int rstart = 0, start, nsync = 0, sbits = 0;
2200 azx_dev = get_azx_dev(substream);
2201 trace_azx_pcm_trigger(chip, azx_dev, cmd);
2203 if (dsp_is_locked(azx_dev) || !azx_dev->prepared)
2207 case SNDRV_PCM_TRIGGER_START:
2209 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
2210 case SNDRV_PCM_TRIGGER_RESUME:
2213 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
2214 case SNDRV_PCM_TRIGGER_SUSPEND:
2215 case SNDRV_PCM_TRIGGER_STOP:
2222 snd_pcm_group_for_each_entry(s, substream) {
2223 if (s->pcm->card != substream->pcm->card)
2225 azx_dev = get_azx_dev(s);
2226 sbits |= 1 << azx_dev->index;
2228 snd_pcm_trigger_done(s, substream);
2231 spin_lock(&chip->reg_lock);
2233 /* first, set SYNC bits of corresponding streams */
2234 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
2235 azx_writel(chip, OLD_SSYNC,
2236 azx_readl(chip, OLD_SSYNC) | sbits);
2238 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits);
2240 snd_pcm_group_for_each_entry(s, substream) {
2241 if (s->pcm->card != substream->pcm->card)
2243 azx_dev = get_azx_dev(s);
2245 azx_dev->start_wallclk = azx_readl(chip, WALLCLK);
2247 azx_dev->start_wallclk -=
2248 azx_dev->period_wallclk;
2249 azx_stream_start(chip, azx_dev);
2251 azx_stream_stop(chip, azx_dev);
2253 azx_dev->running = start;
2255 spin_unlock(&chip->reg_lock);
2257 /* wait until all FIFOs get ready */
2258 for (timeout = 5000; timeout; timeout--) {
2260 snd_pcm_group_for_each_entry(s, substream) {
2261 if (s->pcm->card != substream->pcm->card)
2263 azx_dev = get_azx_dev(s);
2264 if (!(azx_sd_readb(azx_dev, SD_STS) &
2273 /* wait until all RUN bits are cleared */
2274 for (timeout = 5000; timeout; timeout--) {
2276 snd_pcm_group_for_each_entry(s, substream) {
2277 if (s->pcm->card != substream->pcm->card)
2279 azx_dev = get_azx_dev(s);
2280 if (azx_sd_readb(azx_dev, SD_CTL) &
2289 spin_lock(&chip->reg_lock);
2290 /* reset SYNC bits */
2291 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
2292 azx_writel(chip, OLD_SSYNC,
2293 azx_readl(chip, OLD_SSYNC) & ~sbits);
2295 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits);
2297 azx_timecounter_init(substream, 0, 0);
2301 /* same start cycle for master and group */
2302 azx_dev = get_azx_dev(substream);
2303 cycle_last = azx_dev->azx_tc.cycle_last;
2305 snd_pcm_group_for_each_entry(s, substream) {
2306 if (s->pcm->card != substream->pcm->card)
2308 azx_timecounter_init(s, 1, cycle_last);
2312 spin_unlock(&chip->reg_lock);
2316 /* get the current DMA position with correction on VIA chips */
2317 static unsigned int azx_via_get_position(struct azx *chip,
2318 struct azx_dev *azx_dev)
2320 unsigned int link_pos, mini_pos, bound_pos;
2321 unsigned int mod_link_pos, mod_dma_pos, mod_mini_pos;
2322 unsigned int fifo_size;
2324 link_pos = azx_sd_readl(azx_dev, SD_LPIB);
2325 if (azx_dev->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
2326 /* Playback, no problem using link position */
2332 * use mod to get the DMA position just like old chipset
2334 mod_dma_pos = le32_to_cpu(*azx_dev->posbuf);
2335 mod_dma_pos %= azx_dev->period_bytes;
2337 /* azx_dev->fifo_size can't get FIFO size of in stream.
2338 * Get from base address + offset.
2340 fifo_size = readw(chip->remap_addr + VIA_IN_STREAM0_FIFO_SIZE_OFFSET);
2342 if (azx_dev->insufficient) {
2343 /* Link position never gather than FIFO size */
2344 if (link_pos <= fifo_size)
2347 azx_dev->insufficient = 0;
2350 if (link_pos <= fifo_size)
2351 mini_pos = azx_dev->bufsize + link_pos - fifo_size;
2353 mini_pos = link_pos - fifo_size;
2355 /* Find nearest previous boudary */
2356 mod_mini_pos = mini_pos % azx_dev->period_bytes;
2357 mod_link_pos = link_pos % azx_dev->period_bytes;
2358 if (mod_link_pos >= fifo_size)
2359 bound_pos = link_pos - mod_link_pos;
2360 else if (mod_dma_pos >= mod_mini_pos)
2361 bound_pos = mini_pos - mod_mini_pos;
2363 bound_pos = mini_pos - mod_mini_pos + azx_dev->period_bytes;
2364 if (bound_pos >= azx_dev->bufsize)
2368 /* Calculate real DMA position we want */
2369 return bound_pos + mod_dma_pos;
2372 static unsigned int azx_get_position(struct azx *chip,
2373 struct azx_dev *azx_dev,
2376 struct snd_pcm_substream *substream = azx_dev->substream;
2377 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2379 int stream = substream->stream;
2380 struct hda_pcm_stream *hinfo = apcm->hinfo[stream];
2383 switch (chip->position_fix[stream]) {
2386 pos = azx_sd_readl(azx_dev, SD_LPIB);
2388 case POS_FIX_VIACOMBO:
2389 pos = azx_via_get_position(chip, azx_dev);
2392 /* use the position buffer */
2393 pos = le32_to_cpu(*azx_dev->posbuf);
2394 if (with_check && chip->position_fix[stream] == POS_FIX_AUTO) {
2395 if (!pos || pos == (u32)-1) {
2397 "hda-intel: Invalid position buffer, "
2398 "using LPIB read method instead.\n");
2399 chip->position_fix[stream] = POS_FIX_LPIB;
2400 pos = azx_sd_readl(azx_dev, SD_LPIB);
2402 chip->position_fix[stream] = POS_FIX_POSBUF;
2407 if (pos >= azx_dev->bufsize)
2410 /* calculate runtime delay from LPIB */
2411 if (substream->runtime &&
2412 chip->position_fix[stream] == POS_FIX_POSBUF &&
2413 (chip->driver_caps & AZX_DCAPS_COUNT_LPIB_DELAY)) {
2414 unsigned int lpib_pos = azx_sd_readl(azx_dev, SD_LPIB);
2415 if (stream == SNDRV_PCM_STREAM_PLAYBACK)
2416 delay = pos - lpib_pos;
2418 delay = lpib_pos - pos;
2420 delay += azx_dev->bufsize;
2421 if (delay >= azx_dev->period_bytes) {
2422 snd_printk(KERN_WARNING SFX
2423 "%s: Unstable LPIB (%d >= %d); "
2424 "disabling LPIB delay counting\n",
2425 pci_name(chip->pci), delay, azx_dev->period_bytes);
2427 chip->driver_caps &= ~AZX_DCAPS_COUNT_LPIB_DELAY;
2429 delay = bytes_to_frames(substream->runtime, delay);
2432 if (substream->runtime) {
2433 if (hinfo->ops.get_delay)
2434 delay += hinfo->ops.get_delay(hinfo, apcm->codec,
2436 substream->runtime->delay = delay;
2439 trace_azx_get_position(chip, azx_dev, pos, delay);
2443 static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
2445 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2446 struct azx *chip = apcm->chip;
2447 struct azx_dev *azx_dev = get_azx_dev(substream);
2448 return bytes_to_frames(substream->runtime,
2449 azx_get_position(chip, azx_dev, false));
2453 * Check whether the current DMA position is acceptable for updating
2454 * periods. Returns non-zero if it's OK.
2456 * Many HD-audio controllers appear pretty inaccurate about
2457 * the update-IRQ timing. The IRQ is issued before actually the
2458 * data is processed. So, we need to process it afterwords in a
2461 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
2466 wallclk = azx_readl(chip, WALLCLK) - azx_dev->start_wallclk;
2467 if (wallclk < (azx_dev->period_wallclk * 2) / 3)
2468 return -1; /* bogus (too early) interrupt */
2470 pos = azx_get_position(chip, azx_dev, true);
2472 if (WARN_ONCE(!azx_dev->period_bytes,
2473 "hda-intel: zero azx_dev->period_bytes"))
2474 return -1; /* this shouldn't happen! */
2475 if (wallclk < (azx_dev->period_wallclk * 5) / 4 &&
2476 pos % azx_dev->period_bytes > azx_dev->period_bytes / 2)
2477 /* NG - it's below the first next period boundary */
2478 return bdl_pos_adj[chip->dev_index] ? 0 : -1;
2479 azx_dev->start_wallclk += wallclk;
2480 return 1; /* OK, it's fine */
2484 * The work for pending PCM period updates.
2486 static void azx_irq_pending_work(struct work_struct *work)
2488 struct azx *chip = container_of(work, struct azx, irq_pending_work);
2491 if (!chip->irq_pending_warned) {
2493 "hda-intel: IRQ timing workaround is activated "
2494 "for card #%d. Suggest a bigger bdl_pos_adj.\n",
2495 chip->card->number);
2496 chip->irq_pending_warned = 1;
2501 spin_lock_irq(&chip->reg_lock);
2502 for (i = 0; i < chip->num_streams; i++) {
2503 struct azx_dev *azx_dev = &chip->azx_dev[i];
2504 if (!azx_dev->irq_pending ||
2505 !azx_dev->substream ||
2508 ok = azx_position_ok(chip, azx_dev);
2510 azx_dev->irq_pending = 0;
2511 spin_unlock(&chip->reg_lock);
2512 snd_pcm_period_elapsed(azx_dev->substream);
2513 spin_lock(&chip->reg_lock);
2514 } else if (ok < 0) {
2515 pending = 0; /* too early */
2519 spin_unlock_irq(&chip->reg_lock);
2526 /* clear irq_pending flags and assure no on-going workq */
2527 static void azx_clear_irq_pending(struct azx *chip)
2531 spin_lock_irq(&chip->reg_lock);
2532 for (i = 0; i < chip->num_streams; i++)
2533 chip->azx_dev[i].irq_pending = 0;
2534 spin_unlock_irq(&chip->reg_lock);
2538 static int azx_pcm_mmap(struct snd_pcm_substream *substream,
2539 struct vm_area_struct *area)
2541 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2542 struct azx *chip = apcm->chip;
2543 if (!azx_snoop(chip))
2544 area->vm_page_prot = pgprot_writecombine(area->vm_page_prot);
2545 return snd_pcm_lib_default_mmap(substream, area);
2548 #define azx_pcm_mmap NULL
2551 static struct snd_pcm_ops azx_pcm_ops = {
2552 .open = azx_pcm_open,
2553 .close = azx_pcm_close,
2554 .ioctl = snd_pcm_lib_ioctl,
2555 .hw_params = azx_pcm_hw_params,
2556 .hw_free = azx_pcm_hw_free,
2557 .prepare = azx_pcm_prepare,
2558 .trigger = azx_pcm_trigger,
2559 .pointer = azx_pcm_pointer,
2560 .wall_clock = azx_get_wallclock_tstamp,
2561 .mmap = azx_pcm_mmap,
2562 .page = snd_pcm_sgbuf_ops_page,
2565 static void azx_pcm_free(struct snd_pcm *pcm)
2567 struct azx_pcm *apcm = pcm->private_data;
2569 list_del(&apcm->list);
2574 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
2577 azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
2578 struct hda_pcm *cpcm)
2580 struct azx *chip = bus->private_data;
2581 struct snd_pcm *pcm;
2582 struct azx_pcm *apcm;
2583 int pcm_dev = cpcm->device;
2587 list_for_each_entry(apcm, &chip->pcm_list, list) {
2588 if (apcm->pcm->device == pcm_dev) {
2589 snd_printk(KERN_ERR SFX "%s: PCM %d already exists\n",
2590 pci_name(chip->pci), pcm_dev);
2594 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
2595 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
2596 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
2600 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
2601 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
2606 apcm->codec = codec;
2607 pcm->private_data = apcm;
2608 pcm->private_free = azx_pcm_free;
2609 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
2610 pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
2611 list_add_tail(&apcm->list, &chip->pcm_list);
2613 for (s = 0; s < 2; s++) {
2614 apcm->hinfo[s] = &cpcm->stream[s];
2615 if (cpcm->stream[s].substreams)
2616 snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
2618 /* buffer pre-allocation */
2619 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
2620 if (size > MAX_PREALLOC_SIZE)
2621 size = MAX_PREALLOC_SIZE;
2622 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
2623 snd_dma_pci_data(chip->pci),
2624 size, MAX_PREALLOC_SIZE);
2629 * mixer creation - all stuff is implemented in hda module
2631 static int azx_mixer_create(struct azx *chip)
2633 return snd_hda_build_controls(chip->bus);
2638 * initialize SD streams
2640 static int azx_init_stream(struct azx *chip)
2644 /* initialize each stream (aka device)
2645 * assign the starting bdl address to each stream (device)
2648 for (i = 0; i < chip->num_streams; i++) {
2649 struct azx_dev *azx_dev = &chip->azx_dev[i];
2650 azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8);
2651 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
2652 azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80);
2653 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
2654 azx_dev->sd_int_sta_mask = 1 << i;
2655 /* stream tag: must be non-zero and unique */
2657 azx_dev->stream_tag = i + 1;
2663 static int azx_acquire_irq(struct azx *chip, int do_disconnect)
2665 if (request_irq(chip->pci->irq, azx_interrupt,
2666 chip->msi ? 0 : IRQF_SHARED,
2667 KBUILD_MODNAME, chip)) {
2668 printk(KERN_ERR "hda-intel: unable to grab IRQ %d, "
2669 "disabling device\n", chip->pci->irq);
2671 snd_card_disconnect(chip->card);
2674 chip->irq = chip->pci->irq;
2675 pci_intx(chip->pci, !chip->msi);
2680 static void azx_stop_chip(struct azx *chip)
2682 if (!chip->initialized)
2685 /* disable interrupts */
2686 azx_int_disable(chip);
2687 azx_int_clear(chip);
2689 /* disable CORB/RIRB */
2690 azx_free_cmd_io(chip);
2692 /* disable position buffer */
2693 azx_writel(chip, DPLBASE, 0);
2694 azx_writel(chip, DPUBASE, 0);
2696 chip->initialized = 0;
2699 #ifdef CONFIG_SND_HDA_DSP_LOADER
2701 * DSP loading code (e.g. for CA0132)
2704 /* use the first stream for loading DSP */
2705 static struct azx_dev *
2706 azx_get_dsp_loader_dev(struct azx *chip)
2708 return &chip->azx_dev[chip->playback_index_offset];
2711 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format,
2712 unsigned int byte_size,
2713 struct snd_dma_buffer *bufp)
2716 struct azx *chip = bus->private_data;
2717 struct azx_dev *azx_dev;
2720 azx_dev = azx_get_dsp_loader_dev(chip);
2723 spin_lock_irq(&chip->reg_lock);
2724 if (azx_dev->running || azx_dev->locked) {
2725 spin_unlock_irq(&chip->reg_lock);
2729 azx_dev->prepared = 0;
2730 chip->saved_azx_dev = *azx_dev;
2731 azx_dev->locked = 1;
2732 spin_unlock_irq(&chip->reg_lock);
2734 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV_SG,
2735 snd_dma_pci_data(chip->pci),
2740 mark_pages_wc(chip, bufp, true);
2741 azx_dev->bufsize = byte_size;
2742 azx_dev->period_bytes = byte_size;
2743 azx_dev->format_val = format;
2745 azx_stream_reset(chip, azx_dev);
2747 /* reset BDL address */
2748 azx_sd_writel(azx_dev, SD_BDLPL, 0);
2749 azx_sd_writel(azx_dev, SD_BDLPU, 0);
2752 bdl = (u32 *)azx_dev->bdl.area;
2753 err = setup_bdle(chip, bufp, azx_dev, &bdl, 0, byte_size, 0);
2757 azx_setup_controller(chip, azx_dev);
2758 dsp_unlock(azx_dev);
2759 return azx_dev->stream_tag;
2762 mark_pages_wc(chip, bufp, false);
2763 snd_dma_free_pages(bufp);
2765 spin_lock_irq(&chip->reg_lock);
2766 if (azx_dev->opened)
2767 *azx_dev = chip->saved_azx_dev;
2768 azx_dev->locked = 0;
2769 spin_unlock_irq(&chip->reg_lock);
2771 dsp_unlock(azx_dev);
2775 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start)
2777 struct azx *chip = bus->private_data;
2778 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
2781 azx_stream_start(chip, azx_dev);
2783 azx_stream_stop(chip, azx_dev);
2784 azx_dev->running = start;
2787 static void azx_load_dsp_cleanup(struct hda_bus *bus,
2788 struct snd_dma_buffer *dmab)
2790 struct azx *chip = bus->private_data;
2791 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
2793 if (!dmab->area || !azx_dev->locked)
2797 /* reset BDL address */
2798 azx_sd_writel(azx_dev, SD_BDLPL, 0);
2799 azx_sd_writel(azx_dev, SD_BDLPU, 0);
2800 azx_sd_writel(azx_dev, SD_CTL, 0);
2801 azx_dev->bufsize = 0;
2802 azx_dev->period_bytes = 0;
2803 azx_dev->format_val = 0;
2805 mark_pages_wc(chip, dmab, false);
2806 snd_dma_free_pages(dmab);
2809 spin_lock_irq(&chip->reg_lock);
2810 if (azx_dev->opened)
2811 *azx_dev = chip->saved_azx_dev;
2812 azx_dev->locked = 0;
2813 spin_unlock_irq(&chip->reg_lock);
2814 dsp_unlock(azx_dev);
2816 #endif /* CONFIG_SND_HDA_DSP_LOADER */
2819 /* power-up/down the controller */
2820 static void azx_power_notify(struct hda_bus *bus, bool power_up)
2822 struct azx *chip = bus->private_data;
2824 if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
2828 pm_runtime_get_sync(&chip->pci->dev);
2830 pm_runtime_put_sync(&chip->pci->dev);
2833 static DEFINE_MUTEX(card_list_lock);
2834 static LIST_HEAD(card_list);
2836 static void azx_add_card_list(struct azx *chip)
2838 mutex_lock(&card_list_lock);
2839 list_add(&chip->list, &card_list);
2840 mutex_unlock(&card_list_lock);
2843 static void azx_del_card_list(struct azx *chip)
2845 mutex_lock(&card_list_lock);
2846 list_del_init(&chip->list);
2847 mutex_unlock(&card_list_lock);
2850 /* trigger power-save check at writing parameter */
2851 static int param_set_xint(const char *val, const struct kernel_param *kp)
2854 struct hda_codec *c;
2855 int prev = power_save;
2856 int ret = param_set_int(val, kp);
2858 if (ret || prev == power_save)
2861 mutex_lock(&card_list_lock);
2862 list_for_each_entry(chip, &card_list, list) {
2863 if (!chip->bus || chip->disabled)
2865 list_for_each_entry(c, &chip->bus->codec_list, list)
2866 snd_hda_power_sync(c);
2868 mutex_unlock(&card_list_lock);
2872 #define azx_add_card_list(chip) /* NOP */
2873 #define azx_del_card_list(chip) /* NOP */
2874 #endif /* CONFIG_PM */
2876 #if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO)
2880 static int azx_suspend(struct device *dev)
2882 struct pci_dev *pci = to_pci_dev(dev);
2883 struct snd_card *card = dev_get_drvdata(dev);
2884 struct azx *chip = card->private_data;
2890 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2891 azx_clear_irq_pending(chip);
2892 list_for_each_entry(p, &chip->pcm_list, list)
2893 snd_pcm_suspend_all(p->pcm);
2894 if (chip->initialized)
2895 snd_hda_suspend(chip->bus);
2896 azx_stop_chip(chip);
2897 if (chip->irq >= 0) {
2898 free_irq(chip->irq, chip);
2902 pci_disable_msi(chip->pci);
2903 pci_disable_device(pci);
2904 pci_save_state(pci);
2905 pci_set_power_state(pci, PCI_D3hot);
2909 static int azx_resume(struct device *dev)
2911 struct pci_dev *pci = to_pci_dev(dev);
2912 struct snd_card *card = dev_get_drvdata(dev);
2913 struct azx *chip = card->private_data;
2918 pci_set_power_state(pci, PCI_D0);
2919 pci_restore_state(pci);
2920 if (pci_enable_device(pci) < 0) {
2921 printk(KERN_ERR "hda-intel: pci_enable_device failed, "
2922 "disabling device\n");
2923 snd_card_disconnect(card);
2926 pci_set_master(pci);
2928 if (pci_enable_msi(pci) < 0)
2930 if (azx_acquire_irq(chip, 1) < 0)
2934 azx_init_chip(chip, 1);
2936 snd_hda_resume(chip->bus);
2937 snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2940 #endif /* CONFIG_PM_SLEEP || SUPPORT_VGA_SWITCHEROO */
2942 #ifdef CONFIG_PM_RUNTIME
2943 static int azx_runtime_suspend(struct device *dev)
2945 struct snd_card *card = dev_get_drvdata(dev);
2946 struct azx *chip = card->private_data;
2948 azx_stop_chip(chip);
2949 azx_clear_irq_pending(chip);
2953 static int azx_runtime_resume(struct device *dev)
2955 struct snd_card *card = dev_get_drvdata(dev);
2956 struct azx *chip = card->private_data;
2959 azx_init_chip(chip, 1);
2963 static int azx_runtime_idle(struct device *dev)
2965 struct snd_card *card = dev_get_drvdata(dev);
2966 struct azx *chip = card->private_data;
2968 if (!power_save_controller ||
2969 !(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
2975 #endif /* CONFIG_PM_RUNTIME */
2978 static const struct dev_pm_ops azx_pm = {
2979 SET_SYSTEM_SLEEP_PM_OPS(azx_suspend, azx_resume)
2980 SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, azx_runtime_idle)
2983 #define AZX_PM_OPS &azx_pm
2985 #define AZX_PM_OPS NULL
2986 #endif /* CONFIG_PM */
2990 * reboot notifier for hang-up problem at power-down
2992 static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
2994 struct azx *chip = container_of(nb, struct azx, reboot_notifier);
2995 snd_hda_bus_reboot_notify(chip->bus);
2996 azx_stop_chip(chip);
3000 static void azx_notifier_register(struct azx *chip)
3002 chip->reboot_notifier.notifier_call = azx_halt;
3003 register_reboot_notifier(&chip->reboot_notifier);
3006 static void azx_notifier_unregister(struct azx *chip)
3008 if (chip->reboot_notifier.notifier_call)
3009 unregister_reboot_notifier(&chip->reboot_notifier);
3012 static int azx_first_init(struct azx *chip);
3013 static int azx_probe_continue(struct azx *chip);
3015 #ifdef SUPPORT_VGA_SWITCHEROO
3016 static struct pci_dev *get_bound_vga(struct pci_dev *pci);
3018 static void azx_vs_set_state(struct pci_dev *pci,
3019 enum vga_switcheroo_state state)
3021 struct snd_card *card = pci_get_drvdata(pci);
3022 struct azx *chip = card->private_data;
3025 wait_for_completion(&chip->probe_wait);
3026 if (chip->init_failed)
3029 disabled = (state == VGA_SWITCHEROO_OFF);
3030 if (chip->disabled == disabled)
3034 chip->disabled = disabled;
3036 snd_printk(KERN_INFO SFX
3037 "%s: Start delayed initialization\n",
3038 pci_name(chip->pci));
3039 if (azx_first_init(chip) < 0 ||
3040 azx_probe_continue(chip) < 0) {
3041 snd_printk(KERN_ERR SFX
3042 "%s: initialization error\n",
3043 pci_name(chip->pci));
3044 chip->init_failed = true;
3048 snd_printk(KERN_INFO SFX
3049 "%s: %s via VGA-switcheroo\n", pci_name(chip->pci),
3050 disabled ? "Disabling" : "Enabling");
3052 azx_suspend(&pci->dev);
3053 chip->disabled = true;
3054 if (snd_hda_lock_devices(chip->bus))
3055 snd_printk(KERN_WARNING SFX "%s: Cannot lock devices!\n",
3056 pci_name(chip->pci));
3058 snd_hda_unlock_devices(chip->bus);
3059 chip->disabled = false;
3060 azx_resume(&pci->dev);
3065 static bool azx_vs_can_switch(struct pci_dev *pci)
3067 struct snd_card *card = pci_get_drvdata(pci);
3068 struct azx *chip = card->private_data;
3070 wait_for_completion(&chip->probe_wait);
3071 if (chip->init_failed)
3073 if (chip->disabled || !chip->bus)
3075 if (snd_hda_lock_devices(chip->bus))
3077 snd_hda_unlock_devices(chip->bus);
3081 static void init_vga_switcheroo(struct azx *chip)
3083 struct pci_dev *p = get_bound_vga(chip->pci);
3085 snd_printk(KERN_INFO SFX
3086 "%s: Handle VGA-switcheroo audio client\n",
3087 pci_name(chip->pci));
3088 chip->use_vga_switcheroo = 1;
3093 static const struct vga_switcheroo_client_ops azx_vs_ops = {
3094 .set_gpu_state = azx_vs_set_state,
3095 .can_switch = azx_vs_can_switch,
3098 static int register_vga_switcheroo(struct azx *chip)
3102 if (!chip->use_vga_switcheroo)
3104 /* FIXME: currently only handling DIS controller
3105 * is there any machine with two switchable HDMI audio controllers?
3107 err = vga_switcheroo_register_audio_client(chip->pci, &azx_vs_ops,
3112 chip->vga_switcheroo_registered = 1;
3116 #define init_vga_switcheroo(chip) /* NOP */
3117 #define register_vga_switcheroo(chip) 0
3118 #define check_hdmi_disabled(pci) false
3119 #endif /* SUPPORT_VGA_SWITCHER */
3124 static int azx_free(struct azx *chip)
3128 azx_del_card_list(chip);
3130 azx_notifier_unregister(chip);
3132 chip->init_failed = 1; /* to be sure */
3133 complete_all(&chip->probe_wait);
3135 if (use_vga_switcheroo(chip)) {
3136 if (chip->disabled && chip->bus)
3137 snd_hda_unlock_devices(chip->bus);
3138 if (chip->vga_switcheroo_registered)
3139 vga_switcheroo_unregister_client(chip->pci);
3142 if (chip->initialized) {
3143 azx_clear_irq_pending(chip);
3144 for (i = 0; i < chip->num_streams; i++)
3145 azx_stream_stop(chip, &chip->azx_dev[i]);
3146 azx_stop_chip(chip);
3150 free_irq(chip->irq, (void*)chip);
3152 pci_disable_msi(chip->pci);
3153 if (chip->remap_addr)
3154 iounmap(chip->remap_addr);
3156 if (chip->azx_dev) {
3157 for (i = 0; i < chip->num_streams; i++)
3158 if (chip->azx_dev[i].bdl.area) {
3159 mark_pages_wc(chip, &chip->azx_dev[i].bdl, false);
3160 snd_dma_free_pages(&chip->azx_dev[i].bdl);
3163 if (chip->rb.area) {
3164 mark_pages_wc(chip, &chip->rb, false);
3165 snd_dma_free_pages(&chip->rb);
3167 if (chip->posbuf.area) {
3168 mark_pages_wc(chip, &chip->posbuf, false);
3169 snd_dma_free_pages(&chip->posbuf);
3171 if (chip->region_requested)
3172 pci_release_regions(chip->pci);
3173 pci_disable_device(chip->pci);
3174 kfree(chip->azx_dev);
3175 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3177 release_firmware(chip->fw);
3184 static int azx_dev_free(struct snd_device *device)
3186 return azx_free(device->device_data);
3189 #ifdef SUPPORT_VGA_SWITCHEROO
3191 * Check of disabled HDMI controller by vga-switcheroo
3193 static struct pci_dev *get_bound_vga(struct pci_dev *pci)
3197 /* check only discrete GPU */
3198 switch (pci->vendor) {
3199 case PCI_VENDOR_ID_ATI:
3200 case PCI_VENDOR_ID_AMD:
3201 case PCI_VENDOR_ID_NVIDIA:
3202 if (pci->devfn == 1) {
3203 p = pci_get_domain_bus_and_slot(pci_domain_nr(pci->bus),
3204 pci->bus->number, 0);
3206 if ((p->class >> 8) == PCI_CLASS_DISPLAY_VGA)
3216 static bool check_hdmi_disabled(struct pci_dev *pci)
3218 bool vga_inactive = false;
3219 struct pci_dev *p = get_bound_vga(pci);
3222 if (vga_switcheroo_get_client_state(p) == VGA_SWITCHEROO_OFF)
3223 vga_inactive = true;
3226 return vga_inactive;
3228 #endif /* SUPPORT_VGA_SWITCHEROO */
3231 * white/black-listing for position_fix
3233 static struct snd_pci_quirk position_fix_list[] = {
3234 SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
3235 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
3236 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
3237 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
3238 SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
3239 SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),
3240 SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),
3241 SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB),
3242 SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB),
3243 SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB),
3244 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
3245 SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB),
3246 SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB),
3247 SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB),
3251 static int check_position_fix(struct azx *chip, int fix)
3253 const struct snd_pci_quirk *q;
3258 case POS_FIX_POSBUF:
3259 case POS_FIX_VIACOMBO:
3264 q = snd_pci_quirk_lookup(chip->pci, position_fix_list);
3267 "hda_intel: position_fix set to %d "
3268 "for device %04x:%04x\n",
3269 q->value, q->subvendor, q->subdevice);
3273 /* Check VIA/ATI HD Audio Controller exist */
3274 if (chip->driver_caps & AZX_DCAPS_POSFIX_VIA) {
3275 snd_printd(SFX "%s: Using VIACOMBO position fix\n", pci_name(chip->pci));
3276 return POS_FIX_VIACOMBO;
3278 if (chip->driver_caps & AZX_DCAPS_POSFIX_LPIB) {
3279 snd_printd(SFX "%s: Using LPIB position fix\n", pci_name(chip->pci));
3280 return POS_FIX_LPIB;
3282 return POS_FIX_AUTO;
3286 * black-lists for probe_mask
3288 static struct snd_pci_quirk probe_mask_list[] = {
3289 /* Thinkpad often breaks the controller communication when accessing
3290 * to the non-working (or non-existing) modem codec slot.
3292 SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01),
3293 SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01),
3294 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01),
3296 SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),
3297 /* including bogus ALC268 in slot#2 that conflicts with ALC888 */
3298 SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),
3299 /* forced codec slots */
3300 SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),
3301 SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),
3302 /* WinFast VP200 H (Teradici) user reported broken communication */
3303 SND_PCI_QUIRK(0x3a21, 0x040d, "WinFast VP200 H", 0x101),
3307 #define AZX_FORCE_CODEC_MASK 0x100
3309 static void check_probe_mask(struct azx *chip, int dev)
3311 const struct snd_pci_quirk *q;
3313 chip->codec_probe_mask = probe_mask[dev];
3314 if (chip->codec_probe_mask == -1) {
3315 q = snd_pci_quirk_lookup(chip->pci, probe_mask_list);
3318 "hda_intel: probe_mask set to 0x%x "
3319 "for device %04x:%04x\n",
3320 q->value, q->subvendor, q->subdevice);
3321 chip->codec_probe_mask = q->value;
3325 /* check forced option */
3326 if (chip->codec_probe_mask != -1 &&
3327 (chip->codec_probe_mask & AZX_FORCE_CODEC_MASK)) {
3328 chip->codec_mask = chip->codec_probe_mask & 0xff;
3329 printk(KERN_INFO "hda_intel: codec_mask forced to 0x%x\n",
3335 * white/black-list for enable_msi
3337 static struct snd_pci_quirk msi_black_list[] = {
3338 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
3339 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
3340 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
3341 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
3342 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
3346 static void check_msi(struct azx *chip)
3348 const struct snd_pci_quirk *q;
3350 if (enable_msi >= 0) {
3351 chip->msi = !!enable_msi;
3354 chip->msi = 1; /* enable MSI as default */
3355 q = snd_pci_quirk_lookup(chip->pci, msi_black_list);
3358 "hda_intel: msi for device %04x:%04x set to %d\n",
3359 q->subvendor, q->subdevice, q->value);
3360 chip->msi = q->value;
3364 /* NVidia chipsets seem to cause troubles with MSI */
3365 if (chip->driver_caps & AZX_DCAPS_NO_MSI) {
3366 printk(KERN_INFO "hda_intel: Disabling MSI\n");
3371 /* check the snoop mode availability */
3372 static void azx_check_snoop_available(struct azx *chip)
3374 bool snoop = chip->snoop;
3376 switch (chip->driver_type) {
3377 case AZX_DRIVER_VIA:
3378 /* force to non-snoop mode for a new VIA controller
3383 pci_read_config_byte(chip->pci, 0x42, &val);
3384 if (!(val & 0x80) && chip->pci->revision == 0x30)
3388 case AZX_DRIVER_ATIHDMI_NS:
3389 /* new ATI HDMI requires non-snoop */
3392 case AZX_DRIVER_CTHDA:
3397 if (snoop != chip->snoop) {
3398 snd_printk(KERN_INFO SFX "%s: Force to %s mode\n",
3399 pci_name(chip->pci), snoop ? "snoop" : "non-snoop");
3400 chip->snoop = snoop;
3407 static int azx_create(struct snd_card *card, struct pci_dev *pci,
3408 int dev, unsigned int driver_caps,
3411 static struct snd_device_ops ops = {
3412 .dev_free = azx_dev_free,
3419 err = pci_enable_device(pci);
3423 chip = kzalloc(sizeof(*chip), GFP_KERNEL);
3425 snd_printk(KERN_ERR SFX "%s: Cannot allocate chip\n", pci_name(pci));
3426 pci_disable_device(pci);
3430 spin_lock_init(&chip->reg_lock);
3431 mutex_init(&chip->open_mutex);
3435 chip->driver_caps = driver_caps;
3436 chip->driver_type = driver_caps & 0xff;
3438 chip->dev_index = dev;
3439 INIT_WORK(&chip->irq_pending_work, azx_irq_pending_work);
3440 INIT_LIST_HEAD(&chip->pcm_list);
3441 INIT_LIST_HEAD(&chip->list);
3442 init_vga_switcheroo(chip);
3443 init_completion(&chip->probe_wait);
3445 chip->position_fix[0] = chip->position_fix[1] =
3446 check_position_fix(chip, position_fix[dev]);
3447 /* combo mode uses LPIB for playback */
3448 if (chip->position_fix[0] == POS_FIX_COMBO) {
3449 chip->position_fix[0] = POS_FIX_LPIB;
3450 chip->position_fix[1] = POS_FIX_AUTO;
3453 check_probe_mask(chip, dev);
3455 chip->single_cmd = single_cmd;
3456 chip->snoop = hda_snoop;
3457 azx_check_snoop_available(chip);
3459 if (bdl_pos_adj[dev] < 0) {
3460 switch (chip->driver_type) {
3461 case AZX_DRIVER_ICH:
3462 case AZX_DRIVER_PCH:
3463 bdl_pos_adj[dev] = 1;
3466 bdl_pos_adj[dev] = 32;
3471 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
3473 snd_printk(KERN_ERR SFX "%s: Error creating device [card]!\n",
3474 pci_name(chip->pci));
3483 static int azx_first_init(struct azx *chip)
3485 int dev = chip->dev_index;
3486 struct pci_dev *pci = chip->pci;
3487 struct snd_card *card = chip->card;
3489 unsigned short gcap;
3491 #if BITS_PER_LONG != 64
3492 /* Fix up base address on ULI M5461 */
3493 if (chip->driver_type == AZX_DRIVER_ULI) {
3495 pci_read_config_word(pci, 0x40, &tmp3);
3496 pci_write_config_word(pci, 0x40, tmp3 | 0x10);
3497 pci_write_config_dword(pci, PCI_BASE_ADDRESS_1, 0);
3501 err = pci_request_regions(pci, "ICH HD audio");
3504 chip->region_requested = 1;
3506 chip->addr = pci_resource_start(pci, 0);
3507 chip->remap_addr = pci_ioremap_bar(pci, 0);
3508 if (chip->remap_addr == NULL) {
3509 snd_printk(KERN_ERR SFX "%s: ioremap error\n", pci_name(chip->pci));
3514 if (pci_enable_msi(pci) < 0)
3517 if (azx_acquire_irq(chip, 0) < 0)
3520 pci_set_master(pci);
3521 synchronize_irq(chip->irq);
3523 gcap = azx_readw(chip, GCAP);
3524 snd_printdd(SFX "%s: chipset global capabilities = 0x%x\n", pci_name(chip->pci), gcap);
3526 /* disable SB600 64bit support for safety */
3527 if (chip->pci->vendor == PCI_VENDOR_ID_ATI) {
3528 struct pci_dev *p_smbus;
3529 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,
3530 PCI_DEVICE_ID_ATI_SBX00_SMBUS,
3533 if (p_smbus->revision < 0x30)
3534 gcap &= ~ICH6_GCAP_64OK;
3535 pci_dev_put(p_smbus);
3539 /* disable 64bit DMA address on some devices */
3540 if (chip->driver_caps & AZX_DCAPS_NO_64BIT) {
3541 snd_printd(SFX "%s: Disabling 64bit DMA\n", pci_name(chip->pci));
3542 gcap &= ~ICH6_GCAP_64OK;
3545 /* disable buffer size rounding to 128-byte multiples if supported */
3546 if (align_buffer_size >= 0)
3547 chip->align_buffer_size = !!align_buffer_size;
3549 if (chip->driver_caps & AZX_DCAPS_BUFSIZE)
3550 chip->align_buffer_size = 0;
3551 else if (chip->driver_caps & AZX_DCAPS_ALIGN_BUFSIZE)
3552 chip->align_buffer_size = 1;
3554 chip->align_buffer_size = 1;
3557 /* allow 64bit DMA address if supported by H/W */
3558 if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64)))
3559 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(64));
3561 pci_set_dma_mask(pci, DMA_BIT_MASK(32));
3562 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32));
3565 /* read number of streams from GCAP register instead of using
3568 chip->capture_streams = (gcap >> 8) & 0x0f;
3569 chip->playback_streams = (gcap >> 12) & 0x0f;
3570 if (!chip->playback_streams && !chip->capture_streams) {
3571 /* gcap didn't give any info, switching to old method */
3573 switch (chip->driver_type) {
3574 case AZX_DRIVER_ULI:
3575 chip->playback_streams = ULI_NUM_PLAYBACK;
3576 chip->capture_streams = ULI_NUM_CAPTURE;
3578 case AZX_DRIVER_ATIHDMI:
3579 case AZX_DRIVER_ATIHDMI_NS:
3580 chip->playback_streams = ATIHDMI_NUM_PLAYBACK;
3581 chip->capture_streams = ATIHDMI_NUM_CAPTURE;
3583 case AZX_DRIVER_GENERIC:
3585 chip->playback_streams = ICH6_NUM_PLAYBACK;
3586 chip->capture_streams = ICH6_NUM_CAPTURE;
3590 chip->capture_index_offset = 0;
3591 chip->playback_index_offset = chip->capture_streams;
3592 chip->num_streams = chip->playback_streams + chip->capture_streams;
3593 chip->azx_dev = kcalloc(chip->num_streams, sizeof(*chip->azx_dev),
3595 if (!chip->azx_dev) {
3596 snd_printk(KERN_ERR SFX "%s: cannot malloc azx_dev\n", pci_name(chip->pci));
3600 for (i = 0; i < chip->num_streams; i++) {
3601 dsp_lock_init(&chip->azx_dev[i]);
3602 /* allocate memory for the BDL for each stream */
3603 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
3604 snd_dma_pci_data(chip->pci),
3605 BDL_SIZE, &chip->azx_dev[i].bdl);
3607 snd_printk(KERN_ERR SFX "%s: cannot allocate BDL\n", pci_name(chip->pci));
3610 mark_pages_wc(chip, &chip->azx_dev[i].bdl, true);
3612 /* allocate memory for the position buffer */
3613 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
3614 snd_dma_pci_data(chip->pci),
3615 chip->num_streams * 8, &chip->posbuf);
3617 snd_printk(KERN_ERR SFX "%s: cannot allocate posbuf\n", pci_name(chip->pci));
3620 mark_pages_wc(chip, &chip->posbuf, true);
3621 /* allocate CORB/RIRB */
3622 err = azx_alloc_cmd_io(chip);
3626 /* initialize streams */
3627 azx_init_stream(chip);
3629 /* initialize chip */
3631 azx_init_chip(chip, (probe_only[dev] & 2) == 0);
3633 /* codec detection */
3634 if (!chip->codec_mask) {
3635 snd_printk(KERN_ERR SFX "%s: no codecs found!\n", pci_name(chip->pci));
3639 strcpy(card->driver, "HDA-Intel");
3640 strlcpy(card->shortname, driver_short_names[chip->driver_type],
3641 sizeof(card->shortname));
3642 snprintf(card->longname, sizeof(card->longname),
3643 "%s at 0x%lx irq %i",
3644 card->shortname, chip->addr, chip->irq);
3649 static void power_down_all_codecs(struct azx *chip)
3652 /* The codecs were powered up in snd_hda_codec_new().
3653 * Now all initialization done, so turn them down if possible
3655 struct hda_codec *codec;
3656 list_for_each_entry(codec, &chip->bus->codec_list, list) {
3657 snd_hda_power_down(codec);
3662 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3663 /* callback from request_firmware_nowait() */
3664 static void azx_firmware_cb(const struct firmware *fw, void *context)
3666 struct snd_card *card = context;
3667 struct azx *chip = card->private_data;
3668 struct pci_dev *pci = chip->pci;
3671 snd_printk(KERN_ERR SFX "%s: Cannot load firmware, aborting\n",
3672 pci_name(chip->pci));
3677 if (!chip->disabled) {
3678 /* continue probing */
3679 if (azx_probe_continue(chip))
3685 snd_card_free(card);
3686 pci_set_drvdata(pci, NULL);
3690 static int azx_probe(struct pci_dev *pci,
3691 const struct pci_device_id *pci_id)
3694 struct snd_card *card;
3699 if (dev >= SNDRV_CARDS)
3706 err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
3708 snd_printk(KERN_ERR "hda-intel: Error creating card!\n");
3712 snd_card_set_dev(card, &pci->dev);
3714 err = azx_create(card, pci, dev, pci_id->driver_data, &chip);
3717 card->private_data = chip;
3719 pci_set_drvdata(pci, card);
3721 err = register_vga_switcheroo(chip);
3723 snd_printk(KERN_ERR SFX
3724 "%s: Error registering VGA-switcheroo client\n", pci_name(pci));
3728 if (check_hdmi_disabled(pci)) {
3729 snd_printk(KERN_INFO SFX "%s: VGA controller is disabled\n",
3731 snd_printk(KERN_INFO SFX "%s: Delaying initialization\n", pci_name(pci));
3732 chip->disabled = true;
3735 probe_now = !chip->disabled;
3737 err = azx_first_init(chip);
3742 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3743 if (patch[dev] && *patch[dev]) {
3744 snd_printk(KERN_ERR SFX "%s: Applying patch firmware '%s'\n",
3745 pci_name(pci), patch[dev]);
3746 err = request_firmware_nowait(THIS_MODULE, true, patch[dev],
3747 &pci->dev, GFP_KERNEL, card,
3751 probe_now = false; /* continued in azx_firmware_cb() */
3753 #endif /* CONFIG_SND_HDA_PATCH_LOADER */
3756 err = azx_probe_continue(chip);
3761 if (pci_dev_run_wake(pci))
3762 pm_runtime_put_noidle(&pci->dev);
3765 complete_all(&chip->probe_wait);
3769 snd_card_free(card);
3773 static int azx_probe_continue(struct azx *chip)
3775 int dev = chip->dev_index;
3778 #ifdef CONFIG_SND_HDA_INPUT_BEEP
3779 chip->beep_mode = beep_mode[dev];
3782 /* create codec instances */
3783 err = azx_codec_create(chip, model[dev]);
3786 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3788 err = snd_hda_load_patch(chip->bus, chip->fw->size,
3793 release_firmware(chip->fw); /* no longer needed */
3798 if ((probe_only[dev] & 1) == 0) {
3799 err = azx_codec_configure(chip);
3804 /* create PCM streams */
3805 err = snd_hda_build_pcms(chip->bus);
3809 /* create mixer controls */
3810 err = azx_mixer_create(chip);
3814 err = snd_card_register(chip->card);
3819 power_down_all_codecs(chip);
3820 azx_notifier_register(chip);
3821 azx_add_card_list(chip);
3826 chip->init_failed = 1;
3830 static void azx_remove(struct pci_dev *pci)
3832 struct snd_card *card = pci_get_drvdata(pci);
3834 if (pci_dev_run_wake(pci))
3835 pm_runtime_get_noresume(&pci->dev);
3838 snd_card_free(card);
3842 static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
3844 { PCI_DEVICE(0x8086, 0x1c20),
3845 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3847 { PCI_DEVICE(0x8086, 0x1d20),
3848 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3850 { PCI_DEVICE(0x8086, 0x1e20),
3851 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3853 { PCI_DEVICE(0x8086, 0x8c20),
3854 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3856 { PCI_DEVICE(0x8086, 0x8d20),
3857 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3858 { PCI_DEVICE(0x8086, 0x8d21),
3859 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3861 { PCI_DEVICE(0x8086, 0x9c20),
3862 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3864 { PCI_DEVICE(0x8086, 0x9c21),
3865 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3867 { PCI_DEVICE(0x8086, 0x0a0c),
3868 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },
3869 { PCI_DEVICE(0x8086, 0x0c0c),
3870 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },
3871 { PCI_DEVICE(0x8086, 0x0d0c),
3872 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },
3874 { PCI_DEVICE(0x8086, 0x3b56),
3875 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
3877 { PCI_DEVICE(0x8086, 0x811b),
3878 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
3880 { PCI_DEVICE(0x8086, 0x080a),
3881 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
3883 { PCI_DEVICE(0x8086, 0x0f04),
3884 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3886 { PCI_DEVICE(0x8086, 0x2668),
3887 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3888 AZX_DCAPS_BUFSIZE }, /* ICH6 */
3889 { PCI_DEVICE(0x8086, 0x27d8),
3890 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3891 AZX_DCAPS_BUFSIZE }, /* ICH7 */
3892 { PCI_DEVICE(0x8086, 0x269a),
3893 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3894 AZX_DCAPS_BUFSIZE }, /* ESB2 */
3895 { PCI_DEVICE(0x8086, 0x284b),
3896 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3897 AZX_DCAPS_BUFSIZE }, /* ICH8 */
3898 { PCI_DEVICE(0x8086, 0x293e),
3899 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3900 AZX_DCAPS_BUFSIZE }, /* ICH9 */
3901 { PCI_DEVICE(0x8086, 0x293f),
3902 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3903 AZX_DCAPS_BUFSIZE }, /* ICH9 */
3904 { PCI_DEVICE(0x8086, 0x3a3e),
3905 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3906 AZX_DCAPS_BUFSIZE }, /* ICH10 */
3907 { PCI_DEVICE(0x8086, 0x3a6e),
3908 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3909 AZX_DCAPS_BUFSIZE }, /* ICH10 */
3911 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),
3912 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3913 .class_mask = 0xffffff,
3914 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_BUFSIZE },
3915 /* ATI SB 450/600/700/800/900 */
3916 { PCI_DEVICE(0x1002, 0x437b),
3917 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
3918 { PCI_DEVICE(0x1002, 0x4383),
3919 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
3921 { PCI_DEVICE(0x1022, 0x780d),
3922 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
3924 { PCI_DEVICE(0x1002, 0x793b),
3925 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3926 { PCI_DEVICE(0x1002, 0x7919),
3927 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3928 { PCI_DEVICE(0x1002, 0x960f),
3929 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3930 { PCI_DEVICE(0x1002, 0x970f),
3931 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3932 { PCI_DEVICE(0x1002, 0xaa00),
3933 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3934 { PCI_DEVICE(0x1002, 0xaa08),
3935 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3936 { PCI_DEVICE(0x1002, 0xaa10),
3937 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3938 { PCI_DEVICE(0x1002, 0xaa18),
3939 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3940 { PCI_DEVICE(0x1002, 0xaa20),
3941 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3942 { PCI_DEVICE(0x1002, 0xaa28),
3943 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3944 { PCI_DEVICE(0x1002, 0xaa30),
3945 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3946 { PCI_DEVICE(0x1002, 0xaa38),
3947 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3948 { PCI_DEVICE(0x1002, 0xaa40),
3949 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3950 { PCI_DEVICE(0x1002, 0xaa48),
3951 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3952 { PCI_DEVICE(0x1002, 0x9902),
3953 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3954 { PCI_DEVICE(0x1002, 0xaaa0),
3955 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3956 { PCI_DEVICE(0x1002, 0xaaa8),
3957 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3958 { PCI_DEVICE(0x1002, 0xaab0),
3959 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3960 /* VIA VT8251/VT8237A */
3961 { PCI_DEVICE(0x1106, 0x3288),
3962 .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
3963 /* VIA GFX VT7122/VX900 */
3964 { PCI_DEVICE(0x1106, 0x9170), .driver_data = AZX_DRIVER_GENERIC },
3965 /* VIA GFX VT6122/VX11 */
3966 { PCI_DEVICE(0x1106, 0x9140), .driver_data = AZX_DRIVER_GENERIC },
3968 { PCI_DEVICE(0x1039, 0x7502), .driver_data = AZX_DRIVER_SIS },
3970 { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI },
3972 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID),
3973 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3974 .class_mask = 0xffffff,
3975 .driver_data = AZX_DRIVER_NVIDIA | AZX_DCAPS_PRESET_NVIDIA },
3977 { PCI_DEVICE(0x6549, 0x1200),
3978 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
3979 { PCI_DEVICE(0x6549, 0x2200),
3980 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
3981 /* Creative X-Fi (CA0110-IBG) */
3983 { PCI_DEVICE(0x1102, 0x0010),
3984 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
3985 { PCI_DEVICE(0x1102, 0x0012),
3986 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
3987 #if !defined(CONFIG_SND_CTXFI) && !defined(CONFIG_SND_CTXFI_MODULE)
3988 /* the following entry conflicts with snd-ctxfi driver,
3989 * as ctxfi driver mutates from HD-audio to native mode with
3990 * a special command sequence.
3992 { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_ANY_ID),
3993 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3994 .class_mask = 0xffffff,
3995 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
3996 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
3998 /* this entry seems still valid -- i.e. without emu20kx chip */
3999 { PCI_DEVICE(0x1102, 0x0009),
4000 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
4001 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
4004 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
4005 /* VMware HDAudio */
4006 { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC },
4007 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */
4008 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID),
4009 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4010 .class_mask = 0xffffff,
4011 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
4012 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_ANY_ID),
4013 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4014 .class_mask = 0xffffff,
4015 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
4018 MODULE_DEVICE_TABLE(pci, azx_ids);
4020 /* pci_driver definition */
4021 static struct pci_driver azx_driver = {
4022 .name = KBUILD_MODNAME,
4023 .id_table = azx_ids,
4025 .remove = azx_remove,
4031 module_pci_driver(azx_driver);