]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blame - sound/pci/hda/hda_intel.c
Merge branch 'topic/hda' into for-linus
[mirror_ubuntu-jammy-kernel.git] / sound / pci / hda / hda_intel.c
CommitLineData
1da177e4
LT
1/*
2 *
d01ce99f
TI
3 * hda_intel.c - Implementation of primary alsa driver code base
4 * for Intel HD Audio.
1da177e4
LT
5 *
6 * Copyright(c) 2004 Intel Corporation. All rights reserved.
7 *
8 * Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>
9 * PeiSen Hou <pshou@realtek.com.tw>
10 *
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)
14 * any later version.
15 *
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
19 * more details.
20 *
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.
24 *
25 * CONTACTS:
26 *
27 * Matt Jared matt.jared@intel.com
28 * Andy Kopp andy.kopp@intel.com
29 * Dan Kogan dan.d.kogan@intel.com
30 *
31 * CHANGES:
32 *
33 * 2004.12.01 Major rewrite by tiwai, merged the work of pshou
34 *
35 */
36
1da177e4
LT
37#include <linux/delay.h>
38#include <linux/interrupt.h>
362775e2 39#include <linux/kernel.h>
1da177e4 40#include <linux/module.h>
24982c5f 41#include <linux/dma-mapping.h>
1da177e4
LT
42#include <linux/moduleparam.h>
43#include <linux/init.h>
44#include <linux/slab.h>
45#include <linux/pci.h>
62932df8 46#include <linux/mutex.h>
0cbf0098 47#include <linux/reboot.h>
27fe48d9
TI
48#include <linux/io.h>
49#ifdef CONFIG_X86
50/* for snoop control */
51#include <asm/pgtable.h>
52#include <asm/cacheflush.h>
53#endif
1da177e4
LT
54#include <sound/core.h>
55#include <sound/initval.h>
56#include "hda_codec.h"
57
58
5aba4f8e
TI
59static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
60static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
a67ff6a5 61static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
5aba4f8e
TI
62static char *model[SNDRV_CARDS];
63static int position_fix[SNDRV_CARDS];
5c0d7bc1 64static int bdl_pos_adj[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
5aba4f8e 65static int probe_mask[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
d4d9cd03 66static int probe_only[SNDRV_CARDS];
a67ff6a5 67static bool single_cmd;
71623855 68static int enable_msi = -1;
4ea6fbc8
TI
69#ifdef CONFIG_SND_HDA_PATCH_LOADER
70static char *patch[SNDRV_CARDS];
71#endif
2dca0bba
JK
72#ifdef CONFIG_SND_HDA_INPUT_BEEP
73static int beep_mode[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] =
74 CONFIG_SND_HDA_INPUT_BEEP_MODE};
75#endif
1da177e4 76
5aba4f8e 77module_param_array(index, int, NULL, 0444);
1da177e4 78MODULE_PARM_DESC(index, "Index value for Intel HD audio interface.");
5aba4f8e 79module_param_array(id, charp, NULL, 0444);
1da177e4 80MODULE_PARM_DESC(id, "ID string for Intel HD audio interface.");
5aba4f8e
TI
81module_param_array(enable, bool, NULL, 0444);
82MODULE_PARM_DESC(enable, "Enable Intel HD audio interface.");
83module_param_array(model, charp, NULL, 0444);
1da177e4 84MODULE_PARM_DESC(model, "Use the given board model.");
5aba4f8e 85module_param_array(position_fix, int, NULL, 0444);
4cb36310
DH
86MODULE_PARM_DESC(position_fix, "DMA pointer read method."
87 "(0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO).");
555e219f
TI
88module_param_array(bdl_pos_adj, int, NULL, 0644);
89MODULE_PARM_DESC(bdl_pos_adj, "BDL position adjustment offset.");
5aba4f8e 90module_param_array(probe_mask, int, NULL, 0444);
606ad75f 91MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1).");
079e683e 92module_param_array(probe_only, int, NULL, 0444);
d4d9cd03 93MODULE_PARM_DESC(probe_only, "Only probing and no codec initialization.");
27346166 94module_param(single_cmd, bool, 0444);
d01ce99f
TI
95MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs "
96 "(for debugging only).");
5aba4f8e 97module_param(enable_msi, int, 0444);
134a11f0 98MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)");
4ea6fbc8
TI
99#ifdef CONFIG_SND_HDA_PATCH_LOADER
100module_param_array(patch, charp, NULL, 0444);
101MODULE_PARM_DESC(patch, "Patch file for Intel HD audio interface.");
102#endif
2dca0bba
JK
103#ifdef CONFIG_SND_HDA_INPUT_BEEP
104module_param_array(beep_mode, int, NULL, 0444);
105MODULE_PARM_DESC(beep_mode, "Select HDA Beep registration mode "
106 "(0=off, 1=on, 2=mute switch on/off) (default=1).");
107#endif
606ad75f 108
dee1b66c 109#ifdef CONFIG_SND_HDA_POWER_SAVE
fee2fba3
TI
110static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
111module_param(power_save, int, 0644);
112MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
113 "(in second, 0 = disable).");
1da177e4 114
dee1b66c
TI
115/* reset the HD-audio controller in power save mode.
116 * this may give more power-saving, but will take longer time to
117 * wake up.
118 */
a67ff6a5 119static bool power_save_controller = 1;
dee1b66c
TI
120module_param(power_save_controller, bool, 0644);
121MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
122#endif
123
a67ff6a5 124static bool align_buffer_size = 1;
2ae66c26
PLB
125module_param(align_buffer_size, bool, 0644);
126MODULE_PARM_DESC(align_buffer_size,
127 "Force buffer and period sizes to be multiple of 128 bytes.");
128
27fe48d9
TI
129#ifdef CONFIG_X86
130static bool hda_snoop = true;
131module_param_named(snoop, hda_snoop, bool, 0444);
132MODULE_PARM_DESC(snoop, "Enable/disable snooping");
133#define azx_snoop(chip) (chip)->snoop
134#else
135#define hda_snoop true
136#define azx_snoop(chip) true
137#endif
138
139
1da177e4
LT
140MODULE_LICENSE("GPL");
141MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
142 "{Intel, ICH6M},"
2f1b3818 143 "{Intel, ICH7},"
f5d40b30 144 "{Intel, ESB2},"
d2981393 145 "{Intel, ICH8},"
f9cc8a8b 146 "{Intel, ICH9},"
c34f5a04 147 "{Intel, ICH10},"
b29c2360 148 "{Intel, PCH},"
d2f2fcd2 149 "{Intel, CPT},"
d2edeb7c 150 "{Intel, PPT},"
cea310e8 151 "{Intel, PBG},"
4979bca9 152 "{Intel, SCH},"
fc20a562 153 "{ATI, SB450},"
89be83f8 154 "{ATI, SB600},"
778b6e1b 155 "{ATI, RS600},"
5b15c95f 156 "{ATI, RS690},"
e6db1119
WL
157 "{ATI, RS780},"
158 "{ATI, R600},"
2797f724
HRK
159 "{ATI, RV630},"
160 "{ATI, RV610},"
27da1834
WL
161 "{ATI, RV670},"
162 "{ATI, RV635},"
163 "{ATI, RV620},"
164 "{ATI, RV770},"
fc20a562 165 "{VIA, VT8251},"
47672310 166 "{VIA, VT8237A},"
07e4ca50
TI
167 "{SiS, SIS966},"
168 "{ULI, M5461}}");
1da177e4
LT
169MODULE_DESCRIPTION("Intel HDA driver");
170
4abc1cc2
TI
171#ifdef CONFIG_SND_VERBOSE_PRINTK
172#define SFX /* nop */
173#else
1da177e4 174#define SFX "hda-intel: "
4abc1cc2 175#endif
cb53c626 176
1da177e4
LT
177/*
178 * registers
179 */
180#define ICH6_REG_GCAP 0x00
b21fadb9
TI
181#define ICH6_GCAP_64OK (1 << 0) /* 64bit address support */
182#define ICH6_GCAP_NSDO (3 << 1) /* # of serial data out signals */
183#define ICH6_GCAP_BSS (31 << 3) /* # of bidirectional streams */
184#define ICH6_GCAP_ISS (15 << 8) /* # of input streams */
185#define ICH6_GCAP_OSS (15 << 12) /* # of output streams */
1da177e4
LT
186#define ICH6_REG_VMIN 0x02
187#define ICH6_REG_VMAJ 0x03
188#define ICH6_REG_OUTPAY 0x04
189#define ICH6_REG_INPAY 0x06
190#define ICH6_REG_GCTL 0x08
8a933ece 191#define ICH6_GCTL_RESET (1 << 0) /* controller reset */
b21fadb9
TI
192#define ICH6_GCTL_FCNTRL (1 << 1) /* flush control */
193#define ICH6_GCTL_UNSOL (1 << 8) /* accept unsol. response enable */
1da177e4
LT
194#define ICH6_REG_WAKEEN 0x0c
195#define ICH6_REG_STATESTS 0x0e
196#define ICH6_REG_GSTS 0x10
b21fadb9 197#define ICH6_GSTS_FSTS (1 << 1) /* flush status */
1da177e4
LT
198#define ICH6_REG_INTCTL 0x20
199#define ICH6_REG_INTSTS 0x24
e5463720 200#define ICH6_REG_WALLCLK 0x30 /* 24Mhz source */
8b0bd226
TI
201#define ICH6_REG_OLD_SSYNC 0x34 /* SSYNC for old ICH */
202#define ICH6_REG_SSYNC 0x38
1da177e4
LT
203#define ICH6_REG_CORBLBASE 0x40
204#define ICH6_REG_CORBUBASE 0x44
205#define ICH6_REG_CORBWP 0x48
b21fadb9
TI
206#define ICH6_REG_CORBRP 0x4a
207#define ICH6_CORBRP_RST (1 << 15) /* read pointer reset */
1da177e4 208#define ICH6_REG_CORBCTL 0x4c
b21fadb9
TI
209#define ICH6_CORBCTL_RUN (1 << 1) /* enable DMA */
210#define ICH6_CORBCTL_CMEIE (1 << 0) /* enable memory error irq */
1da177e4 211#define ICH6_REG_CORBSTS 0x4d
b21fadb9 212#define ICH6_CORBSTS_CMEI (1 << 0) /* memory error indication */
1da177e4
LT
213#define ICH6_REG_CORBSIZE 0x4e
214
215#define ICH6_REG_RIRBLBASE 0x50
216#define ICH6_REG_RIRBUBASE 0x54
217#define ICH6_REG_RIRBWP 0x58
b21fadb9 218#define ICH6_RIRBWP_RST (1 << 15) /* write pointer reset */
1da177e4
LT
219#define ICH6_REG_RINTCNT 0x5a
220#define ICH6_REG_RIRBCTL 0x5c
b21fadb9
TI
221#define ICH6_RBCTL_IRQ_EN (1 << 0) /* enable IRQ */
222#define ICH6_RBCTL_DMA_EN (1 << 1) /* enable DMA */
223#define ICH6_RBCTL_OVERRUN_EN (1 << 2) /* enable overrun irq */
1da177e4 224#define ICH6_REG_RIRBSTS 0x5d
b21fadb9
TI
225#define ICH6_RBSTS_IRQ (1 << 0) /* response irq */
226#define ICH6_RBSTS_OVERRUN (1 << 2) /* overrun irq */
1da177e4
LT
227#define ICH6_REG_RIRBSIZE 0x5e
228
229#define ICH6_REG_IC 0x60
230#define ICH6_REG_IR 0x64
231#define ICH6_REG_IRS 0x68
232#define ICH6_IRS_VALID (1<<1)
233#define ICH6_IRS_BUSY (1<<0)
234
235#define ICH6_REG_DPLBASE 0x70
236#define ICH6_REG_DPUBASE 0x74
237#define ICH6_DPLBASE_ENABLE 0x1 /* Enable position buffer */
238
239/* SD offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
240enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
241
242/* stream register offsets from stream base */
243#define ICH6_REG_SD_CTL 0x00
244#define ICH6_REG_SD_STS 0x03
245#define ICH6_REG_SD_LPIB 0x04
246#define ICH6_REG_SD_CBL 0x08
247#define ICH6_REG_SD_LVI 0x0c
248#define ICH6_REG_SD_FIFOW 0x0e
249#define ICH6_REG_SD_FIFOSIZE 0x10
250#define ICH6_REG_SD_FORMAT 0x12
251#define ICH6_REG_SD_BDLPL 0x18
252#define ICH6_REG_SD_BDLPU 0x1c
253
254/* PCI space */
255#define ICH6_PCIREG_TCSEL 0x44
256
257/*
258 * other constants
259 */
260
261/* max number of SDs */
07e4ca50 262/* ICH, ATI and VIA have 4 playback and 4 capture */
07e4ca50 263#define ICH6_NUM_CAPTURE 4
07e4ca50
TI
264#define ICH6_NUM_PLAYBACK 4
265
266/* ULI has 6 playback and 5 capture */
07e4ca50 267#define ULI_NUM_CAPTURE 5
07e4ca50
TI
268#define ULI_NUM_PLAYBACK 6
269
778b6e1b 270/* ATI HDMI has 1 playback and 0 capture */
778b6e1b 271#define ATIHDMI_NUM_CAPTURE 0
778b6e1b
FK
272#define ATIHDMI_NUM_PLAYBACK 1
273
f269002e
KY
274/* TERA has 4 playback and 3 capture */
275#define TERA_NUM_CAPTURE 3
276#define TERA_NUM_PLAYBACK 4
277
07e4ca50
TI
278/* this number is statically defined for simplicity */
279#define MAX_AZX_DEV 16
280
1da177e4 281/* max number of fragments - we may use more if allocating more pages for BDL */
4ce107b9
TI
282#define BDL_SIZE 4096
283#define AZX_MAX_BDL_ENTRIES (BDL_SIZE / 16)
284#define AZX_MAX_FRAG 32
1da177e4
LT
285/* max buffer size - no h/w limit, you can increase as you like */
286#define AZX_MAX_BUF_SIZE (1024*1024*1024)
1da177e4
LT
287
288/* RIRB int mask: overrun[2], response[0] */
289#define RIRB_INT_RESPONSE 0x01
290#define RIRB_INT_OVERRUN 0x04
291#define RIRB_INT_MASK 0x05
292
2f5983f2 293/* STATESTS int mask: S3,SD2,SD1,SD0 */
7445dfc1
WN
294#define AZX_MAX_CODECS 8
295#define AZX_DEFAULT_CODECS 4
deadff16 296#define STATESTS_INT_MASK ((1 << AZX_MAX_CODECS) - 1)
1da177e4
LT
297
298/* SD_CTL bits */
299#define SD_CTL_STREAM_RESET 0x01 /* stream reset bit */
300#define SD_CTL_DMA_START 0x02 /* stream DMA start bit */
850f0e52
TI
301#define SD_CTL_STRIPE (3 << 16) /* stripe control */
302#define SD_CTL_TRAFFIC_PRIO (1 << 18) /* traffic priority */
303#define SD_CTL_DIR (1 << 19) /* bi-directional stream */
1da177e4
LT
304#define SD_CTL_STREAM_TAG_MASK (0xf << 20)
305#define SD_CTL_STREAM_TAG_SHIFT 20
306
307/* SD_CTL and SD_STS */
308#define SD_INT_DESC_ERR 0x10 /* descriptor error interrupt */
309#define SD_INT_FIFO_ERR 0x08 /* FIFO error interrupt */
310#define SD_INT_COMPLETE 0x04 /* completion interrupt */
d01ce99f
TI
311#define SD_INT_MASK (SD_INT_DESC_ERR|SD_INT_FIFO_ERR|\
312 SD_INT_COMPLETE)
1da177e4
LT
313
314/* SD_STS */
315#define SD_STS_FIFO_READY 0x20 /* FIFO ready */
316
317/* INTCTL and INTSTS */
d01ce99f
TI
318#define ICH6_INT_ALL_STREAM 0xff /* all stream interrupts */
319#define ICH6_INT_CTRL_EN 0x40000000 /* controller interrupt enable bit */
320#define ICH6_INT_GLOBAL_EN 0x80000000 /* global interrupt enable bit */
1da177e4 321
1da177e4
LT
322/* below are so far hardcoded - should read registers in future */
323#define ICH6_MAX_CORB_ENTRIES 256
324#define ICH6_MAX_RIRB_ENTRIES 256
325
c74db86b
TI
326/* position fix mode */
327enum {
0be3b5d3 328 POS_FIX_AUTO,
d2e1c973 329 POS_FIX_LPIB,
0be3b5d3 330 POS_FIX_POSBUF,
4cb36310 331 POS_FIX_VIACOMBO,
c74db86b 332};
1da177e4 333
f5d40b30 334/* Defines for ATI HD Audio support in SB450 south bridge */
f5d40b30
FL
335#define ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR 0x42
336#define ATI_SB450_HDAUDIO_ENABLE_SNOOP 0x02
337
da3fca21
V
338/* Defines for Nvidia HDA support */
339#define NVIDIA_HDA_TRANSREG_ADDR 0x4e
340#define NVIDIA_HDA_ENABLE_COHBITS 0x0f
320dcc30
PC
341#define NVIDIA_HDA_ISTRM_COH 0x4d
342#define NVIDIA_HDA_OSTRM_COH 0x4c
343#define NVIDIA_HDA_ENABLE_COHBIT 0x01
f5d40b30 344
90a5ad52
TI
345/* Defines for Intel SCH HDA snoop control */
346#define INTEL_SCH_HDA_DEVC 0x78
347#define INTEL_SCH_HDA_DEVC_NOSNOOP (0x1<<11)
348
0e153474
JC
349/* Define IN stream 0 FIFO size offset in VIA controller */
350#define VIA_IN_STREAM0_FIFO_SIZE_OFFSET 0x90
351/* Define VIA HD Audio Device ID*/
352#define VIA_HDAC_DEVICE_ID 0x3288
353
c4da29ca
YL
354/* HD Audio class code */
355#define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
90a5ad52 356
1da177e4
LT
357/*
358 */
359
a98f90fd 360struct azx_dev {
4ce107b9 361 struct snd_dma_buffer bdl; /* BDL buffer */
d01ce99f 362 u32 *posbuf; /* position buffer pointer */
1da177e4 363
d01ce99f 364 unsigned int bufsize; /* size of the play buffer in bytes */
9ad593f6 365 unsigned int period_bytes; /* size of the period in bytes */
d01ce99f
TI
366 unsigned int frags; /* number for period in the play buffer */
367 unsigned int fifo_size; /* FIFO size */
e5463720
JK
368 unsigned long start_wallclk; /* start + minimum wallclk */
369 unsigned long period_wallclk; /* wallclk for period */
1da177e4 370
d01ce99f 371 void __iomem *sd_addr; /* stream descriptor pointer */
1da177e4 372
d01ce99f 373 u32 sd_int_sta_mask; /* stream int status mask */
1da177e4
LT
374
375 /* pcm support */
d01ce99f
TI
376 struct snd_pcm_substream *substream; /* assigned substream,
377 * set in PCM open
378 */
379 unsigned int format_val; /* format value to be set in the
380 * controller and the codec
381 */
1da177e4
LT
382 unsigned char stream_tag; /* assigned stream */
383 unsigned char index; /* stream index */
d5cf9911 384 int assigned_key; /* last device# key assigned to */
1da177e4 385
927fc866
PM
386 unsigned int opened :1;
387 unsigned int running :1;
675f25d4 388 unsigned int irq_pending :1;
0e153474
JC
389 /*
390 * For VIA:
391 * A flag to ensure DMA position is 0
392 * when link position is not greater than FIFO size
393 */
394 unsigned int insufficient :1;
27fe48d9 395 unsigned int wc_marked:1;
1da177e4
LT
396};
397
398/* CORB/RIRB */
a98f90fd 399struct azx_rb {
1da177e4
LT
400 u32 *buf; /* CORB/RIRB buffer
401 * Each CORB entry is 4byte, RIRB is 8byte
402 */
403 dma_addr_t addr; /* physical address of CORB/RIRB buffer */
404 /* for RIRB */
405 unsigned short rp, wp; /* read/write pointers */
deadff16
WF
406 int cmds[AZX_MAX_CODECS]; /* number of pending requests */
407 u32 res[AZX_MAX_CODECS]; /* last read value */
1da177e4
LT
408};
409
01b65bfb
TI
410struct azx_pcm {
411 struct azx *chip;
412 struct snd_pcm *pcm;
413 struct hda_codec *codec;
414 struct hda_pcm_stream *hinfo[2];
415 struct list_head list;
416};
417
a98f90fd
TI
418struct azx {
419 struct snd_card *card;
1da177e4 420 struct pci_dev *pci;
555e219f 421 int dev_index;
1da177e4 422
07e4ca50
TI
423 /* chip type specific */
424 int driver_type;
9477c58e 425 unsigned int driver_caps;
07e4ca50
TI
426 int playback_streams;
427 int playback_index_offset;
428 int capture_streams;
429 int capture_index_offset;
430 int num_streams;
431
1da177e4
LT
432 /* pci resources */
433 unsigned long addr;
434 void __iomem *remap_addr;
435 int irq;
436
437 /* locks */
438 spinlock_t reg_lock;
62932df8 439 struct mutex open_mutex;
1da177e4 440
07e4ca50 441 /* streams (x num_streams) */
a98f90fd 442 struct azx_dev *azx_dev;
1da177e4
LT
443
444 /* PCM */
01b65bfb 445 struct list_head pcm_list; /* azx_pcm list */
1da177e4
LT
446
447 /* HD codec */
448 unsigned short codec_mask;
f1eaaeec 449 int codec_probe_mask; /* copied from probe_mask option */
1da177e4 450 struct hda_bus *bus;
2dca0bba 451 unsigned int beep_mode;
1da177e4
LT
452
453 /* CORB/RIRB */
a98f90fd
TI
454 struct azx_rb corb;
455 struct azx_rb rirb;
1da177e4 456
4ce107b9 457 /* CORB/RIRB and position buffers */
1da177e4
LT
458 struct snd_dma_buffer rb;
459 struct snd_dma_buffer posbuf;
c74db86b
TI
460
461 /* flags */
beaffc39 462 int position_fix[2]; /* for both playback/capture streams */
1eb6dc7d 463 int poll_count;
cb53c626 464 unsigned int running :1;
927fc866
PM
465 unsigned int initialized :1;
466 unsigned int single_cmd :1;
467 unsigned int polling_mode :1;
68e7fffc 468 unsigned int msi :1;
a6a950a8 469 unsigned int irq_pending_warned :1;
6ce4a3bc 470 unsigned int probing :1; /* codec probing phase */
27fe48d9 471 unsigned int snoop:1;
43bbb6cc
TI
472
473 /* for debugging */
feb27340 474 unsigned int last_cmd[AZX_MAX_CODECS];
9ad593f6
TI
475
476 /* for pending irqs */
477 struct work_struct irq_pending_work;
0cbf0098
TI
478
479 /* reboot notifier (for mysterious hangup problem at power-down) */
480 struct notifier_block reboot_notifier;
1da177e4
LT
481};
482
07e4ca50
TI
483/* driver types */
484enum {
485 AZX_DRIVER_ICH,
32679f95 486 AZX_DRIVER_PCH,
4979bca9 487 AZX_DRIVER_SCH,
07e4ca50 488 AZX_DRIVER_ATI,
778b6e1b 489 AZX_DRIVER_ATIHDMI,
1815b34a 490 AZX_DRIVER_ATIHDMI_NS,
07e4ca50
TI
491 AZX_DRIVER_VIA,
492 AZX_DRIVER_SIS,
493 AZX_DRIVER_ULI,
da3fca21 494 AZX_DRIVER_NVIDIA,
f269002e 495 AZX_DRIVER_TERA,
14d34f16 496 AZX_DRIVER_CTX,
c4da29ca 497 AZX_DRIVER_GENERIC,
2f5983f2 498 AZX_NUM_DRIVERS, /* keep this as last entry */
07e4ca50
TI
499};
500
9477c58e
TI
501/* driver quirks (capabilities) */
502/* bits 0-7 are used for indicating driver type */
503#define AZX_DCAPS_NO_TCSEL (1 << 8) /* No Intel TCSEL bit */
504#define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
505#define AZX_DCAPS_ATI_SNOOP (1 << 10) /* ATI snoop enable */
506#define AZX_DCAPS_NVIDIA_SNOOP (1 << 11) /* Nvidia snoop enable */
507#define AZX_DCAPS_SCH_SNOOP (1 << 12) /* SCH/PCH snoop enable */
508#define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */
509#define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */
510#define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
511#define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */
512#define AZX_DCAPS_POSFIX_VIA (1 << 17) /* Use VIACOMBO as default */
513#define AZX_DCAPS_NO_64BIT (1 << 18) /* No 64bit address */
514#define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */
8b0bd226 515#define AZX_DCAPS_OLD_SSYNC (1 << 20) /* Old SSYNC reg for ICH */
2ae66c26 516#define AZX_DCAPS_BUFSIZE (1 << 21) /* no buffer size alignment */
9477c58e
TI
517
518/* quirks for ATI SB / AMD Hudson */
519#define AZX_DCAPS_PRESET_ATI_SB \
520 (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
521 AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
522
523/* quirks for ATI/AMD HDMI */
524#define AZX_DCAPS_PRESET_ATI_HDMI \
525 (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
526
527/* quirks for Nvidia */
528#define AZX_DCAPS_PRESET_NVIDIA \
529 (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI)
530
07e4ca50
TI
531static char *driver_short_names[] __devinitdata = {
532 [AZX_DRIVER_ICH] = "HDA Intel",
32679f95 533 [AZX_DRIVER_PCH] = "HDA Intel PCH",
4979bca9 534 [AZX_DRIVER_SCH] = "HDA Intel MID",
07e4ca50 535 [AZX_DRIVER_ATI] = "HDA ATI SB",
778b6e1b 536 [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI",
1815b34a 537 [AZX_DRIVER_ATIHDMI_NS] = "HDA ATI HDMI",
07e4ca50
TI
538 [AZX_DRIVER_VIA] = "HDA VIA VT82xx",
539 [AZX_DRIVER_SIS] = "HDA SIS966",
da3fca21
V
540 [AZX_DRIVER_ULI] = "HDA ULI M5461",
541 [AZX_DRIVER_NVIDIA] = "HDA NVidia",
f269002e 542 [AZX_DRIVER_TERA] = "HDA Teradici",
14d34f16 543 [AZX_DRIVER_CTX] = "HDA Creative",
c4da29ca 544 [AZX_DRIVER_GENERIC] = "HD-Audio Generic",
07e4ca50
TI
545};
546
1da177e4
LT
547/*
548 * macros for easy use
549 */
550#define azx_writel(chip,reg,value) \
551 writel(value, (chip)->remap_addr + ICH6_REG_##reg)
552#define azx_readl(chip,reg) \
553 readl((chip)->remap_addr + ICH6_REG_##reg)
554#define azx_writew(chip,reg,value) \
555 writew(value, (chip)->remap_addr + ICH6_REG_##reg)
556#define azx_readw(chip,reg) \
557 readw((chip)->remap_addr + ICH6_REG_##reg)
558#define azx_writeb(chip,reg,value) \
559 writeb(value, (chip)->remap_addr + ICH6_REG_##reg)
560#define azx_readb(chip,reg) \
561 readb((chip)->remap_addr + ICH6_REG_##reg)
562
563#define azx_sd_writel(dev,reg,value) \
564 writel(value, (dev)->sd_addr + ICH6_REG_##reg)
565#define azx_sd_readl(dev,reg) \
566 readl((dev)->sd_addr + ICH6_REG_##reg)
567#define azx_sd_writew(dev,reg,value) \
568 writew(value, (dev)->sd_addr + ICH6_REG_##reg)
569#define azx_sd_readw(dev,reg) \
570 readw((dev)->sd_addr + ICH6_REG_##reg)
571#define azx_sd_writeb(dev,reg,value) \
572 writeb(value, (dev)->sd_addr + ICH6_REG_##reg)
573#define azx_sd_readb(dev,reg) \
574 readb((dev)->sd_addr + ICH6_REG_##reg)
575
576/* for pcm support */
a98f90fd 577#define get_azx_dev(substream) (substream->runtime->private_data)
1da177e4 578
27fe48d9
TI
579#ifdef CONFIG_X86
580static void __mark_pages_wc(struct azx *chip, void *addr, size_t size, bool on)
581{
582 if (azx_snoop(chip))
583 return;
584 if (addr && size) {
585 int pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
586 if (on)
587 set_memory_wc((unsigned long)addr, pages);
588 else
589 set_memory_wb((unsigned long)addr, pages);
590 }
591}
592
593static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
594 bool on)
595{
596 __mark_pages_wc(chip, buf->area, buf->bytes, on);
597}
598static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
599 struct snd_pcm_runtime *runtime, bool on)
600{
601 if (azx_dev->wc_marked != on) {
602 __mark_pages_wc(chip, runtime->dma_area, runtime->dma_bytes, on);
603 azx_dev->wc_marked = on;
604 }
605}
606#else
607/* NOP for other archs */
608static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
609 bool on)
610{
611}
612static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
613 struct snd_pcm_runtime *runtime, bool on)
614{
615}
616#endif
617
68e7fffc 618static int azx_acquire_irq(struct azx *chip, int do_disconnect);
1eb6dc7d 619static int azx_send_cmd(struct hda_bus *bus, unsigned int val);
1da177e4
LT
620/*
621 * Interface for HD codec
622 */
623
1da177e4
LT
624/*
625 * CORB / RIRB interface
626 */
a98f90fd 627static int azx_alloc_cmd_io(struct azx *chip)
1da177e4
LT
628{
629 int err;
630
631 /* single page (at least 4096 bytes) must suffice for both ringbuffes */
d01ce99f
TI
632 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
633 snd_dma_pci_data(chip->pci),
1da177e4
LT
634 PAGE_SIZE, &chip->rb);
635 if (err < 0) {
636 snd_printk(KERN_ERR SFX "cannot allocate CORB/RIRB\n");
637 return err;
638 }
27fe48d9 639 mark_pages_wc(chip, &chip->rb, true);
1da177e4
LT
640 return 0;
641}
642
a98f90fd 643static void azx_init_cmd_io(struct azx *chip)
1da177e4 644{
cdb1fbf2 645 spin_lock_irq(&chip->reg_lock);
1da177e4
LT
646 /* CORB set up */
647 chip->corb.addr = chip->rb.addr;
648 chip->corb.buf = (u32 *)chip->rb.area;
649 azx_writel(chip, CORBLBASE, (u32)chip->corb.addr);
766979e0 650 azx_writel(chip, CORBUBASE, upper_32_bits(chip->corb.addr));
1da177e4 651
07e4ca50
TI
652 /* set the corb size to 256 entries (ULI requires explicitly) */
653 azx_writeb(chip, CORBSIZE, 0x02);
1da177e4
LT
654 /* set the corb write pointer to 0 */
655 azx_writew(chip, CORBWP, 0);
656 /* reset the corb hw read pointer */
b21fadb9 657 azx_writew(chip, CORBRP, ICH6_CORBRP_RST);
1da177e4 658 /* enable corb dma */
b21fadb9 659 azx_writeb(chip, CORBCTL, ICH6_CORBCTL_RUN);
1da177e4
LT
660
661 /* RIRB set up */
662 chip->rirb.addr = chip->rb.addr + 2048;
663 chip->rirb.buf = (u32 *)(chip->rb.area + 2048);
deadff16
WF
664 chip->rirb.wp = chip->rirb.rp = 0;
665 memset(chip->rirb.cmds, 0, sizeof(chip->rirb.cmds));
1da177e4 666 azx_writel(chip, RIRBLBASE, (u32)chip->rirb.addr);
766979e0 667 azx_writel(chip, RIRBUBASE, upper_32_bits(chip->rirb.addr));
1da177e4 668
07e4ca50
TI
669 /* set the rirb size to 256 entries (ULI requires explicitly) */
670 azx_writeb(chip, RIRBSIZE, 0x02);
1da177e4 671 /* reset the rirb hw write pointer */
b21fadb9 672 azx_writew(chip, RIRBWP, ICH6_RIRBWP_RST);
1da177e4 673 /* set N=1, get RIRB response interrupt for new entry */
9477c58e 674 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
14d34f16
TI
675 azx_writew(chip, RINTCNT, 0xc0);
676 else
677 azx_writew(chip, RINTCNT, 1);
1da177e4 678 /* enable rirb dma and response irq */
1da177e4 679 azx_writeb(chip, RIRBCTL, ICH6_RBCTL_DMA_EN | ICH6_RBCTL_IRQ_EN);
cdb1fbf2 680 spin_unlock_irq(&chip->reg_lock);
1da177e4
LT
681}
682
a98f90fd 683static void azx_free_cmd_io(struct azx *chip)
1da177e4 684{
cdb1fbf2 685 spin_lock_irq(&chip->reg_lock);
1da177e4
LT
686 /* disable ringbuffer DMAs */
687 azx_writeb(chip, RIRBCTL, 0);
688 azx_writeb(chip, CORBCTL, 0);
cdb1fbf2 689 spin_unlock_irq(&chip->reg_lock);
1da177e4
LT
690}
691
deadff16
WF
692static unsigned int azx_command_addr(u32 cmd)
693{
694 unsigned int addr = cmd >> 28;
695
696 if (addr >= AZX_MAX_CODECS) {
697 snd_BUG();
698 addr = 0;
699 }
700
701 return addr;
702}
703
704static unsigned int azx_response_addr(u32 res)
705{
706 unsigned int addr = res & 0xf;
707
708 if (addr >= AZX_MAX_CODECS) {
709 snd_BUG();
710 addr = 0;
711 }
712
713 return addr;
1da177e4
LT
714}
715
716/* send a command */
33fa35ed 717static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
1da177e4 718{
33fa35ed 719 struct azx *chip = bus->private_data;
deadff16 720 unsigned int addr = azx_command_addr(val);
1da177e4 721 unsigned int wp;
1da177e4 722
c32649fe
WF
723 spin_lock_irq(&chip->reg_lock);
724
1da177e4
LT
725 /* add command to corb */
726 wp = azx_readb(chip, CORBWP);
727 wp++;
728 wp %= ICH6_MAX_CORB_ENTRIES;
729
deadff16 730 chip->rirb.cmds[addr]++;
1da177e4
LT
731 chip->corb.buf[wp] = cpu_to_le32(val);
732 azx_writel(chip, CORBWP, wp);
c32649fe 733
1da177e4
LT
734 spin_unlock_irq(&chip->reg_lock);
735
736 return 0;
737}
738
739#define ICH6_RIRB_EX_UNSOL_EV (1<<4)
740
741/* retrieve RIRB entry - called from interrupt handler */
a98f90fd 742static void azx_update_rirb(struct azx *chip)
1da177e4
LT
743{
744 unsigned int rp, wp;
deadff16 745 unsigned int addr;
1da177e4
LT
746 u32 res, res_ex;
747
748 wp = azx_readb(chip, RIRBWP);
749 if (wp == chip->rirb.wp)
750 return;
751 chip->rirb.wp = wp;
deadff16 752
1da177e4
LT
753 while (chip->rirb.rp != wp) {
754 chip->rirb.rp++;
755 chip->rirb.rp %= ICH6_MAX_RIRB_ENTRIES;
756
757 rp = chip->rirb.rp << 1; /* an RIRB entry is 8-bytes */
758 res_ex = le32_to_cpu(chip->rirb.buf[rp + 1]);
759 res = le32_to_cpu(chip->rirb.buf[rp]);
deadff16 760 addr = azx_response_addr(res_ex);
1da177e4
LT
761 if (res_ex & ICH6_RIRB_EX_UNSOL_EV)
762 snd_hda_queue_unsol_event(chip->bus, res, res_ex);
deadff16
WF
763 else if (chip->rirb.cmds[addr]) {
764 chip->rirb.res[addr] = res;
2add9b92 765 smp_wmb();
deadff16 766 chip->rirb.cmds[addr]--;
e310bb06
WF
767 } else
768 snd_printk(KERN_ERR SFX "spurious response %#x:%#x, "
769 "last cmd=%#08x\n",
770 res, res_ex,
771 chip->last_cmd[addr]);
1da177e4
LT
772 }
773}
774
775/* receive a response */
deadff16
WF
776static unsigned int azx_rirb_get_response(struct hda_bus *bus,
777 unsigned int addr)
1da177e4 778{
33fa35ed 779 struct azx *chip = bus->private_data;
5c79b1f8 780 unsigned long timeout;
1eb6dc7d 781 int do_poll = 0;
1da177e4 782
5c79b1f8
TI
783 again:
784 timeout = jiffies + msecs_to_jiffies(1000);
28a0d9df 785 for (;;) {
1eb6dc7d 786 if (chip->polling_mode || do_poll) {
e96224ae
TI
787 spin_lock_irq(&chip->reg_lock);
788 azx_update_rirb(chip);
789 spin_unlock_irq(&chip->reg_lock);
790 }
deadff16 791 if (!chip->rirb.cmds[addr]) {
2add9b92 792 smp_rmb();
b613291f 793 bus->rirb_error = 0;
1eb6dc7d
ML
794
795 if (!do_poll)
796 chip->poll_count = 0;
deadff16 797 return chip->rirb.res[addr]; /* the last value */
2add9b92 798 }
28a0d9df
TI
799 if (time_after(jiffies, timeout))
800 break;
33fa35ed 801 if (bus->needs_damn_long_delay)
52987656
TI
802 msleep(2); /* temporary workaround */
803 else {
804 udelay(10);
805 cond_resched();
806 }
28a0d9df 807 }
5c79b1f8 808
1eb6dc7d
ML
809 if (!chip->polling_mode && chip->poll_count < 2) {
810 snd_printdd(SFX "azx_get_response timeout, "
811 "polling the codec once: last cmd=0x%08x\n",
812 chip->last_cmd[addr]);
813 do_poll = 1;
814 chip->poll_count++;
815 goto again;
816 }
817
818
23c4a881
TI
819 if (!chip->polling_mode) {
820 snd_printk(KERN_WARNING SFX "azx_get_response timeout, "
821 "switching to polling mode: last cmd=0x%08x\n",
822 chip->last_cmd[addr]);
823 chip->polling_mode = 1;
824 goto again;
825 }
826
68e7fffc 827 if (chip->msi) {
4abc1cc2 828 snd_printk(KERN_WARNING SFX "No response from codec, "
feb27340
WF
829 "disabling MSI: last cmd=0x%08x\n",
830 chip->last_cmd[addr]);
68e7fffc
TI
831 free_irq(chip->irq, chip);
832 chip->irq = -1;
833 pci_disable_msi(chip->pci);
834 chip->msi = 0;
b613291f
TI
835 if (azx_acquire_irq(chip, 1) < 0) {
836 bus->rirb_error = 1;
68e7fffc 837 return -1;
b613291f 838 }
68e7fffc
TI
839 goto again;
840 }
841
6ce4a3bc
TI
842 if (chip->probing) {
843 /* If this critical timeout happens during the codec probing
844 * phase, this is likely an access to a non-existing codec
845 * slot. Better to return an error and reset the system.
846 */
847 return -1;
848 }
849
8dd78330
TI
850 /* a fatal communication error; need either to reset or to fallback
851 * to the single_cmd mode
852 */
b613291f 853 bus->rirb_error = 1;
b20f3b83 854 if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) {
8dd78330
TI
855 bus->response_reset = 1;
856 return -1; /* give a chance to retry */
857 }
858
859 snd_printk(KERN_ERR "hda_intel: azx_get_response timeout, "
860 "switching to single_cmd mode: last cmd=0x%08x\n",
feb27340 861 chip->last_cmd[addr]);
8dd78330
TI
862 chip->single_cmd = 1;
863 bus->response_reset = 0;
1a696978 864 /* release CORB/RIRB */
4fcd3920 865 azx_free_cmd_io(chip);
1a696978
TI
866 /* disable unsolicited responses */
867 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL);
5c79b1f8 868 return -1;
1da177e4
LT
869}
870
1da177e4
LT
871/*
872 * Use the single immediate command instead of CORB/RIRB for simplicity
873 *
874 * Note: according to Intel, this is not preferred use. The command was
875 * intended for the BIOS only, and may get confused with unsolicited
876 * responses. So, we shouldn't use it for normal operation from the
877 * driver.
878 * I left the codes, however, for debugging/testing purposes.
879 */
880
b05a7d4f 881/* receive a response */
deadff16 882static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
b05a7d4f
TI
883{
884 int timeout = 50;
885
886 while (timeout--) {
887 /* check IRV busy bit */
888 if (azx_readw(chip, IRS) & ICH6_IRS_VALID) {
889 /* reuse rirb.res as the response return value */
deadff16 890 chip->rirb.res[addr] = azx_readl(chip, IR);
b05a7d4f
TI
891 return 0;
892 }
893 udelay(1);
894 }
895 if (printk_ratelimit())
896 snd_printd(SFX "get_response timeout: IRS=0x%x\n",
897 azx_readw(chip, IRS));
deadff16 898 chip->rirb.res[addr] = -1;
b05a7d4f
TI
899 return -EIO;
900}
901
1da177e4 902/* send a command */
33fa35ed 903static int azx_single_send_cmd(struct hda_bus *bus, u32 val)
1da177e4 904{
33fa35ed 905 struct azx *chip = bus->private_data;
deadff16 906 unsigned int addr = azx_command_addr(val);
1da177e4
LT
907 int timeout = 50;
908
8dd78330 909 bus->rirb_error = 0;
1da177e4
LT
910 while (timeout--) {
911 /* check ICB busy bit */
d01ce99f 912 if (!((azx_readw(chip, IRS) & ICH6_IRS_BUSY))) {
1da177e4 913 /* Clear IRV valid bit */
d01ce99f
TI
914 azx_writew(chip, IRS, azx_readw(chip, IRS) |
915 ICH6_IRS_VALID);
1da177e4 916 azx_writel(chip, IC, val);
d01ce99f
TI
917 azx_writew(chip, IRS, azx_readw(chip, IRS) |
918 ICH6_IRS_BUSY);
deadff16 919 return azx_single_wait_for_response(chip, addr);
1da177e4
LT
920 }
921 udelay(1);
922 }
1cfd52bc
MB
923 if (printk_ratelimit())
924 snd_printd(SFX "send_cmd timeout: IRS=0x%x, val=0x%x\n",
925 azx_readw(chip, IRS), val);
1da177e4
LT
926 return -EIO;
927}
928
929/* receive a response */
deadff16
WF
930static unsigned int azx_single_get_response(struct hda_bus *bus,
931 unsigned int addr)
1da177e4 932{
33fa35ed 933 struct azx *chip = bus->private_data;
deadff16 934 return chip->rirb.res[addr];
1da177e4
LT
935}
936
111d3af5
TI
937/*
938 * The below are the main callbacks from hda_codec.
939 *
940 * They are just the skeleton to call sub-callbacks according to the
941 * current setting of chip->single_cmd.
942 */
943
944/* send a command */
33fa35ed 945static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
111d3af5 946{
33fa35ed 947 struct azx *chip = bus->private_data;
43bbb6cc 948
feb27340 949 chip->last_cmd[azx_command_addr(val)] = val;
111d3af5 950 if (chip->single_cmd)
33fa35ed 951 return azx_single_send_cmd(bus, val);
111d3af5 952 else
33fa35ed 953 return azx_corb_send_cmd(bus, val);
111d3af5
TI
954}
955
956/* get a response */
deadff16
WF
957static unsigned int azx_get_response(struct hda_bus *bus,
958 unsigned int addr)
111d3af5 959{
33fa35ed 960 struct azx *chip = bus->private_data;
111d3af5 961 if (chip->single_cmd)
deadff16 962 return azx_single_get_response(bus, addr);
111d3af5 963 else
deadff16 964 return azx_rirb_get_response(bus, addr);
111d3af5
TI
965}
966
cb53c626 967#ifdef CONFIG_SND_HDA_POWER_SAVE
33fa35ed 968static void azx_power_notify(struct hda_bus *bus);
cb53c626 969#endif
111d3af5 970
1da177e4 971/* reset codec link */
cd508fe5 972static int azx_reset(struct azx *chip, int full_reset)
1da177e4
LT
973{
974 int count;
975
cd508fe5
JK
976 if (!full_reset)
977 goto __skip;
978
e8a7f136
DT
979 /* clear STATESTS */
980 azx_writeb(chip, STATESTS, STATESTS_INT_MASK);
981
1da177e4
LT
982 /* reset controller */
983 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_RESET);
984
985 count = 50;
986 while (azx_readb(chip, GCTL) && --count)
987 msleep(1);
988
989 /* delay for >= 100us for codec PLL to settle per spec
990 * Rev 0.9 section 5.5.1
991 */
992 msleep(1);
993
994 /* Bring controller out of reset */
995 azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | ICH6_GCTL_RESET);
996
997 count = 50;
927fc866 998 while (!azx_readb(chip, GCTL) && --count)
1da177e4
LT
999 msleep(1);
1000
927fc866 1001 /* Brent Chartrand said to wait >= 540us for codecs to initialize */
1da177e4
LT
1002 msleep(1);
1003
cd508fe5 1004 __skip:
1da177e4 1005 /* check to see if controller is ready */
927fc866 1006 if (!azx_readb(chip, GCTL)) {
4abc1cc2 1007 snd_printd(SFX "azx_reset: controller not ready!\n");
1da177e4
LT
1008 return -EBUSY;
1009 }
1010
41e2fce4 1011 /* Accept unsolicited responses */
1a696978
TI
1012 if (!chip->single_cmd)
1013 azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
1014 ICH6_GCTL_UNSOL);
41e2fce4 1015
1da177e4 1016 /* detect codecs */
927fc866 1017 if (!chip->codec_mask) {
1da177e4 1018 chip->codec_mask = azx_readw(chip, STATESTS);
4abc1cc2 1019 snd_printdd(SFX "codec_mask = 0x%x\n", chip->codec_mask);
1da177e4
LT
1020 }
1021
1022 return 0;
1023}
1024
1025
1026/*
1027 * Lowlevel interface
1028 */
1029
1030/* enable interrupts */
a98f90fd 1031static void azx_int_enable(struct azx *chip)
1da177e4
LT
1032{
1033 /* enable controller CIE and GIE */
1034 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) |
1035 ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN);
1036}
1037
1038/* disable interrupts */
a98f90fd 1039static void azx_int_disable(struct azx *chip)
1da177e4
LT
1040{
1041 int i;
1042
1043 /* disable interrupts in stream descriptor */
07e4ca50 1044 for (i = 0; i < chip->num_streams; i++) {
a98f90fd 1045 struct azx_dev *azx_dev = &chip->azx_dev[i];
1da177e4
LT
1046 azx_sd_writeb(azx_dev, SD_CTL,
1047 azx_sd_readb(azx_dev, SD_CTL) & ~SD_INT_MASK);
1048 }
1049
1050 /* disable SIE for all streams */
1051 azx_writeb(chip, INTCTL, 0);
1052
1053 /* disable controller CIE and GIE */
1054 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) &
1055 ~(ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN));
1056}
1057
1058/* clear interrupts */
a98f90fd 1059static void azx_int_clear(struct azx *chip)
1da177e4
LT
1060{
1061 int i;
1062
1063 /* clear stream status */
07e4ca50 1064 for (i = 0; i < chip->num_streams; i++) {
a98f90fd 1065 struct azx_dev *azx_dev = &chip->azx_dev[i];
1da177e4
LT
1066 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1067 }
1068
1069 /* clear STATESTS */
1070 azx_writeb(chip, STATESTS, STATESTS_INT_MASK);
1071
1072 /* clear rirb status */
1073 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1074
1075 /* clear int status */
1076 azx_writel(chip, INTSTS, ICH6_INT_CTRL_EN | ICH6_INT_ALL_STREAM);
1077}
1078
1079/* start a stream */
a98f90fd 1080static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev)
1da177e4 1081{
0e153474
JC
1082 /*
1083 * Before stream start, initialize parameter
1084 */
1085 azx_dev->insufficient = 1;
1086
1da177e4 1087 /* enable SIE */
ccc5df05
WN
1088 azx_writel(chip, INTCTL,
1089 azx_readl(chip, INTCTL) | (1 << azx_dev->index));
1da177e4
LT
1090 /* set DMA start and interrupt mask */
1091 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1092 SD_CTL_DMA_START | SD_INT_MASK);
1093}
1094
1dddab40
TI
1095/* stop DMA */
1096static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev)
1da177e4 1097{
1da177e4
LT
1098 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) &
1099 ~(SD_CTL_DMA_START | SD_INT_MASK));
1100 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); /* to be sure */
1dddab40
TI
1101}
1102
1103/* stop a stream */
1104static void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev)
1105{
1106 azx_stream_clear(chip, azx_dev);
1da177e4 1107 /* disable SIE */
ccc5df05
WN
1108 azx_writel(chip, INTCTL,
1109 azx_readl(chip, INTCTL) & ~(1 << azx_dev->index));
1da177e4
LT
1110}
1111
1112
1113/*
cb53c626 1114 * reset and start the controller registers
1da177e4 1115 */
cd508fe5 1116static void azx_init_chip(struct azx *chip, int full_reset)
1da177e4 1117{
cb53c626
TI
1118 if (chip->initialized)
1119 return;
1da177e4
LT
1120
1121 /* reset controller */
cd508fe5 1122 azx_reset(chip, full_reset);
1da177e4
LT
1123
1124 /* initialize interrupts */
1125 azx_int_clear(chip);
1126 azx_int_enable(chip);
1127
1128 /* initialize the codec command I/O */
1a696978
TI
1129 if (!chip->single_cmd)
1130 azx_init_cmd_io(chip);
1da177e4 1131
0be3b5d3
TI
1132 /* program the position buffer */
1133 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
766979e0 1134 azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr));
f5d40b30 1135
cb53c626
TI
1136 chip->initialized = 1;
1137}
1138
1139/*
1140 * initialize the PCI registers
1141 */
1142/* update bits in a PCI register byte */
1143static void update_pci_byte(struct pci_dev *pci, unsigned int reg,
1144 unsigned char mask, unsigned char val)
1145{
1146 unsigned char data;
1147
1148 pci_read_config_byte(pci, reg, &data);
1149 data &= ~mask;
1150 data |= (val & mask);
1151 pci_write_config_byte(pci, reg, data);
1152}
1153
1154static void azx_init_pci(struct azx *chip)
1155{
1156 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
1157 * TCSEL == Traffic Class Select Register, which sets PCI express QOS
1158 * Ensuring these bits are 0 clears playback static on some HD Audio
a09e89f6
AL
1159 * codecs.
1160 * The PCI register TCSEL is defined in the Intel manuals.
cb53c626 1161 */
46f2cc80 1162 if (!(chip->driver_caps & AZX_DCAPS_NO_TCSEL)) {
9477c58e 1163 snd_printdd(SFX "Clearing TCSEL\n");
a09e89f6 1164 update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0);
9477c58e 1165 }
cb53c626 1166
9477c58e
TI
1167 /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
1168 * we need to enable snoop.
1169 */
1170 if (chip->driver_caps & AZX_DCAPS_ATI_SNOOP) {
27fe48d9 1171 snd_printdd(SFX "Setting ATI snoop: %d\n", azx_snoop(chip));
cb53c626 1172 update_pci_byte(chip->pci,
27fe48d9
TI
1173 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR, 0x07,
1174 azx_snoop(chip) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP : 0);
9477c58e
TI
1175 }
1176
1177 /* For NVIDIA HDA, enable snoop */
1178 if (chip->driver_caps & AZX_DCAPS_NVIDIA_SNOOP) {
27fe48d9 1179 snd_printdd(SFX "Setting Nvidia snoop: %d\n", azx_snoop(chip));
cb53c626
TI
1180 update_pci_byte(chip->pci,
1181 NVIDIA_HDA_TRANSREG_ADDR,
1182 0x0f, NVIDIA_HDA_ENABLE_COHBITS);
320dcc30
PC
1183 update_pci_byte(chip->pci,
1184 NVIDIA_HDA_ISTRM_COH,
1185 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1186 update_pci_byte(chip->pci,
1187 NVIDIA_HDA_OSTRM_COH,
1188 0x01, NVIDIA_HDA_ENABLE_COHBIT);
9477c58e
TI
1189 }
1190
1191 /* Enable SCH/PCH snoop if needed */
1192 if (chip->driver_caps & AZX_DCAPS_SCH_SNOOP) {
27fe48d9 1193 unsigned short snoop;
90a5ad52 1194 pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);
27fe48d9
TI
1195 if ((!azx_snoop(chip) && !(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)) ||
1196 (azx_snoop(chip) && (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP))) {
1197 snoop &= ~INTEL_SCH_HDA_DEVC_NOSNOOP;
1198 if (!azx_snoop(chip))
1199 snoop |= INTEL_SCH_HDA_DEVC_NOSNOOP;
1200 pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, snoop);
90a5ad52
TI
1201 pci_read_config_word(chip->pci,
1202 INTEL_SCH_HDA_DEVC, &snoop);
90a5ad52 1203 }
27fe48d9
TI
1204 snd_printdd(SFX "SCH snoop: %s\n",
1205 (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)
1206 ? "Disabled" : "Enabled");
da3fca21 1207 }
1da177e4
LT
1208}
1209
1210
9ad593f6
TI
1211static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev);
1212
1da177e4
LT
1213/*
1214 * interrupt handler
1215 */
7d12e780 1216static irqreturn_t azx_interrupt(int irq, void *dev_id)
1da177e4 1217{
a98f90fd
TI
1218 struct azx *chip = dev_id;
1219 struct azx_dev *azx_dev;
1da177e4 1220 u32 status;
9ef04066 1221 u8 sd_status;
fa00e046 1222 int i, ok;
1da177e4
LT
1223
1224 spin_lock(&chip->reg_lock);
1225
1226 status = azx_readl(chip, INTSTS);
1227 if (status == 0) {
1228 spin_unlock(&chip->reg_lock);
1229 return IRQ_NONE;
1230 }
1231
07e4ca50 1232 for (i = 0; i < chip->num_streams; i++) {
1da177e4
LT
1233 azx_dev = &chip->azx_dev[i];
1234 if (status & azx_dev->sd_int_sta_mask) {
9ef04066 1235 sd_status = azx_sd_readb(azx_dev, SD_STS);
1da177e4 1236 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
9ef04066
CL
1237 if (!azx_dev->substream || !azx_dev->running ||
1238 !(sd_status & SD_INT_COMPLETE))
9ad593f6
TI
1239 continue;
1240 /* check whether this IRQ is really acceptable */
fa00e046
JK
1241 ok = azx_position_ok(chip, azx_dev);
1242 if (ok == 1) {
9ad593f6 1243 azx_dev->irq_pending = 0;
1da177e4
LT
1244 spin_unlock(&chip->reg_lock);
1245 snd_pcm_period_elapsed(azx_dev->substream);
1246 spin_lock(&chip->reg_lock);
fa00e046 1247 } else if (ok == 0 && chip->bus && chip->bus->workq) {
9ad593f6
TI
1248 /* bogus IRQ, process it later */
1249 azx_dev->irq_pending = 1;
6acaed38
TI
1250 queue_work(chip->bus->workq,
1251 &chip->irq_pending_work);
1da177e4
LT
1252 }
1253 }
1254 }
1255
1256 /* clear rirb int */
1257 status = azx_readb(chip, RIRBSTS);
1258 if (status & RIRB_INT_MASK) {
14d34f16 1259 if (status & RIRB_INT_RESPONSE) {
9477c58e 1260 if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY)
14d34f16 1261 udelay(80);
1da177e4 1262 azx_update_rirb(chip);
14d34f16 1263 }
1da177e4
LT
1264 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1265 }
1266
1267#if 0
1268 /* clear state status int */
1269 if (azx_readb(chip, STATESTS) & 0x04)
1270 azx_writeb(chip, STATESTS, 0x04);
1271#endif
1272 spin_unlock(&chip->reg_lock);
1273
1274 return IRQ_HANDLED;
1275}
1276
1277
675f25d4
TI
1278/*
1279 * set up a BDL entry
1280 */
1281static int setup_bdle(struct snd_pcm_substream *substream,
1282 struct azx_dev *azx_dev, u32 **bdlp,
1283 int ofs, int size, int with_ioc)
1284{
675f25d4
TI
1285 u32 *bdl = *bdlp;
1286
1287 while (size > 0) {
1288 dma_addr_t addr;
1289 int chunk;
1290
1291 if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES)
1292 return -EINVAL;
1293
77a23f26 1294 addr = snd_pcm_sgbuf_get_addr(substream, ofs);
675f25d4
TI
1295 /* program the address field of the BDL entry */
1296 bdl[0] = cpu_to_le32((u32)addr);
766979e0 1297 bdl[1] = cpu_to_le32(upper_32_bits(addr));
675f25d4 1298 /* program the size field of the BDL entry */
fc4abee8 1299 chunk = snd_pcm_sgbuf_get_chunk_size(substream, ofs, size);
675f25d4
TI
1300 bdl[2] = cpu_to_le32(chunk);
1301 /* program the IOC to enable interrupt
1302 * only when the whole fragment is processed
1303 */
1304 size -= chunk;
1305 bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01);
1306 bdl += 4;
1307 azx_dev->frags++;
1308 ofs += chunk;
1309 }
1310 *bdlp = bdl;
1311 return ofs;
1312}
1313
1da177e4
LT
1314/*
1315 * set up BDL entries
1316 */
555e219f
TI
1317static int azx_setup_periods(struct azx *chip,
1318 struct snd_pcm_substream *substream,
4ce107b9 1319 struct azx_dev *azx_dev)
1da177e4 1320{
4ce107b9
TI
1321 u32 *bdl;
1322 int i, ofs, periods, period_bytes;
555e219f 1323 int pos_adj;
1da177e4
LT
1324
1325 /* reset BDL address */
1326 azx_sd_writel(azx_dev, SD_BDLPL, 0);
1327 azx_sd_writel(azx_dev, SD_BDLPU, 0);
1328
97b71c94 1329 period_bytes = azx_dev->period_bytes;
4ce107b9
TI
1330 periods = azx_dev->bufsize / period_bytes;
1331
1da177e4 1332 /* program the initial BDL entries */
4ce107b9
TI
1333 bdl = (u32 *)azx_dev->bdl.area;
1334 ofs = 0;
1335 azx_dev->frags = 0;
555e219f
TI
1336 pos_adj = bdl_pos_adj[chip->dev_index];
1337 if (pos_adj > 0) {
675f25d4 1338 struct snd_pcm_runtime *runtime = substream->runtime;
e785d3d8 1339 int pos_align = pos_adj;
555e219f 1340 pos_adj = (pos_adj * runtime->rate + 47999) / 48000;
675f25d4 1341 if (!pos_adj)
e785d3d8
TI
1342 pos_adj = pos_align;
1343 else
1344 pos_adj = ((pos_adj + pos_align - 1) / pos_align) *
1345 pos_align;
675f25d4
TI
1346 pos_adj = frames_to_bytes(runtime, pos_adj);
1347 if (pos_adj >= period_bytes) {
4abc1cc2 1348 snd_printk(KERN_WARNING SFX "Too big adjustment %d\n",
555e219f 1349 bdl_pos_adj[chip->dev_index]);
675f25d4
TI
1350 pos_adj = 0;
1351 } else {
1352 ofs = setup_bdle(substream, azx_dev,
7bb8fb70
CL
1353 &bdl, ofs, pos_adj,
1354 !substream->runtime->no_period_wakeup);
675f25d4
TI
1355 if (ofs < 0)
1356 goto error;
4ce107b9 1357 }
555e219f
TI
1358 } else
1359 pos_adj = 0;
675f25d4
TI
1360 for (i = 0; i < periods; i++) {
1361 if (i == periods - 1 && pos_adj)
1362 ofs = setup_bdle(substream, azx_dev, &bdl, ofs,
1363 period_bytes - pos_adj, 0);
1364 else
1365 ofs = setup_bdle(substream, azx_dev, &bdl, ofs,
7bb8fb70
CL
1366 period_bytes,
1367 !substream->runtime->no_period_wakeup);
675f25d4
TI
1368 if (ofs < 0)
1369 goto error;
1da177e4 1370 }
4ce107b9 1371 return 0;
675f25d4
TI
1372
1373 error:
4abc1cc2 1374 snd_printk(KERN_ERR SFX "Too many BDL entries: buffer=%d, period=%d\n",
675f25d4 1375 azx_dev->bufsize, period_bytes);
675f25d4 1376 return -EINVAL;
1da177e4
LT
1377}
1378
1dddab40
TI
1379/* reset stream */
1380static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev)
1da177e4
LT
1381{
1382 unsigned char val;
1383 int timeout;
1384
1dddab40
TI
1385 azx_stream_clear(chip, azx_dev);
1386
d01ce99f
TI
1387 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1388 SD_CTL_STREAM_RESET);
1da177e4
LT
1389 udelay(3);
1390 timeout = 300;
1391 while (!((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1392 --timeout)
1393 ;
1394 val &= ~SD_CTL_STREAM_RESET;
1395 azx_sd_writeb(azx_dev, SD_CTL, val);
1396 udelay(3);
1397
1398 timeout = 300;
1399 /* waiting for hardware to report that the stream is out of reset */
1400 while (((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1401 --timeout)
1402 ;
fa00e046
JK
1403
1404 /* reset first position - may not be synced with hw at this time */
1405 *azx_dev->posbuf = 0;
1dddab40 1406}
1da177e4 1407
1dddab40
TI
1408/*
1409 * set up the SD for streaming
1410 */
1411static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev)
1412{
27fe48d9 1413 unsigned int val;
1dddab40
TI
1414 /* make sure the run bit is zero for SD */
1415 azx_stream_clear(chip, azx_dev);
1da177e4 1416 /* program the stream_tag */
27fe48d9
TI
1417 val = azx_sd_readl(azx_dev, SD_CTL);
1418 val = (val & ~SD_CTL_STREAM_TAG_MASK) |
1419 (azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT);
1420 if (!azx_snoop(chip))
1421 val |= SD_CTL_TRAFFIC_PRIO;
1422 azx_sd_writel(azx_dev, SD_CTL, val);
1da177e4
LT
1423
1424 /* program the length of samples in cyclic buffer */
1425 azx_sd_writel(azx_dev, SD_CBL, azx_dev->bufsize);
1426
1427 /* program the stream format */
1428 /* this value needs to be the same as the one programmed */
1429 azx_sd_writew(azx_dev, SD_FORMAT, azx_dev->format_val);
1430
1431 /* program the stream LVI (last valid index) of the BDL */
1432 azx_sd_writew(azx_dev, SD_LVI, azx_dev->frags - 1);
1433
1434 /* program the BDL address */
1435 /* lower BDL address */
4ce107b9 1436 azx_sd_writel(azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr);
1da177e4 1437 /* upper BDL address */
766979e0 1438 azx_sd_writel(azx_dev, SD_BDLPU, upper_32_bits(azx_dev->bdl.addr));
1da177e4 1439
0be3b5d3 1440 /* enable the position buffer */
4cb36310
DH
1441 if (chip->position_fix[0] != POS_FIX_LPIB ||
1442 chip->position_fix[1] != POS_FIX_LPIB) {
ee9d6b9a
TI
1443 if (!(azx_readl(chip, DPLBASE) & ICH6_DPLBASE_ENABLE))
1444 azx_writel(chip, DPLBASE,
1445 (u32)chip->posbuf.addr | ICH6_DPLBASE_ENABLE);
1446 }
c74db86b 1447
1da177e4 1448 /* set the interrupt enable bits in the descriptor control register */
d01ce99f
TI
1449 azx_sd_writel(azx_dev, SD_CTL,
1450 azx_sd_readl(azx_dev, SD_CTL) | SD_INT_MASK);
1da177e4
LT
1451
1452 return 0;
1453}
1454
6ce4a3bc
TI
1455/*
1456 * Probe the given codec address
1457 */
1458static int probe_codec(struct azx *chip, int addr)
1459{
1460 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1461 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1462 unsigned int res;
1463
a678cdee 1464 mutex_lock(&chip->bus->cmd_mutex);
6ce4a3bc
TI
1465 chip->probing = 1;
1466 azx_send_cmd(chip->bus, cmd);
deadff16 1467 res = azx_get_response(chip->bus, addr);
6ce4a3bc 1468 chip->probing = 0;
a678cdee 1469 mutex_unlock(&chip->bus->cmd_mutex);
6ce4a3bc
TI
1470 if (res == -1)
1471 return -EIO;
4abc1cc2 1472 snd_printdd(SFX "codec #%d probed OK\n", addr);
6ce4a3bc
TI
1473 return 0;
1474}
1475
33fa35ed
TI
1476static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
1477 struct hda_pcm *cpcm);
6ce4a3bc 1478static void azx_stop_chip(struct azx *chip);
1da177e4 1479
8dd78330
TI
1480static void azx_bus_reset(struct hda_bus *bus)
1481{
1482 struct azx *chip = bus->private_data;
8dd78330
TI
1483
1484 bus->in_reset = 1;
1485 azx_stop_chip(chip);
cd508fe5 1486 azx_init_chip(chip, 1);
65f75983 1487#ifdef CONFIG_PM
8dd78330 1488 if (chip->initialized) {
01b65bfb
TI
1489 struct azx_pcm *p;
1490 list_for_each_entry(p, &chip->pcm_list, list)
1491 snd_pcm_suspend_all(p->pcm);
8dd78330
TI
1492 snd_hda_suspend(chip->bus);
1493 snd_hda_resume(chip->bus);
1494 }
65f75983 1495#endif
8dd78330
TI
1496 bus->in_reset = 0;
1497}
1498
1da177e4
LT
1499/*
1500 * Codec initialization
1501 */
1502
2f5983f2
TI
1503/* number of codec slots for each chipset: 0 = default slots (i.e. 4) */
1504static unsigned int azx_max_codecs[AZX_NUM_DRIVERS] __devinitdata = {
7445dfc1 1505 [AZX_DRIVER_NVIDIA] = 8,
f269002e 1506 [AZX_DRIVER_TERA] = 1,
a9995a35
TI
1507};
1508
a1e21c90 1509static int __devinit azx_codec_create(struct azx *chip, const char *model)
1da177e4
LT
1510{
1511 struct hda_bus_template bus_temp;
34c25350
TI
1512 int c, codecs, err;
1513 int max_slots;
1da177e4
LT
1514
1515 memset(&bus_temp, 0, sizeof(bus_temp));
1516 bus_temp.private_data = chip;
1517 bus_temp.modelname = model;
1518 bus_temp.pci = chip->pci;
111d3af5
TI
1519 bus_temp.ops.command = azx_send_cmd;
1520 bus_temp.ops.get_response = azx_get_response;
176d5335 1521 bus_temp.ops.attach_pcm = azx_attach_pcm_stream;
8dd78330 1522 bus_temp.ops.bus_reset = azx_bus_reset;
cb53c626 1523#ifdef CONFIG_SND_HDA_POWER_SAVE
11cd41b8 1524 bus_temp.power_save = &power_save;
cb53c626
TI
1525 bus_temp.ops.pm_notify = azx_power_notify;
1526#endif
1da177e4 1527
d01ce99f
TI
1528 err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus);
1529 if (err < 0)
1da177e4
LT
1530 return err;
1531
9477c58e
TI
1532 if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) {
1533 snd_printd(SFX "Enable delay in RIRB handling\n");
dc9c8e21 1534 chip->bus->needs_damn_long_delay = 1;
9477c58e 1535 }
dc9c8e21 1536
34c25350 1537 codecs = 0;
2f5983f2
TI
1538 max_slots = azx_max_codecs[chip->driver_type];
1539 if (!max_slots)
7445dfc1 1540 max_slots = AZX_DEFAULT_CODECS;
6ce4a3bc
TI
1541
1542 /* First try to probe all given codec slots */
1543 for (c = 0; c < max_slots; c++) {
f1eaaeec 1544 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
6ce4a3bc
TI
1545 if (probe_codec(chip, c) < 0) {
1546 /* Some BIOSen give you wrong codec addresses
1547 * that don't exist
1548 */
4abc1cc2
TI
1549 snd_printk(KERN_WARNING SFX
1550 "Codec #%d probe error; "
6ce4a3bc
TI
1551 "disabling it...\n", c);
1552 chip->codec_mask &= ~(1 << c);
1553 /* More badly, accessing to a non-existing
1554 * codec often screws up the controller chip,
2448158e 1555 * and disturbs the further communications.
6ce4a3bc
TI
1556 * Thus if an error occurs during probing,
1557 * better to reset the controller chip to
1558 * get back to the sanity state.
1559 */
1560 azx_stop_chip(chip);
cd508fe5 1561 azx_init_chip(chip, 1);
6ce4a3bc
TI
1562 }
1563 }
1564 }
1565
d507cd66
TI
1566 /* AMD chipsets often cause the communication stalls upon certain
1567 * sequence like the pin-detection. It seems that forcing the synced
1568 * access works around the stall. Grrr...
1569 */
9477c58e
TI
1570 if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1571 snd_printd(SFX "Enable sync_write for stable communication\n");
d507cd66
TI
1572 chip->bus->sync_write = 1;
1573 chip->bus->allow_bus_reset = 1;
1574 }
1575
6ce4a3bc 1576 /* Then create codec instances */
34c25350 1577 for (c = 0; c < max_slots; c++) {
f1eaaeec 1578 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
bccad14e 1579 struct hda_codec *codec;
a1e21c90 1580 err = snd_hda_codec_new(chip->bus, c, &codec);
1da177e4
LT
1581 if (err < 0)
1582 continue;
2dca0bba 1583 codec->beep_mode = chip->beep_mode;
1da177e4 1584 codecs++;
19a982b6
TI
1585 }
1586 }
1587 if (!codecs) {
1da177e4
LT
1588 snd_printk(KERN_ERR SFX "no codecs initialized\n");
1589 return -ENXIO;
1590 }
a1e21c90
TI
1591 return 0;
1592}
1da177e4 1593
a1e21c90
TI
1594/* configure each codec instance */
1595static int __devinit azx_codec_configure(struct azx *chip)
1596{
1597 struct hda_codec *codec;
1598 list_for_each_entry(codec, &chip->bus->codec_list, list) {
1599 snd_hda_codec_configure(codec);
1600 }
1da177e4
LT
1601 return 0;
1602}
1603
1604
1605/*
1606 * PCM support
1607 */
1608
1609/* assign a stream for the PCM */
ef18bede
WF
1610static inline struct azx_dev *
1611azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
1da177e4 1612{
07e4ca50 1613 int dev, i, nums;
ef18bede 1614 struct azx_dev *res = NULL;
d5cf9911
TI
1615 /* make a non-zero unique key for the substream */
1616 int key = (substream->pcm->device << 16) | (substream->number << 2) |
1617 (substream->stream + 1);
ef18bede
WF
1618
1619 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
07e4ca50
TI
1620 dev = chip->playback_index_offset;
1621 nums = chip->playback_streams;
1622 } else {
1623 dev = chip->capture_index_offset;
1624 nums = chip->capture_streams;
1625 }
1626 for (i = 0; i < nums; i++, dev++)
d01ce99f 1627 if (!chip->azx_dev[dev].opened) {
ef18bede 1628 res = &chip->azx_dev[dev];
d5cf9911 1629 if (res->assigned_key == key)
ef18bede 1630 break;
1da177e4 1631 }
ef18bede
WF
1632 if (res) {
1633 res->opened = 1;
d5cf9911 1634 res->assigned_key = key;
ef18bede
WF
1635 }
1636 return res;
1da177e4
LT
1637}
1638
1639/* release the assigned stream */
a98f90fd 1640static inline void azx_release_device(struct azx_dev *azx_dev)
1da177e4
LT
1641{
1642 azx_dev->opened = 0;
1643}
1644
a98f90fd 1645static struct snd_pcm_hardware azx_pcm_hw = {
d01ce99f
TI
1646 .info = (SNDRV_PCM_INFO_MMAP |
1647 SNDRV_PCM_INFO_INTERLEAVED |
1da177e4
LT
1648 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1649 SNDRV_PCM_INFO_MMAP_VALID |
927fc866
PM
1650 /* No full-resume yet implemented */
1651 /* SNDRV_PCM_INFO_RESUME |*/
850f0e52 1652 SNDRV_PCM_INFO_PAUSE |
7bb8fb70
CL
1653 SNDRV_PCM_INFO_SYNC_START |
1654 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
1da177e4
LT
1655 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1656 .rates = SNDRV_PCM_RATE_48000,
1657 .rate_min = 48000,
1658 .rate_max = 48000,
1659 .channels_min = 2,
1660 .channels_max = 2,
1661 .buffer_bytes_max = AZX_MAX_BUF_SIZE,
1662 .period_bytes_min = 128,
1663 .period_bytes_max = AZX_MAX_BUF_SIZE / 2,
1664 .periods_min = 2,
1665 .periods_max = AZX_MAX_FRAG,
1666 .fifo_size = 0,
1667};
1668
a98f90fd 1669static int azx_pcm_open(struct snd_pcm_substream *substream)
1da177e4
LT
1670{
1671 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1672 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
a98f90fd
TI
1673 struct azx *chip = apcm->chip;
1674 struct azx_dev *azx_dev;
1675 struct snd_pcm_runtime *runtime = substream->runtime;
1da177e4
LT
1676 unsigned long flags;
1677 int err;
2ae66c26 1678 int buff_step;
1da177e4 1679
62932df8 1680 mutex_lock(&chip->open_mutex);
ef18bede 1681 azx_dev = azx_assign_device(chip, substream);
1da177e4 1682 if (azx_dev == NULL) {
62932df8 1683 mutex_unlock(&chip->open_mutex);
1da177e4
LT
1684 return -EBUSY;
1685 }
1686 runtime->hw = azx_pcm_hw;
1687 runtime->hw.channels_min = hinfo->channels_min;
1688 runtime->hw.channels_max = hinfo->channels_max;
1689 runtime->hw.formats = hinfo->formats;
1690 runtime->hw.rates = hinfo->rates;
1691 snd_pcm_limit_hw_rates(runtime);
1692 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
2ae66c26
PLB
1693 if (align_buffer_size)
1694 /* constrain buffer sizes to be multiple of 128
1695 bytes. This is more efficient in terms of memory
1696 access but isn't required by the HDA spec and
1697 prevents users from specifying exact period/buffer
1698 sizes. For example for 44.1kHz, a period size set
1699 to 20ms will be rounded to 19.59ms. */
1700 buff_step = 128;
1701 else
1702 /* Don't enforce steps on buffer sizes, still need to
1703 be multiple of 4 bytes (HDA spec). Tested on Intel
1704 HDA controllers, may not work on all devices where
1705 option needs to be disabled */
1706 buff_step = 4;
1707
5f1545bc 1708 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
2ae66c26 1709 buff_step);
5f1545bc 1710 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
2ae66c26 1711 buff_step);
cb53c626 1712 snd_hda_power_up(apcm->codec);
d01ce99f
TI
1713 err = hinfo->ops.open(hinfo, apcm->codec, substream);
1714 if (err < 0) {
1da177e4 1715 azx_release_device(azx_dev);
cb53c626 1716 snd_hda_power_down(apcm->codec);
62932df8 1717 mutex_unlock(&chip->open_mutex);
1da177e4
LT
1718 return err;
1719 }
70d321e6 1720 snd_pcm_limit_hw_rates(runtime);
aba66536
TI
1721 /* sanity check */
1722 if (snd_BUG_ON(!runtime->hw.channels_min) ||
1723 snd_BUG_ON(!runtime->hw.channels_max) ||
1724 snd_BUG_ON(!runtime->hw.formats) ||
1725 snd_BUG_ON(!runtime->hw.rates)) {
1726 azx_release_device(azx_dev);
1727 hinfo->ops.close(hinfo, apcm->codec, substream);
1728 snd_hda_power_down(apcm->codec);
1729 mutex_unlock(&chip->open_mutex);
1730 return -EINVAL;
1731 }
1da177e4
LT
1732 spin_lock_irqsave(&chip->reg_lock, flags);
1733 azx_dev->substream = substream;
1734 azx_dev->running = 0;
1735 spin_unlock_irqrestore(&chip->reg_lock, flags);
1736
1737 runtime->private_data = azx_dev;
850f0e52 1738 snd_pcm_set_sync(substream);
62932df8 1739 mutex_unlock(&chip->open_mutex);
1da177e4
LT
1740 return 0;
1741}
1742
a98f90fd 1743static int azx_pcm_close(struct snd_pcm_substream *substream)
1da177e4
LT
1744{
1745 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1746 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
a98f90fd
TI
1747 struct azx *chip = apcm->chip;
1748 struct azx_dev *azx_dev = get_azx_dev(substream);
1da177e4
LT
1749 unsigned long flags;
1750
62932df8 1751 mutex_lock(&chip->open_mutex);
1da177e4
LT
1752 spin_lock_irqsave(&chip->reg_lock, flags);
1753 azx_dev->substream = NULL;
1754 azx_dev->running = 0;
1755 spin_unlock_irqrestore(&chip->reg_lock, flags);
1756 azx_release_device(azx_dev);
1757 hinfo->ops.close(hinfo, apcm->codec, substream);
cb53c626 1758 snd_hda_power_down(apcm->codec);
62932df8 1759 mutex_unlock(&chip->open_mutex);
1da177e4
LT
1760 return 0;
1761}
1762
d01ce99f
TI
1763static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
1764 struct snd_pcm_hw_params *hw_params)
1da177e4 1765{
27fe48d9
TI
1766 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1767 struct azx *chip = apcm->chip;
1768 struct snd_pcm_runtime *runtime = substream->runtime;
97b71c94 1769 struct azx_dev *azx_dev = get_azx_dev(substream);
27fe48d9 1770 int ret;
97b71c94 1771
27fe48d9 1772 mark_runtime_wc(chip, azx_dev, runtime, false);
97b71c94
TI
1773 azx_dev->bufsize = 0;
1774 azx_dev->period_bytes = 0;
1775 azx_dev->format_val = 0;
27fe48d9 1776 ret = snd_pcm_lib_malloc_pages(substream,
d01ce99f 1777 params_buffer_bytes(hw_params));
27fe48d9
TI
1778 if (ret < 0)
1779 return ret;
1780 mark_runtime_wc(chip, azx_dev, runtime, true);
1781 return ret;
1da177e4
LT
1782}
1783
a98f90fd 1784static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
1da177e4
LT
1785{
1786 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
a98f90fd 1787 struct azx_dev *azx_dev = get_azx_dev(substream);
27fe48d9
TI
1788 struct azx *chip = apcm->chip;
1789 struct snd_pcm_runtime *runtime = substream->runtime;
1da177e4
LT
1790 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1791
1792 /* reset BDL address */
1793 azx_sd_writel(azx_dev, SD_BDLPL, 0);
1794 azx_sd_writel(azx_dev, SD_BDLPU, 0);
1795 azx_sd_writel(azx_dev, SD_CTL, 0);
97b71c94
TI
1796 azx_dev->bufsize = 0;
1797 azx_dev->period_bytes = 0;
1798 azx_dev->format_val = 0;
1da177e4 1799
eb541337 1800 snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
1da177e4 1801
27fe48d9 1802 mark_runtime_wc(chip, azx_dev, runtime, false);
1da177e4
LT
1803 return snd_pcm_lib_free_pages(substream);
1804}
1805
a98f90fd 1806static int azx_pcm_prepare(struct snd_pcm_substream *substream)
1da177e4
LT
1807{
1808 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
a98f90fd
TI
1809 struct azx *chip = apcm->chip;
1810 struct azx_dev *azx_dev = get_azx_dev(substream);
1da177e4 1811 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
a98f90fd 1812 struct snd_pcm_runtime *runtime = substream->runtime;
62b7e5e0 1813 unsigned int bufsize, period_bytes, format_val, stream_tag;
97b71c94 1814 int err;
7c935976
SW
1815 struct hda_spdif_out *spdif =
1816 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
1817 unsigned short ctls = spdif ? spdif->ctls : 0;
1da177e4 1818
fa00e046 1819 azx_stream_reset(chip, azx_dev);
97b71c94
TI
1820 format_val = snd_hda_calc_stream_format(runtime->rate,
1821 runtime->channels,
1822 runtime->format,
32c168c8 1823 hinfo->maxbps,
7c935976 1824 ctls);
97b71c94 1825 if (!format_val) {
d01ce99f
TI
1826 snd_printk(KERN_ERR SFX
1827 "invalid format_val, rate=%d, ch=%d, format=%d\n",
1da177e4
LT
1828 runtime->rate, runtime->channels, runtime->format);
1829 return -EINVAL;
1830 }
1831
97b71c94
TI
1832 bufsize = snd_pcm_lib_buffer_bytes(substream);
1833 period_bytes = snd_pcm_lib_period_bytes(substream);
1834
4abc1cc2 1835 snd_printdd(SFX "azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
97b71c94
TI
1836 bufsize, format_val);
1837
1838 if (bufsize != azx_dev->bufsize ||
1839 period_bytes != azx_dev->period_bytes ||
1840 format_val != azx_dev->format_val) {
1841 azx_dev->bufsize = bufsize;
1842 azx_dev->period_bytes = period_bytes;
1843 azx_dev->format_val = format_val;
1844 err = azx_setup_periods(chip, substream, azx_dev);
1845 if (err < 0)
1846 return err;
1847 }
1848
e5463720
JK
1849 /* wallclk has 24Mhz clock source */
1850 azx_dev->period_wallclk = (((runtime->period_size * 24000) /
1851 runtime->rate) * 1000);
1da177e4
LT
1852 azx_setup_controller(chip, azx_dev);
1853 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
1854 azx_dev->fifo_size = azx_sd_readw(azx_dev, SD_FIFOSIZE) + 1;
1855 else
1856 azx_dev->fifo_size = 0;
1857
62b7e5e0
TI
1858 stream_tag = azx_dev->stream_tag;
1859 /* CA-IBG chips need the playback stream starting from 1 */
9477c58e 1860 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
62b7e5e0
TI
1861 stream_tag > chip->capture_streams)
1862 stream_tag -= chip->capture_streams;
1863 return snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
eb541337 1864 azx_dev->format_val, substream);
1da177e4
LT
1865}
1866
a98f90fd 1867static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
1da177e4
LT
1868{
1869 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
a98f90fd 1870 struct azx *chip = apcm->chip;
850f0e52
TI
1871 struct azx_dev *azx_dev;
1872 struct snd_pcm_substream *s;
fa00e046 1873 int rstart = 0, start, nsync = 0, sbits = 0;
850f0e52 1874 int nwait, timeout;
1da177e4 1875
1da177e4 1876 switch (cmd) {
fa00e046
JK
1877 case SNDRV_PCM_TRIGGER_START:
1878 rstart = 1;
1da177e4
LT
1879 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
1880 case SNDRV_PCM_TRIGGER_RESUME:
850f0e52 1881 start = 1;
1da177e4
LT
1882 break;
1883 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
47123197 1884 case SNDRV_PCM_TRIGGER_SUSPEND:
1da177e4 1885 case SNDRV_PCM_TRIGGER_STOP:
850f0e52 1886 start = 0;
1da177e4
LT
1887 break;
1888 default:
850f0e52
TI
1889 return -EINVAL;
1890 }
1891
1892 snd_pcm_group_for_each_entry(s, substream) {
1893 if (s->pcm->card != substream->pcm->card)
1894 continue;
1895 azx_dev = get_azx_dev(s);
1896 sbits |= 1 << azx_dev->index;
1897 nsync++;
1898 snd_pcm_trigger_done(s, substream);
1899 }
1900
1901 spin_lock(&chip->reg_lock);
1902 if (nsync > 1) {
1903 /* first, set SYNC bits of corresponding streams */
8b0bd226
TI
1904 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
1905 azx_writel(chip, OLD_SSYNC,
1906 azx_readl(chip, OLD_SSYNC) | sbits);
1907 else
1908 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits);
850f0e52
TI
1909 }
1910 snd_pcm_group_for_each_entry(s, substream) {
1911 if (s->pcm->card != substream->pcm->card)
1912 continue;
1913 azx_dev = get_azx_dev(s);
e5463720
JK
1914 if (start) {
1915 azx_dev->start_wallclk = azx_readl(chip, WALLCLK);
1916 if (!rstart)
1917 azx_dev->start_wallclk -=
1918 azx_dev->period_wallclk;
850f0e52 1919 azx_stream_start(chip, azx_dev);
e5463720 1920 } else {
850f0e52 1921 azx_stream_stop(chip, azx_dev);
e5463720 1922 }
850f0e52 1923 azx_dev->running = start;
1da177e4
LT
1924 }
1925 spin_unlock(&chip->reg_lock);
850f0e52
TI
1926 if (start) {
1927 if (nsync == 1)
1928 return 0;
1929 /* wait until all FIFOs get ready */
1930 for (timeout = 5000; timeout; timeout--) {
1931 nwait = 0;
1932 snd_pcm_group_for_each_entry(s, substream) {
1933 if (s->pcm->card != substream->pcm->card)
1934 continue;
1935 azx_dev = get_azx_dev(s);
1936 if (!(azx_sd_readb(azx_dev, SD_STS) &
1937 SD_STS_FIFO_READY))
1938 nwait++;
1939 }
1940 if (!nwait)
1941 break;
1942 cpu_relax();
1943 }
1944 } else {
1945 /* wait until all RUN bits are cleared */
1946 for (timeout = 5000; timeout; timeout--) {
1947 nwait = 0;
1948 snd_pcm_group_for_each_entry(s, substream) {
1949 if (s->pcm->card != substream->pcm->card)
1950 continue;
1951 azx_dev = get_azx_dev(s);
1952 if (azx_sd_readb(azx_dev, SD_CTL) &
1953 SD_CTL_DMA_START)
1954 nwait++;
1955 }
1956 if (!nwait)
1957 break;
1958 cpu_relax();
1959 }
1da177e4 1960 }
850f0e52
TI
1961 if (nsync > 1) {
1962 spin_lock(&chip->reg_lock);
1963 /* reset SYNC bits */
8b0bd226
TI
1964 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
1965 azx_writel(chip, OLD_SSYNC,
1966 azx_readl(chip, OLD_SSYNC) & ~sbits);
1967 else
1968 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits);
850f0e52
TI
1969 spin_unlock(&chip->reg_lock);
1970 }
1971 return 0;
1da177e4
LT
1972}
1973
0e153474
JC
1974/* get the current DMA position with correction on VIA chips */
1975static unsigned int azx_via_get_position(struct azx *chip,
1976 struct azx_dev *azx_dev)
1977{
1978 unsigned int link_pos, mini_pos, bound_pos;
1979 unsigned int mod_link_pos, mod_dma_pos, mod_mini_pos;
1980 unsigned int fifo_size;
1981
1982 link_pos = azx_sd_readl(azx_dev, SD_LPIB);
b4a655e8 1983 if (azx_dev->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
0e153474
JC
1984 /* Playback, no problem using link position */
1985 return link_pos;
1986 }
1987
1988 /* Capture */
1989 /* For new chipset,
1990 * use mod to get the DMA position just like old chipset
1991 */
1992 mod_dma_pos = le32_to_cpu(*azx_dev->posbuf);
1993 mod_dma_pos %= azx_dev->period_bytes;
1994
1995 /* azx_dev->fifo_size can't get FIFO size of in stream.
1996 * Get from base address + offset.
1997 */
1998 fifo_size = readw(chip->remap_addr + VIA_IN_STREAM0_FIFO_SIZE_OFFSET);
1999
2000 if (azx_dev->insufficient) {
2001 /* Link position never gather than FIFO size */
2002 if (link_pos <= fifo_size)
2003 return 0;
2004
2005 azx_dev->insufficient = 0;
2006 }
2007
2008 if (link_pos <= fifo_size)
2009 mini_pos = azx_dev->bufsize + link_pos - fifo_size;
2010 else
2011 mini_pos = link_pos - fifo_size;
2012
2013 /* Find nearest previous boudary */
2014 mod_mini_pos = mini_pos % azx_dev->period_bytes;
2015 mod_link_pos = link_pos % azx_dev->period_bytes;
2016 if (mod_link_pos >= fifo_size)
2017 bound_pos = link_pos - mod_link_pos;
2018 else if (mod_dma_pos >= mod_mini_pos)
2019 bound_pos = mini_pos - mod_mini_pos;
2020 else {
2021 bound_pos = mini_pos - mod_mini_pos + azx_dev->period_bytes;
2022 if (bound_pos >= azx_dev->bufsize)
2023 bound_pos = 0;
2024 }
2025
2026 /* Calculate real DMA position we want */
2027 return bound_pos + mod_dma_pos;
2028}
2029
9ad593f6 2030static unsigned int azx_get_position(struct azx *chip,
798cb7e8
TI
2031 struct azx_dev *azx_dev,
2032 bool with_check)
1da177e4 2033{
1da177e4 2034 unsigned int pos;
4cb36310 2035 int stream = azx_dev->substream->stream;
1da177e4 2036
4cb36310
DH
2037 switch (chip->position_fix[stream]) {
2038 case POS_FIX_LPIB:
2039 /* read LPIB */
2040 pos = azx_sd_readl(azx_dev, SD_LPIB);
2041 break;
2042 case POS_FIX_VIACOMBO:
0e153474 2043 pos = azx_via_get_position(chip, azx_dev);
4cb36310
DH
2044 break;
2045 default:
2046 /* use the position buffer */
2047 pos = le32_to_cpu(*azx_dev->posbuf);
798cb7e8 2048 if (with_check && chip->position_fix[stream] == POS_FIX_AUTO) {
a810364a
TI
2049 if (!pos || pos == (u32)-1) {
2050 printk(KERN_WARNING
2051 "hda-intel: Invalid position buffer, "
2052 "using LPIB read method instead.\n");
2053 chip->position_fix[stream] = POS_FIX_LPIB;
2054 pos = azx_sd_readl(azx_dev, SD_LPIB);
2055 } else
2056 chip->position_fix[stream] = POS_FIX_POSBUF;
2057 }
2058 break;
c74db86b 2059 }
4cb36310 2060
1da177e4
LT
2061 if (pos >= azx_dev->bufsize)
2062 pos = 0;
9ad593f6
TI
2063 return pos;
2064}
2065
2066static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
2067{
2068 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2069 struct azx *chip = apcm->chip;
2070 struct azx_dev *azx_dev = get_azx_dev(substream);
2071 return bytes_to_frames(substream->runtime,
798cb7e8 2072 azx_get_position(chip, azx_dev, false));
9ad593f6
TI
2073}
2074
2075/*
2076 * Check whether the current DMA position is acceptable for updating
2077 * periods. Returns non-zero if it's OK.
2078 *
2079 * Many HD-audio controllers appear pretty inaccurate about
2080 * the update-IRQ timing. The IRQ is issued before actually the
2081 * data is processed. So, we need to process it afterwords in a
2082 * workqueue.
2083 */
2084static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
2085{
e5463720 2086 u32 wallclk;
9ad593f6 2087 unsigned int pos;
beaffc39 2088 int stream;
9ad593f6 2089
f48f606d
JK
2090 wallclk = azx_readl(chip, WALLCLK) - azx_dev->start_wallclk;
2091 if (wallclk < (azx_dev->period_wallclk * 2) / 3)
fa00e046 2092 return -1; /* bogus (too early) interrupt */
fa00e046 2093
beaffc39 2094 stream = azx_dev->substream->stream;
798cb7e8 2095 pos = azx_get_position(chip, azx_dev, true);
9ad593f6 2096
d6d8bf54
TI
2097 if (WARN_ONCE(!azx_dev->period_bytes,
2098 "hda-intel: zero azx_dev->period_bytes"))
f48f606d 2099 return -1; /* this shouldn't happen! */
edb39935 2100 if (wallclk < (azx_dev->period_wallclk * 5) / 4 &&
f48f606d
JK
2101 pos % azx_dev->period_bytes > azx_dev->period_bytes / 2)
2102 /* NG - it's below the first next period boundary */
2103 return bdl_pos_adj[chip->dev_index] ? 0 : -1;
edb39935 2104 azx_dev->start_wallclk += wallclk;
9ad593f6
TI
2105 return 1; /* OK, it's fine */
2106}
2107
2108/*
2109 * The work for pending PCM period updates.
2110 */
2111static void azx_irq_pending_work(struct work_struct *work)
2112{
2113 struct azx *chip = container_of(work, struct azx, irq_pending_work);
e5463720 2114 int i, pending, ok;
9ad593f6 2115
a6a950a8
TI
2116 if (!chip->irq_pending_warned) {
2117 printk(KERN_WARNING
2118 "hda-intel: IRQ timing workaround is activated "
2119 "for card #%d. Suggest a bigger bdl_pos_adj.\n",
2120 chip->card->number);
2121 chip->irq_pending_warned = 1;
2122 }
2123
9ad593f6
TI
2124 for (;;) {
2125 pending = 0;
2126 spin_lock_irq(&chip->reg_lock);
2127 for (i = 0; i < chip->num_streams; i++) {
2128 struct azx_dev *azx_dev = &chip->azx_dev[i];
2129 if (!azx_dev->irq_pending ||
2130 !azx_dev->substream ||
2131 !azx_dev->running)
2132 continue;
e5463720
JK
2133 ok = azx_position_ok(chip, azx_dev);
2134 if (ok > 0) {
9ad593f6
TI
2135 azx_dev->irq_pending = 0;
2136 spin_unlock(&chip->reg_lock);
2137 snd_pcm_period_elapsed(azx_dev->substream);
2138 spin_lock(&chip->reg_lock);
e5463720
JK
2139 } else if (ok < 0) {
2140 pending = 0; /* too early */
9ad593f6
TI
2141 } else
2142 pending++;
2143 }
2144 spin_unlock_irq(&chip->reg_lock);
2145 if (!pending)
2146 return;
08af495f 2147 msleep(1);
9ad593f6
TI
2148 }
2149}
2150
2151/* clear irq_pending flags and assure no on-going workq */
2152static void azx_clear_irq_pending(struct azx *chip)
2153{
2154 int i;
2155
2156 spin_lock_irq(&chip->reg_lock);
2157 for (i = 0; i < chip->num_streams; i++)
2158 chip->azx_dev[i].irq_pending = 0;
2159 spin_unlock_irq(&chip->reg_lock);
1da177e4
LT
2160}
2161
27fe48d9
TI
2162#ifdef CONFIG_X86
2163static int azx_pcm_mmap(struct snd_pcm_substream *substream,
2164 struct vm_area_struct *area)
2165{
2166 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2167 struct azx *chip = apcm->chip;
2168 if (!azx_snoop(chip))
2169 area->vm_page_prot = pgprot_writecombine(area->vm_page_prot);
2170 return snd_pcm_lib_default_mmap(substream, area);
2171}
2172#else
2173#define azx_pcm_mmap NULL
2174#endif
2175
a98f90fd 2176static struct snd_pcm_ops azx_pcm_ops = {
1da177e4
LT
2177 .open = azx_pcm_open,
2178 .close = azx_pcm_close,
2179 .ioctl = snd_pcm_lib_ioctl,
2180 .hw_params = azx_pcm_hw_params,
2181 .hw_free = azx_pcm_hw_free,
2182 .prepare = azx_pcm_prepare,
2183 .trigger = azx_pcm_trigger,
2184 .pointer = azx_pcm_pointer,
27fe48d9 2185 .mmap = azx_pcm_mmap,
4ce107b9 2186 .page = snd_pcm_sgbuf_ops_page,
1da177e4
LT
2187};
2188
a98f90fd 2189static void azx_pcm_free(struct snd_pcm *pcm)
1da177e4 2190{
176d5335
TI
2191 struct azx_pcm *apcm = pcm->private_data;
2192 if (apcm) {
01b65bfb 2193 list_del(&apcm->list);
176d5335
TI
2194 kfree(apcm);
2195 }
1da177e4
LT
2196}
2197
acfa634f
TI
2198#define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
2199
176d5335 2200static int
33fa35ed
TI
2201azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
2202 struct hda_pcm *cpcm)
1da177e4 2203{
33fa35ed 2204 struct azx *chip = bus->private_data;
a98f90fd 2205 struct snd_pcm *pcm;
1da177e4 2206 struct azx_pcm *apcm;
176d5335 2207 int pcm_dev = cpcm->device;
acfa634f 2208 unsigned int size;
176d5335 2209 int s, err;
1da177e4 2210
01b65bfb
TI
2211 list_for_each_entry(apcm, &chip->pcm_list, list) {
2212 if (apcm->pcm->device == pcm_dev) {
2213 snd_printk(KERN_ERR SFX "PCM %d already exists\n", pcm_dev);
2214 return -EBUSY;
2215 }
176d5335
TI
2216 }
2217 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
2218 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
2219 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
1da177e4
LT
2220 &pcm);
2221 if (err < 0)
2222 return err;
18cb7109 2223 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
176d5335 2224 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
1da177e4
LT
2225 if (apcm == NULL)
2226 return -ENOMEM;
2227 apcm->chip = chip;
01b65bfb 2228 apcm->pcm = pcm;
1da177e4 2229 apcm->codec = codec;
1da177e4
LT
2230 pcm->private_data = apcm;
2231 pcm->private_free = azx_pcm_free;
176d5335
TI
2232 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
2233 pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
01b65bfb 2234 list_add_tail(&apcm->list, &chip->pcm_list);
176d5335
TI
2235 cpcm->pcm = pcm;
2236 for (s = 0; s < 2; s++) {
2237 apcm->hinfo[s] = &cpcm->stream[s];
2238 if (cpcm->stream[s].substreams)
2239 snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
2240 }
2241 /* buffer pre-allocation */
acfa634f
TI
2242 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
2243 if (size > MAX_PREALLOC_SIZE)
2244 size = MAX_PREALLOC_SIZE;
4ce107b9 2245 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
1da177e4 2246 snd_dma_pci_data(chip->pci),
acfa634f 2247 size, MAX_PREALLOC_SIZE);
1da177e4
LT
2248 return 0;
2249}
2250
2251/*
2252 * mixer creation - all stuff is implemented in hda module
2253 */
a98f90fd 2254static int __devinit azx_mixer_create(struct azx *chip)
1da177e4
LT
2255{
2256 return snd_hda_build_controls(chip->bus);
2257}
2258
2259
2260/*
2261 * initialize SD streams
2262 */
a98f90fd 2263static int __devinit azx_init_stream(struct azx *chip)
1da177e4
LT
2264{
2265 int i;
2266
2267 /* initialize each stream (aka device)
d01ce99f
TI
2268 * assign the starting bdl address to each stream (device)
2269 * and initialize
1da177e4 2270 */
07e4ca50 2271 for (i = 0; i < chip->num_streams; i++) {
a98f90fd 2272 struct azx_dev *azx_dev = &chip->azx_dev[i];
929861c6 2273 azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8);
1da177e4
LT
2274 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
2275 azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80);
2276 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
2277 azx_dev->sd_int_sta_mask = 1 << i;
2278 /* stream tag: must be non-zero and unique */
2279 azx_dev->index = i;
2280 azx_dev->stream_tag = i + 1;
2281 }
2282
2283 return 0;
2284}
2285
68e7fffc
TI
2286static int azx_acquire_irq(struct azx *chip, int do_disconnect)
2287{
437a5a46
TI
2288 if (request_irq(chip->pci->irq, azx_interrupt,
2289 chip->msi ? 0 : IRQF_SHARED,
934c2b6d 2290 KBUILD_MODNAME, chip)) {
68e7fffc
TI
2291 printk(KERN_ERR "hda-intel: unable to grab IRQ %d, "
2292 "disabling device\n", chip->pci->irq);
2293 if (do_disconnect)
2294 snd_card_disconnect(chip->card);
2295 return -1;
2296 }
2297 chip->irq = chip->pci->irq;
69e13418 2298 pci_intx(chip->pci, !chip->msi);
68e7fffc
TI
2299 return 0;
2300}
2301
1da177e4 2302
cb53c626
TI
2303static void azx_stop_chip(struct azx *chip)
2304{
95e99fda 2305 if (!chip->initialized)
cb53c626
TI
2306 return;
2307
2308 /* disable interrupts */
2309 azx_int_disable(chip);
2310 azx_int_clear(chip);
2311
2312 /* disable CORB/RIRB */
2313 azx_free_cmd_io(chip);
2314
2315 /* disable position buffer */
2316 azx_writel(chip, DPLBASE, 0);
2317 azx_writel(chip, DPUBASE, 0);
2318
2319 chip->initialized = 0;
2320}
2321
2322#ifdef CONFIG_SND_HDA_POWER_SAVE
2323/* power-up/down the controller */
33fa35ed 2324static void azx_power_notify(struct hda_bus *bus)
cb53c626 2325{
33fa35ed 2326 struct azx *chip = bus->private_data;
cb53c626
TI
2327 struct hda_codec *c;
2328 int power_on = 0;
2329
33fa35ed 2330 list_for_each_entry(c, &bus->codec_list, list) {
cb53c626
TI
2331 if (c->power_on) {
2332 power_on = 1;
2333 break;
2334 }
2335 }
2336 if (power_on)
cd508fe5 2337 azx_init_chip(chip, 1);
0287d970
WF
2338 else if (chip->running && power_save_controller &&
2339 !bus->power_keep_link_on)
cb53c626 2340 azx_stop_chip(chip);
cb53c626 2341}
5c0b9bec
TI
2342#endif /* CONFIG_SND_HDA_POWER_SAVE */
2343
2344#ifdef CONFIG_PM
2345/*
2346 * power management
2347 */
986862bd
TI
2348
2349static int snd_hda_codecs_inuse(struct hda_bus *bus)
2350{
2351 struct hda_codec *codec;
2352
2353 list_for_each_entry(codec, &bus->codec_list, list) {
2354 if (snd_hda_codec_needs_resume(codec))
2355 return 1;
2356 }
2357 return 0;
2358}
cb53c626 2359
421a1252 2360static int azx_suspend(struct pci_dev *pci, pm_message_t state)
1da177e4 2361{
421a1252
TI
2362 struct snd_card *card = pci_get_drvdata(pci);
2363 struct azx *chip = card->private_data;
01b65bfb 2364 struct azx_pcm *p;
1da177e4 2365
421a1252 2366 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
9ad593f6 2367 azx_clear_irq_pending(chip);
01b65bfb
TI
2368 list_for_each_entry(p, &chip->pcm_list, list)
2369 snd_pcm_suspend_all(p->pcm);
0b7a2e9c 2370 if (chip->initialized)
8dd78330 2371 snd_hda_suspend(chip->bus);
cb53c626 2372 azx_stop_chip(chip);
30b35399 2373 if (chip->irq >= 0) {
43001c95 2374 free_irq(chip->irq, chip);
30b35399
TI
2375 chip->irq = -1;
2376 }
68e7fffc 2377 if (chip->msi)
43001c95 2378 pci_disable_msi(chip->pci);
421a1252
TI
2379 pci_disable_device(pci);
2380 pci_save_state(pci);
30b35399 2381 pci_set_power_state(pci, pci_choose_state(pci, state));
1da177e4
LT
2382 return 0;
2383}
2384
421a1252 2385static int azx_resume(struct pci_dev *pci)
1da177e4 2386{
421a1252
TI
2387 struct snd_card *card = pci_get_drvdata(pci);
2388 struct azx *chip = card->private_data;
1da177e4 2389
d14a7e0b
TI
2390 pci_set_power_state(pci, PCI_D0);
2391 pci_restore_state(pci);
30b35399
TI
2392 if (pci_enable_device(pci) < 0) {
2393 printk(KERN_ERR "hda-intel: pci_enable_device failed, "
2394 "disabling device\n");
2395 snd_card_disconnect(card);
2396 return -EIO;
2397 }
2398 pci_set_master(pci);
68e7fffc
TI
2399 if (chip->msi)
2400 if (pci_enable_msi(pci) < 0)
2401 chip->msi = 0;
2402 if (azx_acquire_irq(chip, 1) < 0)
30b35399 2403 return -EIO;
cb53c626 2404 azx_init_pci(chip);
d804ad92
ML
2405
2406 if (snd_hda_codecs_inuse(chip->bus))
cd508fe5 2407 azx_init_chip(chip, 1);
d804ad92 2408
1da177e4 2409 snd_hda_resume(chip->bus);
421a1252 2410 snd_power_change_state(card, SNDRV_CTL_POWER_D0);
1da177e4
LT
2411 return 0;
2412}
2413#endif /* CONFIG_PM */
2414
2415
0cbf0098
TI
2416/*
2417 * reboot notifier for hang-up problem at power-down
2418 */
2419static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
2420{
2421 struct azx *chip = container_of(nb, struct azx, reboot_notifier);
fb8d1a34 2422 snd_hda_bus_reboot_notify(chip->bus);
0cbf0098
TI
2423 azx_stop_chip(chip);
2424 return NOTIFY_OK;
2425}
2426
2427static void azx_notifier_register(struct azx *chip)
2428{
2429 chip->reboot_notifier.notifier_call = azx_halt;
2430 register_reboot_notifier(&chip->reboot_notifier);
2431}
2432
2433static void azx_notifier_unregister(struct azx *chip)
2434{
2435 if (chip->reboot_notifier.notifier_call)
2436 unregister_reboot_notifier(&chip->reboot_notifier);
2437}
2438
1da177e4
LT
2439/*
2440 * destructor
2441 */
a98f90fd 2442static int azx_free(struct azx *chip)
1da177e4 2443{
4ce107b9
TI
2444 int i;
2445
0cbf0098
TI
2446 azx_notifier_unregister(chip);
2447
ce43fbae 2448 if (chip->initialized) {
9ad593f6 2449 azx_clear_irq_pending(chip);
07e4ca50 2450 for (i = 0; i < chip->num_streams; i++)
1da177e4 2451 azx_stream_stop(chip, &chip->azx_dev[i]);
cb53c626 2452 azx_stop_chip(chip);
1da177e4
LT
2453 }
2454
f000fd80 2455 if (chip->irq >= 0)
1da177e4 2456 free_irq(chip->irq, (void*)chip);
68e7fffc 2457 if (chip->msi)
30b35399 2458 pci_disable_msi(chip->pci);
f079c25a
TI
2459 if (chip->remap_addr)
2460 iounmap(chip->remap_addr);
1da177e4 2461
4ce107b9
TI
2462 if (chip->azx_dev) {
2463 for (i = 0; i < chip->num_streams; i++)
27fe48d9
TI
2464 if (chip->azx_dev[i].bdl.area) {
2465 mark_pages_wc(chip, &chip->azx_dev[i].bdl, false);
4ce107b9 2466 snd_dma_free_pages(&chip->azx_dev[i].bdl);
27fe48d9 2467 }
4ce107b9 2468 }
27fe48d9
TI
2469 if (chip->rb.area) {
2470 mark_pages_wc(chip, &chip->rb, false);
1da177e4 2471 snd_dma_free_pages(&chip->rb);
27fe48d9
TI
2472 }
2473 if (chip->posbuf.area) {
2474 mark_pages_wc(chip, &chip->posbuf, false);
1da177e4 2475 snd_dma_free_pages(&chip->posbuf);
27fe48d9 2476 }
1da177e4
LT
2477 pci_release_regions(chip->pci);
2478 pci_disable_device(chip->pci);
07e4ca50 2479 kfree(chip->azx_dev);
1da177e4
LT
2480 kfree(chip);
2481
2482 return 0;
2483}
2484
a98f90fd 2485static int azx_dev_free(struct snd_device *device)
1da177e4
LT
2486{
2487 return azx_free(device->device_data);
2488}
2489
3372a153
TI
2490/*
2491 * white/black-listing for position_fix
2492 */
623ec047 2493static struct snd_pci_quirk position_fix_list[] __devinitdata = {
d2e1c973
TI
2494 SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
2495 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
2f703e7a 2496 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
d2e1c973 2497 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
dd37f8e8 2498 SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
9f75c1b1 2499 SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),
e96d3127 2500 SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),
61bb42c3 2501 SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB),
9ec8ddad 2502 SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB),
45d4ebf1 2503 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
8815cd03 2504 SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB),
b90c0764 2505 SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB),
0e0280dc 2506 SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB),
3372a153
TI
2507 {}
2508};
2509
2510static int __devinit check_position_fix(struct azx *chip, int fix)
2511{
2512 const struct snd_pci_quirk *q;
2513
c673ba1c
TI
2514 switch (fix) {
2515 case POS_FIX_LPIB:
2516 case POS_FIX_POSBUF:
4cb36310 2517 case POS_FIX_VIACOMBO:
c673ba1c
TI
2518 return fix;
2519 }
2520
c673ba1c
TI
2521 q = snd_pci_quirk_lookup(chip->pci, position_fix_list);
2522 if (q) {
2523 printk(KERN_INFO
2524 "hda_intel: position_fix set to %d "
2525 "for device %04x:%04x\n",
2526 q->value, q->subvendor, q->subdevice);
2527 return q->value;
3372a153 2528 }
bdd9ef24
DH
2529
2530 /* Check VIA/ATI HD Audio Controller exist */
9477c58e
TI
2531 if (chip->driver_caps & AZX_DCAPS_POSFIX_VIA) {
2532 snd_printd(SFX "Using VIACOMBO position fix\n");
bdd9ef24 2533 return POS_FIX_VIACOMBO;
9477c58e
TI
2534 }
2535 if (chip->driver_caps & AZX_DCAPS_POSFIX_LPIB) {
2536 snd_printd(SFX "Using LPIB position fix\n");
50e3bbf9 2537 return POS_FIX_LPIB;
bdd9ef24 2538 }
c673ba1c 2539 return POS_FIX_AUTO;
3372a153
TI
2540}
2541
669ba27a
TI
2542/*
2543 * black-lists for probe_mask
2544 */
2545static struct snd_pci_quirk probe_mask_list[] __devinitdata = {
2546 /* Thinkpad often breaks the controller communication when accessing
2547 * to the non-working (or non-existing) modem codec slot.
2548 */
2549 SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01),
2550 SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01),
2551 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01),
0edb9454
TI
2552 /* broken BIOS */
2553 SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),
ef1681d8
TI
2554 /* including bogus ALC268 in slot#2 that conflicts with ALC888 */
2555 SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),
20db7cb0 2556 /* forced codec slots */
93574844 2557 SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),
20db7cb0 2558 SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),
669ba27a
TI
2559 {}
2560};
2561
f1eaaeec
TI
2562#define AZX_FORCE_CODEC_MASK 0x100
2563
5aba4f8e 2564static void __devinit check_probe_mask(struct azx *chip, int dev)
669ba27a
TI
2565{
2566 const struct snd_pci_quirk *q;
2567
f1eaaeec
TI
2568 chip->codec_probe_mask = probe_mask[dev];
2569 if (chip->codec_probe_mask == -1) {
669ba27a
TI
2570 q = snd_pci_quirk_lookup(chip->pci, probe_mask_list);
2571 if (q) {
2572 printk(KERN_INFO
2573 "hda_intel: probe_mask set to 0x%x "
2574 "for device %04x:%04x\n",
2575 q->value, q->subvendor, q->subdevice);
f1eaaeec 2576 chip->codec_probe_mask = q->value;
669ba27a
TI
2577 }
2578 }
f1eaaeec
TI
2579
2580 /* check forced option */
2581 if (chip->codec_probe_mask != -1 &&
2582 (chip->codec_probe_mask & AZX_FORCE_CODEC_MASK)) {
2583 chip->codec_mask = chip->codec_probe_mask & 0xff;
2584 printk(KERN_INFO "hda_intel: codec_mask forced to 0x%x\n",
2585 chip->codec_mask);
2586 }
669ba27a
TI
2587}
2588
4d8e22e0 2589/*
71623855 2590 * white/black-list for enable_msi
4d8e22e0 2591 */
71623855 2592static struct snd_pci_quirk msi_black_list[] __devinitdata = {
9dc8398b 2593 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
0a27fcfa 2594 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
ecd21626 2595 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
4193d13b 2596 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
3815595e 2597 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
4d8e22e0
TI
2598 {}
2599};
2600
2601static void __devinit check_msi(struct azx *chip)
2602{
2603 const struct snd_pci_quirk *q;
2604
71623855
TI
2605 if (enable_msi >= 0) {
2606 chip->msi = !!enable_msi;
4d8e22e0 2607 return;
71623855
TI
2608 }
2609 chip->msi = 1; /* enable MSI as default */
2610 q = snd_pci_quirk_lookup(chip->pci, msi_black_list);
4d8e22e0
TI
2611 if (q) {
2612 printk(KERN_INFO
2613 "hda_intel: msi for device %04x:%04x set to %d\n",
2614 q->subvendor, q->subdevice, q->value);
2615 chip->msi = q->value;
80c43ed7
TI
2616 return;
2617 }
2618
2619 /* NVidia chipsets seem to cause troubles with MSI */
9477c58e
TI
2620 if (chip->driver_caps & AZX_DCAPS_NO_MSI) {
2621 printk(KERN_INFO "hda_intel: Disabling MSI\n");
80c43ed7 2622 chip->msi = 0;
4d8e22e0
TI
2623 }
2624}
2625
a1585d76
TI
2626/* check the snoop mode availability */
2627static void __devinit azx_check_snoop_available(struct azx *chip)
2628{
2629 bool snoop = chip->snoop;
2630
2631 switch (chip->driver_type) {
2632 case AZX_DRIVER_VIA:
2633 /* force to non-snoop mode for a new VIA controller
2634 * when BIOS is set
2635 */
2636 if (snoop) {
2637 u8 val;
2638 pci_read_config_byte(chip->pci, 0x42, &val);
2639 if (!(val & 0x80) && chip->pci->revision == 0x30)
2640 snoop = false;
2641 }
2642 break;
2643 case AZX_DRIVER_ATIHDMI_NS:
2644 /* new ATI HDMI requires non-snoop */
2645 snoop = false;
2646 break;
2647 }
2648
2649 if (snoop != chip->snoop) {
2650 snd_printk(KERN_INFO SFX "Force to %s mode\n",
2651 snoop ? "snoop" : "non-snoop");
2652 chip->snoop = snoop;
2653 }
2654}
669ba27a 2655
1da177e4
LT
2656/*
2657 * constructor
2658 */
a98f90fd 2659static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
9477c58e 2660 int dev, unsigned int driver_caps,
a98f90fd 2661 struct azx **rchip)
1da177e4 2662{
a98f90fd 2663 struct azx *chip;
4ce107b9 2664 int i, err;
bcd72003 2665 unsigned short gcap;
a98f90fd 2666 static struct snd_device_ops ops = {
1da177e4
LT
2667 .dev_free = azx_dev_free,
2668 };
2669
2670 *rchip = NULL;
bcd72003 2671
927fc866
PM
2672 err = pci_enable_device(pci);
2673 if (err < 0)
1da177e4
LT
2674 return err;
2675
e560d8d8 2676 chip = kzalloc(sizeof(*chip), GFP_KERNEL);
927fc866 2677 if (!chip) {
1da177e4
LT
2678 snd_printk(KERN_ERR SFX "cannot allocate chip\n");
2679 pci_disable_device(pci);
2680 return -ENOMEM;
2681 }
2682
2683 spin_lock_init(&chip->reg_lock);
62932df8 2684 mutex_init(&chip->open_mutex);
1da177e4
LT
2685 chip->card = card;
2686 chip->pci = pci;
2687 chip->irq = -1;
9477c58e
TI
2688 chip->driver_caps = driver_caps;
2689 chip->driver_type = driver_caps & 0xff;
4d8e22e0 2690 check_msi(chip);
555e219f 2691 chip->dev_index = dev;
9ad593f6 2692 INIT_WORK(&chip->irq_pending_work, azx_irq_pending_work);
01b65bfb 2693 INIT_LIST_HEAD(&chip->pcm_list);
1da177e4 2694
beaffc39
SG
2695 chip->position_fix[0] = chip->position_fix[1] =
2696 check_position_fix(chip, position_fix[dev]);
5aba4f8e 2697 check_probe_mask(chip, dev);
3372a153 2698
27346166 2699 chip->single_cmd = single_cmd;
27fe48d9 2700 chip->snoop = hda_snoop;
a1585d76 2701 azx_check_snoop_available(chip);
c74db86b 2702
5c0d7bc1
TI
2703 if (bdl_pos_adj[dev] < 0) {
2704 switch (chip->driver_type) {
0c6341ac 2705 case AZX_DRIVER_ICH:
32679f95 2706 case AZX_DRIVER_PCH:
0c6341ac 2707 bdl_pos_adj[dev] = 1;
5c0d7bc1
TI
2708 break;
2709 default:
0c6341ac 2710 bdl_pos_adj[dev] = 32;
5c0d7bc1
TI
2711 break;
2712 }
2713 }
2714
07e4ca50
TI
2715#if BITS_PER_LONG != 64
2716 /* Fix up base address on ULI M5461 */
2717 if (chip->driver_type == AZX_DRIVER_ULI) {
2718 u16 tmp3;
2719 pci_read_config_word(pci, 0x40, &tmp3);
2720 pci_write_config_word(pci, 0x40, tmp3 | 0x10);
2721 pci_write_config_dword(pci, PCI_BASE_ADDRESS_1, 0);
2722 }
2723#endif
2724
927fc866
PM
2725 err = pci_request_regions(pci, "ICH HD audio");
2726 if (err < 0) {
1da177e4
LT
2727 kfree(chip);
2728 pci_disable_device(pci);
2729 return err;
2730 }
2731
927fc866 2732 chip->addr = pci_resource_start(pci, 0);
2f5ad54e 2733 chip->remap_addr = pci_ioremap_bar(pci, 0);
1da177e4
LT
2734 if (chip->remap_addr == NULL) {
2735 snd_printk(KERN_ERR SFX "ioremap error\n");
2736 err = -ENXIO;
2737 goto errout;
2738 }
2739
68e7fffc
TI
2740 if (chip->msi)
2741 if (pci_enable_msi(pci) < 0)
2742 chip->msi = 0;
7376d013 2743
68e7fffc 2744 if (azx_acquire_irq(chip, 0) < 0) {
1da177e4
LT
2745 err = -EBUSY;
2746 goto errout;
2747 }
1da177e4
LT
2748
2749 pci_set_master(pci);
2750 synchronize_irq(chip->irq);
2751
bcd72003 2752 gcap = azx_readw(chip, GCAP);
4abc1cc2 2753 snd_printdd(SFX "chipset global capabilities = 0x%x\n", gcap);
bcd72003 2754
dc4c2e6b 2755 /* disable SB600 64bit support for safety */
9477c58e 2756 if (chip->pci->vendor == PCI_VENDOR_ID_ATI) {
dc4c2e6b
AB
2757 struct pci_dev *p_smbus;
2758 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,
2759 PCI_DEVICE_ID_ATI_SBX00_SMBUS,
2760 NULL);
2761 if (p_smbus) {
2762 if (p_smbus->revision < 0x30)
2763 gcap &= ~ICH6_GCAP_64OK;
2764 pci_dev_put(p_smbus);
2765 }
2766 }
09240cf4 2767
9477c58e
TI
2768 /* disable 64bit DMA address on some devices */
2769 if (chip->driver_caps & AZX_DCAPS_NO_64BIT) {
2770 snd_printd(SFX "Disabling 64bit DMA\n");
396087ea 2771 gcap &= ~ICH6_GCAP_64OK;
9477c58e 2772 }
396087ea 2773
2ae66c26
PLB
2774 /* disable buffer size rounding to 128-byte multiples if supported */
2775 if (chip->driver_caps & AZX_DCAPS_BUFSIZE)
2776 align_buffer_size = 0;
2777
cf7aaca8 2778 /* allow 64bit DMA address if supported by H/W */
b21fadb9 2779 if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64)))
e930438c 2780 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(64));
09240cf4 2781 else {
e930438c
YH
2782 pci_set_dma_mask(pci, DMA_BIT_MASK(32));
2783 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32));
09240cf4 2784 }
cf7aaca8 2785
8b6ed8e7
TI
2786 /* read number of streams from GCAP register instead of using
2787 * hardcoded value
2788 */
2789 chip->capture_streams = (gcap >> 8) & 0x0f;
2790 chip->playback_streams = (gcap >> 12) & 0x0f;
2791 if (!chip->playback_streams && !chip->capture_streams) {
bcd72003
TD
2792 /* gcap didn't give any info, switching to old method */
2793
2794 switch (chip->driver_type) {
2795 case AZX_DRIVER_ULI:
2796 chip->playback_streams = ULI_NUM_PLAYBACK;
2797 chip->capture_streams = ULI_NUM_CAPTURE;
bcd72003
TD
2798 break;
2799 case AZX_DRIVER_ATIHDMI:
1815b34a 2800 case AZX_DRIVER_ATIHDMI_NS:
bcd72003
TD
2801 chip->playback_streams = ATIHDMI_NUM_PLAYBACK;
2802 chip->capture_streams = ATIHDMI_NUM_CAPTURE;
bcd72003 2803 break;
c4da29ca 2804 case AZX_DRIVER_GENERIC:
bcd72003
TD
2805 default:
2806 chip->playback_streams = ICH6_NUM_PLAYBACK;
2807 chip->capture_streams = ICH6_NUM_CAPTURE;
bcd72003
TD
2808 break;
2809 }
07e4ca50 2810 }
8b6ed8e7
TI
2811 chip->capture_index_offset = 0;
2812 chip->playback_index_offset = chip->capture_streams;
07e4ca50 2813 chip->num_streams = chip->playback_streams + chip->capture_streams;
d01ce99f
TI
2814 chip->azx_dev = kcalloc(chip->num_streams, sizeof(*chip->azx_dev),
2815 GFP_KERNEL);
927fc866 2816 if (!chip->azx_dev) {
4abc1cc2 2817 snd_printk(KERN_ERR SFX "cannot malloc azx_dev\n");
07e4ca50
TI
2818 goto errout;
2819 }
2820
4ce107b9
TI
2821 for (i = 0; i < chip->num_streams; i++) {
2822 /* allocate memory for the BDL for each stream */
2823 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
2824 snd_dma_pci_data(chip->pci),
2825 BDL_SIZE, &chip->azx_dev[i].bdl);
2826 if (err < 0) {
2827 snd_printk(KERN_ERR SFX "cannot allocate BDL\n");
2828 goto errout;
2829 }
27fe48d9 2830 mark_pages_wc(chip, &chip->azx_dev[i].bdl, true);
1da177e4 2831 }
0be3b5d3 2832 /* allocate memory for the position buffer */
d01ce99f
TI
2833 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
2834 snd_dma_pci_data(chip->pci),
2835 chip->num_streams * 8, &chip->posbuf);
2836 if (err < 0) {
0be3b5d3
TI
2837 snd_printk(KERN_ERR SFX "cannot allocate posbuf\n");
2838 goto errout;
1da177e4 2839 }
27fe48d9 2840 mark_pages_wc(chip, &chip->posbuf, true);
1da177e4 2841 /* allocate CORB/RIRB */
81740861
TI
2842 err = azx_alloc_cmd_io(chip);
2843 if (err < 0)
2844 goto errout;
1da177e4
LT
2845
2846 /* initialize streams */
2847 azx_init_stream(chip);
2848
2849 /* initialize chip */
cb53c626 2850 azx_init_pci(chip);
10e77dda 2851 azx_init_chip(chip, (probe_only[dev] & 2) == 0);
1da177e4
LT
2852
2853 /* codec detection */
927fc866 2854 if (!chip->codec_mask) {
1da177e4
LT
2855 snd_printk(KERN_ERR SFX "no codecs found!\n");
2856 err = -ENODEV;
2857 goto errout;
2858 }
2859
d01ce99f
TI
2860 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
2861 if (err <0) {
1da177e4
LT
2862 snd_printk(KERN_ERR SFX "Error creating device [card]!\n");
2863 goto errout;
2864 }
2865
07e4ca50 2866 strcpy(card->driver, "HDA-Intel");
18cb7109
TI
2867 strlcpy(card->shortname, driver_short_names[chip->driver_type],
2868 sizeof(card->shortname));
2869 snprintf(card->longname, sizeof(card->longname),
2870 "%s at 0x%lx irq %i",
2871 card->shortname, chip->addr, chip->irq);
07e4ca50 2872
1da177e4
LT
2873 *rchip = chip;
2874 return 0;
2875
2876 errout:
2877 azx_free(chip);
2878 return err;
2879}
2880
cb53c626
TI
2881static void power_down_all_codecs(struct azx *chip)
2882{
2883#ifdef CONFIG_SND_HDA_POWER_SAVE
2884 /* The codecs were powered up in snd_hda_codec_new().
2885 * Now all initialization done, so turn them down if possible
2886 */
2887 struct hda_codec *codec;
2888 list_for_each_entry(codec, &chip->bus->codec_list, list) {
2889 snd_hda_power_down(codec);
2890 }
2891#endif
2892}
2893
d01ce99f
TI
2894static int __devinit azx_probe(struct pci_dev *pci,
2895 const struct pci_device_id *pci_id)
1da177e4 2896{
5aba4f8e 2897 static int dev;
a98f90fd
TI
2898 struct snd_card *card;
2899 struct azx *chip;
927fc866 2900 int err;
1da177e4 2901
5aba4f8e
TI
2902 if (dev >= SNDRV_CARDS)
2903 return -ENODEV;
2904 if (!enable[dev]) {
2905 dev++;
2906 return -ENOENT;
2907 }
2908
e58de7ba
TI
2909 err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
2910 if (err < 0) {
1da177e4 2911 snd_printk(KERN_ERR SFX "Error creating card!\n");
e58de7ba 2912 return err;
1da177e4
LT
2913 }
2914
4ea6fbc8
TI
2915 /* set this here since it's referred in snd_hda_load_patch() */
2916 snd_card_set_dev(card, &pci->dev);
2917
5aba4f8e 2918 err = azx_create(card, pci, dev, pci_id->driver_data, &chip);
41dda0fd
WF
2919 if (err < 0)
2920 goto out_free;
421a1252 2921 card->private_data = chip;
1da177e4 2922
2dca0bba
JK
2923#ifdef CONFIG_SND_HDA_INPUT_BEEP
2924 chip->beep_mode = beep_mode[dev];
2925#endif
2926
1da177e4 2927 /* create codec instances */
a1e21c90 2928 err = azx_codec_create(chip, model[dev]);
41dda0fd
WF
2929 if (err < 0)
2930 goto out_free;
4ea6fbc8 2931#ifdef CONFIG_SND_HDA_PATCH_LOADER
41a63f18 2932 if (patch[dev] && *patch[dev]) {
4ea6fbc8
TI
2933 snd_printk(KERN_ERR SFX "Applying patch firmware '%s'\n",
2934 patch[dev]);
2935 err = snd_hda_load_patch(chip->bus, patch[dev]);
2936 if (err < 0)
2937 goto out_free;
2938 }
2939#endif
10e77dda 2940 if ((probe_only[dev] & 1) == 0) {
a1e21c90
TI
2941 err = azx_codec_configure(chip);
2942 if (err < 0)
2943 goto out_free;
2944 }
1da177e4
LT
2945
2946 /* create PCM streams */
176d5335 2947 err = snd_hda_build_pcms(chip->bus);
41dda0fd
WF
2948 if (err < 0)
2949 goto out_free;
1da177e4
LT
2950
2951 /* create mixer controls */
d01ce99f 2952 err = azx_mixer_create(chip);
41dda0fd
WF
2953 if (err < 0)
2954 goto out_free;
1da177e4 2955
d01ce99f 2956 err = snd_card_register(card);
41dda0fd
WF
2957 if (err < 0)
2958 goto out_free;
1da177e4
LT
2959
2960 pci_set_drvdata(pci, card);
cb53c626
TI
2961 chip->running = 1;
2962 power_down_all_codecs(chip);
0cbf0098 2963 azx_notifier_register(chip);
1da177e4 2964
e25bcdba 2965 dev++;
1da177e4 2966 return err;
41dda0fd
WF
2967out_free:
2968 snd_card_free(card);
2969 return err;
1da177e4
LT
2970}
2971
2972static void __devexit azx_remove(struct pci_dev *pci)
2973{
2974 snd_card_free(pci_get_drvdata(pci));
2975 pci_set_drvdata(pci, NULL);
2976}
2977
2978/* PCI IDs */
cebe41d4 2979static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
d2f2fcd2 2980 /* CPT */
9477c58e 2981 { PCI_DEVICE(0x8086, 0x1c20),
2ae66c26
PLB
2982 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
2983 AZX_DCAPS_BUFSIZE },
cea310e8 2984 /* PBG */
9477c58e 2985 { PCI_DEVICE(0x8086, 0x1d20),
2ae66c26
PLB
2986 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
2987 AZX_DCAPS_BUFSIZE},
d2edeb7c 2988 /* Panther Point */
9477c58e 2989 { PCI_DEVICE(0x8086, 0x1e20),
2ae66c26
PLB
2990 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
2991 AZX_DCAPS_BUFSIZE},
87218e9c 2992 /* SCH */
9477c58e 2993 { PCI_DEVICE(0x8086, 0x811b),
2ae66c26 2994 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
645e9035 2995 AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_LPIB }, /* Poulsbo */
09904b95
LP
2996 { PCI_DEVICE(0x8086, 0x080a),
2997 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
716e5db4 2998 AZX_DCAPS_BUFSIZE | AZX_DCAPS_POSFIX_LPIB }, /* Oaktrail */
645e9035 2999 /* ICH */
8b0bd226 3000 { PCI_DEVICE(0x8086, 0x2668),
2ae66c26
PLB
3001 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3002 AZX_DCAPS_BUFSIZE }, /* ICH6 */
8b0bd226 3003 { PCI_DEVICE(0x8086, 0x27d8),
2ae66c26
PLB
3004 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3005 AZX_DCAPS_BUFSIZE }, /* ICH7 */
8b0bd226 3006 { PCI_DEVICE(0x8086, 0x269a),
2ae66c26
PLB
3007 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3008 AZX_DCAPS_BUFSIZE }, /* ESB2 */
8b0bd226 3009 { PCI_DEVICE(0x8086, 0x284b),
2ae66c26
PLB
3010 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3011 AZX_DCAPS_BUFSIZE }, /* ICH8 */
8b0bd226 3012 { PCI_DEVICE(0x8086, 0x293e),
2ae66c26
PLB
3013 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3014 AZX_DCAPS_BUFSIZE }, /* ICH9 */
8b0bd226 3015 { PCI_DEVICE(0x8086, 0x293f),
2ae66c26
PLB
3016 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3017 AZX_DCAPS_BUFSIZE }, /* ICH9 */
8b0bd226 3018 { PCI_DEVICE(0x8086, 0x3a3e),
2ae66c26
PLB
3019 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3020 AZX_DCAPS_BUFSIZE }, /* ICH10 */
8b0bd226 3021 { PCI_DEVICE(0x8086, 0x3a6e),
2ae66c26
PLB
3022 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3023 AZX_DCAPS_BUFSIZE }, /* ICH10 */
b6864535
TI
3024 /* Generic Intel */
3025 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),
3026 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3027 .class_mask = 0xffffff,
2ae66c26 3028 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_BUFSIZE },
9477c58e
TI
3029 /* ATI SB 450/600/700/800/900 */
3030 { PCI_DEVICE(0x1002, 0x437b),
3031 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
3032 { PCI_DEVICE(0x1002, 0x4383),
3033 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
3034 /* AMD Hudson */
3035 { PCI_DEVICE(0x1022, 0x780d),
3036 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
87218e9c 3037 /* ATI HDMI */
9477c58e
TI
3038 { PCI_DEVICE(0x1002, 0x793b),
3039 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3040 { PCI_DEVICE(0x1002, 0x7919),
3041 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3042 { PCI_DEVICE(0x1002, 0x960f),
3043 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3044 { PCI_DEVICE(0x1002, 0x970f),
3045 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3046 { PCI_DEVICE(0x1002, 0xaa00),
3047 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3048 { PCI_DEVICE(0x1002, 0xaa08),
3049 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3050 { PCI_DEVICE(0x1002, 0xaa10),
3051 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3052 { PCI_DEVICE(0x1002, 0xaa18),
3053 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3054 { PCI_DEVICE(0x1002, 0xaa20),
3055 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3056 { PCI_DEVICE(0x1002, 0xaa28),
3057 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3058 { PCI_DEVICE(0x1002, 0xaa30),
3059 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3060 { PCI_DEVICE(0x1002, 0xaa38),
3061 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3062 { PCI_DEVICE(0x1002, 0xaa40),
3063 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3064 { PCI_DEVICE(0x1002, 0xaa48),
3065 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
1815b34a
AX
3066 { PCI_DEVICE(0x1002, 0x9902),
3067 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3068 { PCI_DEVICE(0x1002, 0xaaa0),
3069 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3070 { PCI_DEVICE(0x1002, 0xaaa8),
3071 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
3072 { PCI_DEVICE(0x1002, 0xaab0),
3073 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
87218e9c 3074 /* VIA VT8251/VT8237A */
9477c58e
TI
3075 { PCI_DEVICE(0x1106, 0x3288),
3076 .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
87218e9c
TI
3077 /* SIS966 */
3078 { PCI_DEVICE(0x1039, 0x7502), .driver_data = AZX_DRIVER_SIS },
3079 /* ULI M5461 */
3080 { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI },
3081 /* NVIDIA MCP */
0c2fd1bf
TI
3082 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID),
3083 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3084 .class_mask = 0xffffff,
9477c58e 3085 .driver_data = AZX_DRIVER_NVIDIA | AZX_DCAPS_PRESET_NVIDIA },
f269002e 3086 /* Teradici */
9477c58e
TI
3087 { PCI_DEVICE(0x6549, 0x1200),
3088 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
4e01f54b 3089 /* Creative X-Fi (CA0110-IBG) */
313f6e2d
TI
3090#if !defined(CONFIG_SND_CTXFI) && !defined(CONFIG_SND_CTXFI_MODULE)
3091 /* the following entry conflicts with snd-ctxfi driver,
3092 * as ctxfi driver mutates from HD-audio to native mode with
3093 * a special command sequence.
3094 */
4e01f54b
TI
3095 { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_ANY_ID),
3096 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3097 .class_mask = 0xffffff,
9477c58e 3098 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
69f9ba9b 3099 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
313f6e2d
TI
3100#else
3101 /* this entry seems still valid -- i.e. without emu20kx chip */
9477c58e
TI
3102 { PCI_DEVICE(0x1102, 0x0009),
3103 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
69f9ba9b 3104 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
313f6e2d 3105#endif
e35d4b11
OS
3106 /* Vortex86MX */
3107 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
0f0714c5
BB
3108 /* VMware HDAudio */
3109 { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC },
9176b672 3110 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */
c4da29ca
YL
3111 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID),
3112 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3113 .class_mask = 0xffffff,
9477c58e 3114 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
9176b672
AB
3115 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_ANY_ID),
3116 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3117 .class_mask = 0xffffff,
9477c58e 3118 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
1da177e4
LT
3119 { 0, }
3120};
3121MODULE_DEVICE_TABLE(pci, azx_ids);
3122
3123/* pci_driver definition */
3124static struct pci_driver driver = {
3733e424 3125 .name = KBUILD_MODNAME,
1da177e4
LT
3126 .id_table = azx_ids,
3127 .probe = azx_probe,
3128 .remove = __devexit_p(azx_remove),
421a1252
TI
3129#ifdef CONFIG_PM
3130 .suspend = azx_suspend,
3131 .resume = azx_resume,
3132#endif
1da177e4
LT
3133};
3134
3135static int __init alsa_card_azx_init(void)
3136{
01d25d46 3137 return pci_register_driver(&driver);
1da177e4
LT
3138}
3139
3140static void __exit alsa_card_azx_exit(void)
3141{
3142 pci_unregister_driver(&driver);
3143}
3144
3145module_init(alsa_card_azx_init)
3146module_exit(alsa_card_azx_exit)