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