3 * hda_intel.c - Implementation of primary alsa driver code base
6 * Copyright(c) 2004 Intel Corporation. All rights reserved.
8 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
9 * PeiSen Hou <pshou@realtek.com.tw>
11 * This program is free software; you can redistribute it and/or modify it
12 * under the terms of the GNU General Public License as published by the Free
13 * Software Foundation; either version 2 of the License, or (at your option)
16 * This program is distributed in the hope that it will be useful, but WITHOUT
17 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
18 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
21 * You should have received a copy of the GNU General Public License along with
22 * this program; if not, write to the Free Software Foundation, Inc., 59
23 * Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 * Matt Jared matt.jared@intel.com
28 * Andy Kopp andy.kopp@intel.com
29 * Dan Kogan dan.d.kogan@intel.com
33 * 2004.12.01 Major rewrite by tiwai, merged the work of pshou
37 #include <linux/delay.h>
38 #include <linux/interrupt.h>
39 #include <linux/kernel.h>
40 #include <linux/module.h>
41 #include <linux/dma-mapping.h>
42 #include <linux/moduleparam.h>
43 #include <linux/init.h>
44 #include <linux/slab.h>
45 #include <linux/pci.h>
46 #include <linux/mutex.h>
47 #include <linux/reboot.h>
49 #include <linux/pm_runtime.h>
50 #include <linux/clocksource.h>
51 #include <linux/time.h>
52 #include <linux/completion.h>
55 /* for snoop control */
56 #include <asm/pgtable.h>
57 #include <asm/cacheflush.h>
59 #include <sound/core.h>
60 #include <sound/initval.h>
61 #include <linux/vgaarb.h>
62 #include <linux/vga_switcheroo.h>
63 #include <linux/firmware.h>
64 #include "hda_codec.h"
68 static int index
[SNDRV_CARDS
] = SNDRV_DEFAULT_IDX
;
69 static char *id
[SNDRV_CARDS
] = SNDRV_DEFAULT_STR
;
70 static bool enable
[SNDRV_CARDS
] = SNDRV_DEFAULT_ENABLE_PNP
;
71 static char *model
[SNDRV_CARDS
];
72 static int position_fix
[SNDRV_CARDS
] = {[0 ... (SNDRV_CARDS
-1)] = -1};
73 static int bdl_pos_adj
[SNDRV_CARDS
] = {[0 ... (SNDRV_CARDS
-1)] = -1};
74 static int probe_mask
[SNDRV_CARDS
] = {[0 ... (SNDRV_CARDS
-1)] = -1};
75 static int probe_only
[SNDRV_CARDS
];
76 static int jackpoll_ms
[SNDRV_CARDS
];
77 static bool single_cmd
;
78 static int enable_msi
= -1;
79 #ifdef CONFIG_SND_HDA_PATCH_LOADER
80 static char *patch
[SNDRV_CARDS
];
82 #ifdef CONFIG_SND_HDA_INPUT_BEEP
83 static bool beep_mode
[SNDRV_CARDS
] = {[0 ... (SNDRV_CARDS
-1)] =
84 CONFIG_SND_HDA_INPUT_BEEP_MODE
};
87 module_param_array(index
, int, NULL
, 0444);
88 MODULE_PARM_DESC(index
, "Index value for Intel HD audio interface.");
89 module_param_array(id
, charp
, NULL
, 0444);
90 MODULE_PARM_DESC(id
, "ID string for Intel HD audio interface.");
91 module_param_array(enable
, bool, NULL
, 0444);
92 MODULE_PARM_DESC(enable
, "Enable Intel HD audio interface.");
93 module_param_array(model
, charp
, NULL
, 0444);
94 MODULE_PARM_DESC(model
, "Use the given board model.");
95 module_param_array(position_fix
, int, NULL
, 0444);
96 MODULE_PARM_DESC(position_fix
, "DMA pointer read method."
97 "(-1 = system default, 0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO).");
98 module_param_array(bdl_pos_adj
, int, NULL
, 0644);
99 MODULE_PARM_DESC(bdl_pos_adj
, "BDL position adjustment offset.");
100 module_param_array(probe_mask
, int, NULL
, 0444);
101 MODULE_PARM_DESC(probe_mask
, "Bitmask to probe codecs (default = -1).");
102 module_param_array(probe_only
, int, NULL
, 0444);
103 MODULE_PARM_DESC(probe_only
, "Only probing and no codec initialization.");
104 module_param_array(jackpoll_ms
, int, NULL
, 0444);
105 MODULE_PARM_DESC(jackpoll_ms
, "Ms between polling for jack events (default = 0, using unsol events only)");
106 module_param(single_cmd
, bool, 0444);
107 MODULE_PARM_DESC(single_cmd
, "Use single command to communicate with codecs "
108 "(for debugging only).");
109 module_param(enable_msi
, bint
, 0444);
110 MODULE_PARM_DESC(enable_msi
, "Enable Message Signaled Interrupt (MSI)");
111 #ifdef CONFIG_SND_HDA_PATCH_LOADER
112 module_param_array(patch
, charp
, NULL
, 0444);
113 MODULE_PARM_DESC(patch
, "Patch file for Intel HD audio interface.");
115 #ifdef CONFIG_SND_HDA_INPUT_BEEP
116 module_param_array(beep_mode
, bool, NULL
, 0444);
117 MODULE_PARM_DESC(beep_mode
, "Select HDA Beep registration mode "
118 "(0=off, 1=on) (default=1).");
122 static int param_set_xint(const char *val
, const struct kernel_param
*kp
);
123 static struct kernel_param_ops param_ops_xint
= {
124 .set
= param_set_xint
,
125 .get
= param_get_int
,
127 #define param_check_xint param_check_int
129 static int power_save
= CONFIG_SND_HDA_POWER_SAVE_DEFAULT
;
130 module_param(power_save
, xint
, 0644);
131 MODULE_PARM_DESC(power_save
, "Automatic power-saving timeout "
132 "(in second, 0 = disable).");
134 /* reset the HD-audio controller in power save mode.
135 * this may give more power-saving, but will take longer time to
138 static bool power_save_controller
= 1;
139 module_param(power_save_controller
, bool, 0644);
140 MODULE_PARM_DESC(power_save_controller
, "Reset controller in power save mode.");
141 #endif /* CONFIG_PM */
143 static int align_buffer_size
= -1;
144 module_param(align_buffer_size
, bint
, 0644);
145 MODULE_PARM_DESC(align_buffer_size
,
146 "Force buffer and period sizes to be multiple of 128 bytes.");
149 static bool hda_snoop
= true;
150 module_param_named(snoop
, hda_snoop
, bool, 0444);
151 MODULE_PARM_DESC(snoop
, "Enable/disable snooping");
152 #define azx_snoop(chip) (chip)->snoop
154 #define hda_snoop true
155 #define azx_snoop(chip) true
159 MODULE_LICENSE("GPL");
160 MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
192 MODULE_DESCRIPTION("Intel HDA driver");
194 #if defined(CONFIG_PM) && defined(CONFIG_VGA_SWITCHEROO)
195 #if IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI)
196 #define SUPPORT_VGA_SWITCHEROO
204 #define ICH6_REG_GCAP 0x00
205 #define ICH6_GCAP_64OK (1 << 0) /* 64bit address support */
206 #define ICH6_GCAP_NSDO (3 << 1) /* # of serial data out signals */
207 #define ICH6_GCAP_BSS (31 << 3) /* # of bidirectional streams */
208 #define ICH6_GCAP_ISS (15 << 8) /* # of input streams */
209 #define ICH6_GCAP_OSS (15 << 12) /* # of output streams */
210 #define ICH6_REG_VMIN 0x02
211 #define ICH6_REG_VMAJ 0x03
212 #define ICH6_REG_OUTPAY 0x04
213 #define ICH6_REG_INPAY 0x06
214 #define ICH6_REG_GCTL 0x08
215 #define ICH6_GCTL_RESET (1 << 0) /* controller reset */
216 #define ICH6_GCTL_FCNTRL (1 << 1) /* flush control */
217 #define ICH6_GCTL_UNSOL (1 << 8) /* accept unsol. response enable */
218 #define ICH6_REG_WAKEEN 0x0c
219 #define ICH6_REG_STATESTS 0x0e
220 #define ICH6_REG_GSTS 0x10
221 #define ICH6_GSTS_FSTS (1 << 1) /* flush status */
222 #define ICH6_REG_INTCTL 0x20
223 #define ICH6_REG_INTSTS 0x24
224 #define ICH6_REG_WALLCLK 0x30 /* 24Mhz source */
225 #define ICH6_REG_OLD_SSYNC 0x34 /* SSYNC for old ICH */
226 #define ICH6_REG_SSYNC 0x38
227 #define ICH6_REG_CORBLBASE 0x40
228 #define ICH6_REG_CORBUBASE 0x44
229 #define ICH6_REG_CORBWP 0x48
230 #define ICH6_REG_CORBRP 0x4a
231 #define ICH6_CORBRP_RST (1 << 15) /* read pointer reset */
232 #define ICH6_REG_CORBCTL 0x4c
233 #define ICH6_CORBCTL_RUN (1 << 1) /* enable DMA */
234 #define ICH6_CORBCTL_CMEIE (1 << 0) /* enable memory error irq */
235 #define ICH6_REG_CORBSTS 0x4d
236 #define ICH6_CORBSTS_CMEI (1 << 0) /* memory error indication */
237 #define ICH6_REG_CORBSIZE 0x4e
239 #define ICH6_REG_RIRBLBASE 0x50
240 #define ICH6_REG_RIRBUBASE 0x54
241 #define ICH6_REG_RIRBWP 0x58
242 #define ICH6_RIRBWP_RST (1 << 15) /* write pointer reset */
243 #define ICH6_REG_RINTCNT 0x5a
244 #define ICH6_REG_RIRBCTL 0x5c
245 #define ICH6_RBCTL_IRQ_EN (1 << 0) /* enable IRQ */
246 #define ICH6_RBCTL_DMA_EN (1 << 1) /* enable DMA */
247 #define ICH6_RBCTL_OVERRUN_EN (1 << 2) /* enable overrun irq */
248 #define ICH6_REG_RIRBSTS 0x5d
249 #define ICH6_RBSTS_IRQ (1 << 0) /* response irq */
250 #define ICH6_RBSTS_OVERRUN (1 << 2) /* overrun irq */
251 #define ICH6_REG_RIRBSIZE 0x5e
253 #define ICH6_REG_IC 0x60
254 #define ICH6_REG_IR 0x64
255 #define ICH6_REG_IRS 0x68
256 #define ICH6_IRS_VALID (1<<1)
257 #define ICH6_IRS_BUSY (1<<0)
259 #define ICH6_REG_DPLBASE 0x70
260 #define ICH6_REG_DPUBASE 0x74
261 #define ICH6_DPLBASE_ENABLE 0x1 /* Enable position buffer */
263 /* SD offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
264 enum { SDI0
, SDI1
, SDI2
, SDI3
, SDO0
, SDO1
, SDO2
, SDO3
};
266 /* stream register offsets from stream base */
267 #define ICH6_REG_SD_CTL 0x00
268 #define ICH6_REG_SD_STS 0x03
269 #define ICH6_REG_SD_LPIB 0x04
270 #define ICH6_REG_SD_CBL 0x08
271 #define ICH6_REG_SD_LVI 0x0c
272 #define ICH6_REG_SD_FIFOW 0x0e
273 #define ICH6_REG_SD_FIFOSIZE 0x10
274 #define ICH6_REG_SD_FORMAT 0x12
275 #define ICH6_REG_SD_BDLPL 0x18
276 #define ICH6_REG_SD_BDLPU 0x1c
279 #define ICH6_PCIREG_TCSEL 0x44
285 /* max number of SDs */
286 /* ICH, ATI and VIA have 4 playback and 4 capture */
287 #define ICH6_NUM_CAPTURE 4
288 #define ICH6_NUM_PLAYBACK 4
290 /* ULI has 6 playback and 5 capture */
291 #define ULI_NUM_CAPTURE 5
292 #define ULI_NUM_PLAYBACK 6
294 /* ATI HDMI may have up to 8 playbacks and 0 capture */
295 #define ATIHDMI_NUM_CAPTURE 0
296 #define ATIHDMI_NUM_PLAYBACK 8
298 /* TERA has 4 playback and 3 capture */
299 #define TERA_NUM_CAPTURE 3
300 #define TERA_NUM_PLAYBACK 4
302 /* this number is statically defined for simplicity */
303 #define MAX_AZX_DEV 16
305 /* max number of fragments - we may use more if allocating more pages for BDL */
306 #define BDL_SIZE 4096
307 #define AZX_MAX_BDL_ENTRIES (BDL_SIZE / 16)
308 #define AZX_MAX_FRAG 32
309 /* max buffer size - no h/w limit, you can increase as you like */
310 #define AZX_MAX_BUF_SIZE (1024*1024*1024)
312 /* RIRB int mask: overrun[2], response[0] */
313 #define RIRB_INT_RESPONSE 0x01
314 #define RIRB_INT_OVERRUN 0x04
315 #define RIRB_INT_MASK 0x05
317 /* STATESTS int mask: S3,SD2,SD1,SD0 */
318 #define AZX_MAX_CODECS 8
319 #define AZX_DEFAULT_CODECS 4
320 #define STATESTS_INT_MASK ((1 << AZX_MAX_CODECS) - 1)
323 #define SD_CTL_STREAM_RESET 0x01 /* stream reset bit */
324 #define SD_CTL_DMA_START 0x02 /* stream DMA start bit */
325 #define SD_CTL_STRIPE (3 << 16) /* stripe control */
326 #define SD_CTL_TRAFFIC_PRIO (1 << 18) /* traffic priority */
327 #define SD_CTL_DIR (1 << 19) /* bi-directional stream */
328 #define SD_CTL_STREAM_TAG_MASK (0xf << 20)
329 #define SD_CTL_STREAM_TAG_SHIFT 20
331 /* SD_CTL and SD_STS */
332 #define SD_INT_DESC_ERR 0x10 /* descriptor error interrupt */
333 #define SD_INT_FIFO_ERR 0x08 /* FIFO error interrupt */
334 #define SD_INT_COMPLETE 0x04 /* completion interrupt */
335 #define SD_INT_MASK (SD_INT_DESC_ERR|SD_INT_FIFO_ERR|\
339 #define SD_STS_FIFO_READY 0x20 /* FIFO ready */
341 /* INTCTL and INTSTS */
342 #define ICH6_INT_ALL_STREAM 0xff /* all stream interrupts */
343 #define ICH6_INT_CTRL_EN 0x40000000 /* controller interrupt enable bit */
344 #define ICH6_INT_GLOBAL_EN 0x80000000 /* global interrupt enable bit */
346 /* below are so far hardcoded - should read registers in future */
347 #define ICH6_MAX_CORB_ENTRIES 256
348 #define ICH6_MAX_RIRB_ENTRIES 256
350 /* position fix mode */
359 /* Defines for ATI HD Audio support in SB450 south bridge */
360 #define ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR 0x42
361 #define ATI_SB450_HDAUDIO_ENABLE_SNOOP 0x02
363 /* Defines for Nvidia HDA support */
364 #define NVIDIA_HDA_TRANSREG_ADDR 0x4e
365 #define NVIDIA_HDA_ENABLE_COHBITS 0x0f
366 #define NVIDIA_HDA_ISTRM_COH 0x4d
367 #define NVIDIA_HDA_OSTRM_COH 0x4c
368 #define NVIDIA_HDA_ENABLE_COHBIT 0x01
370 /* Defines for Intel SCH HDA snoop control */
371 #define INTEL_SCH_HDA_DEVC 0x78
372 #define INTEL_SCH_HDA_DEVC_NOSNOOP (0x1<<11)
374 /* Define IN stream 0 FIFO size offset in VIA controller */
375 #define VIA_IN_STREAM0_FIFO_SIZE_OFFSET 0x90
376 /* Define VIA HD Audio Device ID*/
377 #define VIA_HDAC_DEVICE_ID 0x3288
379 /* HD Audio class code */
380 #define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
386 struct snd_dma_buffer bdl
; /* BDL buffer */
387 u32
*posbuf
; /* position buffer pointer */
389 unsigned int bufsize
; /* size of the play buffer in bytes */
390 unsigned int period_bytes
; /* size of the period in bytes */
391 unsigned int frags
; /* number for period in the play buffer */
392 unsigned int fifo_size
; /* FIFO size */
393 unsigned long start_wallclk
; /* start + minimum wallclk */
394 unsigned long period_wallclk
; /* wallclk for period */
396 void __iomem
*sd_addr
; /* stream descriptor pointer */
398 u32 sd_int_sta_mask
; /* stream int status mask */
401 struct snd_pcm_substream
*substream
; /* assigned substream,
404 unsigned int format_val
; /* format value to be set in the
405 * controller and the codec
407 unsigned char stream_tag
; /* assigned stream */
408 unsigned char index
; /* stream index */
409 int assigned_key
; /* last device# key assigned to */
411 unsigned int opened
:1;
412 unsigned int running
:1;
413 unsigned int irq_pending
:1;
414 unsigned int prepared
:1;
415 unsigned int locked
:1;
418 * A flag to ensure DMA position is 0
419 * when link position is not greater than FIFO size
421 unsigned int insufficient
:1;
422 unsigned int wc_marked
:1;
423 unsigned int no_period_wakeup
:1;
425 struct timecounter azx_tc
;
426 struct cyclecounter azx_cc
;
428 int delay_negative_threshold
;
430 #ifdef CONFIG_SND_HDA_DSP_LOADER
431 struct mutex dsp_mutex
;
435 /* DSP lock helpers */
436 #ifdef CONFIG_SND_HDA_DSP_LOADER
437 #define dsp_lock_init(dev) mutex_init(&(dev)->dsp_mutex)
438 #define dsp_lock(dev) mutex_lock(&(dev)->dsp_mutex)
439 #define dsp_unlock(dev) mutex_unlock(&(dev)->dsp_mutex)
440 #define dsp_is_locked(dev) ((dev)->locked)
442 #define dsp_lock_init(dev) do {} while (0)
443 #define dsp_lock(dev) do {} while (0)
444 #define dsp_unlock(dev) do {} while (0)
445 #define dsp_is_locked(dev) 0
450 u32
*buf
; /* CORB/RIRB buffer
451 * Each CORB entry is 4byte, RIRB is 8byte
453 dma_addr_t addr
; /* physical address of CORB/RIRB buffer */
455 unsigned short rp
, wp
; /* read/write pointers */
456 int cmds
[AZX_MAX_CODECS
]; /* number of pending requests */
457 u32 res
[AZX_MAX_CODECS
]; /* last read value */
463 struct hda_codec
*codec
;
464 struct hda_pcm_stream
*hinfo
[2];
465 struct list_head list
;
469 struct snd_card
*card
;
473 /* chip type specific */
475 unsigned int driver_caps
;
476 int playback_streams
;
477 int playback_index_offset
;
479 int capture_index_offset
;
484 void __iomem
*remap_addr
;
489 struct mutex open_mutex
;
490 struct completion probe_wait
;
492 /* streams (x num_streams) */
493 struct azx_dev
*azx_dev
;
496 struct list_head pcm_list
; /* azx_pcm list */
499 unsigned short codec_mask
;
500 int codec_probe_mask
; /* copied from probe_mask option */
502 unsigned int beep_mode
;
508 /* CORB/RIRB and position buffers */
509 struct snd_dma_buffer rb
;
510 struct snd_dma_buffer posbuf
;
512 #ifdef CONFIG_SND_HDA_PATCH_LOADER
513 const struct firmware
*fw
;
517 int position_fix
[2]; /* for both playback/capture streams */
519 unsigned int running
:1;
520 unsigned int initialized
:1;
521 unsigned int single_cmd
:1;
522 unsigned int polling_mode
:1;
524 unsigned int irq_pending_warned
:1;
525 unsigned int probing
:1; /* codec probing phase */
526 unsigned int snoop
:1;
527 unsigned int align_buffer_size
:1;
528 unsigned int region_requested
:1;
530 /* VGA-switcheroo setup */
531 unsigned int use_vga_switcheroo
:1;
532 unsigned int vga_switcheroo_registered
:1;
533 unsigned int init_failed
:1; /* delayed init failed */
534 unsigned int disabled
:1; /* disabled by VGA-switcher */
537 unsigned int last_cmd
[AZX_MAX_CODECS
];
539 /* for pending irqs */
540 struct work_struct irq_pending_work
;
542 struct work_struct probe_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
;
554 /* secondary power domain for hdmi audio under vga device */
555 struct dev_pm_domain hdmi_pm_domain
;
558 #define CREATE_TRACE_POINTS
559 #include "hda_intel_trace.h"
569 AZX_DRIVER_ATIHDMI_NS
,
578 AZX_NUM_DRIVERS
, /* keep this as last entry */
581 /* driver quirks (capabilities) */
582 /* bits 0-7 are used for indicating driver type */
583 #define AZX_DCAPS_NO_TCSEL (1 << 8) /* No Intel TCSEL bit */
584 #define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
585 #define AZX_DCAPS_ATI_SNOOP (1 << 10) /* ATI snoop enable */
586 #define AZX_DCAPS_NVIDIA_SNOOP (1 << 11) /* Nvidia snoop enable */
587 #define AZX_DCAPS_SCH_SNOOP (1 << 12) /* SCH/PCH snoop enable */
588 #define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */
589 #define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */
590 #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
591 #define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */
592 #define AZX_DCAPS_POSFIX_VIA (1 << 17) /* Use VIACOMBO as default */
593 #define AZX_DCAPS_NO_64BIT (1 << 18) /* No 64bit address */
594 #define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */
595 #define AZX_DCAPS_OLD_SSYNC (1 << 20) /* Old SSYNC reg for ICH */
596 #define AZX_DCAPS_BUFSIZE (1 << 21) /* no buffer size alignment */
597 #define AZX_DCAPS_ALIGN_BUFSIZE (1 << 22) /* buffer size alignment */
598 #define AZX_DCAPS_4K_BDLE_BOUNDARY (1 << 23) /* BDLE in 4k boundary */
599 #define AZX_DCAPS_COUNT_LPIB_DELAY (1 << 25) /* Take LPIB as delay */
600 #define AZX_DCAPS_PM_RUNTIME (1 << 26) /* runtime PM support */
601 #define AZX_DCAPS_I915_POWERWELL (1 << 27) /* HSW i915 power well support */
603 /* quirks for Intel PCH */
604 #define AZX_DCAPS_INTEL_PCH_NOPM \
605 (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_BUFSIZE | \
606 AZX_DCAPS_COUNT_LPIB_DELAY)
608 #define AZX_DCAPS_INTEL_PCH \
609 (AZX_DCAPS_INTEL_PCH_NOPM | AZX_DCAPS_PM_RUNTIME)
611 #define AZX_DCAPS_INTEL_HASWELL \
612 (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_ALIGN_BUFSIZE | \
613 AZX_DCAPS_COUNT_LPIB_DELAY | AZX_DCAPS_PM_RUNTIME | \
614 AZX_DCAPS_I915_POWERWELL)
616 /* quirks for ATI SB / AMD Hudson */
617 #define AZX_DCAPS_PRESET_ATI_SB \
618 (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
619 AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
621 /* quirks for ATI/AMD HDMI */
622 #define AZX_DCAPS_PRESET_ATI_HDMI \
623 (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
625 /* quirks for Nvidia */
626 #define AZX_DCAPS_PRESET_NVIDIA \
627 (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
628 AZX_DCAPS_ALIGN_BUFSIZE | AZX_DCAPS_NO_64BIT)
630 #define AZX_DCAPS_PRESET_CTHDA \
631 (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_4K_BDLE_BOUNDARY)
634 * VGA-switcher support
636 #ifdef SUPPORT_VGA_SWITCHEROO
637 #define use_vga_switcheroo(chip) ((chip)->use_vga_switcheroo)
639 #define use_vga_switcheroo(chip) 0
642 static char *driver_short_names
[] = {
643 [AZX_DRIVER_ICH
] = "HDA Intel",
644 [AZX_DRIVER_PCH
] = "HDA Intel PCH",
645 [AZX_DRIVER_SCH
] = "HDA Intel MID",
646 [AZX_DRIVER_HDMI
] = "HDA Intel HDMI",
647 [AZX_DRIVER_ATI
] = "HDA ATI SB",
648 [AZX_DRIVER_ATIHDMI
] = "HDA ATI HDMI",
649 [AZX_DRIVER_ATIHDMI_NS
] = "HDA ATI HDMI",
650 [AZX_DRIVER_VIA
] = "HDA VIA VT82xx",
651 [AZX_DRIVER_SIS
] = "HDA SIS966",
652 [AZX_DRIVER_ULI
] = "HDA ULI M5461",
653 [AZX_DRIVER_NVIDIA
] = "HDA NVidia",
654 [AZX_DRIVER_TERA
] = "HDA Teradici",
655 [AZX_DRIVER_CTX
] = "HDA Creative",
656 [AZX_DRIVER_CTHDA
] = "HDA Creative",
657 [AZX_DRIVER_GENERIC
] = "HD-Audio Generic",
661 * macros for easy use
663 #define azx_writel(chip,reg,value) \
664 writel(value, (chip)->remap_addr + ICH6_REG_##reg)
665 #define azx_readl(chip,reg) \
666 readl((chip)->remap_addr + ICH6_REG_##reg)
667 #define azx_writew(chip,reg,value) \
668 writew(value, (chip)->remap_addr + ICH6_REG_##reg)
669 #define azx_readw(chip,reg) \
670 readw((chip)->remap_addr + ICH6_REG_##reg)
671 #define azx_writeb(chip,reg,value) \
672 writeb(value, (chip)->remap_addr + ICH6_REG_##reg)
673 #define azx_readb(chip,reg) \
674 readb((chip)->remap_addr + ICH6_REG_##reg)
676 #define azx_sd_writel(dev,reg,value) \
677 writel(value, (dev)->sd_addr + ICH6_REG_##reg)
678 #define azx_sd_readl(dev,reg) \
679 readl((dev)->sd_addr + ICH6_REG_##reg)
680 #define azx_sd_writew(dev,reg,value) \
681 writew(value, (dev)->sd_addr + ICH6_REG_##reg)
682 #define azx_sd_readw(dev,reg) \
683 readw((dev)->sd_addr + ICH6_REG_##reg)
684 #define azx_sd_writeb(dev,reg,value) \
685 writeb(value, (dev)->sd_addr + ICH6_REG_##reg)
686 #define azx_sd_readb(dev,reg) \
687 readb((dev)->sd_addr + ICH6_REG_##reg)
689 /* for pcm support */
690 #define get_azx_dev(substream) (substream->runtime->private_data)
693 static void __mark_pages_wc(struct azx
*chip
, struct snd_dma_buffer
*dmab
, bool on
)
699 if (!dmab
|| !dmab
->area
|| !dmab
->bytes
)
702 #ifdef CONFIG_SND_DMA_SGBUF
703 if (dmab
->dev
.type
== SNDRV_DMA_TYPE_DEV_SG
) {
704 struct snd_sg_buf
*sgbuf
= dmab
->private_data
;
706 set_pages_array_wc(sgbuf
->page_table
, sgbuf
->pages
);
708 set_pages_array_wb(sgbuf
->page_table
, sgbuf
->pages
);
713 pages
= (dmab
->bytes
+ PAGE_SIZE
- 1) >> PAGE_SHIFT
;
715 set_memory_wc((unsigned long)dmab
->area
, pages
);
717 set_memory_wb((unsigned long)dmab
->area
, pages
);
720 static inline void mark_pages_wc(struct azx
*chip
, struct snd_dma_buffer
*buf
,
723 __mark_pages_wc(chip
, buf
, on
);
725 static inline void mark_runtime_wc(struct azx
*chip
, struct azx_dev
*azx_dev
,
726 struct snd_pcm_substream
*substream
, bool on
)
728 if (azx_dev
->wc_marked
!= on
) {
729 __mark_pages_wc(chip
, snd_pcm_get_dma_buf(substream
), on
);
730 azx_dev
->wc_marked
= on
;
734 /* NOP for other archs */
735 static inline void mark_pages_wc(struct azx
*chip
, struct snd_dma_buffer
*buf
,
739 static inline void mark_runtime_wc(struct azx
*chip
, struct azx_dev
*azx_dev
,
740 struct snd_pcm_substream
*substream
, bool on
)
745 static int azx_acquire_irq(struct azx
*chip
, int do_disconnect
);
746 static int azx_send_cmd(struct hda_bus
*bus
, unsigned int val
);
748 * Interface for HD codec
752 * CORB / RIRB interface
754 static int azx_alloc_cmd_io(struct azx
*chip
)
758 /* single page (at least 4096 bytes) must suffice for both ringbuffes */
759 err
= snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV
,
760 snd_dma_pci_data(chip
->pci
),
761 PAGE_SIZE
, &chip
->rb
);
763 dev_err(chip
->card
->dev
, "cannot allocate CORB/RIRB\n");
766 mark_pages_wc(chip
, &chip
->rb
, true);
770 static void azx_init_cmd_io(struct azx
*chip
)
772 spin_lock_irq(&chip
->reg_lock
);
774 chip
->corb
.addr
= chip
->rb
.addr
;
775 chip
->corb
.buf
= (u32
*)chip
->rb
.area
;
776 azx_writel(chip
, CORBLBASE
, (u32
)chip
->corb
.addr
);
777 azx_writel(chip
, CORBUBASE
, upper_32_bits(chip
->corb
.addr
));
779 /* set the corb size to 256 entries (ULI requires explicitly) */
780 azx_writeb(chip
, CORBSIZE
, 0x02);
781 /* set the corb write pointer to 0 */
782 azx_writew(chip
, CORBWP
, 0);
783 /* reset the corb hw read pointer */
784 azx_writew(chip
, CORBRP
, ICH6_CORBRP_RST
);
785 /* enable corb dma */
786 azx_writeb(chip
, CORBCTL
, ICH6_CORBCTL_RUN
);
789 chip
->rirb
.addr
= chip
->rb
.addr
+ 2048;
790 chip
->rirb
.buf
= (u32
*)(chip
->rb
.area
+ 2048);
791 chip
->rirb
.wp
= chip
->rirb
.rp
= 0;
792 memset(chip
->rirb
.cmds
, 0, sizeof(chip
->rirb
.cmds
));
793 azx_writel(chip
, RIRBLBASE
, (u32
)chip
->rirb
.addr
);
794 azx_writel(chip
, RIRBUBASE
, upper_32_bits(chip
->rirb
.addr
));
796 /* set the rirb size to 256 entries (ULI requires explicitly) */
797 azx_writeb(chip
, RIRBSIZE
, 0x02);
798 /* reset the rirb hw write pointer */
799 azx_writew(chip
, RIRBWP
, ICH6_RIRBWP_RST
);
800 /* set N=1, get RIRB response interrupt for new entry */
801 if (chip
->driver_caps
& AZX_DCAPS_CTX_WORKAROUND
)
802 azx_writew(chip
, RINTCNT
, 0xc0);
804 azx_writew(chip
, RINTCNT
, 1);
805 /* enable rirb dma and response irq */
806 azx_writeb(chip
, RIRBCTL
, ICH6_RBCTL_DMA_EN
| ICH6_RBCTL_IRQ_EN
);
807 spin_unlock_irq(&chip
->reg_lock
);
810 static void azx_free_cmd_io(struct azx
*chip
)
812 spin_lock_irq(&chip
->reg_lock
);
813 /* disable ringbuffer DMAs */
814 azx_writeb(chip
, RIRBCTL
, 0);
815 azx_writeb(chip
, CORBCTL
, 0);
816 spin_unlock_irq(&chip
->reg_lock
);
819 static unsigned int azx_command_addr(u32 cmd
)
821 unsigned int addr
= cmd
>> 28;
823 if (addr
>= AZX_MAX_CODECS
) {
832 static int azx_corb_send_cmd(struct hda_bus
*bus
, u32 val
)
834 struct azx
*chip
= bus
->private_data
;
835 unsigned int addr
= azx_command_addr(val
);
838 spin_lock_irq(&chip
->reg_lock
);
840 /* add command to corb */
841 wp
= azx_readw(chip
, CORBWP
);
843 /* something wrong, controller likely turned to D3 */
844 spin_unlock_irq(&chip
->reg_lock
);
848 wp
%= ICH6_MAX_CORB_ENTRIES
;
850 rp
= azx_readw(chip
, CORBRP
);
852 /* oops, it's full */
853 spin_unlock_irq(&chip
->reg_lock
);
857 chip
->rirb
.cmds
[addr
]++;
858 chip
->corb
.buf
[wp
] = cpu_to_le32(val
);
859 azx_writel(chip
, CORBWP
, wp
);
861 spin_unlock_irq(&chip
->reg_lock
);
866 #define ICH6_RIRB_EX_UNSOL_EV (1<<4)
868 /* retrieve RIRB entry - called from interrupt handler */
869 static void azx_update_rirb(struct azx
*chip
)
875 wp
= azx_readw(chip
, RIRBWP
);
877 /* something wrong, controller likely turned to D3 */
881 if (wp
== chip
->rirb
.wp
)
885 while (chip
->rirb
.rp
!= wp
) {
887 chip
->rirb
.rp
%= ICH6_MAX_RIRB_ENTRIES
;
889 rp
= chip
->rirb
.rp
<< 1; /* an RIRB entry is 8-bytes */
890 res_ex
= le32_to_cpu(chip
->rirb
.buf
[rp
+ 1]);
891 res
= le32_to_cpu(chip
->rirb
.buf
[rp
]);
893 if ((addr
>= AZX_MAX_CODECS
) || !(chip
->codec_mask
& (1 << addr
))) {
894 dev_err(chip
->card
->dev
, "spurious response %#x:%#x, rp = %d, wp = %d",
899 else if (res_ex
& ICH6_RIRB_EX_UNSOL_EV
)
900 snd_hda_queue_unsol_event(chip
->bus
, res
, res_ex
);
901 else if (chip
->rirb
.cmds
[addr
]) {
902 chip
->rirb
.res
[addr
] = res
;
904 chip
->rirb
.cmds
[addr
]--;
905 } else if (printk_ratelimit()) {
906 dev_err(chip
->card
->dev
, "spurious response %#x:%#x, last cmd=%#08x\n",
908 chip
->last_cmd
[addr
]);
913 /* receive a response */
914 static unsigned int azx_rirb_get_response(struct hda_bus
*bus
,
917 struct azx
*chip
= bus
->private_data
;
918 unsigned long timeout
;
919 unsigned long loopcounter
;
923 timeout
= jiffies
+ msecs_to_jiffies(1000);
925 for (loopcounter
= 0;; loopcounter
++) {
926 if (chip
->polling_mode
|| do_poll
) {
927 spin_lock_irq(&chip
->reg_lock
);
928 azx_update_rirb(chip
);
929 spin_unlock_irq(&chip
->reg_lock
);
931 if (!chip
->rirb
.cmds
[addr
]) {
936 chip
->poll_count
= 0;
937 return chip
->rirb
.res
[addr
]; /* the last value */
939 if (time_after(jiffies
, timeout
))
941 if (bus
->needs_damn_long_delay
|| loopcounter
> 3000)
942 msleep(2); /* temporary workaround */
949 if (!bus
->no_response_fallback
)
952 if (!chip
->polling_mode
&& chip
->poll_count
< 2) {
953 dev_dbg(chip
->card
->dev
,
954 "azx_get_response timeout, polling the codec once: last cmd=0x%08x\n",
955 chip
->last_cmd
[addr
]);
962 if (!chip
->polling_mode
) {
963 dev_warn(chip
->card
->dev
,
964 "azx_get_response timeout, switching to polling mode: last cmd=0x%08x\n",
965 chip
->last_cmd
[addr
]);
966 chip
->polling_mode
= 1;
971 dev_warn(chip
->card
->dev
,
972 "No response from codec, disabling MSI: last cmd=0x%08x\n",
973 chip
->last_cmd
[addr
]);
974 free_irq(chip
->irq
, chip
);
976 pci_disable_msi(chip
->pci
);
978 if (azx_acquire_irq(chip
, 1) < 0) {
986 /* If this critical timeout happens during the codec probing
987 * phase, this is likely an access to a non-existing codec
988 * slot. Better to return an error and reset the system.
993 /* a fatal communication error; need either to reset or to fallback
994 * to the single_cmd mode
997 if (bus
->allow_bus_reset
&& !bus
->response_reset
&& !bus
->in_reset
) {
998 bus
->response_reset
= 1;
999 return -1; /* give a chance to retry */
1002 dev_err(chip
->card
->dev
,
1003 "azx_get_response timeout, switching to single_cmd mode: last cmd=0x%08x\n",
1004 chip
->last_cmd
[addr
]);
1005 chip
->single_cmd
= 1;
1006 bus
->response_reset
= 0;
1007 /* release CORB/RIRB */
1008 azx_free_cmd_io(chip
);
1009 /* disable unsolicited responses */
1010 azx_writel(chip
, GCTL
, azx_readl(chip
, GCTL
) & ~ICH6_GCTL_UNSOL
);
1015 * Use the single immediate command instead of CORB/RIRB for simplicity
1017 * Note: according to Intel, this is not preferred use. The command was
1018 * intended for the BIOS only, and may get confused with unsolicited
1019 * responses. So, we shouldn't use it for normal operation from the
1021 * I left the codes, however, for debugging/testing purposes.
1024 /* receive a response */
1025 static int azx_single_wait_for_response(struct azx
*chip
, unsigned int addr
)
1030 /* check IRV busy bit */
1031 if (azx_readw(chip
, IRS
) & ICH6_IRS_VALID
) {
1032 /* reuse rirb.res as the response return value */
1033 chip
->rirb
.res
[addr
] = azx_readl(chip
, IR
);
1038 if (printk_ratelimit())
1039 dev_dbg(chip
->card
->dev
, "get_response timeout: IRS=0x%x\n",
1040 azx_readw(chip
, IRS
));
1041 chip
->rirb
.res
[addr
] = -1;
1045 /* send a command */
1046 static int azx_single_send_cmd(struct hda_bus
*bus
, u32 val
)
1048 struct azx
*chip
= bus
->private_data
;
1049 unsigned int addr
= azx_command_addr(val
);
1052 bus
->rirb_error
= 0;
1054 /* check ICB busy bit */
1055 if (!((azx_readw(chip
, IRS
) & ICH6_IRS_BUSY
))) {
1056 /* Clear IRV valid bit */
1057 azx_writew(chip
, IRS
, azx_readw(chip
, IRS
) |
1059 azx_writel(chip
, IC
, val
);
1060 azx_writew(chip
, IRS
, azx_readw(chip
, IRS
) |
1062 return azx_single_wait_for_response(chip
, addr
);
1066 if (printk_ratelimit())
1067 dev_dbg(chip
->card
->dev
,
1068 "send_cmd timeout: IRS=0x%x, val=0x%x\n",
1069 azx_readw(chip
, IRS
), val
);
1073 /* receive a response */
1074 static unsigned int azx_single_get_response(struct hda_bus
*bus
,
1077 struct azx
*chip
= bus
->private_data
;
1078 return chip
->rirb
.res
[addr
];
1082 * The below are the main callbacks from hda_codec.
1084 * They are just the skeleton to call sub-callbacks according to the
1085 * current setting of chip->single_cmd.
1088 /* send a command */
1089 static int azx_send_cmd(struct hda_bus
*bus
, unsigned int val
)
1091 struct azx
*chip
= bus
->private_data
;
1095 chip
->last_cmd
[azx_command_addr(val
)] = val
;
1096 if (chip
->single_cmd
)
1097 return azx_single_send_cmd(bus
, val
);
1099 return azx_corb_send_cmd(bus
, val
);
1102 /* get a response */
1103 static unsigned int azx_get_response(struct hda_bus
*bus
,
1106 struct azx
*chip
= bus
->private_data
;
1109 if (chip
->single_cmd
)
1110 return azx_single_get_response(bus
, addr
);
1112 return azx_rirb_get_response(bus
, addr
);
1116 static void azx_power_notify(struct hda_bus
*bus
, bool power_up
);
1119 #ifdef CONFIG_SND_HDA_DSP_LOADER
1120 static int azx_load_dsp_prepare(struct hda_bus
*bus
, unsigned int format
,
1121 unsigned int byte_size
,
1122 struct snd_dma_buffer
*bufp
);
1123 static void azx_load_dsp_trigger(struct hda_bus
*bus
, bool start
);
1124 static void azx_load_dsp_cleanup(struct hda_bus
*bus
,
1125 struct snd_dma_buffer
*dmab
);
1128 /* enter link reset */
1129 static void azx_enter_link_reset(struct azx
*chip
)
1131 unsigned long timeout
;
1133 /* reset controller */
1134 azx_writel(chip
, GCTL
, azx_readl(chip
, GCTL
) & ~ICH6_GCTL_RESET
);
1136 timeout
= jiffies
+ msecs_to_jiffies(100);
1137 while ((azx_readb(chip
, GCTL
) & ICH6_GCTL_RESET
) &&
1138 time_before(jiffies
, timeout
))
1139 usleep_range(500, 1000);
1142 /* exit link reset */
1143 static void azx_exit_link_reset(struct azx
*chip
)
1145 unsigned long timeout
;
1147 azx_writeb(chip
, GCTL
, azx_readb(chip
, GCTL
) | ICH6_GCTL_RESET
);
1149 timeout
= jiffies
+ msecs_to_jiffies(100);
1150 while (!azx_readb(chip
, GCTL
) &&
1151 time_before(jiffies
, timeout
))
1152 usleep_range(500, 1000);
1155 /* reset codec link */
1156 static int azx_reset(struct azx
*chip
, int full_reset
)
1161 /* clear STATESTS */
1162 azx_writew(chip
, STATESTS
, STATESTS_INT_MASK
);
1164 /* reset controller */
1165 azx_enter_link_reset(chip
);
1167 /* delay for >= 100us for codec PLL to settle per spec
1168 * Rev 0.9 section 5.5.1
1170 usleep_range(500, 1000);
1172 /* Bring controller out of reset */
1173 azx_exit_link_reset(chip
);
1175 /* Brent Chartrand said to wait >= 540us for codecs to initialize */
1176 usleep_range(1000, 1200);
1179 /* check to see if controller is ready */
1180 if (!azx_readb(chip
, GCTL
)) {
1181 dev_dbg(chip
->card
->dev
, "azx_reset: controller not ready!\n");
1185 /* Accept unsolicited responses */
1186 if (!chip
->single_cmd
)
1187 azx_writel(chip
, GCTL
, azx_readl(chip
, GCTL
) |
1191 if (!chip
->codec_mask
) {
1192 chip
->codec_mask
= azx_readw(chip
, STATESTS
);
1193 dev_dbg(chip
->card
->dev
, "codec_mask = 0x%x\n",
1202 * Lowlevel interface
1205 /* enable interrupts */
1206 static void azx_int_enable(struct azx
*chip
)
1208 /* enable controller CIE and GIE */
1209 azx_writel(chip
, INTCTL
, azx_readl(chip
, INTCTL
) |
1210 ICH6_INT_CTRL_EN
| ICH6_INT_GLOBAL_EN
);
1213 /* disable interrupts */
1214 static void azx_int_disable(struct azx
*chip
)
1218 /* disable interrupts in stream descriptor */
1219 for (i
= 0; i
< chip
->num_streams
; i
++) {
1220 struct azx_dev
*azx_dev
= &chip
->azx_dev
[i
];
1221 azx_sd_writeb(azx_dev
, SD_CTL
,
1222 azx_sd_readb(azx_dev
, SD_CTL
) & ~SD_INT_MASK
);
1225 /* disable SIE for all streams */
1226 azx_writeb(chip
, INTCTL
, 0);
1228 /* disable controller CIE and GIE */
1229 azx_writel(chip
, INTCTL
, azx_readl(chip
, INTCTL
) &
1230 ~(ICH6_INT_CTRL_EN
| ICH6_INT_GLOBAL_EN
));
1233 /* clear interrupts */
1234 static void azx_int_clear(struct azx
*chip
)
1238 /* clear stream status */
1239 for (i
= 0; i
< chip
->num_streams
; i
++) {
1240 struct azx_dev
*azx_dev
= &chip
->azx_dev
[i
];
1241 azx_sd_writeb(azx_dev
, SD_STS
, SD_INT_MASK
);
1244 /* clear STATESTS */
1245 azx_writew(chip
, STATESTS
, STATESTS_INT_MASK
);
1247 /* clear rirb status */
1248 azx_writeb(chip
, RIRBSTS
, RIRB_INT_MASK
);
1250 /* clear int status */
1251 azx_writel(chip
, INTSTS
, ICH6_INT_CTRL_EN
| ICH6_INT_ALL_STREAM
);
1254 /* start a stream */
1255 static void azx_stream_start(struct azx
*chip
, struct azx_dev
*azx_dev
)
1258 * Before stream start, initialize parameter
1260 azx_dev
->insufficient
= 1;
1263 azx_writel(chip
, INTCTL
,
1264 azx_readl(chip
, INTCTL
) | (1 << azx_dev
->index
));
1265 /* set DMA start and interrupt mask */
1266 azx_sd_writeb(azx_dev
, SD_CTL
, azx_sd_readb(azx_dev
, SD_CTL
) |
1267 SD_CTL_DMA_START
| SD_INT_MASK
);
1271 static void azx_stream_clear(struct azx
*chip
, struct azx_dev
*azx_dev
)
1273 azx_sd_writeb(azx_dev
, SD_CTL
, azx_sd_readb(azx_dev
, SD_CTL
) &
1274 ~(SD_CTL_DMA_START
| SD_INT_MASK
));
1275 azx_sd_writeb(azx_dev
, SD_STS
, SD_INT_MASK
); /* to be sure */
1279 static void azx_stream_stop(struct azx
*chip
, struct azx_dev
*azx_dev
)
1281 azx_stream_clear(chip
, azx_dev
);
1283 azx_writel(chip
, INTCTL
,
1284 azx_readl(chip
, INTCTL
) & ~(1 << azx_dev
->index
));
1289 * reset and start the controller registers
1291 static void azx_init_chip(struct azx
*chip
, int full_reset
)
1293 if (chip
->initialized
)
1296 /* reset controller */
1297 azx_reset(chip
, full_reset
);
1299 /* initialize interrupts */
1300 azx_int_clear(chip
);
1301 azx_int_enable(chip
);
1303 /* initialize the codec command I/O */
1304 if (!chip
->single_cmd
)
1305 azx_init_cmd_io(chip
);
1307 /* program the position buffer */
1308 azx_writel(chip
, DPLBASE
, (u32
)chip
->posbuf
.addr
);
1309 azx_writel(chip
, DPUBASE
, upper_32_bits(chip
->posbuf
.addr
));
1311 chip
->initialized
= 1;
1315 * initialize the PCI registers
1317 /* update bits in a PCI register byte */
1318 static void update_pci_byte(struct pci_dev
*pci
, unsigned int reg
,
1319 unsigned char mask
, unsigned char val
)
1323 pci_read_config_byte(pci
, reg
, &data
);
1325 data
|= (val
& mask
);
1326 pci_write_config_byte(pci
, reg
, data
);
1329 static void azx_init_pci(struct azx
*chip
)
1331 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
1332 * TCSEL == Traffic Class Select Register, which sets PCI express QOS
1333 * Ensuring these bits are 0 clears playback static on some HD Audio
1335 * The PCI register TCSEL is defined in the Intel manuals.
1337 if (!(chip
->driver_caps
& AZX_DCAPS_NO_TCSEL
)) {
1338 dev_dbg(chip
->card
->dev
, "Clearing TCSEL\n");
1339 update_pci_byte(chip
->pci
, ICH6_PCIREG_TCSEL
, 0x07, 0);
1342 /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
1343 * we need to enable snoop.
1345 if (chip
->driver_caps
& AZX_DCAPS_ATI_SNOOP
) {
1346 dev_dbg(chip
->card
->dev
, "Setting ATI snoop: %d\n",
1348 update_pci_byte(chip
->pci
,
1349 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR
, 0x07,
1350 azx_snoop(chip
) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP
: 0);
1353 /* For NVIDIA HDA, enable snoop */
1354 if (chip
->driver_caps
& AZX_DCAPS_NVIDIA_SNOOP
) {
1355 dev_dbg(chip
->card
->dev
, "Setting Nvidia snoop: %d\n",
1357 update_pci_byte(chip
->pci
,
1358 NVIDIA_HDA_TRANSREG_ADDR
,
1359 0x0f, NVIDIA_HDA_ENABLE_COHBITS
);
1360 update_pci_byte(chip
->pci
,
1361 NVIDIA_HDA_ISTRM_COH
,
1362 0x01, NVIDIA_HDA_ENABLE_COHBIT
);
1363 update_pci_byte(chip
->pci
,
1364 NVIDIA_HDA_OSTRM_COH
,
1365 0x01, NVIDIA_HDA_ENABLE_COHBIT
);
1368 /* Enable SCH/PCH snoop if needed */
1369 if (chip
->driver_caps
& AZX_DCAPS_SCH_SNOOP
) {
1370 unsigned short snoop
;
1371 pci_read_config_word(chip
->pci
, INTEL_SCH_HDA_DEVC
, &snoop
);
1372 if ((!azx_snoop(chip
) && !(snoop
& INTEL_SCH_HDA_DEVC_NOSNOOP
)) ||
1373 (azx_snoop(chip
) && (snoop
& INTEL_SCH_HDA_DEVC_NOSNOOP
))) {
1374 snoop
&= ~INTEL_SCH_HDA_DEVC_NOSNOOP
;
1375 if (!azx_snoop(chip
))
1376 snoop
|= INTEL_SCH_HDA_DEVC_NOSNOOP
;
1377 pci_write_config_word(chip
->pci
, INTEL_SCH_HDA_DEVC
, snoop
);
1378 pci_read_config_word(chip
->pci
,
1379 INTEL_SCH_HDA_DEVC
, &snoop
);
1381 dev_dbg(chip
->card
->dev
, "SCH snoop: %s\n",
1382 (snoop
& INTEL_SCH_HDA_DEVC_NOSNOOP
) ?
1383 "Disabled" : "Enabled");
1388 static int azx_position_ok(struct azx
*chip
, struct azx_dev
*azx_dev
);
1393 static irqreturn_t
azx_interrupt(int irq
, void *dev_id
)
1395 struct azx
*chip
= dev_id
;
1396 struct azx_dev
*azx_dev
;
1401 #ifdef CONFIG_PM_RUNTIME
1402 if (chip
->driver_caps
& AZX_DCAPS_PM_RUNTIME
)
1403 if (chip
->pci
->dev
.power
.runtime_status
!= RPM_ACTIVE
)
1407 spin_lock(&chip
->reg_lock
);
1409 if (chip
->disabled
) {
1410 spin_unlock(&chip
->reg_lock
);
1414 status
= azx_readl(chip
, INTSTS
);
1415 if (status
== 0 || status
== 0xffffffff) {
1416 spin_unlock(&chip
->reg_lock
);
1420 for (i
= 0; i
< chip
->num_streams
; i
++) {
1421 azx_dev
= &chip
->azx_dev
[i
];
1422 if (status
& azx_dev
->sd_int_sta_mask
) {
1423 sd_status
= azx_sd_readb(azx_dev
, SD_STS
);
1424 azx_sd_writeb(azx_dev
, SD_STS
, SD_INT_MASK
);
1425 if (!azx_dev
->substream
|| !azx_dev
->running
||
1426 !(sd_status
& SD_INT_COMPLETE
))
1428 /* check whether this IRQ is really acceptable */
1429 ok
= azx_position_ok(chip
, azx_dev
);
1431 azx_dev
->irq_pending
= 0;
1432 spin_unlock(&chip
->reg_lock
);
1433 snd_pcm_period_elapsed(azx_dev
->substream
);
1434 spin_lock(&chip
->reg_lock
);
1435 } else if (ok
== 0 && chip
->bus
&& chip
->bus
->workq
) {
1436 /* bogus IRQ, process it later */
1437 azx_dev
->irq_pending
= 1;
1438 queue_work(chip
->bus
->workq
,
1439 &chip
->irq_pending_work
);
1444 /* clear rirb int */
1445 status
= azx_readb(chip
, RIRBSTS
);
1446 if (status
& RIRB_INT_MASK
) {
1447 if (status
& RIRB_INT_RESPONSE
) {
1448 if (chip
->driver_caps
& AZX_DCAPS_RIRB_PRE_DELAY
)
1450 azx_update_rirb(chip
);
1452 azx_writeb(chip
, RIRBSTS
, RIRB_INT_MASK
);
1456 /* clear state status int */
1457 if (azx_readw(chip
, STATESTS
) & 0x04)
1458 azx_writew(chip
, STATESTS
, 0x04);
1460 spin_unlock(&chip
->reg_lock
);
1467 * set up a BDL entry
1469 static int setup_bdle(struct azx
*chip
,
1470 struct snd_dma_buffer
*dmab
,
1471 struct azx_dev
*azx_dev
, u32
**bdlp
,
1472 int ofs
, int size
, int with_ioc
)
1480 if (azx_dev
->frags
>= AZX_MAX_BDL_ENTRIES
)
1483 addr
= snd_sgbuf_get_addr(dmab
, ofs
);
1484 /* program the address field of the BDL entry */
1485 bdl
[0] = cpu_to_le32((u32
)addr
);
1486 bdl
[1] = cpu_to_le32(upper_32_bits(addr
));
1487 /* program the size field of the BDL entry */
1488 chunk
= snd_sgbuf_get_chunk_size(dmab
, ofs
, size
);
1489 /* one BDLE cannot cross 4K boundary on CTHDA chips */
1490 if (chip
->driver_caps
& AZX_DCAPS_4K_BDLE_BOUNDARY
) {
1491 u32 remain
= 0x1000 - (ofs
& 0xfff);
1495 bdl
[2] = cpu_to_le32(chunk
);
1496 /* program the IOC to enable interrupt
1497 * only when the whole fragment is processed
1500 bdl
[3] = (size
|| !with_ioc
) ? 0 : cpu_to_le32(0x01);
1510 * set up BDL entries
1512 static int azx_setup_periods(struct azx
*chip
,
1513 struct snd_pcm_substream
*substream
,
1514 struct azx_dev
*azx_dev
)
1517 int i
, ofs
, periods
, period_bytes
;
1520 /* reset BDL address */
1521 azx_sd_writel(azx_dev
, SD_BDLPL
, 0);
1522 azx_sd_writel(azx_dev
, SD_BDLPU
, 0);
1524 period_bytes
= azx_dev
->period_bytes
;
1525 periods
= azx_dev
->bufsize
/ period_bytes
;
1527 /* program the initial BDL entries */
1528 bdl
= (u32
*)azx_dev
->bdl
.area
;
1531 pos_adj
= bdl_pos_adj
[chip
->dev_index
];
1532 if (!azx_dev
->no_period_wakeup
&& pos_adj
> 0) {
1533 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
1534 int pos_align
= pos_adj
;
1535 pos_adj
= (pos_adj
* runtime
->rate
+ 47999) / 48000;
1537 pos_adj
= pos_align
;
1539 pos_adj
= ((pos_adj
+ pos_align
- 1) / pos_align
) *
1541 pos_adj
= frames_to_bytes(runtime
, pos_adj
);
1542 if (pos_adj
>= period_bytes
) {
1543 dev_warn(chip
->card
->dev
,"Too big adjustment %d\n",
1544 bdl_pos_adj
[chip
->dev_index
]);
1547 ofs
= setup_bdle(chip
, snd_pcm_get_dma_buf(substream
),
1549 &bdl
, ofs
, pos_adj
, true);
1555 for (i
= 0; i
< periods
; i
++) {
1556 if (i
== periods
- 1 && pos_adj
)
1557 ofs
= setup_bdle(chip
, snd_pcm_get_dma_buf(substream
),
1559 period_bytes
- pos_adj
, 0);
1561 ofs
= setup_bdle(chip
, snd_pcm_get_dma_buf(substream
),
1564 !azx_dev
->no_period_wakeup
);
1571 dev_err(chip
->card
->dev
, "Too many BDL entries: buffer=%d, period=%d\n",
1572 azx_dev
->bufsize
, period_bytes
);
1577 static void azx_stream_reset(struct azx
*chip
, struct azx_dev
*azx_dev
)
1582 azx_stream_clear(chip
, azx_dev
);
1584 azx_sd_writeb(azx_dev
, SD_CTL
, azx_sd_readb(azx_dev
, SD_CTL
) |
1585 SD_CTL_STREAM_RESET
);
1588 while (!((val
= azx_sd_readb(azx_dev
, SD_CTL
)) & SD_CTL_STREAM_RESET
) &&
1591 val
&= ~SD_CTL_STREAM_RESET
;
1592 azx_sd_writeb(azx_dev
, SD_CTL
, val
);
1596 /* waiting for hardware to report that the stream is out of reset */
1597 while (((val
= azx_sd_readb(azx_dev
, SD_CTL
)) & SD_CTL_STREAM_RESET
) &&
1601 /* reset first position - may not be synced with hw at this time */
1602 *azx_dev
->posbuf
= 0;
1606 * set up the SD for streaming
1608 static int azx_setup_controller(struct azx
*chip
, struct azx_dev
*azx_dev
)
1611 /* make sure the run bit is zero for SD */
1612 azx_stream_clear(chip
, azx_dev
);
1613 /* program the stream_tag */
1614 val
= azx_sd_readl(azx_dev
, SD_CTL
);
1615 val
= (val
& ~SD_CTL_STREAM_TAG_MASK
) |
1616 (azx_dev
->stream_tag
<< SD_CTL_STREAM_TAG_SHIFT
);
1617 if (!azx_snoop(chip
))
1618 val
|= SD_CTL_TRAFFIC_PRIO
;
1619 azx_sd_writel(azx_dev
, SD_CTL
, val
);
1621 /* program the length of samples in cyclic buffer */
1622 azx_sd_writel(azx_dev
, SD_CBL
, azx_dev
->bufsize
);
1624 /* program the stream format */
1625 /* this value needs to be the same as the one programmed */
1626 azx_sd_writew(azx_dev
, SD_FORMAT
, azx_dev
->format_val
);
1628 /* program the stream LVI (last valid index) of the BDL */
1629 azx_sd_writew(azx_dev
, SD_LVI
, azx_dev
->frags
- 1);
1631 /* program the BDL address */
1632 /* lower BDL address */
1633 azx_sd_writel(azx_dev
, SD_BDLPL
, (u32
)azx_dev
->bdl
.addr
);
1634 /* upper BDL address */
1635 azx_sd_writel(azx_dev
, SD_BDLPU
, upper_32_bits(azx_dev
->bdl
.addr
));
1637 /* enable the position buffer */
1638 if (chip
->position_fix
[0] != POS_FIX_LPIB
||
1639 chip
->position_fix
[1] != POS_FIX_LPIB
) {
1640 if (!(azx_readl(chip
, DPLBASE
) & ICH6_DPLBASE_ENABLE
))
1641 azx_writel(chip
, DPLBASE
,
1642 (u32
)chip
->posbuf
.addr
| ICH6_DPLBASE_ENABLE
);
1645 /* set the interrupt enable bits in the descriptor control register */
1646 azx_sd_writel(azx_dev
, SD_CTL
,
1647 azx_sd_readl(azx_dev
, SD_CTL
) | SD_INT_MASK
);
1653 * Probe the given codec address
1655 static int probe_codec(struct azx
*chip
, int addr
)
1657 unsigned int cmd
= (addr
<< 28) | (AC_NODE_ROOT
<< 20) |
1658 (AC_VERB_PARAMETERS
<< 8) | AC_PAR_VENDOR_ID
;
1661 mutex_lock(&chip
->bus
->cmd_mutex
);
1663 azx_send_cmd(chip
->bus
, cmd
);
1664 res
= azx_get_response(chip
->bus
, addr
);
1666 mutex_unlock(&chip
->bus
->cmd_mutex
);
1669 dev_dbg(chip
->card
->dev
, "codec #%d probed OK\n", addr
);
1673 static int azx_attach_pcm_stream(struct hda_bus
*bus
, struct hda_codec
*codec
,
1674 struct hda_pcm
*cpcm
);
1675 static void azx_stop_chip(struct azx
*chip
);
1677 static void azx_bus_reset(struct hda_bus
*bus
)
1679 struct azx
*chip
= bus
->private_data
;
1682 azx_stop_chip(chip
);
1683 azx_init_chip(chip
, 1);
1685 if (chip
->initialized
) {
1687 list_for_each_entry(p
, &chip
->pcm_list
, list
)
1688 snd_pcm_suspend_all(p
->pcm
);
1689 snd_hda_suspend(chip
->bus
);
1690 snd_hda_resume(chip
->bus
);
1696 static int get_jackpoll_interval(struct azx
*chip
)
1698 int i
= jackpoll_ms
[chip
->dev_index
];
1702 if (i
< 50 || i
> 60000)
1705 j
= msecs_to_jiffies(i
);
1707 dev_warn(chip
->card
->dev
,
1708 "jackpoll_ms value out of range: %d\n", i
);
1713 * Codec initialization
1716 /* number of codec slots for each chipset: 0 = default slots (i.e. 4) */
1717 static unsigned int azx_max_codecs
[AZX_NUM_DRIVERS
] = {
1718 [AZX_DRIVER_NVIDIA
] = 8,
1719 [AZX_DRIVER_TERA
] = 1,
1722 static int azx_codec_create(struct azx
*chip
, const char *model
)
1724 struct hda_bus_template bus_temp
;
1728 memset(&bus_temp
, 0, sizeof(bus_temp
));
1729 bus_temp
.private_data
= chip
;
1730 bus_temp
.modelname
= model
;
1731 bus_temp
.pci
= chip
->pci
;
1732 bus_temp
.ops
.command
= azx_send_cmd
;
1733 bus_temp
.ops
.get_response
= azx_get_response
;
1734 bus_temp
.ops
.attach_pcm
= azx_attach_pcm_stream
;
1735 bus_temp
.ops
.bus_reset
= azx_bus_reset
;
1737 bus_temp
.power_save
= &power_save
;
1738 bus_temp
.ops
.pm_notify
= azx_power_notify
;
1740 #ifdef CONFIG_SND_HDA_DSP_LOADER
1741 bus_temp
.ops
.load_dsp_prepare
= azx_load_dsp_prepare
;
1742 bus_temp
.ops
.load_dsp_trigger
= azx_load_dsp_trigger
;
1743 bus_temp
.ops
.load_dsp_cleanup
= azx_load_dsp_cleanup
;
1746 err
= snd_hda_bus_new(chip
->card
, &bus_temp
, &chip
->bus
);
1750 if (chip
->driver_caps
& AZX_DCAPS_RIRB_DELAY
) {
1751 dev_dbg(chip
->card
->dev
, "Enable delay in RIRB handling\n");
1752 chip
->bus
->needs_damn_long_delay
= 1;
1756 max_slots
= azx_max_codecs
[chip
->driver_type
];
1758 max_slots
= AZX_DEFAULT_CODECS
;
1760 /* First try to probe all given codec slots */
1761 for (c
= 0; c
< max_slots
; c
++) {
1762 if ((chip
->codec_mask
& (1 << c
)) & chip
->codec_probe_mask
) {
1763 if (probe_codec(chip
, c
) < 0) {
1764 /* Some BIOSen give you wrong codec addresses
1767 dev_warn(chip
->card
->dev
,
1768 "Codec #%d probe error; disabling it...\n", c
);
1769 chip
->codec_mask
&= ~(1 << c
);
1770 /* More badly, accessing to a non-existing
1771 * codec often screws up the controller chip,
1772 * and disturbs the further communications.
1773 * Thus if an error occurs during probing,
1774 * better to reset the controller chip to
1775 * get back to the sanity state.
1777 azx_stop_chip(chip
);
1778 azx_init_chip(chip
, 1);
1783 /* AMD chipsets often cause the communication stalls upon certain
1784 * sequence like the pin-detection. It seems that forcing the synced
1785 * access works around the stall. Grrr...
1787 if (chip
->driver_caps
& AZX_DCAPS_SYNC_WRITE
) {
1788 dev_dbg(chip
->card
->dev
, "Enable sync_write for stable communication\n");
1789 chip
->bus
->sync_write
= 1;
1790 chip
->bus
->allow_bus_reset
= 1;
1793 /* Then create codec instances */
1794 for (c
= 0; c
< max_slots
; c
++) {
1795 if ((chip
->codec_mask
& (1 << c
)) & chip
->codec_probe_mask
) {
1796 struct hda_codec
*codec
;
1797 err
= snd_hda_codec_new(chip
->bus
, c
, &codec
);
1800 codec
->jackpoll_interval
= get_jackpoll_interval(chip
);
1801 codec
->beep_mode
= chip
->beep_mode
;
1806 dev_err(chip
->card
->dev
, "no codecs initialized\n");
1812 /* configure each codec instance */
1813 static int azx_codec_configure(struct azx
*chip
)
1815 struct hda_codec
*codec
;
1816 list_for_each_entry(codec
, &chip
->bus
->codec_list
, list
) {
1817 snd_hda_codec_configure(codec
);
1827 /* assign a stream for the PCM */
1828 static inline struct azx_dev
*
1829 azx_assign_device(struct azx
*chip
, struct snd_pcm_substream
*substream
)
1832 struct azx_dev
*res
= NULL
;
1833 /* make a non-zero unique key for the substream */
1834 int key
= (substream
->pcm
->device
<< 16) | (substream
->number
<< 2) |
1835 (substream
->stream
+ 1);
1837 if (substream
->stream
== SNDRV_PCM_STREAM_PLAYBACK
) {
1838 dev
= chip
->playback_index_offset
;
1839 nums
= chip
->playback_streams
;
1841 dev
= chip
->capture_index_offset
;
1842 nums
= chip
->capture_streams
;
1844 for (i
= 0; i
< nums
; i
++, dev
++) {
1845 struct azx_dev
*azx_dev
= &chip
->azx_dev
[dev
];
1847 if (!azx_dev
->opened
&& !dsp_is_locked(azx_dev
)) {
1849 if (res
->assigned_key
== key
) {
1851 res
->assigned_key
= key
;
1852 dsp_unlock(azx_dev
);
1856 dsp_unlock(azx_dev
);
1861 res
->assigned_key
= key
;
1867 /* release the assigned stream */
1868 static inline void azx_release_device(struct azx_dev
*azx_dev
)
1870 azx_dev
->opened
= 0;
1873 static cycle_t
azx_cc_read(const struct cyclecounter
*cc
)
1875 struct azx_dev
*azx_dev
= container_of(cc
, struct azx_dev
, azx_cc
);
1876 struct snd_pcm_substream
*substream
= azx_dev
->substream
;
1877 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
1878 struct azx
*chip
= apcm
->chip
;
1880 return azx_readl(chip
, WALLCLK
);
1883 static void azx_timecounter_init(struct snd_pcm_substream
*substream
,
1884 bool force
, cycle_t last
)
1886 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
1887 struct timecounter
*tc
= &azx_dev
->azx_tc
;
1888 struct cyclecounter
*cc
= &azx_dev
->azx_cc
;
1891 cc
->read
= azx_cc_read
;
1892 cc
->mask
= CLOCKSOURCE_MASK(32);
1895 * Converting from 24 MHz to ns means applying a 125/3 factor.
1896 * To avoid any saturation issues in intermediate operations,
1897 * the 125 factor is applied first. The division is applied
1898 * last after reading the timecounter value.
1899 * Applying the 1/3 factor as part of the multiplication
1900 * requires at least 20 bits for a decent precision, however
1901 * overflows occur after about 4 hours or less, not a option.
1904 cc
->mult
= 125; /* saturation after 195 years */
1907 nsec
= 0; /* audio time is elapsed time since trigger */
1908 timecounter_init(tc
, cc
, nsec
);
1911 * force timecounter to use predefined value,
1912 * used for synchronized starts
1914 tc
->cycle_last
= last
;
1917 static u64
azx_adjust_codec_delay(struct snd_pcm_substream
*substream
,
1920 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
1921 struct hda_pcm_stream
*hinfo
= apcm
->hinfo
[substream
->stream
];
1922 u64 codec_frames
, codec_nsecs
;
1924 if (!hinfo
->ops
.get_delay
)
1927 codec_frames
= hinfo
->ops
.get_delay(hinfo
, apcm
->codec
, substream
);
1928 codec_nsecs
= div_u64(codec_frames
* 1000000000LL,
1929 substream
->runtime
->rate
);
1931 if (substream
->stream
== SNDRV_PCM_STREAM_CAPTURE
)
1932 return nsec
+ codec_nsecs
;
1934 return (nsec
> codec_nsecs
) ? nsec
- codec_nsecs
: 0;
1937 static int azx_get_wallclock_tstamp(struct snd_pcm_substream
*substream
,
1938 struct timespec
*ts
)
1940 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
1943 nsec
= timecounter_read(&azx_dev
->azx_tc
);
1944 nsec
= div_u64(nsec
, 3); /* can be optimized */
1945 nsec
= azx_adjust_codec_delay(substream
, nsec
);
1947 *ts
= ns_to_timespec(nsec
);
1952 static struct snd_pcm_hardware azx_pcm_hw
= {
1953 .info
= (SNDRV_PCM_INFO_MMAP
|
1954 SNDRV_PCM_INFO_INTERLEAVED
|
1955 SNDRV_PCM_INFO_BLOCK_TRANSFER
|
1956 SNDRV_PCM_INFO_MMAP_VALID
|
1957 /* No full-resume yet implemented */
1958 /* SNDRV_PCM_INFO_RESUME |*/
1959 SNDRV_PCM_INFO_PAUSE
|
1960 SNDRV_PCM_INFO_SYNC_START
|
1961 SNDRV_PCM_INFO_HAS_WALL_CLOCK
|
1962 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP
),
1963 .formats
= SNDRV_PCM_FMTBIT_S16_LE
,
1964 .rates
= SNDRV_PCM_RATE_48000
,
1969 .buffer_bytes_max
= AZX_MAX_BUF_SIZE
,
1970 .period_bytes_min
= 128,
1971 .period_bytes_max
= AZX_MAX_BUF_SIZE
/ 2,
1973 .periods_max
= AZX_MAX_FRAG
,
1977 static int azx_pcm_open(struct snd_pcm_substream
*substream
)
1979 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
1980 struct hda_pcm_stream
*hinfo
= apcm
->hinfo
[substream
->stream
];
1981 struct azx
*chip
= apcm
->chip
;
1982 struct azx_dev
*azx_dev
;
1983 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
1984 unsigned long flags
;
1988 mutex_lock(&chip
->open_mutex
);
1989 azx_dev
= azx_assign_device(chip
, substream
);
1990 if (azx_dev
== NULL
) {
1991 mutex_unlock(&chip
->open_mutex
);
1994 runtime
->hw
= azx_pcm_hw
;
1995 runtime
->hw
.channels_min
= hinfo
->channels_min
;
1996 runtime
->hw
.channels_max
= hinfo
->channels_max
;
1997 runtime
->hw
.formats
= hinfo
->formats
;
1998 runtime
->hw
.rates
= hinfo
->rates
;
1999 snd_pcm_limit_hw_rates(runtime
);
2000 snd_pcm_hw_constraint_integer(runtime
, SNDRV_PCM_HW_PARAM_PERIODS
);
2002 /* avoid wrap-around with wall-clock */
2003 snd_pcm_hw_constraint_minmax(runtime
, SNDRV_PCM_HW_PARAM_BUFFER_TIME
,
2007 if (chip
->align_buffer_size
)
2008 /* constrain buffer sizes to be multiple of 128
2009 bytes. This is more efficient in terms of memory
2010 access but isn't required by the HDA spec and
2011 prevents users from specifying exact period/buffer
2012 sizes. For example for 44.1kHz, a period size set
2013 to 20ms will be rounded to 19.59ms. */
2016 /* Don't enforce steps on buffer sizes, still need to
2017 be multiple of 4 bytes (HDA spec). Tested on Intel
2018 HDA controllers, may not work on all devices where
2019 option needs to be disabled */
2022 snd_pcm_hw_constraint_step(runtime
, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES
,
2024 snd_pcm_hw_constraint_step(runtime
, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES
,
2026 snd_hda_power_up_d3wait(apcm
->codec
);
2027 err
= hinfo
->ops
.open(hinfo
, apcm
->codec
, substream
);
2029 azx_release_device(azx_dev
);
2030 snd_hda_power_down(apcm
->codec
);
2031 mutex_unlock(&chip
->open_mutex
);
2034 snd_pcm_limit_hw_rates(runtime
);
2036 if (snd_BUG_ON(!runtime
->hw
.channels_min
) ||
2037 snd_BUG_ON(!runtime
->hw
.channels_max
) ||
2038 snd_BUG_ON(!runtime
->hw
.formats
) ||
2039 snd_BUG_ON(!runtime
->hw
.rates
)) {
2040 azx_release_device(azx_dev
);
2041 hinfo
->ops
.close(hinfo
, apcm
->codec
, substream
);
2042 snd_hda_power_down(apcm
->codec
);
2043 mutex_unlock(&chip
->open_mutex
);
2047 /* disable WALLCLOCK timestamps for capture streams
2048 until we figure out how to handle digital inputs */
2049 if (substream
->stream
== SNDRV_PCM_STREAM_CAPTURE
)
2050 runtime
->hw
.info
&= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK
;
2052 spin_lock_irqsave(&chip
->reg_lock
, flags
);
2053 azx_dev
->substream
= substream
;
2054 azx_dev
->running
= 0;
2055 spin_unlock_irqrestore(&chip
->reg_lock
, flags
);
2057 runtime
->private_data
= azx_dev
;
2058 snd_pcm_set_sync(substream
);
2059 mutex_unlock(&chip
->open_mutex
);
2063 static int azx_pcm_close(struct snd_pcm_substream
*substream
)
2065 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
2066 struct hda_pcm_stream
*hinfo
= apcm
->hinfo
[substream
->stream
];
2067 struct azx
*chip
= apcm
->chip
;
2068 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
2069 unsigned long flags
;
2071 mutex_lock(&chip
->open_mutex
);
2072 spin_lock_irqsave(&chip
->reg_lock
, flags
);
2073 azx_dev
->substream
= NULL
;
2074 azx_dev
->running
= 0;
2075 spin_unlock_irqrestore(&chip
->reg_lock
, flags
);
2076 azx_release_device(azx_dev
);
2077 hinfo
->ops
.close(hinfo
, apcm
->codec
, substream
);
2078 snd_hda_power_down(apcm
->codec
);
2079 mutex_unlock(&chip
->open_mutex
);
2083 static int azx_pcm_hw_params(struct snd_pcm_substream
*substream
,
2084 struct snd_pcm_hw_params
*hw_params
)
2086 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
2087 struct azx
*chip
= apcm
->chip
;
2088 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
2092 if (dsp_is_locked(azx_dev
)) {
2097 mark_runtime_wc(chip
, azx_dev
, substream
, false);
2098 azx_dev
->bufsize
= 0;
2099 azx_dev
->period_bytes
= 0;
2100 azx_dev
->format_val
= 0;
2101 ret
= snd_pcm_lib_malloc_pages(substream
,
2102 params_buffer_bytes(hw_params
));
2105 mark_runtime_wc(chip
, azx_dev
, substream
, true);
2107 dsp_unlock(azx_dev
);
2111 static int azx_pcm_hw_free(struct snd_pcm_substream
*substream
)
2113 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
2114 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
2115 struct azx
*chip
= apcm
->chip
;
2116 struct hda_pcm_stream
*hinfo
= apcm
->hinfo
[substream
->stream
];
2118 /* reset BDL address */
2120 if (!dsp_is_locked(azx_dev
)) {
2121 azx_sd_writel(azx_dev
, SD_BDLPL
, 0);
2122 azx_sd_writel(azx_dev
, SD_BDLPU
, 0);
2123 azx_sd_writel(azx_dev
, SD_CTL
, 0);
2124 azx_dev
->bufsize
= 0;
2125 azx_dev
->period_bytes
= 0;
2126 azx_dev
->format_val
= 0;
2129 snd_hda_codec_cleanup(apcm
->codec
, hinfo
, substream
);
2131 mark_runtime_wc(chip
, azx_dev
, substream
, false);
2132 azx_dev
->prepared
= 0;
2133 dsp_unlock(azx_dev
);
2134 return snd_pcm_lib_free_pages(substream
);
2137 static int azx_pcm_prepare(struct snd_pcm_substream
*substream
)
2139 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
2140 struct azx
*chip
= apcm
->chip
;
2141 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
2142 struct hda_pcm_stream
*hinfo
= apcm
->hinfo
[substream
->stream
];
2143 struct snd_pcm_runtime
*runtime
= substream
->runtime
;
2144 unsigned int bufsize
, period_bytes
, format_val
, stream_tag
;
2146 struct hda_spdif_out
*spdif
=
2147 snd_hda_spdif_out_of_nid(apcm
->codec
, hinfo
->nid
);
2148 unsigned short ctls
= spdif
? spdif
->ctls
: 0;
2151 if (dsp_is_locked(azx_dev
)) {
2156 azx_stream_reset(chip
, azx_dev
);
2157 format_val
= snd_hda_calc_stream_format(runtime
->rate
,
2163 dev_err(chip
->card
->dev
,
2164 "invalid format_val, rate=%d, ch=%d, format=%d\n",
2165 runtime
->rate
, runtime
->channels
, runtime
->format
);
2170 bufsize
= snd_pcm_lib_buffer_bytes(substream
);
2171 period_bytes
= snd_pcm_lib_period_bytes(substream
);
2173 dev_dbg(chip
->card
->dev
, "azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
2174 bufsize
, format_val
);
2176 if (bufsize
!= azx_dev
->bufsize
||
2177 period_bytes
!= azx_dev
->period_bytes
||
2178 format_val
!= azx_dev
->format_val
||
2179 runtime
->no_period_wakeup
!= azx_dev
->no_period_wakeup
) {
2180 azx_dev
->bufsize
= bufsize
;
2181 azx_dev
->period_bytes
= period_bytes
;
2182 azx_dev
->format_val
= format_val
;
2183 azx_dev
->no_period_wakeup
= runtime
->no_period_wakeup
;
2184 err
= azx_setup_periods(chip
, substream
, azx_dev
);
2189 /* when LPIB delay correction gives a small negative value,
2190 * we ignore it; currently set the threshold statically to
2193 if (runtime
->period_size
> 64)
2194 azx_dev
->delay_negative_threshold
= -frames_to_bytes(runtime
, 64);
2196 azx_dev
->delay_negative_threshold
= 0;
2198 /* wallclk has 24Mhz clock source */
2199 azx_dev
->period_wallclk
= (((runtime
->period_size
* 24000) /
2200 runtime
->rate
) * 1000);
2201 azx_setup_controller(chip
, azx_dev
);
2202 if (substream
->stream
== SNDRV_PCM_STREAM_PLAYBACK
)
2203 azx_dev
->fifo_size
= azx_sd_readw(azx_dev
, SD_FIFOSIZE
) + 1;
2205 azx_dev
->fifo_size
= 0;
2207 stream_tag
= azx_dev
->stream_tag
;
2208 /* CA-IBG chips need the playback stream starting from 1 */
2209 if ((chip
->driver_caps
& AZX_DCAPS_CTX_WORKAROUND
) &&
2210 stream_tag
> chip
->capture_streams
)
2211 stream_tag
-= chip
->capture_streams
;
2212 err
= snd_hda_codec_prepare(apcm
->codec
, hinfo
, stream_tag
,
2213 azx_dev
->format_val
, substream
);
2217 azx_dev
->prepared
= 1;
2218 dsp_unlock(azx_dev
);
2222 static int azx_pcm_trigger(struct snd_pcm_substream
*substream
, int cmd
)
2224 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
2225 struct azx
*chip
= apcm
->chip
;
2226 struct azx_dev
*azx_dev
;
2227 struct snd_pcm_substream
*s
;
2228 int rstart
= 0, start
, nsync
= 0, sbits
= 0;
2231 azx_dev
= get_azx_dev(substream
);
2232 trace_azx_pcm_trigger(chip
, azx_dev
, cmd
);
2234 if (dsp_is_locked(azx_dev
) || !azx_dev
->prepared
)
2238 case SNDRV_PCM_TRIGGER_START
:
2240 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE
:
2241 case SNDRV_PCM_TRIGGER_RESUME
:
2244 case SNDRV_PCM_TRIGGER_PAUSE_PUSH
:
2245 case SNDRV_PCM_TRIGGER_SUSPEND
:
2246 case SNDRV_PCM_TRIGGER_STOP
:
2253 snd_pcm_group_for_each_entry(s
, substream
) {
2254 if (s
->pcm
->card
!= substream
->pcm
->card
)
2256 azx_dev
= get_azx_dev(s
);
2257 sbits
|= 1 << azx_dev
->index
;
2259 snd_pcm_trigger_done(s
, substream
);
2262 spin_lock(&chip
->reg_lock
);
2264 /* first, set SYNC bits of corresponding streams */
2265 if (chip
->driver_caps
& AZX_DCAPS_OLD_SSYNC
)
2266 azx_writel(chip
, OLD_SSYNC
,
2267 azx_readl(chip
, OLD_SSYNC
) | sbits
);
2269 azx_writel(chip
, SSYNC
, azx_readl(chip
, SSYNC
) | sbits
);
2271 snd_pcm_group_for_each_entry(s
, substream
) {
2272 if (s
->pcm
->card
!= substream
->pcm
->card
)
2274 azx_dev
= get_azx_dev(s
);
2276 azx_dev
->start_wallclk
= azx_readl(chip
, WALLCLK
);
2278 azx_dev
->start_wallclk
-=
2279 azx_dev
->period_wallclk
;
2280 azx_stream_start(chip
, azx_dev
);
2282 azx_stream_stop(chip
, azx_dev
);
2284 azx_dev
->running
= start
;
2286 spin_unlock(&chip
->reg_lock
);
2288 /* wait until all FIFOs get ready */
2289 for (timeout
= 5000; timeout
; timeout
--) {
2291 snd_pcm_group_for_each_entry(s
, substream
) {
2292 if (s
->pcm
->card
!= substream
->pcm
->card
)
2294 azx_dev
= get_azx_dev(s
);
2295 if (!(azx_sd_readb(azx_dev
, SD_STS
) &
2304 /* wait until all RUN bits are cleared */
2305 for (timeout
= 5000; timeout
; timeout
--) {
2307 snd_pcm_group_for_each_entry(s
, substream
) {
2308 if (s
->pcm
->card
!= substream
->pcm
->card
)
2310 azx_dev
= get_azx_dev(s
);
2311 if (azx_sd_readb(azx_dev
, SD_CTL
) &
2320 spin_lock(&chip
->reg_lock
);
2321 /* reset SYNC bits */
2322 if (chip
->driver_caps
& AZX_DCAPS_OLD_SSYNC
)
2323 azx_writel(chip
, OLD_SSYNC
,
2324 azx_readl(chip
, OLD_SSYNC
) & ~sbits
);
2326 azx_writel(chip
, SSYNC
, azx_readl(chip
, SSYNC
) & ~sbits
);
2328 azx_timecounter_init(substream
, 0, 0);
2332 /* same start cycle for master and group */
2333 azx_dev
= get_azx_dev(substream
);
2334 cycle_last
= azx_dev
->azx_tc
.cycle_last
;
2336 snd_pcm_group_for_each_entry(s
, substream
) {
2337 if (s
->pcm
->card
!= substream
->pcm
->card
)
2339 azx_timecounter_init(s
, 1, cycle_last
);
2343 spin_unlock(&chip
->reg_lock
);
2347 /* get the current DMA position with correction on VIA chips */
2348 static unsigned int azx_via_get_position(struct azx
*chip
,
2349 struct azx_dev
*azx_dev
)
2351 unsigned int link_pos
, mini_pos
, bound_pos
;
2352 unsigned int mod_link_pos
, mod_dma_pos
, mod_mini_pos
;
2353 unsigned int fifo_size
;
2355 link_pos
= azx_sd_readl(azx_dev
, SD_LPIB
);
2356 if (azx_dev
->substream
->stream
== SNDRV_PCM_STREAM_PLAYBACK
) {
2357 /* Playback, no problem using link position */
2363 * use mod to get the DMA position just like old chipset
2365 mod_dma_pos
= le32_to_cpu(*azx_dev
->posbuf
);
2366 mod_dma_pos
%= azx_dev
->period_bytes
;
2368 /* azx_dev->fifo_size can't get FIFO size of in stream.
2369 * Get from base address + offset.
2371 fifo_size
= readw(chip
->remap_addr
+ VIA_IN_STREAM0_FIFO_SIZE_OFFSET
);
2373 if (azx_dev
->insufficient
) {
2374 /* Link position never gather than FIFO size */
2375 if (link_pos
<= fifo_size
)
2378 azx_dev
->insufficient
= 0;
2381 if (link_pos
<= fifo_size
)
2382 mini_pos
= azx_dev
->bufsize
+ link_pos
- fifo_size
;
2384 mini_pos
= link_pos
- fifo_size
;
2386 /* Find nearest previous boudary */
2387 mod_mini_pos
= mini_pos
% azx_dev
->period_bytes
;
2388 mod_link_pos
= link_pos
% azx_dev
->period_bytes
;
2389 if (mod_link_pos
>= fifo_size
)
2390 bound_pos
= link_pos
- mod_link_pos
;
2391 else if (mod_dma_pos
>= mod_mini_pos
)
2392 bound_pos
= mini_pos
- mod_mini_pos
;
2394 bound_pos
= mini_pos
- mod_mini_pos
+ azx_dev
->period_bytes
;
2395 if (bound_pos
>= azx_dev
->bufsize
)
2399 /* Calculate real DMA position we want */
2400 return bound_pos
+ mod_dma_pos
;
2403 static unsigned int azx_get_position(struct azx
*chip
,
2404 struct azx_dev
*azx_dev
,
2407 struct snd_pcm_substream
*substream
= azx_dev
->substream
;
2408 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
2410 int stream
= substream
->stream
;
2411 struct hda_pcm_stream
*hinfo
= apcm
->hinfo
[stream
];
2414 switch (chip
->position_fix
[stream
]) {
2417 pos
= azx_sd_readl(azx_dev
, SD_LPIB
);
2419 case POS_FIX_VIACOMBO
:
2420 pos
= azx_via_get_position(chip
, azx_dev
);
2423 /* use the position buffer */
2424 pos
= le32_to_cpu(*azx_dev
->posbuf
);
2425 if (with_check
&& chip
->position_fix
[stream
] == POS_FIX_AUTO
) {
2426 if (!pos
|| pos
== (u32
)-1) {
2427 dev_info(chip
->card
->dev
,
2428 "Invalid position buffer, using LPIB read method instead.\n");
2429 chip
->position_fix
[stream
] = POS_FIX_LPIB
;
2430 pos
= azx_sd_readl(azx_dev
, SD_LPIB
);
2432 chip
->position_fix
[stream
] = POS_FIX_POSBUF
;
2437 if (pos
>= azx_dev
->bufsize
)
2440 /* calculate runtime delay from LPIB */
2441 if (substream
->runtime
&&
2442 chip
->position_fix
[stream
] == POS_FIX_POSBUF
&&
2443 (chip
->driver_caps
& AZX_DCAPS_COUNT_LPIB_DELAY
)) {
2444 unsigned int lpib_pos
= azx_sd_readl(azx_dev
, SD_LPIB
);
2445 if (stream
== SNDRV_PCM_STREAM_PLAYBACK
)
2446 delay
= pos
- lpib_pos
;
2448 delay
= lpib_pos
- pos
;
2450 if (delay
>= azx_dev
->delay_negative_threshold
)
2453 delay
+= azx_dev
->bufsize
;
2455 if (delay
>= azx_dev
->period_bytes
) {
2456 dev_info(chip
->card
->dev
,
2457 "Unstable LPIB (%d >= %d); disabling LPIB delay counting\n",
2458 delay
, azx_dev
->period_bytes
);
2460 chip
->driver_caps
&= ~AZX_DCAPS_COUNT_LPIB_DELAY
;
2462 delay
= bytes_to_frames(substream
->runtime
, delay
);
2465 if (substream
->runtime
) {
2466 if (hinfo
->ops
.get_delay
)
2467 delay
+= hinfo
->ops
.get_delay(hinfo
, apcm
->codec
,
2469 substream
->runtime
->delay
= delay
;
2472 trace_azx_get_position(chip
, azx_dev
, pos
, delay
);
2476 static snd_pcm_uframes_t
azx_pcm_pointer(struct snd_pcm_substream
*substream
)
2478 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
2479 struct azx
*chip
= apcm
->chip
;
2480 struct azx_dev
*azx_dev
= get_azx_dev(substream
);
2481 return bytes_to_frames(substream
->runtime
,
2482 azx_get_position(chip
, azx_dev
, false));
2486 * Check whether the current DMA position is acceptable for updating
2487 * periods. Returns non-zero if it's OK.
2489 * Many HD-audio controllers appear pretty inaccurate about
2490 * the update-IRQ timing. The IRQ is issued before actually the
2491 * data is processed. So, we need to process it afterwords in a
2494 static int azx_position_ok(struct azx
*chip
, struct azx_dev
*azx_dev
)
2499 wallclk
= azx_readl(chip
, WALLCLK
) - azx_dev
->start_wallclk
;
2500 if (wallclk
< (azx_dev
->period_wallclk
* 2) / 3)
2501 return -1; /* bogus (too early) interrupt */
2503 pos
= azx_get_position(chip
, azx_dev
, true);
2505 if (WARN_ONCE(!azx_dev
->period_bytes
,
2506 "hda-intel: zero azx_dev->period_bytes"))
2507 return -1; /* this shouldn't happen! */
2508 if (wallclk
< (azx_dev
->period_wallclk
* 5) / 4 &&
2509 pos
% azx_dev
->period_bytes
> azx_dev
->period_bytes
/ 2)
2510 /* NG - it's below the first next period boundary */
2511 return bdl_pos_adj
[chip
->dev_index
] ? 0 : -1;
2512 azx_dev
->start_wallclk
+= wallclk
;
2513 return 1; /* OK, it's fine */
2517 * The work for pending PCM period updates.
2519 static void azx_irq_pending_work(struct work_struct
*work
)
2521 struct azx
*chip
= container_of(work
, struct azx
, irq_pending_work
);
2524 if (!chip
->irq_pending_warned
) {
2525 dev_info(chip
->card
->dev
,
2526 "IRQ timing workaround is activated for card #%d. Suggest a bigger bdl_pos_adj.\n",
2527 chip
->card
->number
);
2528 chip
->irq_pending_warned
= 1;
2533 spin_lock_irq(&chip
->reg_lock
);
2534 for (i
= 0; i
< chip
->num_streams
; i
++) {
2535 struct azx_dev
*azx_dev
= &chip
->azx_dev
[i
];
2536 if (!azx_dev
->irq_pending
||
2537 !azx_dev
->substream
||
2540 ok
= azx_position_ok(chip
, azx_dev
);
2542 azx_dev
->irq_pending
= 0;
2543 spin_unlock(&chip
->reg_lock
);
2544 snd_pcm_period_elapsed(azx_dev
->substream
);
2545 spin_lock(&chip
->reg_lock
);
2546 } else if (ok
< 0) {
2547 pending
= 0; /* too early */
2551 spin_unlock_irq(&chip
->reg_lock
);
2558 /* clear irq_pending flags and assure no on-going workq */
2559 static void azx_clear_irq_pending(struct azx
*chip
)
2563 spin_lock_irq(&chip
->reg_lock
);
2564 for (i
= 0; i
< chip
->num_streams
; i
++)
2565 chip
->azx_dev
[i
].irq_pending
= 0;
2566 spin_unlock_irq(&chip
->reg_lock
);
2570 static int azx_pcm_mmap(struct snd_pcm_substream
*substream
,
2571 struct vm_area_struct
*area
)
2573 struct azx_pcm
*apcm
= snd_pcm_substream_chip(substream
);
2574 struct azx
*chip
= apcm
->chip
;
2575 if (!azx_snoop(chip
))
2576 area
->vm_page_prot
= pgprot_writecombine(area
->vm_page_prot
);
2577 return snd_pcm_lib_default_mmap(substream
, area
);
2580 #define azx_pcm_mmap NULL
2583 static struct snd_pcm_ops azx_pcm_ops
= {
2584 .open
= azx_pcm_open
,
2585 .close
= azx_pcm_close
,
2586 .ioctl
= snd_pcm_lib_ioctl
,
2587 .hw_params
= azx_pcm_hw_params
,
2588 .hw_free
= azx_pcm_hw_free
,
2589 .prepare
= azx_pcm_prepare
,
2590 .trigger
= azx_pcm_trigger
,
2591 .pointer
= azx_pcm_pointer
,
2592 .wall_clock
= azx_get_wallclock_tstamp
,
2593 .mmap
= azx_pcm_mmap
,
2594 .page
= snd_pcm_sgbuf_ops_page
,
2597 static void azx_pcm_free(struct snd_pcm
*pcm
)
2599 struct azx_pcm
*apcm
= pcm
->private_data
;
2601 list_del(&apcm
->list
);
2606 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
2609 azx_attach_pcm_stream(struct hda_bus
*bus
, struct hda_codec
*codec
,
2610 struct hda_pcm
*cpcm
)
2612 struct azx
*chip
= bus
->private_data
;
2613 struct snd_pcm
*pcm
;
2614 struct azx_pcm
*apcm
;
2615 int pcm_dev
= cpcm
->device
;
2619 list_for_each_entry(apcm
, &chip
->pcm_list
, list
) {
2620 if (apcm
->pcm
->device
== pcm_dev
) {
2621 dev_err(chip
->card
->dev
, "PCM %d already exists\n",
2626 err
= snd_pcm_new(chip
->card
, cpcm
->name
, pcm_dev
,
2627 cpcm
->stream
[SNDRV_PCM_STREAM_PLAYBACK
].substreams
,
2628 cpcm
->stream
[SNDRV_PCM_STREAM_CAPTURE
].substreams
,
2632 strlcpy(pcm
->name
, cpcm
->name
, sizeof(pcm
->name
));
2633 apcm
= kzalloc(sizeof(*apcm
), GFP_KERNEL
);
2638 apcm
->codec
= codec
;
2639 pcm
->private_data
= apcm
;
2640 pcm
->private_free
= azx_pcm_free
;
2641 if (cpcm
->pcm_type
== HDA_PCM_TYPE_MODEM
)
2642 pcm
->dev_class
= SNDRV_PCM_CLASS_MODEM
;
2643 list_add_tail(&apcm
->list
, &chip
->pcm_list
);
2645 for (s
= 0; s
< 2; s
++) {
2646 apcm
->hinfo
[s
] = &cpcm
->stream
[s
];
2647 if (cpcm
->stream
[s
].substreams
)
2648 snd_pcm_set_ops(pcm
, s
, &azx_pcm_ops
);
2650 /* buffer pre-allocation */
2651 size
= CONFIG_SND_HDA_PREALLOC_SIZE
* 1024;
2652 if (size
> MAX_PREALLOC_SIZE
)
2653 size
= MAX_PREALLOC_SIZE
;
2654 snd_pcm_lib_preallocate_pages_for_all(pcm
, SNDRV_DMA_TYPE_DEV_SG
,
2655 snd_dma_pci_data(chip
->pci
),
2656 size
, MAX_PREALLOC_SIZE
);
2658 pcm
->dev
= &codec
->dev
;
2663 * mixer creation - all stuff is implemented in hda module
2665 static int azx_mixer_create(struct azx
*chip
)
2667 return snd_hda_build_controls(chip
->bus
);
2672 * initialize SD streams
2674 static int azx_init_stream(struct azx
*chip
)
2678 /* initialize each stream (aka device)
2679 * assign the starting bdl address to each stream (device)
2682 for (i
= 0; i
< chip
->num_streams
; i
++) {
2683 struct azx_dev
*azx_dev
= &chip
->azx_dev
[i
];
2684 azx_dev
->posbuf
= (u32 __iomem
*)(chip
->posbuf
.area
+ i
* 8);
2685 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
2686 azx_dev
->sd_addr
= chip
->remap_addr
+ (0x20 * i
+ 0x80);
2687 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
2688 azx_dev
->sd_int_sta_mask
= 1 << i
;
2689 /* stream tag: must be non-zero and unique */
2691 azx_dev
->stream_tag
= i
+ 1;
2697 static int azx_acquire_irq(struct azx
*chip
, int do_disconnect
)
2699 if (request_irq(chip
->pci
->irq
, azx_interrupt
,
2700 chip
->msi
? 0 : IRQF_SHARED
,
2701 KBUILD_MODNAME
, chip
)) {
2702 dev_err(chip
->card
->dev
,
2703 "unable to grab IRQ %d, disabling device\n",
2706 snd_card_disconnect(chip
->card
);
2709 chip
->irq
= chip
->pci
->irq
;
2710 pci_intx(chip
->pci
, !chip
->msi
);
2715 static void azx_stop_chip(struct azx
*chip
)
2717 if (!chip
->initialized
)
2720 /* disable interrupts */
2721 azx_int_disable(chip
);
2722 azx_int_clear(chip
);
2724 /* disable CORB/RIRB */
2725 azx_free_cmd_io(chip
);
2727 /* disable position buffer */
2728 azx_writel(chip
, DPLBASE
, 0);
2729 azx_writel(chip
, DPUBASE
, 0);
2731 chip
->initialized
= 0;
2734 #ifdef CONFIG_SND_HDA_DSP_LOADER
2736 * DSP loading code (e.g. for CA0132)
2739 /* use the first stream for loading DSP */
2740 static struct azx_dev
*
2741 azx_get_dsp_loader_dev(struct azx
*chip
)
2743 return &chip
->azx_dev
[chip
->playback_index_offset
];
2746 static int azx_load_dsp_prepare(struct hda_bus
*bus
, unsigned int format
,
2747 unsigned int byte_size
,
2748 struct snd_dma_buffer
*bufp
)
2751 struct azx
*chip
= bus
->private_data
;
2752 struct azx_dev
*azx_dev
;
2755 azx_dev
= azx_get_dsp_loader_dev(chip
);
2758 spin_lock_irq(&chip
->reg_lock
);
2759 if (azx_dev
->running
|| azx_dev
->locked
) {
2760 spin_unlock_irq(&chip
->reg_lock
);
2764 azx_dev
->prepared
= 0;
2765 chip
->saved_azx_dev
= *azx_dev
;
2766 azx_dev
->locked
= 1;
2767 spin_unlock_irq(&chip
->reg_lock
);
2769 err
= snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV_SG
,
2770 snd_dma_pci_data(chip
->pci
),
2775 mark_pages_wc(chip
, bufp
, true);
2776 azx_dev
->bufsize
= byte_size
;
2777 azx_dev
->period_bytes
= byte_size
;
2778 azx_dev
->format_val
= format
;
2780 azx_stream_reset(chip
, azx_dev
);
2782 /* reset BDL address */
2783 azx_sd_writel(azx_dev
, SD_BDLPL
, 0);
2784 azx_sd_writel(azx_dev
, SD_BDLPU
, 0);
2787 bdl
= (u32
*)azx_dev
->bdl
.area
;
2788 err
= setup_bdle(chip
, bufp
, azx_dev
, &bdl
, 0, byte_size
, 0);
2792 azx_setup_controller(chip
, azx_dev
);
2793 dsp_unlock(azx_dev
);
2794 return azx_dev
->stream_tag
;
2797 mark_pages_wc(chip
, bufp
, false);
2798 snd_dma_free_pages(bufp
);
2800 spin_lock_irq(&chip
->reg_lock
);
2801 if (azx_dev
->opened
)
2802 *azx_dev
= chip
->saved_azx_dev
;
2803 azx_dev
->locked
= 0;
2804 spin_unlock_irq(&chip
->reg_lock
);
2806 dsp_unlock(azx_dev
);
2810 static void azx_load_dsp_trigger(struct hda_bus
*bus
, bool start
)
2812 struct azx
*chip
= bus
->private_data
;
2813 struct azx_dev
*azx_dev
= azx_get_dsp_loader_dev(chip
);
2816 azx_stream_start(chip
, azx_dev
);
2818 azx_stream_stop(chip
, azx_dev
);
2819 azx_dev
->running
= start
;
2822 static void azx_load_dsp_cleanup(struct hda_bus
*bus
,
2823 struct snd_dma_buffer
*dmab
)
2825 struct azx
*chip
= bus
->private_data
;
2826 struct azx_dev
*azx_dev
= azx_get_dsp_loader_dev(chip
);
2828 if (!dmab
->area
|| !azx_dev
->locked
)
2832 /* reset BDL address */
2833 azx_sd_writel(azx_dev
, SD_BDLPL
, 0);
2834 azx_sd_writel(azx_dev
, SD_BDLPU
, 0);
2835 azx_sd_writel(azx_dev
, SD_CTL
, 0);
2836 azx_dev
->bufsize
= 0;
2837 azx_dev
->period_bytes
= 0;
2838 azx_dev
->format_val
= 0;
2840 mark_pages_wc(chip
, dmab
, false);
2841 snd_dma_free_pages(dmab
);
2844 spin_lock_irq(&chip
->reg_lock
);
2845 if (azx_dev
->opened
)
2846 *azx_dev
= chip
->saved_azx_dev
;
2847 azx_dev
->locked
= 0;
2848 spin_unlock_irq(&chip
->reg_lock
);
2849 dsp_unlock(azx_dev
);
2851 #endif /* CONFIG_SND_HDA_DSP_LOADER */
2854 /* power-up/down the controller */
2855 static void azx_power_notify(struct hda_bus
*bus
, bool power_up
)
2857 struct azx
*chip
= bus
->private_data
;
2859 if (!(chip
->driver_caps
& AZX_DCAPS_PM_RUNTIME
))
2863 pm_runtime_get_sync(&chip
->pci
->dev
);
2865 pm_runtime_put_sync(&chip
->pci
->dev
);
2868 static DEFINE_MUTEX(card_list_lock
);
2869 static LIST_HEAD(card_list
);
2871 static void azx_add_card_list(struct azx
*chip
)
2873 mutex_lock(&card_list_lock
);
2874 list_add(&chip
->list
, &card_list
);
2875 mutex_unlock(&card_list_lock
);
2878 static void azx_del_card_list(struct azx
*chip
)
2880 mutex_lock(&card_list_lock
);
2881 list_del_init(&chip
->list
);
2882 mutex_unlock(&card_list_lock
);
2885 /* trigger power-save check at writing parameter */
2886 static int param_set_xint(const char *val
, const struct kernel_param
*kp
)
2889 struct hda_codec
*c
;
2890 int prev
= power_save
;
2891 int ret
= param_set_int(val
, kp
);
2893 if (ret
|| prev
== power_save
)
2896 mutex_lock(&card_list_lock
);
2897 list_for_each_entry(chip
, &card_list
, list
) {
2898 if (!chip
->bus
|| chip
->disabled
)
2900 list_for_each_entry(c
, &chip
->bus
->codec_list
, list
)
2901 snd_hda_power_sync(c
);
2903 mutex_unlock(&card_list_lock
);
2907 #define azx_add_card_list(chip) /* NOP */
2908 #define azx_del_card_list(chip) /* NOP */
2909 #endif /* CONFIG_PM */
2911 #if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO)
2915 static int azx_suspend(struct device
*dev
)
2917 struct pci_dev
*pci
= to_pci_dev(dev
);
2918 struct snd_card
*card
= dev_get_drvdata(dev
);
2919 struct azx
*chip
= card
->private_data
;
2925 snd_power_change_state(card
, SNDRV_CTL_POWER_D3hot
);
2926 azx_clear_irq_pending(chip
);
2927 list_for_each_entry(p
, &chip
->pcm_list
, list
)
2928 snd_pcm_suspend_all(p
->pcm
);
2929 if (chip
->initialized
)
2930 snd_hda_suspend(chip
->bus
);
2931 azx_stop_chip(chip
);
2932 azx_enter_link_reset(chip
);
2933 if (chip
->irq
>= 0) {
2934 free_irq(chip
->irq
, chip
);
2938 pci_disable_msi(chip
->pci
);
2939 pci_disable_device(pci
);
2940 pci_save_state(pci
);
2941 pci_set_power_state(pci
, PCI_D3hot
);
2942 if (chip
->driver_caps
& AZX_DCAPS_I915_POWERWELL
)
2943 hda_display_power(false);
2947 static int azx_resume(struct device
*dev
)
2949 struct pci_dev
*pci
= to_pci_dev(dev
);
2950 struct snd_card
*card
= dev_get_drvdata(dev
);
2951 struct azx
*chip
= card
->private_data
;
2956 if (chip
->driver_caps
& AZX_DCAPS_I915_POWERWELL
)
2957 hda_display_power(true);
2958 pci_set_power_state(pci
, PCI_D0
);
2959 pci_restore_state(pci
);
2960 if (pci_enable_device(pci
) < 0) {
2961 dev_err(chip
->card
->dev
,
2962 "pci_enable_device failed, disabling device\n");
2963 snd_card_disconnect(card
);
2966 pci_set_master(pci
);
2968 if (pci_enable_msi(pci
) < 0)
2970 if (azx_acquire_irq(chip
, 1) < 0)
2974 azx_init_chip(chip
, 1);
2976 snd_hda_resume(chip
->bus
);
2977 snd_power_change_state(card
, SNDRV_CTL_POWER_D0
);
2980 #endif /* CONFIG_PM_SLEEP || SUPPORT_VGA_SWITCHEROO */
2982 #ifdef CONFIG_PM_RUNTIME
2983 static int azx_runtime_suspend(struct device
*dev
)
2985 struct snd_card
*card
= dev_get_drvdata(dev
);
2986 struct azx
*chip
= card
->private_data
;
2991 if (!(chip
->driver_caps
& AZX_DCAPS_PM_RUNTIME
))
2994 /* enable controller wake up event */
2995 azx_writew(chip
, WAKEEN
, azx_readw(chip
, WAKEEN
) |
2998 azx_stop_chip(chip
);
2999 azx_enter_link_reset(chip
);
3000 azx_clear_irq_pending(chip
);
3001 if (chip
->driver_caps
& AZX_DCAPS_I915_POWERWELL
)
3002 hda_display_power(false);
3006 static int azx_runtime_resume(struct device
*dev
)
3008 struct snd_card
*card
= dev_get_drvdata(dev
);
3009 struct azx
*chip
= card
->private_data
;
3010 struct hda_bus
*bus
;
3011 struct hda_codec
*codec
;
3017 if (!(chip
->driver_caps
& AZX_DCAPS_PM_RUNTIME
))
3020 if (chip
->driver_caps
& AZX_DCAPS_I915_POWERWELL
)
3021 hda_display_power(true);
3023 /* Read STATESTS before controller reset */
3024 status
= azx_readw(chip
, STATESTS
);
3027 azx_init_chip(chip
, 1);
3030 if (status
&& bus
) {
3031 list_for_each_entry(codec
, &bus
->codec_list
, list
)
3032 if (status
& (1 << codec
->addr
))
3033 queue_delayed_work(codec
->bus
->workq
,
3034 &codec
->jackpoll_work
, codec
->jackpoll_interval
);
3037 /* disable controller Wake Up event*/
3038 azx_writew(chip
, WAKEEN
, azx_readw(chip
, WAKEEN
) &
3039 ~STATESTS_INT_MASK
);
3044 static int azx_runtime_idle(struct device
*dev
)
3046 struct snd_card
*card
= dev_get_drvdata(dev
);
3047 struct azx
*chip
= card
->private_data
;
3052 if (!power_save_controller
||
3053 !(chip
->driver_caps
& AZX_DCAPS_PM_RUNTIME
))
3059 #endif /* CONFIG_PM_RUNTIME */
3062 static const struct dev_pm_ops azx_pm
= {
3063 SET_SYSTEM_SLEEP_PM_OPS(azx_suspend
, azx_resume
)
3064 SET_RUNTIME_PM_OPS(azx_runtime_suspend
, azx_runtime_resume
, azx_runtime_idle
)
3067 #define AZX_PM_OPS &azx_pm
3069 #define AZX_PM_OPS NULL
3070 #endif /* CONFIG_PM */
3074 * reboot notifier for hang-up problem at power-down
3076 static int azx_halt(struct notifier_block
*nb
, unsigned long event
, void *buf
)
3078 struct azx
*chip
= container_of(nb
, struct azx
, reboot_notifier
);
3079 snd_hda_bus_reboot_notify(chip
->bus
);
3080 azx_stop_chip(chip
);
3084 static void azx_notifier_register(struct azx
*chip
)
3086 chip
->reboot_notifier
.notifier_call
= azx_halt
;
3087 register_reboot_notifier(&chip
->reboot_notifier
);
3090 static void azx_notifier_unregister(struct azx
*chip
)
3092 if (chip
->reboot_notifier
.notifier_call
)
3093 unregister_reboot_notifier(&chip
->reboot_notifier
);
3096 static int azx_probe_continue(struct azx
*chip
);
3098 #ifdef SUPPORT_VGA_SWITCHEROO
3099 static struct pci_dev
*get_bound_vga(struct pci_dev
*pci
);
3101 static void azx_vs_set_state(struct pci_dev
*pci
,
3102 enum vga_switcheroo_state state
)
3104 struct snd_card
*card
= pci_get_drvdata(pci
);
3105 struct azx
*chip
= card
->private_data
;
3108 wait_for_completion(&chip
->probe_wait
);
3109 if (chip
->init_failed
)
3112 disabled
= (state
== VGA_SWITCHEROO_OFF
);
3113 if (chip
->disabled
== disabled
)
3117 chip
->disabled
= disabled
;
3119 dev_info(chip
->card
->dev
,
3120 "Start delayed initialization\n");
3121 if (azx_probe_continue(chip
) < 0) {
3122 dev_err(chip
->card
->dev
, "initialization error\n");
3123 chip
->init_failed
= true;
3127 dev_info(chip
->card
->dev
, "%s via VGA-switcheroo\n",
3128 disabled
? "Disabling" : "Enabling");
3130 pm_runtime_put_sync_suspend(&pci
->dev
);
3131 azx_suspend(&pci
->dev
);
3132 /* when we get suspended by vga switcheroo we end up in D3cold,
3133 * however we have no ACPI handle, so pci/acpi can't put us there,
3134 * put ourselves there */
3135 pci
->current_state
= PCI_D3cold
;
3136 chip
->disabled
= true;
3137 if (snd_hda_lock_devices(chip
->bus
))
3138 dev_warn(chip
->card
->dev
,
3139 "Cannot lock devices!\n");
3141 snd_hda_unlock_devices(chip
->bus
);
3142 pm_runtime_get_noresume(&pci
->dev
);
3143 chip
->disabled
= false;
3144 azx_resume(&pci
->dev
);
3149 static bool azx_vs_can_switch(struct pci_dev
*pci
)
3151 struct snd_card
*card
= pci_get_drvdata(pci
);
3152 struct azx
*chip
= card
->private_data
;
3154 wait_for_completion(&chip
->probe_wait
);
3155 if (chip
->init_failed
)
3157 if (chip
->disabled
|| !chip
->bus
)
3159 if (snd_hda_lock_devices(chip
->bus
))
3161 snd_hda_unlock_devices(chip
->bus
);
3165 static void init_vga_switcheroo(struct azx
*chip
)
3167 struct pci_dev
*p
= get_bound_vga(chip
->pci
);
3169 dev_info(chip
->card
->dev
,
3170 "Handle VGA-switcheroo audio client\n");
3171 chip
->use_vga_switcheroo
= 1;
3176 static const struct vga_switcheroo_client_ops azx_vs_ops
= {
3177 .set_gpu_state
= azx_vs_set_state
,
3178 .can_switch
= azx_vs_can_switch
,
3181 static int register_vga_switcheroo(struct azx
*chip
)
3185 if (!chip
->use_vga_switcheroo
)
3187 /* FIXME: currently only handling DIS controller
3188 * is there any machine with two switchable HDMI audio controllers?
3190 err
= vga_switcheroo_register_audio_client(chip
->pci
, &azx_vs_ops
,
3195 chip
->vga_switcheroo_registered
= 1;
3197 /* register as an optimus hdmi audio power domain */
3198 vga_switcheroo_init_domain_pm_optimus_hdmi_audio(&chip
->pci
->dev
, &chip
->hdmi_pm_domain
);
3202 #define init_vga_switcheroo(chip) /* NOP */
3203 #define register_vga_switcheroo(chip) 0
3204 #define check_hdmi_disabled(pci) false
3205 #endif /* SUPPORT_VGA_SWITCHER */
3210 static int azx_free(struct azx
*chip
)
3212 struct pci_dev
*pci
= chip
->pci
;
3215 if ((chip
->driver_caps
& AZX_DCAPS_PM_RUNTIME
)
3217 pm_runtime_get_noresume(&pci
->dev
);
3219 azx_del_card_list(chip
);
3221 azx_notifier_unregister(chip
);
3223 chip
->init_failed
= 1; /* to be sure */
3224 complete_all(&chip
->probe_wait
);
3226 if (use_vga_switcheroo(chip
)) {
3227 if (chip
->disabled
&& chip
->bus
)
3228 snd_hda_unlock_devices(chip
->bus
);
3229 if (chip
->vga_switcheroo_registered
)
3230 vga_switcheroo_unregister_client(chip
->pci
);
3233 if (chip
->initialized
) {
3234 azx_clear_irq_pending(chip
);
3235 for (i
= 0; i
< chip
->num_streams
; i
++)
3236 azx_stream_stop(chip
, &chip
->azx_dev
[i
]);
3237 azx_stop_chip(chip
);
3241 free_irq(chip
->irq
, (void*)chip
);
3243 pci_disable_msi(chip
->pci
);
3244 if (chip
->remap_addr
)
3245 iounmap(chip
->remap_addr
);
3247 if (chip
->azx_dev
) {
3248 for (i
= 0; i
< chip
->num_streams
; i
++)
3249 if (chip
->azx_dev
[i
].bdl
.area
) {
3250 mark_pages_wc(chip
, &chip
->azx_dev
[i
].bdl
, false);
3251 snd_dma_free_pages(&chip
->azx_dev
[i
].bdl
);
3254 if (chip
->rb
.area
) {
3255 mark_pages_wc(chip
, &chip
->rb
, false);
3256 snd_dma_free_pages(&chip
->rb
);
3258 if (chip
->posbuf
.area
) {
3259 mark_pages_wc(chip
, &chip
->posbuf
, false);
3260 snd_dma_free_pages(&chip
->posbuf
);
3262 if (chip
->region_requested
)
3263 pci_release_regions(chip
->pci
);
3264 pci_disable_device(chip
->pci
);
3265 kfree(chip
->azx_dev
);
3266 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3268 release_firmware(chip
->fw
);
3270 if (chip
->driver_caps
& AZX_DCAPS_I915_POWERWELL
) {
3271 hda_display_power(false);
3279 static int azx_dev_free(struct snd_device
*device
)
3281 return azx_free(device
->device_data
);
3284 #ifdef SUPPORT_VGA_SWITCHEROO
3286 * Check of disabled HDMI controller by vga-switcheroo
3288 static struct pci_dev
*get_bound_vga(struct pci_dev
*pci
)
3292 /* check only discrete GPU */
3293 switch (pci
->vendor
) {
3294 case PCI_VENDOR_ID_ATI
:
3295 case PCI_VENDOR_ID_AMD
:
3296 case PCI_VENDOR_ID_NVIDIA
:
3297 if (pci
->devfn
== 1) {
3298 p
= pci_get_domain_bus_and_slot(pci_domain_nr(pci
->bus
),
3299 pci
->bus
->number
, 0);
3301 if ((p
->class >> 8) == PCI_CLASS_DISPLAY_VGA
)
3311 static bool check_hdmi_disabled(struct pci_dev
*pci
)
3313 bool vga_inactive
= false;
3314 struct pci_dev
*p
= get_bound_vga(pci
);
3317 if (vga_switcheroo_get_client_state(p
) == VGA_SWITCHEROO_OFF
)
3318 vga_inactive
= true;
3321 return vga_inactive
;
3323 #endif /* SUPPORT_VGA_SWITCHEROO */
3326 * white/black-listing for position_fix
3328 static struct snd_pci_quirk position_fix_list
[] = {
3329 SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB
),
3330 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB
),
3331 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB
),
3332 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB
),
3333 SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB
),
3334 SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB
),
3335 SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB
),
3336 SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB
),
3337 SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB
),
3338 SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB
),
3339 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB
),
3340 SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB
),
3341 SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB
),
3342 SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB
),
3346 static int check_position_fix(struct azx
*chip
, int fix
)
3348 const struct snd_pci_quirk
*q
;
3353 case POS_FIX_POSBUF
:
3354 case POS_FIX_VIACOMBO
:
3359 q
= snd_pci_quirk_lookup(chip
->pci
, position_fix_list
);
3361 dev_info(chip
->card
->dev
,
3362 "position_fix set to %d for device %04x:%04x\n",
3363 q
->value
, q
->subvendor
, q
->subdevice
);
3367 /* Check VIA/ATI HD Audio Controller exist */
3368 if (chip
->driver_caps
& AZX_DCAPS_POSFIX_VIA
) {
3369 dev_dbg(chip
->card
->dev
, "Using VIACOMBO position fix\n");
3370 return POS_FIX_VIACOMBO
;
3372 if (chip
->driver_caps
& AZX_DCAPS_POSFIX_LPIB
) {
3373 dev_dbg(chip
->card
->dev
, "Using LPIB position fix\n");
3374 return POS_FIX_LPIB
;
3376 return POS_FIX_AUTO
;
3380 * black-lists for probe_mask
3382 static struct snd_pci_quirk probe_mask_list
[] = {
3383 /* Thinkpad often breaks the controller communication when accessing
3384 * to the non-working (or non-existing) modem codec slot.
3386 SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01),
3387 SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01),
3388 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01),
3390 SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),
3391 /* including bogus ALC268 in slot#2 that conflicts with ALC888 */
3392 SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),
3393 /* forced codec slots */
3394 SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),
3395 SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),
3396 /* WinFast VP200 H (Teradici) user reported broken communication */
3397 SND_PCI_QUIRK(0x3a21, 0x040d, "WinFast VP200 H", 0x101),
3401 #define AZX_FORCE_CODEC_MASK 0x100
3403 static void check_probe_mask(struct azx
*chip
, int dev
)
3405 const struct snd_pci_quirk
*q
;
3407 chip
->codec_probe_mask
= probe_mask
[dev
];
3408 if (chip
->codec_probe_mask
== -1) {
3409 q
= snd_pci_quirk_lookup(chip
->pci
, probe_mask_list
);
3411 dev_info(chip
->card
->dev
,
3412 "probe_mask set to 0x%x for device %04x:%04x\n",
3413 q
->value
, q
->subvendor
, q
->subdevice
);
3414 chip
->codec_probe_mask
= q
->value
;
3418 /* check forced option */
3419 if (chip
->codec_probe_mask
!= -1 &&
3420 (chip
->codec_probe_mask
& AZX_FORCE_CODEC_MASK
)) {
3421 chip
->codec_mask
= chip
->codec_probe_mask
& 0xff;
3422 dev_info(chip
->card
->dev
, "codec_mask forced to 0x%x\n",
3428 * white/black-list for enable_msi
3430 static struct snd_pci_quirk msi_black_list
[] = {
3431 SND_PCI_QUIRK(0x103c, 0x2191, "HP", 0), /* AMD Hudson */
3432 SND_PCI_QUIRK(0x103c, 0x2192, "HP", 0), /* AMD Hudson */
3433 SND_PCI_QUIRK(0x103c, 0x21f7, "HP", 0), /* AMD Hudson */
3434 SND_PCI_QUIRK(0x103c, 0x21fa, "HP", 0), /* AMD Hudson */
3435 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
3436 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
3437 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
3438 SND_PCI_QUIRK(0x1179, 0xfb44, "Toshiba Satellite C870", 0), /* AMD Hudson */
3439 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
3440 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
3444 static void check_msi(struct azx
*chip
)
3446 const struct snd_pci_quirk
*q
;
3448 if (enable_msi
>= 0) {
3449 chip
->msi
= !!enable_msi
;
3452 chip
->msi
= 1; /* enable MSI as default */
3453 q
= snd_pci_quirk_lookup(chip
->pci
, msi_black_list
);
3455 dev_info(chip
->card
->dev
,
3456 "msi for device %04x:%04x set to %d\n",
3457 q
->subvendor
, q
->subdevice
, q
->value
);
3458 chip
->msi
= q
->value
;
3462 /* NVidia chipsets seem to cause troubles with MSI */
3463 if (chip
->driver_caps
& AZX_DCAPS_NO_MSI
) {
3464 dev_info(chip
->card
->dev
, "Disabling MSI\n");
3469 /* check the snoop mode availability */
3470 static void azx_check_snoop_available(struct azx
*chip
)
3472 bool snoop
= chip
->snoop
;
3474 switch (chip
->driver_type
) {
3475 case AZX_DRIVER_VIA
:
3476 /* force to non-snoop mode for a new VIA controller
3481 pci_read_config_byte(chip
->pci
, 0x42, &val
);
3482 if (!(val
& 0x80) && chip
->pci
->revision
== 0x30)
3486 case AZX_DRIVER_ATIHDMI_NS
:
3487 /* new ATI HDMI requires non-snoop */
3490 case AZX_DRIVER_CTHDA
:
3495 if (snoop
!= chip
->snoop
) {
3496 dev_info(chip
->card
->dev
, "Force to %s mode\n",
3497 snoop
? "snoop" : "non-snoop");
3498 chip
->snoop
= snoop
;
3502 static void azx_probe_work(struct work_struct
*work
)
3504 azx_probe_continue(container_of(work
, struct azx
, probe_work
));
3510 static int azx_create(struct snd_card
*card
, struct pci_dev
*pci
,
3511 int dev
, unsigned int driver_caps
,
3514 static struct snd_device_ops ops
= {
3515 .dev_free
= azx_dev_free
,
3522 err
= pci_enable_device(pci
);
3526 chip
= kzalloc(sizeof(*chip
), GFP_KERNEL
);
3528 dev_err(card
->dev
, "Cannot allocate chip\n");
3529 pci_disable_device(pci
);
3533 spin_lock_init(&chip
->reg_lock
);
3534 mutex_init(&chip
->open_mutex
);
3538 chip
->driver_caps
= driver_caps
;
3539 chip
->driver_type
= driver_caps
& 0xff;
3541 chip
->dev_index
= dev
;
3542 INIT_WORK(&chip
->irq_pending_work
, azx_irq_pending_work
);
3543 INIT_LIST_HEAD(&chip
->pcm_list
);
3544 INIT_LIST_HEAD(&chip
->list
);
3545 init_vga_switcheroo(chip
);
3546 init_completion(&chip
->probe_wait
);
3548 chip
->position_fix
[0] = chip
->position_fix
[1] =
3549 check_position_fix(chip
, position_fix
[dev
]);
3550 /* combo mode uses LPIB for playback */
3551 if (chip
->position_fix
[0] == POS_FIX_COMBO
) {
3552 chip
->position_fix
[0] = POS_FIX_LPIB
;
3553 chip
->position_fix
[1] = POS_FIX_AUTO
;
3556 check_probe_mask(chip
, dev
);
3558 chip
->single_cmd
= single_cmd
;
3559 chip
->snoop
= hda_snoop
;
3560 azx_check_snoop_available(chip
);
3562 if (bdl_pos_adj
[dev
] < 0) {
3563 switch (chip
->driver_type
) {
3564 case AZX_DRIVER_ICH
:
3565 case AZX_DRIVER_PCH
:
3566 bdl_pos_adj
[dev
] = 1;
3569 bdl_pos_adj
[dev
] = 32;
3574 err
= snd_device_new(card
, SNDRV_DEV_LOWLEVEL
, chip
, &ops
);
3576 dev_err(card
->dev
, "Error creating device [card]!\n");
3581 /* continue probing in work context as may trigger request module */
3582 INIT_WORK(&chip
->probe_work
, azx_probe_work
);
3589 static int azx_first_init(struct azx
*chip
)
3591 int dev
= chip
->dev_index
;
3592 struct pci_dev
*pci
= chip
->pci
;
3593 struct snd_card
*card
= chip
->card
;
3595 unsigned short gcap
;
3597 #if BITS_PER_LONG != 64
3598 /* Fix up base address on ULI M5461 */
3599 if (chip
->driver_type
== AZX_DRIVER_ULI
) {
3601 pci_read_config_word(pci
, 0x40, &tmp3
);
3602 pci_write_config_word(pci
, 0x40, tmp3
| 0x10);
3603 pci_write_config_dword(pci
, PCI_BASE_ADDRESS_1
, 0);
3607 err
= pci_request_regions(pci
, "ICH HD audio");
3610 chip
->region_requested
= 1;
3612 chip
->addr
= pci_resource_start(pci
, 0);
3613 chip
->remap_addr
= pci_ioremap_bar(pci
, 0);
3614 if (chip
->remap_addr
== NULL
) {
3615 dev_err(card
->dev
, "ioremap error\n");
3620 if (pci_enable_msi(pci
) < 0)
3623 if (azx_acquire_irq(chip
, 0) < 0)
3626 pci_set_master(pci
);
3627 synchronize_irq(chip
->irq
);
3629 gcap
= azx_readw(chip
, GCAP
);
3630 dev_dbg(card
->dev
, "chipset global capabilities = 0x%x\n", gcap
);
3632 /* disable SB600 64bit support for safety */
3633 if (chip
->pci
->vendor
== PCI_VENDOR_ID_ATI
) {
3634 struct pci_dev
*p_smbus
;
3635 p_smbus
= pci_get_device(PCI_VENDOR_ID_ATI
,
3636 PCI_DEVICE_ID_ATI_SBX00_SMBUS
,
3639 if (p_smbus
->revision
< 0x30)
3640 gcap
&= ~ICH6_GCAP_64OK
;
3641 pci_dev_put(p_smbus
);
3645 /* disable 64bit DMA address on some devices */
3646 if (chip
->driver_caps
& AZX_DCAPS_NO_64BIT
) {
3647 dev_dbg(card
->dev
, "Disabling 64bit DMA\n");
3648 gcap
&= ~ICH6_GCAP_64OK
;
3651 /* disable buffer size rounding to 128-byte multiples if supported */
3652 if (align_buffer_size
>= 0)
3653 chip
->align_buffer_size
= !!align_buffer_size
;
3655 if (chip
->driver_caps
& AZX_DCAPS_BUFSIZE
)
3656 chip
->align_buffer_size
= 0;
3657 else if (chip
->driver_caps
& AZX_DCAPS_ALIGN_BUFSIZE
)
3658 chip
->align_buffer_size
= 1;
3660 chip
->align_buffer_size
= 1;
3663 /* allow 64bit DMA address if supported by H/W */
3664 if ((gcap
& ICH6_GCAP_64OK
) && !pci_set_dma_mask(pci
, DMA_BIT_MASK(64)))
3665 pci_set_consistent_dma_mask(pci
, DMA_BIT_MASK(64));
3667 pci_set_dma_mask(pci
, DMA_BIT_MASK(32));
3668 pci_set_consistent_dma_mask(pci
, DMA_BIT_MASK(32));
3671 /* read number of streams from GCAP register instead of using
3674 chip
->capture_streams
= (gcap
>> 8) & 0x0f;
3675 chip
->playback_streams
= (gcap
>> 12) & 0x0f;
3676 if (!chip
->playback_streams
&& !chip
->capture_streams
) {
3677 /* gcap didn't give any info, switching to old method */
3679 switch (chip
->driver_type
) {
3680 case AZX_DRIVER_ULI
:
3681 chip
->playback_streams
= ULI_NUM_PLAYBACK
;
3682 chip
->capture_streams
= ULI_NUM_CAPTURE
;
3684 case AZX_DRIVER_ATIHDMI
:
3685 case AZX_DRIVER_ATIHDMI_NS
:
3686 chip
->playback_streams
= ATIHDMI_NUM_PLAYBACK
;
3687 chip
->capture_streams
= ATIHDMI_NUM_CAPTURE
;
3689 case AZX_DRIVER_GENERIC
:
3691 chip
->playback_streams
= ICH6_NUM_PLAYBACK
;
3692 chip
->capture_streams
= ICH6_NUM_CAPTURE
;
3696 chip
->capture_index_offset
= 0;
3697 chip
->playback_index_offset
= chip
->capture_streams
;
3698 chip
->num_streams
= chip
->playback_streams
+ chip
->capture_streams
;
3699 chip
->azx_dev
= kcalloc(chip
->num_streams
, sizeof(*chip
->azx_dev
),
3701 if (!chip
->azx_dev
) {
3702 dev_err(card
->dev
, "cannot malloc azx_dev\n");
3706 for (i
= 0; i
< chip
->num_streams
; i
++) {
3707 dsp_lock_init(&chip
->azx_dev
[i
]);
3708 /* allocate memory for the BDL for each stream */
3709 err
= snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV
,
3710 snd_dma_pci_data(chip
->pci
),
3711 BDL_SIZE
, &chip
->azx_dev
[i
].bdl
);
3713 dev_err(card
->dev
, "cannot allocate BDL\n");
3716 mark_pages_wc(chip
, &chip
->azx_dev
[i
].bdl
, true);
3718 /* allocate memory for the position buffer */
3719 err
= snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV
,
3720 snd_dma_pci_data(chip
->pci
),
3721 chip
->num_streams
* 8, &chip
->posbuf
);
3723 dev_err(card
->dev
, "cannot allocate posbuf\n");
3726 mark_pages_wc(chip
, &chip
->posbuf
, true);
3727 /* allocate CORB/RIRB */
3728 err
= azx_alloc_cmd_io(chip
);
3732 /* initialize streams */
3733 azx_init_stream(chip
);
3735 /* initialize chip */
3737 azx_init_chip(chip
, (probe_only
[dev
] & 2) == 0);
3739 /* codec detection */
3740 if (!chip
->codec_mask
) {
3741 dev_err(card
->dev
, "no codecs found!\n");
3745 strcpy(card
->driver
, "HDA-Intel");
3746 strlcpy(card
->shortname
, driver_short_names
[chip
->driver_type
],
3747 sizeof(card
->shortname
));
3748 snprintf(card
->longname
, sizeof(card
->longname
),
3749 "%s at 0x%lx irq %i",
3750 card
->shortname
, chip
->addr
, chip
->irq
);
3755 static void power_down_all_codecs(struct azx
*chip
)
3758 /* The codecs were powered up in snd_hda_codec_new().
3759 * Now all initialization done, so turn them down if possible
3761 struct hda_codec
*codec
;
3762 list_for_each_entry(codec
, &chip
->bus
->codec_list
, list
) {
3763 snd_hda_power_down(codec
);
3768 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3769 /* callback from request_firmware_nowait() */
3770 static void azx_firmware_cb(const struct firmware
*fw
, void *context
)
3772 struct snd_card
*card
= context
;
3773 struct azx
*chip
= card
->private_data
;
3774 struct pci_dev
*pci
= chip
->pci
;
3777 dev_err(card
->dev
, "Cannot load firmware, aborting\n");
3782 if (!chip
->disabled
) {
3783 /* continue probing */
3784 if (azx_probe_continue(chip
))
3790 snd_card_free(card
);
3791 pci_set_drvdata(pci
, NULL
);
3795 static int azx_probe(struct pci_dev
*pci
,
3796 const struct pci_device_id
*pci_id
)
3799 struct snd_card
*card
;
3801 bool schedule_probe
;
3804 if (dev
>= SNDRV_CARDS
)
3811 err
= snd_card_new(&pci
->dev
, index
[dev
], id
[dev
], THIS_MODULE
,
3814 dev_err(&pci
->dev
, "Error creating card!\n");
3818 err
= azx_create(card
, pci
, dev
, pci_id
->driver_data
, &chip
);
3821 card
->private_data
= chip
;
3823 pci_set_drvdata(pci
, card
);
3825 err
= register_vga_switcheroo(chip
);
3827 dev_err(card
->dev
, "Error registering VGA-switcheroo client\n");
3831 if (check_hdmi_disabled(pci
)) {
3832 dev_info(card
->dev
, "VGA controller is disabled\n");
3833 dev_info(card
->dev
, "Delaying initialization\n");
3834 chip
->disabled
= true;
3837 schedule_probe
= !chip
->disabled
;
3839 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3840 if (patch
[dev
] && *patch
[dev
]) {
3841 dev_info(card
->dev
, "Applying patch firmware '%s'\n",
3843 err
= request_firmware_nowait(THIS_MODULE
, true, patch
[dev
],
3844 &pci
->dev
, GFP_KERNEL
, card
,
3848 schedule_probe
= false; /* continued in azx_firmware_cb() */
3850 #endif /* CONFIG_SND_HDA_PATCH_LOADER */
3852 #ifndef CONFIG_SND_HDA_I915
3853 if (chip
->driver_caps
& AZX_DCAPS_I915_POWERWELL
)
3854 dev_err(card
->dev
, "Haswell must build in CONFIG_SND_HDA_I915\n");
3858 schedule_work(&chip
->probe_work
);
3862 complete_all(&chip
->probe_wait
);
3866 snd_card_free(card
);
3870 static int azx_probe_continue(struct azx
*chip
)
3872 struct pci_dev
*pci
= chip
->pci
;
3873 int dev
= chip
->dev_index
;
3876 /* Request power well for Haswell HDA controller and codec */
3877 if (chip
->driver_caps
& AZX_DCAPS_I915_POWERWELL
) {
3878 #ifdef CONFIG_SND_HDA_I915
3879 err
= hda_i915_init();
3881 dev_err(chip
->card
->dev
,
3882 "Error request power-well from i915\n");
3886 hda_display_power(true);
3889 err
= azx_first_init(chip
);
3893 #ifdef CONFIG_SND_HDA_INPUT_BEEP
3894 chip
->beep_mode
= beep_mode
[dev
];
3897 /* create codec instances */
3898 err
= azx_codec_create(chip
, model
[dev
]);
3901 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3903 err
= snd_hda_load_patch(chip
->bus
, chip
->fw
->size
,
3908 release_firmware(chip
->fw
); /* no longer needed */
3913 if ((probe_only
[dev
] & 1) == 0) {
3914 err
= azx_codec_configure(chip
);
3919 /* create PCM streams */
3920 err
= snd_hda_build_pcms(chip
->bus
);
3924 /* create mixer controls */
3925 err
= azx_mixer_create(chip
);
3929 err
= snd_card_register(chip
->card
);
3934 power_down_all_codecs(chip
);
3935 azx_notifier_register(chip
);
3936 azx_add_card_list(chip
);
3937 if ((chip
->driver_caps
& AZX_DCAPS_PM_RUNTIME
) || chip
->use_vga_switcheroo
)
3938 pm_runtime_put_noidle(&pci
->dev
);
3942 chip
->init_failed
= 1;
3943 complete_all(&chip
->probe_wait
);
3947 static void azx_remove(struct pci_dev
*pci
)
3949 struct snd_card
*card
= pci_get_drvdata(pci
);
3952 snd_card_free(card
);
3956 static DEFINE_PCI_DEVICE_TABLE(azx_ids
) = {
3958 { PCI_DEVICE(0x8086, 0x1c20),
3959 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_INTEL_PCH_NOPM
},
3961 { PCI_DEVICE(0x8086, 0x1d20),
3962 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_INTEL_PCH_NOPM
},
3964 { PCI_DEVICE(0x8086, 0x1e20),
3965 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_INTEL_PCH
},
3967 { PCI_DEVICE(0x8086, 0x8c20),
3968 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_INTEL_PCH
},
3970 { PCI_DEVICE(0x8086, 0x8d20),
3971 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_INTEL_PCH
},
3972 { PCI_DEVICE(0x8086, 0x8d21),
3973 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_INTEL_PCH
},
3975 { PCI_DEVICE(0x8086, 0x9c20),
3976 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_INTEL_PCH
},
3978 { PCI_DEVICE(0x8086, 0x9c21),
3979 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_INTEL_PCH
},
3980 /* Wildcat Point-LP */
3981 { PCI_DEVICE(0x8086, 0x9ca0),
3982 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_INTEL_PCH
},
3984 { PCI_DEVICE(0x8086, 0x0a0c),
3985 .driver_data
= AZX_DRIVER_HDMI
| AZX_DCAPS_INTEL_HASWELL
},
3986 { PCI_DEVICE(0x8086, 0x0c0c),
3987 .driver_data
= AZX_DRIVER_HDMI
| AZX_DCAPS_INTEL_HASWELL
},
3988 { PCI_DEVICE(0x8086, 0x0d0c),
3989 .driver_data
= AZX_DRIVER_HDMI
| AZX_DCAPS_INTEL_HASWELL
},
3991 { PCI_DEVICE(0x8086, 0x160c),
3992 .driver_data
= AZX_DRIVER_HDMI
| AZX_DCAPS_INTEL_HASWELL
},
3994 { PCI_DEVICE(0x8086, 0x3b56),
3995 .driver_data
= AZX_DRIVER_SCH
| AZX_DCAPS_INTEL_PCH_NOPM
},
3997 { PCI_DEVICE(0x8086, 0x811b),
3998 .driver_data
= AZX_DRIVER_SCH
| AZX_DCAPS_INTEL_PCH_NOPM
},
4000 { PCI_DEVICE(0x8086, 0x080a),
4001 .driver_data
= AZX_DRIVER_SCH
| AZX_DCAPS_INTEL_PCH_NOPM
},
4003 { PCI_DEVICE(0x8086, 0x0f04),
4004 .driver_data
= AZX_DRIVER_PCH
| AZX_DCAPS_INTEL_PCH_NOPM
},
4006 { PCI_DEVICE(0x8086, 0x2668),
4007 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
4008 AZX_DCAPS_BUFSIZE
}, /* ICH6 */
4009 { PCI_DEVICE(0x8086, 0x27d8),
4010 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
4011 AZX_DCAPS_BUFSIZE
}, /* ICH7 */
4012 { PCI_DEVICE(0x8086, 0x269a),
4013 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
4014 AZX_DCAPS_BUFSIZE
}, /* ESB2 */
4015 { PCI_DEVICE(0x8086, 0x284b),
4016 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
4017 AZX_DCAPS_BUFSIZE
}, /* ICH8 */
4018 { PCI_DEVICE(0x8086, 0x293e),
4019 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
4020 AZX_DCAPS_BUFSIZE
}, /* ICH9 */
4021 { PCI_DEVICE(0x8086, 0x293f),
4022 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
4023 AZX_DCAPS_BUFSIZE
}, /* ICH9 */
4024 { PCI_DEVICE(0x8086, 0x3a3e),
4025 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
4026 AZX_DCAPS_BUFSIZE
}, /* ICH10 */
4027 { PCI_DEVICE(0x8086, 0x3a6e),
4028 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_OLD_SSYNC
|
4029 AZX_DCAPS_BUFSIZE
}, /* ICH10 */
4031 { PCI_DEVICE(PCI_VENDOR_ID_INTEL
, PCI_ANY_ID
),
4032 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO
<< 8,
4033 .class_mask
= 0xffffff,
4034 .driver_data
= AZX_DRIVER_ICH
| AZX_DCAPS_BUFSIZE
},
4035 /* ATI SB 450/600/700/800/900 */
4036 { PCI_DEVICE(0x1002, 0x437b),
4037 .driver_data
= AZX_DRIVER_ATI
| AZX_DCAPS_PRESET_ATI_SB
},
4038 { PCI_DEVICE(0x1002, 0x4383),
4039 .driver_data
= AZX_DRIVER_ATI
| AZX_DCAPS_PRESET_ATI_SB
},
4041 { PCI_DEVICE(0x1022, 0x780d),
4042 .driver_data
= AZX_DRIVER_GENERIC
| AZX_DCAPS_PRESET_ATI_SB
},
4044 { PCI_DEVICE(0x1002, 0x793b),
4045 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4046 { PCI_DEVICE(0x1002, 0x7919),
4047 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4048 { PCI_DEVICE(0x1002, 0x960f),
4049 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4050 { PCI_DEVICE(0x1002, 0x970f),
4051 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4052 { PCI_DEVICE(0x1002, 0xaa00),
4053 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4054 { PCI_DEVICE(0x1002, 0xaa08),
4055 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4056 { PCI_DEVICE(0x1002, 0xaa10),
4057 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4058 { PCI_DEVICE(0x1002, 0xaa18),
4059 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4060 { PCI_DEVICE(0x1002, 0xaa20),
4061 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4062 { PCI_DEVICE(0x1002, 0xaa28),
4063 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4064 { PCI_DEVICE(0x1002, 0xaa30),
4065 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4066 { PCI_DEVICE(0x1002, 0xaa38),
4067 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4068 { PCI_DEVICE(0x1002, 0xaa40),
4069 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4070 { PCI_DEVICE(0x1002, 0xaa48),
4071 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4072 { PCI_DEVICE(0x1002, 0xaa50),
4073 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4074 { PCI_DEVICE(0x1002, 0xaa58),
4075 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4076 { PCI_DEVICE(0x1002, 0xaa60),
4077 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4078 { PCI_DEVICE(0x1002, 0xaa68),
4079 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4080 { PCI_DEVICE(0x1002, 0xaa80),
4081 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4082 { PCI_DEVICE(0x1002, 0xaa88),
4083 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4084 { PCI_DEVICE(0x1002, 0xaa90),
4085 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4086 { PCI_DEVICE(0x1002, 0xaa98),
4087 .driver_data
= AZX_DRIVER_ATIHDMI
| AZX_DCAPS_PRESET_ATI_HDMI
},
4088 { PCI_DEVICE(0x1002, 0x9902),
4089 .driver_data
= AZX_DRIVER_ATIHDMI_NS
| AZX_DCAPS_PRESET_ATI_HDMI
},
4090 { PCI_DEVICE(0x1002, 0xaaa0),
4091 .driver_data
= AZX_DRIVER_ATIHDMI_NS
| AZX_DCAPS_PRESET_ATI_HDMI
},
4092 { PCI_DEVICE(0x1002, 0xaaa8),
4093 .driver_data
= AZX_DRIVER_ATIHDMI_NS
| AZX_DCAPS_PRESET_ATI_HDMI
},
4094 { PCI_DEVICE(0x1002, 0xaab0),
4095 .driver_data
= AZX_DRIVER_ATIHDMI_NS
| AZX_DCAPS_PRESET_ATI_HDMI
},
4096 /* VIA VT8251/VT8237A */
4097 { PCI_DEVICE(0x1106, 0x3288),
4098 .driver_data
= AZX_DRIVER_VIA
| AZX_DCAPS_POSFIX_VIA
},
4099 /* VIA GFX VT7122/VX900 */
4100 { PCI_DEVICE(0x1106, 0x9170), .driver_data
= AZX_DRIVER_GENERIC
},
4101 /* VIA GFX VT6122/VX11 */
4102 { PCI_DEVICE(0x1106, 0x9140), .driver_data
= AZX_DRIVER_GENERIC
},
4104 { PCI_DEVICE(0x1039, 0x7502), .driver_data
= AZX_DRIVER_SIS
},
4106 { PCI_DEVICE(0x10b9, 0x5461), .driver_data
= AZX_DRIVER_ULI
},
4108 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA
, PCI_ANY_ID
),
4109 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO
<< 8,
4110 .class_mask
= 0xffffff,
4111 .driver_data
= AZX_DRIVER_NVIDIA
| AZX_DCAPS_PRESET_NVIDIA
},
4113 { PCI_DEVICE(0x6549, 0x1200),
4114 .driver_data
= AZX_DRIVER_TERA
| AZX_DCAPS_NO_64BIT
},
4115 { PCI_DEVICE(0x6549, 0x2200),
4116 .driver_data
= AZX_DRIVER_TERA
| AZX_DCAPS_NO_64BIT
},
4117 /* Creative X-Fi (CA0110-IBG) */
4119 { PCI_DEVICE(0x1102, 0x0010),
4120 .driver_data
= AZX_DRIVER_CTHDA
| AZX_DCAPS_PRESET_CTHDA
},
4121 { PCI_DEVICE(0x1102, 0x0012),
4122 .driver_data
= AZX_DRIVER_CTHDA
| AZX_DCAPS_PRESET_CTHDA
},
4123 #if !IS_ENABLED(CONFIG_SND_CTXFI)
4124 /* the following entry conflicts with snd-ctxfi driver,
4125 * as ctxfi driver mutates from HD-audio to native mode with
4126 * a special command sequence.
4128 { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE
, PCI_ANY_ID
),
4129 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO
<< 8,
4130 .class_mask
= 0xffffff,
4131 .driver_data
= AZX_DRIVER_CTX
| AZX_DCAPS_CTX_WORKAROUND
|
4132 AZX_DCAPS_RIRB_PRE_DELAY
| AZX_DCAPS_POSFIX_LPIB
},
4134 /* this entry seems still valid -- i.e. without emu20kx chip */
4135 { PCI_DEVICE(0x1102, 0x0009),
4136 .driver_data
= AZX_DRIVER_CTX
| AZX_DCAPS_CTX_WORKAROUND
|
4137 AZX_DCAPS_RIRB_PRE_DELAY
| AZX_DCAPS_POSFIX_LPIB
},
4140 { PCI_DEVICE(0x17f3, 0x3010), .driver_data
= AZX_DRIVER_GENERIC
},
4141 /* VMware HDAudio */
4142 { PCI_DEVICE(0x15ad, 0x1977), .driver_data
= AZX_DRIVER_GENERIC
},
4143 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */
4144 { PCI_DEVICE(PCI_VENDOR_ID_ATI
, PCI_ANY_ID
),
4145 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO
<< 8,
4146 .class_mask
= 0xffffff,
4147 .driver_data
= AZX_DRIVER_GENERIC
| AZX_DCAPS_PRESET_ATI_HDMI
},
4148 { PCI_DEVICE(PCI_VENDOR_ID_AMD
, PCI_ANY_ID
),
4149 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO
<< 8,
4150 .class_mask
= 0xffffff,
4151 .driver_data
= AZX_DRIVER_GENERIC
| AZX_DCAPS_PRESET_ATI_HDMI
},
4154 MODULE_DEVICE_TABLE(pci
, azx_ids
);
4156 /* pci_driver definition */
4157 static struct pci_driver azx_driver
= {
4158 .name
= KBUILD_MODNAME
,
4159 .id_table
= azx_ids
,
4161 .remove
= azx_remove
,
4167 module_pci_driver(azx_driver
);