Merge branch 'drm-next-3.11' of git://people.freedesktop.org/~agd5f/linux into drm...
[deliverable/linux.git] / sound / pci / hda / hda_intel.c
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 #include <linux/pm_runtime.h>
50 #include <linux/clocksource.h>
51 #include <linux/time.h>
52 #include <linux/completion.h>
53
54 #ifdef CONFIG_X86
55 /* for snoop control */
56 #include <asm/pgtable.h>
57 #include <asm/cacheflush.h>
58 #endif
59 #include <sound/core.h>
60 #include <sound/initval.h>
61 #include <linux/vgaarb.h>
62 #include <linux/vga_switcheroo.h>
63 #include <linux/firmware.h>
64 #include "hda_codec.h"
65 #include "hda_i915.h"
66
67
68 static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;
69 static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;
70 static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;
71 static char *model[SNDRV_CARDS];
72 static int position_fix[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
73 static int bdl_pos_adj[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
74 static int probe_mask[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};
75 static int probe_only[SNDRV_CARDS];
76 static int jackpoll_ms[SNDRV_CARDS];
77 static bool single_cmd;
78 static int enable_msi = -1;
79 #ifdef CONFIG_SND_HDA_PATCH_LOADER
80 static char *patch[SNDRV_CARDS];
81 #endif
82 #ifdef CONFIG_SND_HDA_INPUT_BEEP
83 static bool beep_mode[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] =
84 CONFIG_SND_HDA_INPUT_BEEP_MODE};
85 #endif
86
87 module_param_array(index, int, NULL, 0444);
88 MODULE_PARM_DESC(index, "Index value for Intel HD audio interface.");
89 module_param_array(id, charp, NULL, 0444);
90 MODULE_PARM_DESC(id, "ID string for Intel HD audio interface.");
91 module_param_array(enable, bool, NULL, 0444);
92 MODULE_PARM_DESC(enable, "Enable Intel HD audio interface.");
93 module_param_array(model, charp, NULL, 0444);
94 MODULE_PARM_DESC(model, "Use the given board model.");
95 module_param_array(position_fix, int, NULL, 0444);
96 MODULE_PARM_DESC(position_fix, "DMA pointer read method."
97 "(-1 = system default, 0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO).");
98 module_param_array(bdl_pos_adj, int, NULL, 0644);
99 MODULE_PARM_DESC(bdl_pos_adj, "BDL position adjustment offset.");
100 module_param_array(probe_mask, int, NULL, 0444);
101 MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1).");
102 module_param_array(probe_only, int, NULL, 0444);
103 MODULE_PARM_DESC(probe_only, "Only probing and no codec initialization.");
104 module_param_array(jackpoll_ms, int, NULL, 0444);
105 MODULE_PARM_DESC(jackpoll_ms, "Ms between polling for jack events (default = 0, using unsol events only)");
106 module_param(single_cmd, bool, 0444);
107 MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs "
108 "(for debugging only).");
109 module_param(enable_msi, bint, 0444);
110 MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)");
111 #ifdef CONFIG_SND_HDA_PATCH_LOADER
112 module_param_array(patch, charp, NULL, 0444);
113 MODULE_PARM_DESC(patch, "Patch file for Intel HD audio interface.");
114 #endif
115 #ifdef CONFIG_SND_HDA_INPUT_BEEP
116 module_param_array(beep_mode, bool, NULL, 0444);
117 MODULE_PARM_DESC(beep_mode, "Select HDA Beep registration mode "
118 "(0=off, 1=on) (default=1).");
119 #endif
120
121 #ifdef CONFIG_PM
122 static int param_set_xint(const char *val, const struct kernel_param *kp);
123 static struct kernel_param_ops param_ops_xint = {
124 .set = param_set_xint,
125 .get = param_get_int,
126 };
127 #define param_check_xint param_check_int
128
129 static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;
130 module_param(power_save, xint, 0644);
131 MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "
132 "(in second, 0 = disable).");
133
134 /* reset the HD-audio controller in power save mode.
135 * this may give more power-saving, but will take longer time to
136 * wake up.
137 */
138 static bool power_save_controller = 1;
139 module_param(power_save_controller, bool, 0644);
140 MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");
141 #endif /* CONFIG_PM */
142
143 static int align_buffer_size = -1;
144 module_param(align_buffer_size, bint, 0644);
145 MODULE_PARM_DESC(align_buffer_size,
146 "Force buffer and period sizes to be multiple of 128 bytes.");
147
148 #ifdef CONFIG_X86
149 static bool hda_snoop = true;
150 module_param_named(snoop, hda_snoop, bool, 0444);
151 MODULE_PARM_DESC(snoop, "Enable/disable snooping");
152 #define azx_snoop(chip) (chip)->snoop
153 #else
154 #define hda_snoop true
155 #define azx_snoop(chip) true
156 #endif
157
158
159 MODULE_LICENSE("GPL");
160 MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
161 "{Intel, ICH6M},"
162 "{Intel, ICH7},"
163 "{Intel, ESB2},"
164 "{Intel, ICH8},"
165 "{Intel, ICH9},"
166 "{Intel, ICH10},"
167 "{Intel, PCH},"
168 "{Intel, CPT},"
169 "{Intel, PPT},"
170 "{Intel, LPT},"
171 "{Intel, LPT_LP},"
172 "{Intel, HPT},"
173 "{Intel, PBG},"
174 "{Intel, SCH},"
175 "{ATI, SB450},"
176 "{ATI, SB600},"
177 "{ATI, RS600},"
178 "{ATI, RS690},"
179 "{ATI, RS780},"
180 "{ATI, R600},"
181 "{ATI, RV630},"
182 "{ATI, RV610},"
183 "{ATI, RV670},"
184 "{ATI, RV635},"
185 "{ATI, RV620},"
186 "{ATI, RV770},"
187 "{VIA, VT8251},"
188 "{VIA, VT8237A},"
189 "{SiS, SIS966},"
190 "{ULI, M5461}}");
191 MODULE_DESCRIPTION("Intel HDA driver");
192
193 #ifdef CONFIG_SND_VERBOSE_PRINTK
194 #define SFX /* nop */
195 #else
196 #define SFX "hda-intel "
197 #endif
198
199 #if defined(CONFIG_PM) && defined(CONFIG_VGA_SWITCHEROO)
200 #ifdef CONFIG_SND_HDA_CODEC_HDMI
201 #define SUPPORT_VGA_SWITCHEROO
202 #endif
203 #endif
204
205
206 /*
207 * registers
208 */
209 #define ICH6_REG_GCAP 0x00
210 #define ICH6_GCAP_64OK (1 << 0) /* 64bit address support */
211 #define ICH6_GCAP_NSDO (3 << 1) /* # of serial data out signals */
212 #define ICH6_GCAP_BSS (31 << 3) /* # of bidirectional streams */
213 #define ICH6_GCAP_ISS (15 << 8) /* # of input streams */
214 #define ICH6_GCAP_OSS (15 << 12) /* # of output streams */
215 #define ICH6_REG_VMIN 0x02
216 #define ICH6_REG_VMAJ 0x03
217 #define ICH6_REG_OUTPAY 0x04
218 #define ICH6_REG_INPAY 0x06
219 #define ICH6_REG_GCTL 0x08
220 #define ICH6_GCTL_RESET (1 << 0) /* controller reset */
221 #define ICH6_GCTL_FCNTRL (1 << 1) /* flush control */
222 #define ICH6_GCTL_UNSOL (1 << 8) /* accept unsol. response enable */
223 #define ICH6_REG_WAKEEN 0x0c
224 #define ICH6_REG_STATESTS 0x0e
225 #define ICH6_REG_GSTS 0x10
226 #define ICH6_GSTS_FSTS (1 << 1) /* flush status */
227 #define ICH6_REG_INTCTL 0x20
228 #define ICH6_REG_INTSTS 0x24
229 #define ICH6_REG_WALLCLK 0x30 /* 24Mhz source */
230 #define ICH6_REG_OLD_SSYNC 0x34 /* SSYNC for old ICH */
231 #define ICH6_REG_SSYNC 0x38
232 #define ICH6_REG_CORBLBASE 0x40
233 #define ICH6_REG_CORBUBASE 0x44
234 #define ICH6_REG_CORBWP 0x48
235 #define ICH6_REG_CORBRP 0x4a
236 #define ICH6_CORBRP_RST (1 << 15) /* read pointer reset */
237 #define ICH6_REG_CORBCTL 0x4c
238 #define ICH6_CORBCTL_RUN (1 << 1) /* enable DMA */
239 #define ICH6_CORBCTL_CMEIE (1 << 0) /* enable memory error irq */
240 #define ICH6_REG_CORBSTS 0x4d
241 #define ICH6_CORBSTS_CMEI (1 << 0) /* memory error indication */
242 #define ICH6_REG_CORBSIZE 0x4e
243
244 #define ICH6_REG_RIRBLBASE 0x50
245 #define ICH6_REG_RIRBUBASE 0x54
246 #define ICH6_REG_RIRBWP 0x58
247 #define ICH6_RIRBWP_RST (1 << 15) /* write pointer reset */
248 #define ICH6_REG_RINTCNT 0x5a
249 #define ICH6_REG_RIRBCTL 0x5c
250 #define ICH6_RBCTL_IRQ_EN (1 << 0) /* enable IRQ */
251 #define ICH6_RBCTL_DMA_EN (1 << 1) /* enable DMA */
252 #define ICH6_RBCTL_OVERRUN_EN (1 << 2) /* enable overrun irq */
253 #define ICH6_REG_RIRBSTS 0x5d
254 #define ICH6_RBSTS_IRQ (1 << 0) /* response irq */
255 #define ICH6_RBSTS_OVERRUN (1 << 2) /* overrun irq */
256 #define ICH6_REG_RIRBSIZE 0x5e
257
258 #define ICH6_REG_IC 0x60
259 #define ICH6_REG_IR 0x64
260 #define ICH6_REG_IRS 0x68
261 #define ICH6_IRS_VALID (1<<1)
262 #define ICH6_IRS_BUSY (1<<0)
263
264 #define ICH6_REG_DPLBASE 0x70
265 #define ICH6_REG_DPUBASE 0x74
266 #define ICH6_DPLBASE_ENABLE 0x1 /* Enable position buffer */
267
268 /* SD offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
269 enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 };
270
271 /* stream register offsets from stream base */
272 #define ICH6_REG_SD_CTL 0x00
273 #define ICH6_REG_SD_STS 0x03
274 #define ICH6_REG_SD_LPIB 0x04
275 #define ICH6_REG_SD_CBL 0x08
276 #define ICH6_REG_SD_LVI 0x0c
277 #define ICH6_REG_SD_FIFOW 0x0e
278 #define ICH6_REG_SD_FIFOSIZE 0x10
279 #define ICH6_REG_SD_FORMAT 0x12
280 #define ICH6_REG_SD_BDLPL 0x18
281 #define ICH6_REG_SD_BDLPU 0x1c
282
283 /* PCI space */
284 #define ICH6_PCIREG_TCSEL 0x44
285
286 /*
287 * other constants
288 */
289
290 /* max number of SDs */
291 /* ICH, ATI and VIA have 4 playback and 4 capture */
292 #define ICH6_NUM_CAPTURE 4
293 #define ICH6_NUM_PLAYBACK 4
294
295 /* ULI has 6 playback and 5 capture */
296 #define ULI_NUM_CAPTURE 5
297 #define ULI_NUM_PLAYBACK 6
298
299 /* ATI HDMI has 1 playback and 0 capture */
300 #define ATIHDMI_NUM_CAPTURE 0
301 #define ATIHDMI_NUM_PLAYBACK 1
302
303 /* TERA has 4 playback and 3 capture */
304 #define TERA_NUM_CAPTURE 3
305 #define TERA_NUM_PLAYBACK 4
306
307 /* this number is statically defined for simplicity */
308 #define MAX_AZX_DEV 16
309
310 /* max number of fragments - we may use more if allocating more pages for BDL */
311 #define BDL_SIZE 4096
312 #define AZX_MAX_BDL_ENTRIES (BDL_SIZE / 16)
313 #define AZX_MAX_FRAG 32
314 /* max buffer size - no h/w limit, you can increase as you like */
315 #define AZX_MAX_BUF_SIZE (1024*1024*1024)
316
317 /* RIRB int mask: overrun[2], response[0] */
318 #define RIRB_INT_RESPONSE 0x01
319 #define RIRB_INT_OVERRUN 0x04
320 #define RIRB_INT_MASK 0x05
321
322 /* STATESTS int mask: S3,SD2,SD1,SD0 */
323 #define AZX_MAX_CODECS 8
324 #define AZX_DEFAULT_CODECS 4
325 #define STATESTS_INT_MASK ((1 << AZX_MAX_CODECS) - 1)
326
327 /* SD_CTL bits */
328 #define SD_CTL_STREAM_RESET 0x01 /* stream reset bit */
329 #define SD_CTL_DMA_START 0x02 /* stream DMA start bit */
330 #define SD_CTL_STRIPE (3 << 16) /* stripe control */
331 #define SD_CTL_TRAFFIC_PRIO (1 << 18) /* traffic priority */
332 #define SD_CTL_DIR (1 << 19) /* bi-directional stream */
333 #define SD_CTL_STREAM_TAG_MASK (0xf << 20)
334 #define SD_CTL_STREAM_TAG_SHIFT 20
335
336 /* SD_CTL and SD_STS */
337 #define SD_INT_DESC_ERR 0x10 /* descriptor error interrupt */
338 #define SD_INT_FIFO_ERR 0x08 /* FIFO error interrupt */
339 #define SD_INT_COMPLETE 0x04 /* completion interrupt */
340 #define SD_INT_MASK (SD_INT_DESC_ERR|SD_INT_FIFO_ERR|\
341 SD_INT_COMPLETE)
342
343 /* SD_STS */
344 #define SD_STS_FIFO_READY 0x20 /* FIFO ready */
345
346 /* INTCTL and INTSTS */
347 #define ICH6_INT_ALL_STREAM 0xff /* all stream interrupts */
348 #define ICH6_INT_CTRL_EN 0x40000000 /* controller interrupt enable bit */
349 #define ICH6_INT_GLOBAL_EN 0x80000000 /* global interrupt enable bit */
350
351 /* below are so far hardcoded - should read registers in future */
352 #define ICH6_MAX_CORB_ENTRIES 256
353 #define ICH6_MAX_RIRB_ENTRIES 256
354
355 /* position fix mode */
356 enum {
357 POS_FIX_AUTO,
358 POS_FIX_LPIB,
359 POS_FIX_POSBUF,
360 POS_FIX_VIACOMBO,
361 POS_FIX_COMBO,
362 };
363
364 /* Defines for ATI HD Audio support in SB450 south bridge */
365 #define ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR 0x42
366 #define ATI_SB450_HDAUDIO_ENABLE_SNOOP 0x02
367
368 /* Defines for Nvidia HDA support */
369 #define NVIDIA_HDA_TRANSREG_ADDR 0x4e
370 #define NVIDIA_HDA_ENABLE_COHBITS 0x0f
371 #define NVIDIA_HDA_ISTRM_COH 0x4d
372 #define NVIDIA_HDA_OSTRM_COH 0x4c
373 #define NVIDIA_HDA_ENABLE_COHBIT 0x01
374
375 /* Defines for Intel SCH HDA snoop control */
376 #define INTEL_SCH_HDA_DEVC 0x78
377 #define INTEL_SCH_HDA_DEVC_NOSNOOP (0x1<<11)
378
379 /* Define IN stream 0 FIFO size offset in VIA controller */
380 #define VIA_IN_STREAM0_FIFO_SIZE_OFFSET 0x90
381 /* Define VIA HD Audio Device ID*/
382 #define VIA_HDAC_DEVICE_ID 0x3288
383
384 /* HD Audio class code */
385 #define PCI_CLASS_MULTIMEDIA_HD_AUDIO 0x0403
386
387 /*
388 */
389
390 struct azx_dev {
391 struct snd_dma_buffer bdl; /* BDL buffer */
392 u32 *posbuf; /* position buffer pointer */
393
394 unsigned int bufsize; /* size of the play buffer in bytes */
395 unsigned int period_bytes; /* size of the period in bytes */
396 unsigned int frags; /* number for period in the play buffer */
397 unsigned int fifo_size; /* FIFO size */
398 unsigned long start_wallclk; /* start + minimum wallclk */
399 unsigned long period_wallclk; /* wallclk for period */
400
401 void __iomem *sd_addr; /* stream descriptor pointer */
402
403 u32 sd_int_sta_mask; /* stream int status mask */
404
405 /* pcm support */
406 struct snd_pcm_substream *substream; /* assigned substream,
407 * set in PCM open
408 */
409 unsigned int format_val; /* format value to be set in the
410 * controller and the codec
411 */
412 unsigned char stream_tag; /* assigned stream */
413 unsigned char index; /* stream index */
414 int assigned_key; /* last device# key assigned to */
415
416 unsigned int opened :1;
417 unsigned int running :1;
418 unsigned int irq_pending :1;
419 unsigned int prepared:1;
420 unsigned int locked:1;
421 /*
422 * For VIA:
423 * A flag to ensure DMA position is 0
424 * when link position is not greater than FIFO size
425 */
426 unsigned int insufficient :1;
427 unsigned int wc_marked:1;
428 unsigned int no_period_wakeup:1;
429
430 struct timecounter azx_tc;
431 struct cyclecounter azx_cc;
432
433 #ifdef CONFIG_SND_HDA_DSP_LOADER
434 struct mutex dsp_mutex;
435 #endif
436 };
437
438 /* DSP lock helpers */
439 #ifdef CONFIG_SND_HDA_DSP_LOADER
440 #define dsp_lock_init(dev) mutex_init(&(dev)->dsp_mutex)
441 #define dsp_lock(dev) mutex_lock(&(dev)->dsp_mutex)
442 #define dsp_unlock(dev) mutex_unlock(&(dev)->dsp_mutex)
443 #define dsp_is_locked(dev) ((dev)->locked)
444 #else
445 #define dsp_lock_init(dev) do {} while (0)
446 #define dsp_lock(dev) do {} while (0)
447 #define dsp_unlock(dev) do {} while (0)
448 #define dsp_is_locked(dev) 0
449 #endif
450
451 /* CORB/RIRB */
452 struct azx_rb {
453 u32 *buf; /* CORB/RIRB buffer
454 * Each CORB entry is 4byte, RIRB is 8byte
455 */
456 dma_addr_t addr; /* physical address of CORB/RIRB buffer */
457 /* for RIRB */
458 unsigned short rp, wp; /* read/write pointers */
459 int cmds[AZX_MAX_CODECS]; /* number of pending requests */
460 u32 res[AZX_MAX_CODECS]; /* last read value */
461 };
462
463 struct azx_pcm {
464 struct azx *chip;
465 struct snd_pcm *pcm;
466 struct hda_codec *codec;
467 struct hda_pcm_stream *hinfo[2];
468 struct list_head list;
469 };
470
471 struct azx {
472 struct snd_card *card;
473 struct pci_dev *pci;
474 int dev_index;
475
476 /* chip type specific */
477 int driver_type;
478 unsigned int driver_caps;
479 int playback_streams;
480 int playback_index_offset;
481 int capture_streams;
482 int capture_index_offset;
483 int num_streams;
484
485 /* pci resources */
486 unsigned long addr;
487 void __iomem *remap_addr;
488 int irq;
489
490 /* locks */
491 spinlock_t reg_lock;
492 struct mutex open_mutex;
493 struct completion probe_wait;
494
495 /* streams (x num_streams) */
496 struct azx_dev *azx_dev;
497
498 /* PCM */
499 struct list_head pcm_list; /* azx_pcm list */
500
501 /* HD codec */
502 unsigned short codec_mask;
503 int codec_probe_mask; /* copied from probe_mask option */
504 struct hda_bus *bus;
505 unsigned int beep_mode;
506
507 /* CORB/RIRB */
508 struct azx_rb corb;
509 struct azx_rb rirb;
510
511 /* CORB/RIRB and position buffers */
512 struct snd_dma_buffer rb;
513 struct snd_dma_buffer posbuf;
514
515 #ifdef CONFIG_SND_HDA_PATCH_LOADER
516 const struct firmware *fw;
517 #endif
518
519 /* flags */
520 int position_fix[2]; /* for both playback/capture streams */
521 int poll_count;
522 unsigned int running :1;
523 unsigned int initialized :1;
524 unsigned int single_cmd :1;
525 unsigned int polling_mode :1;
526 unsigned int msi :1;
527 unsigned int irq_pending_warned :1;
528 unsigned int probing :1; /* codec probing phase */
529 unsigned int snoop:1;
530 unsigned int align_buffer_size:1;
531 unsigned int region_requested:1;
532
533 /* VGA-switcheroo setup */
534 unsigned int use_vga_switcheroo:1;
535 unsigned int vga_switcheroo_registered:1;
536 unsigned int init_failed:1; /* delayed init failed */
537 unsigned int disabled:1; /* disabled by VGA-switcher */
538
539 /* for debugging */
540 unsigned int last_cmd[AZX_MAX_CODECS];
541
542 /* for pending irqs */
543 struct work_struct irq_pending_work;
544
545 #ifdef CONFIG_SND_HDA_I915
546 struct work_struct probe_work;
547 #endif
548
549 /* reboot notifier (for mysterious hangup problem at power-down) */
550 struct notifier_block reboot_notifier;
551
552 /* card list (for power_save trigger) */
553 struct list_head list;
554
555 #ifdef CONFIG_SND_HDA_DSP_LOADER
556 struct azx_dev saved_azx_dev;
557 #endif
558 };
559
560 #define CREATE_TRACE_POINTS
561 #include "hda_intel_trace.h"
562
563 /* driver types */
564 enum {
565 AZX_DRIVER_ICH,
566 AZX_DRIVER_PCH,
567 AZX_DRIVER_SCH,
568 AZX_DRIVER_ATI,
569 AZX_DRIVER_ATIHDMI,
570 AZX_DRIVER_ATIHDMI_NS,
571 AZX_DRIVER_VIA,
572 AZX_DRIVER_SIS,
573 AZX_DRIVER_ULI,
574 AZX_DRIVER_NVIDIA,
575 AZX_DRIVER_TERA,
576 AZX_DRIVER_CTX,
577 AZX_DRIVER_CTHDA,
578 AZX_DRIVER_GENERIC,
579 AZX_NUM_DRIVERS, /* keep this as last entry */
580 };
581
582 /* driver quirks (capabilities) */
583 /* bits 0-7 are used for indicating driver type */
584 #define AZX_DCAPS_NO_TCSEL (1 << 8) /* No Intel TCSEL bit */
585 #define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
586 #define AZX_DCAPS_ATI_SNOOP (1 << 10) /* ATI snoop enable */
587 #define AZX_DCAPS_NVIDIA_SNOOP (1 << 11) /* Nvidia snoop enable */
588 #define AZX_DCAPS_SCH_SNOOP (1 << 12) /* SCH/PCH snoop enable */
589 #define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */
590 #define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */
591 #define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
592 #define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */
593 #define AZX_DCAPS_POSFIX_VIA (1 << 17) /* Use VIACOMBO as default */
594 #define AZX_DCAPS_NO_64BIT (1 << 18) /* No 64bit address */
595 #define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */
596 #define AZX_DCAPS_OLD_SSYNC (1 << 20) /* Old SSYNC reg for ICH */
597 #define AZX_DCAPS_BUFSIZE (1 << 21) /* no buffer size alignment */
598 #define AZX_DCAPS_ALIGN_BUFSIZE (1 << 22) /* buffer size alignment */
599 #define AZX_DCAPS_4K_BDLE_BOUNDARY (1 << 23) /* BDLE in 4k boundary */
600 #define AZX_DCAPS_COUNT_LPIB_DELAY (1 << 25) /* Take LPIB as delay */
601 #define AZX_DCAPS_PM_RUNTIME (1 << 26) /* runtime PM support */
602 #define AZX_DCAPS_I915_POWERWELL (1 << 27) /* HSW i915 power well support */
603
604 /* quirks for Intel PCH */
605 #define AZX_DCAPS_INTEL_PCH_NOPM \
606 (AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_BUFSIZE | \
607 AZX_DCAPS_COUNT_LPIB_DELAY)
608
609 #define AZX_DCAPS_INTEL_PCH \
610 (AZX_DCAPS_INTEL_PCH_NOPM | AZX_DCAPS_PM_RUNTIME)
611
612 /* quirks for ATI SB / AMD Hudson */
613 #define AZX_DCAPS_PRESET_ATI_SB \
614 (AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
615 AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
616
617 /* quirks for ATI/AMD HDMI */
618 #define AZX_DCAPS_PRESET_ATI_HDMI \
619 (AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
620
621 /* quirks for Nvidia */
622 #define AZX_DCAPS_PRESET_NVIDIA \
623 (AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI |\
624 AZX_DCAPS_ALIGN_BUFSIZE | AZX_DCAPS_NO_64BIT)
625
626 #define AZX_DCAPS_PRESET_CTHDA \
627 (AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_4K_BDLE_BOUNDARY)
628
629 /*
630 * VGA-switcher support
631 */
632 #ifdef SUPPORT_VGA_SWITCHEROO
633 #define use_vga_switcheroo(chip) ((chip)->use_vga_switcheroo)
634 #else
635 #define use_vga_switcheroo(chip) 0
636 #endif
637
638 static char *driver_short_names[] = {
639 [AZX_DRIVER_ICH] = "HDA Intel",
640 [AZX_DRIVER_PCH] = "HDA Intel PCH",
641 [AZX_DRIVER_SCH] = "HDA Intel MID",
642 [AZX_DRIVER_ATI] = "HDA ATI SB",
643 [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI",
644 [AZX_DRIVER_ATIHDMI_NS] = "HDA ATI HDMI",
645 [AZX_DRIVER_VIA] = "HDA VIA VT82xx",
646 [AZX_DRIVER_SIS] = "HDA SIS966",
647 [AZX_DRIVER_ULI] = "HDA ULI M5461",
648 [AZX_DRIVER_NVIDIA] = "HDA NVidia",
649 [AZX_DRIVER_TERA] = "HDA Teradici",
650 [AZX_DRIVER_CTX] = "HDA Creative",
651 [AZX_DRIVER_CTHDA] = "HDA Creative",
652 [AZX_DRIVER_GENERIC] = "HD-Audio Generic",
653 };
654
655 /*
656 * macros for easy use
657 */
658 #define azx_writel(chip,reg,value) \
659 writel(value, (chip)->remap_addr + ICH6_REG_##reg)
660 #define azx_readl(chip,reg) \
661 readl((chip)->remap_addr + ICH6_REG_##reg)
662 #define azx_writew(chip,reg,value) \
663 writew(value, (chip)->remap_addr + ICH6_REG_##reg)
664 #define azx_readw(chip,reg) \
665 readw((chip)->remap_addr + ICH6_REG_##reg)
666 #define azx_writeb(chip,reg,value) \
667 writeb(value, (chip)->remap_addr + ICH6_REG_##reg)
668 #define azx_readb(chip,reg) \
669 readb((chip)->remap_addr + ICH6_REG_##reg)
670
671 #define azx_sd_writel(dev,reg,value) \
672 writel(value, (dev)->sd_addr + ICH6_REG_##reg)
673 #define azx_sd_readl(dev,reg) \
674 readl((dev)->sd_addr + ICH6_REG_##reg)
675 #define azx_sd_writew(dev,reg,value) \
676 writew(value, (dev)->sd_addr + ICH6_REG_##reg)
677 #define azx_sd_readw(dev,reg) \
678 readw((dev)->sd_addr + ICH6_REG_##reg)
679 #define azx_sd_writeb(dev,reg,value) \
680 writeb(value, (dev)->sd_addr + ICH6_REG_##reg)
681 #define azx_sd_readb(dev,reg) \
682 readb((dev)->sd_addr + ICH6_REG_##reg)
683
684 /* for pcm support */
685 #define get_azx_dev(substream) (substream->runtime->private_data)
686
687 #ifdef CONFIG_X86
688 static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool on)
689 {
690 int pages;
691
692 if (azx_snoop(chip))
693 return;
694 if (!dmab || !dmab->area || !dmab->bytes)
695 return;
696
697 #ifdef CONFIG_SND_DMA_SGBUF
698 if (dmab->dev.type == SNDRV_DMA_TYPE_DEV_SG) {
699 struct snd_sg_buf *sgbuf = dmab->private_data;
700 if (on)
701 set_pages_array_wc(sgbuf->page_table, sgbuf->pages);
702 else
703 set_pages_array_wb(sgbuf->page_table, sgbuf->pages);
704 return;
705 }
706 #endif
707
708 pages = (dmab->bytes + PAGE_SIZE - 1) >> PAGE_SHIFT;
709 if (on)
710 set_memory_wc((unsigned long)dmab->area, pages);
711 else
712 set_memory_wb((unsigned long)dmab->area, pages);
713 }
714
715 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
716 bool on)
717 {
718 __mark_pages_wc(chip, buf, on);
719 }
720 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
721 struct snd_pcm_substream *substream, bool on)
722 {
723 if (azx_dev->wc_marked != on) {
724 __mark_pages_wc(chip, snd_pcm_get_dma_buf(substream), on);
725 azx_dev->wc_marked = on;
726 }
727 }
728 #else
729 /* NOP for other archs */
730 static inline void mark_pages_wc(struct azx *chip, struct snd_dma_buffer *buf,
731 bool on)
732 {
733 }
734 static inline void mark_runtime_wc(struct azx *chip, struct azx_dev *azx_dev,
735 struct snd_pcm_substream *substream, bool on)
736 {
737 }
738 #endif
739
740 static int azx_acquire_irq(struct azx *chip, int do_disconnect);
741 static int azx_send_cmd(struct hda_bus *bus, unsigned int val);
742 /*
743 * Interface for HD codec
744 */
745
746 /*
747 * CORB / RIRB interface
748 */
749 static int azx_alloc_cmd_io(struct azx *chip)
750 {
751 int err;
752
753 /* single page (at least 4096 bytes) must suffice for both ringbuffes */
754 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
755 snd_dma_pci_data(chip->pci),
756 PAGE_SIZE, &chip->rb);
757 if (err < 0) {
758 snd_printk(KERN_ERR SFX "%s: cannot allocate CORB/RIRB\n", pci_name(chip->pci));
759 return err;
760 }
761 mark_pages_wc(chip, &chip->rb, true);
762 return 0;
763 }
764
765 static void azx_init_cmd_io(struct azx *chip)
766 {
767 spin_lock_irq(&chip->reg_lock);
768 /* CORB set up */
769 chip->corb.addr = chip->rb.addr;
770 chip->corb.buf = (u32 *)chip->rb.area;
771 azx_writel(chip, CORBLBASE, (u32)chip->corb.addr);
772 azx_writel(chip, CORBUBASE, upper_32_bits(chip->corb.addr));
773
774 /* set the corb size to 256 entries (ULI requires explicitly) */
775 azx_writeb(chip, CORBSIZE, 0x02);
776 /* set the corb write pointer to 0 */
777 azx_writew(chip, CORBWP, 0);
778 /* reset the corb hw read pointer */
779 azx_writew(chip, CORBRP, ICH6_CORBRP_RST);
780 /* enable corb dma */
781 azx_writeb(chip, CORBCTL, ICH6_CORBCTL_RUN);
782
783 /* RIRB set up */
784 chip->rirb.addr = chip->rb.addr + 2048;
785 chip->rirb.buf = (u32 *)(chip->rb.area + 2048);
786 chip->rirb.wp = chip->rirb.rp = 0;
787 memset(chip->rirb.cmds, 0, sizeof(chip->rirb.cmds));
788 azx_writel(chip, RIRBLBASE, (u32)chip->rirb.addr);
789 azx_writel(chip, RIRBUBASE, upper_32_bits(chip->rirb.addr));
790
791 /* set the rirb size to 256 entries (ULI requires explicitly) */
792 azx_writeb(chip, RIRBSIZE, 0x02);
793 /* reset the rirb hw write pointer */
794 azx_writew(chip, RIRBWP, ICH6_RIRBWP_RST);
795 /* set N=1, get RIRB response interrupt for new entry */
796 if (chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND)
797 azx_writew(chip, RINTCNT, 0xc0);
798 else
799 azx_writew(chip, RINTCNT, 1);
800 /* enable rirb dma and response irq */
801 azx_writeb(chip, RIRBCTL, ICH6_RBCTL_DMA_EN | ICH6_RBCTL_IRQ_EN);
802 spin_unlock_irq(&chip->reg_lock);
803 }
804
805 static void azx_free_cmd_io(struct azx *chip)
806 {
807 spin_lock_irq(&chip->reg_lock);
808 /* disable ringbuffer DMAs */
809 azx_writeb(chip, RIRBCTL, 0);
810 azx_writeb(chip, CORBCTL, 0);
811 spin_unlock_irq(&chip->reg_lock);
812 }
813
814 static unsigned int azx_command_addr(u32 cmd)
815 {
816 unsigned int addr = cmd >> 28;
817
818 if (addr >= AZX_MAX_CODECS) {
819 snd_BUG();
820 addr = 0;
821 }
822
823 return addr;
824 }
825
826 static unsigned int azx_response_addr(u32 res)
827 {
828 unsigned int addr = res & 0xf;
829
830 if (addr >= AZX_MAX_CODECS) {
831 snd_BUG();
832 addr = 0;
833 }
834
835 return addr;
836 }
837
838 /* send a command */
839 static int azx_corb_send_cmd(struct hda_bus *bus, u32 val)
840 {
841 struct azx *chip = bus->private_data;
842 unsigned int addr = azx_command_addr(val);
843 unsigned int wp, rp;
844
845 spin_lock_irq(&chip->reg_lock);
846
847 /* add command to corb */
848 wp = azx_readw(chip, CORBWP);
849 if (wp == 0xffff) {
850 /* something wrong, controller likely turned to D3 */
851 spin_unlock_irq(&chip->reg_lock);
852 return -EIO;
853 }
854 wp++;
855 wp %= ICH6_MAX_CORB_ENTRIES;
856
857 rp = azx_readw(chip, CORBRP);
858 if (wp == rp) {
859 /* oops, it's full */
860 spin_unlock_irq(&chip->reg_lock);
861 return -EAGAIN;
862 }
863
864 chip->rirb.cmds[addr]++;
865 chip->corb.buf[wp] = cpu_to_le32(val);
866 azx_writel(chip, CORBWP, wp);
867
868 spin_unlock_irq(&chip->reg_lock);
869
870 return 0;
871 }
872
873 #define ICH6_RIRB_EX_UNSOL_EV (1<<4)
874
875 /* retrieve RIRB entry - called from interrupt handler */
876 static void azx_update_rirb(struct azx *chip)
877 {
878 unsigned int rp, wp;
879 unsigned int addr;
880 u32 res, res_ex;
881
882 wp = azx_readw(chip, RIRBWP);
883 if (wp == 0xffff) {
884 /* something wrong, controller likely turned to D3 */
885 return;
886 }
887
888 if (wp == chip->rirb.wp)
889 return;
890 chip->rirb.wp = wp;
891
892 while (chip->rirb.rp != wp) {
893 chip->rirb.rp++;
894 chip->rirb.rp %= ICH6_MAX_RIRB_ENTRIES;
895
896 rp = chip->rirb.rp << 1; /* an RIRB entry is 8-bytes */
897 res_ex = le32_to_cpu(chip->rirb.buf[rp + 1]);
898 res = le32_to_cpu(chip->rirb.buf[rp]);
899 addr = azx_response_addr(res_ex);
900 if (res_ex & ICH6_RIRB_EX_UNSOL_EV)
901 snd_hda_queue_unsol_event(chip->bus, res, res_ex);
902 else if (chip->rirb.cmds[addr]) {
903 chip->rirb.res[addr] = res;
904 smp_wmb();
905 chip->rirb.cmds[addr]--;
906 } else
907 snd_printk(KERN_ERR SFX "%s: spurious response %#x:%#x, "
908 "last cmd=%#08x\n",
909 pci_name(chip->pci),
910 res, res_ex,
911 chip->last_cmd[addr]);
912 }
913 }
914
915 /* receive a response */
916 static unsigned int azx_rirb_get_response(struct hda_bus *bus,
917 unsigned int addr)
918 {
919 struct azx *chip = bus->private_data;
920 unsigned long timeout;
921 unsigned long loopcounter;
922 int do_poll = 0;
923
924 again:
925 timeout = jiffies + msecs_to_jiffies(1000);
926
927 for (loopcounter = 0;; loopcounter++) {
928 if (chip->polling_mode || do_poll) {
929 spin_lock_irq(&chip->reg_lock);
930 azx_update_rirb(chip);
931 spin_unlock_irq(&chip->reg_lock);
932 }
933 if (!chip->rirb.cmds[addr]) {
934 smp_rmb();
935 bus->rirb_error = 0;
936
937 if (!do_poll)
938 chip->poll_count = 0;
939 return chip->rirb.res[addr]; /* the last value */
940 }
941 if (time_after(jiffies, timeout))
942 break;
943 if (bus->needs_damn_long_delay || loopcounter > 3000)
944 msleep(2); /* temporary workaround */
945 else {
946 udelay(10);
947 cond_resched();
948 }
949 }
950
951 if (!chip->polling_mode && chip->poll_count < 2) {
952 snd_printdd(SFX "%s: azx_get_response timeout, "
953 "polling the codec once: last cmd=0x%08x\n",
954 pci_name(chip->pci), chip->last_cmd[addr]);
955 do_poll = 1;
956 chip->poll_count++;
957 goto again;
958 }
959
960
961 if (!chip->polling_mode) {
962 snd_printk(KERN_WARNING SFX "%s: azx_get_response timeout, "
963 "switching to polling mode: last cmd=0x%08x\n",
964 pci_name(chip->pci), chip->last_cmd[addr]);
965 chip->polling_mode = 1;
966 goto again;
967 }
968
969 if (chip->msi) {
970 snd_printk(KERN_WARNING SFX "%s: No response from codec, "
971 "disabling MSI: last cmd=0x%08x\n",
972 pci_name(chip->pci), chip->last_cmd[addr]);
973 free_irq(chip->irq, chip);
974 chip->irq = -1;
975 pci_disable_msi(chip->pci);
976 chip->msi = 0;
977 if (azx_acquire_irq(chip, 1) < 0) {
978 bus->rirb_error = 1;
979 return -1;
980 }
981 goto again;
982 }
983
984 if (chip->probing) {
985 /* If this critical timeout happens during the codec probing
986 * phase, this is likely an access to a non-existing codec
987 * slot. Better to return an error and reset the system.
988 */
989 return -1;
990 }
991
992 /* a fatal communication error; need either to reset or to fallback
993 * to the single_cmd mode
994 */
995 bus->rirb_error = 1;
996 if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) {
997 bus->response_reset = 1;
998 return -1; /* give a chance to retry */
999 }
1000
1001 snd_printk(KERN_ERR "hda_intel: azx_get_response timeout, "
1002 "switching to single_cmd mode: last cmd=0x%08x\n",
1003 chip->last_cmd[addr]);
1004 chip->single_cmd = 1;
1005 bus->response_reset = 0;
1006 /* release CORB/RIRB */
1007 azx_free_cmd_io(chip);
1008 /* disable unsolicited responses */
1009 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL);
1010 return -1;
1011 }
1012
1013 /*
1014 * Use the single immediate command instead of CORB/RIRB for simplicity
1015 *
1016 * Note: according to Intel, this is not preferred use. The command was
1017 * intended for the BIOS only, and may get confused with unsolicited
1018 * responses. So, we shouldn't use it for normal operation from the
1019 * driver.
1020 * I left the codes, however, for debugging/testing purposes.
1021 */
1022
1023 /* receive a response */
1024 static int azx_single_wait_for_response(struct azx *chip, unsigned int addr)
1025 {
1026 int timeout = 50;
1027
1028 while (timeout--) {
1029 /* check IRV busy bit */
1030 if (azx_readw(chip, IRS) & ICH6_IRS_VALID) {
1031 /* reuse rirb.res as the response return value */
1032 chip->rirb.res[addr] = azx_readl(chip, IR);
1033 return 0;
1034 }
1035 udelay(1);
1036 }
1037 if (printk_ratelimit())
1038 snd_printd(SFX "%s: get_response timeout: IRS=0x%x\n",
1039 pci_name(chip->pci), azx_readw(chip, IRS));
1040 chip->rirb.res[addr] = -1;
1041 return -EIO;
1042 }
1043
1044 /* send a command */
1045 static int azx_single_send_cmd(struct hda_bus *bus, u32 val)
1046 {
1047 struct azx *chip = bus->private_data;
1048 unsigned int addr = azx_command_addr(val);
1049 int timeout = 50;
1050
1051 bus->rirb_error = 0;
1052 while (timeout--) {
1053 /* check ICB busy bit */
1054 if (!((azx_readw(chip, IRS) & ICH6_IRS_BUSY))) {
1055 /* Clear IRV valid bit */
1056 azx_writew(chip, IRS, azx_readw(chip, IRS) |
1057 ICH6_IRS_VALID);
1058 azx_writel(chip, IC, val);
1059 azx_writew(chip, IRS, azx_readw(chip, IRS) |
1060 ICH6_IRS_BUSY);
1061 return azx_single_wait_for_response(chip, addr);
1062 }
1063 udelay(1);
1064 }
1065 if (printk_ratelimit())
1066 snd_printd(SFX "%s: send_cmd timeout: IRS=0x%x, val=0x%x\n",
1067 pci_name(chip->pci), azx_readw(chip, IRS), val);
1068 return -EIO;
1069 }
1070
1071 /* receive a response */
1072 static unsigned int azx_single_get_response(struct hda_bus *bus,
1073 unsigned int addr)
1074 {
1075 struct azx *chip = bus->private_data;
1076 return chip->rirb.res[addr];
1077 }
1078
1079 /*
1080 * The below are the main callbacks from hda_codec.
1081 *
1082 * They are just the skeleton to call sub-callbacks according to the
1083 * current setting of chip->single_cmd.
1084 */
1085
1086 /* send a command */
1087 static int azx_send_cmd(struct hda_bus *bus, unsigned int val)
1088 {
1089 struct azx *chip = bus->private_data;
1090
1091 if (chip->disabled)
1092 return 0;
1093 chip->last_cmd[azx_command_addr(val)] = val;
1094 if (chip->single_cmd)
1095 return azx_single_send_cmd(bus, val);
1096 else
1097 return azx_corb_send_cmd(bus, val);
1098 }
1099
1100 /* get a response */
1101 static unsigned int azx_get_response(struct hda_bus *bus,
1102 unsigned int addr)
1103 {
1104 struct azx *chip = bus->private_data;
1105 if (chip->disabled)
1106 return 0;
1107 if (chip->single_cmd)
1108 return azx_single_get_response(bus, addr);
1109 else
1110 return azx_rirb_get_response(bus, addr);
1111 }
1112
1113 #ifdef CONFIG_PM
1114 static void azx_power_notify(struct hda_bus *bus, bool power_up);
1115 #endif
1116
1117 #ifdef CONFIG_SND_HDA_DSP_LOADER
1118 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format,
1119 unsigned int byte_size,
1120 struct snd_dma_buffer *bufp);
1121 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start);
1122 static void azx_load_dsp_cleanup(struct hda_bus *bus,
1123 struct snd_dma_buffer *dmab);
1124 #endif
1125
1126 /* reset codec link */
1127 static int azx_reset(struct azx *chip, int full_reset)
1128 {
1129 unsigned long timeout;
1130
1131 if (!full_reset)
1132 goto __skip;
1133
1134 /* clear STATESTS */
1135 azx_writeb(chip, STATESTS, STATESTS_INT_MASK);
1136
1137 /* reset controller */
1138 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_RESET);
1139
1140 timeout = jiffies + msecs_to_jiffies(100);
1141 while (azx_readb(chip, GCTL) &&
1142 time_before(jiffies, timeout))
1143 usleep_range(500, 1000);
1144
1145 /* delay for >= 100us for codec PLL to settle per spec
1146 * Rev 0.9 section 5.5.1
1147 */
1148 usleep_range(500, 1000);
1149
1150 /* Bring controller out of reset */
1151 azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | ICH6_GCTL_RESET);
1152
1153 timeout = jiffies + msecs_to_jiffies(100);
1154 while (!azx_readb(chip, GCTL) &&
1155 time_before(jiffies, timeout))
1156 usleep_range(500, 1000);
1157
1158 /* Brent Chartrand said to wait >= 540us for codecs to initialize */
1159 usleep_range(1000, 1200);
1160
1161 __skip:
1162 /* check to see if controller is ready */
1163 if (!azx_readb(chip, GCTL)) {
1164 snd_printd(SFX "%s: azx_reset: controller not ready!\n", pci_name(chip->pci));
1165 return -EBUSY;
1166 }
1167
1168 /* Accept unsolicited responses */
1169 if (!chip->single_cmd)
1170 azx_writel(chip, GCTL, azx_readl(chip, GCTL) |
1171 ICH6_GCTL_UNSOL);
1172
1173 /* detect codecs */
1174 if (!chip->codec_mask) {
1175 chip->codec_mask = azx_readw(chip, STATESTS);
1176 snd_printdd(SFX "%s: codec_mask = 0x%x\n", pci_name(chip->pci), chip->codec_mask);
1177 }
1178
1179 return 0;
1180 }
1181
1182
1183 /*
1184 * Lowlevel interface
1185 */
1186
1187 /* enable interrupts */
1188 static void azx_int_enable(struct azx *chip)
1189 {
1190 /* enable controller CIE and GIE */
1191 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) |
1192 ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN);
1193 }
1194
1195 /* disable interrupts */
1196 static void azx_int_disable(struct azx *chip)
1197 {
1198 int i;
1199
1200 /* disable interrupts in stream descriptor */
1201 for (i = 0; i < chip->num_streams; i++) {
1202 struct azx_dev *azx_dev = &chip->azx_dev[i];
1203 azx_sd_writeb(azx_dev, SD_CTL,
1204 azx_sd_readb(azx_dev, SD_CTL) & ~SD_INT_MASK);
1205 }
1206
1207 /* disable SIE for all streams */
1208 azx_writeb(chip, INTCTL, 0);
1209
1210 /* disable controller CIE and GIE */
1211 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) &
1212 ~(ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN));
1213 }
1214
1215 /* clear interrupts */
1216 static void azx_int_clear(struct azx *chip)
1217 {
1218 int i;
1219
1220 /* clear stream status */
1221 for (i = 0; i < chip->num_streams; i++) {
1222 struct azx_dev *azx_dev = &chip->azx_dev[i];
1223 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1224 }
1225
1226 /* clear STATESTS */
1227 azx_writeb(chip, STATESTS, STATESTS_INT_MASK);
1228
1229 /* clear rirb status */
1230 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1231
1232 /* clear int status */
1233 azx_writel(chip, INTSTS, ICH6_INT_CTRL_EN | ICH6_INT_ALL_STREAM);
1234 }
1235
1236 /* start a stream */
1237 static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev)
1238 {
1239 /*
1240 * Before stream start, initialize parameter
1241 */
1242 azx_dev->insufficient = 1;
1243
1244 /* enable SIE */
1245 azx_writel(chip, INTCTL,
1246 azx_readl(chip, INTCTL) | (1 << azx_dev->index));
1247 /* set DMA start and interrupt mask */
1248 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1249 SD_CTL_DMA_START | SD_INT_MASK);
1250 }
1251
1252 /* stop DMA */
1253 static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev)
1254 {
1255 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) &
1256 ~(SD_CTL_DMA_START | SD_INT_MASK));
1257 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); /* to be sure */
1258 }
1259
1260 /* stop a stream */
1261 static void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev)
1262 {
1263 azx_stream_clear(chip, azx_dev);
1264 /* disable SIE */
1265 azx_writel(chip, INTCTL,
1266 azx_readl(chip, INTCTL) & ~(1 << azx_dev->index));
1267 }
1268
1269
1270 /*
1271 * reset and start the controller registers
1272 */
1273 static void azx_init_chip(struct azx *chip, int full_reset)
1274 {
1275 if (chip->initialized)
1276 return;
1277
1278 /* reset controller */
1279 azx_reset(chip, full_reset);
1280
1281 /* initialize interrupts */
1282 azx_int_clear(chip);
1283 azx_int_enable(chip);
1284
1285 /* initialize the codec command I/O */
1286 if (!chip->single_cmd)
1287 azx_init_cmd_io(chip);
1288
1289 /* program the position buffer */
1290 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr);
1291 azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr));
1292
1293 chip->initialized = 1;
1294 }
1295
1296 /*
1297 * initialize the PCI registers
1298 */
1299 /* update bits in a PCI register byte */
1300 static void update_pci_byte(struct pci_dev *pci, unsigned int reg,
1301 unsigned char mask, unsigned char val)
1302 {
1303 unsigned char data;
1304
1305 pci_read_config_byte(pci, reg, &data);
1306 data &= ~mask;
1307 data |= (val & mask);
1308 pci_write_config_byte(pci, reg, data);
1309 }
1310
1311 static void azx_init_pci(struct azx *chip)
1312 {
1313 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)
1314 * TCSEL == Traffic Class Select Register, which sets PCI express QOS
1315 * Ensuring these bits are 0 clears playback static on some HD Audio
1316 * codecs.
1317 * The PCI register TCSEL is defined in the Intel manuals.
1318 */
1319 if (!(chip->driver_caps & AZX_DCAPS_NO_TCSEL)) {
1320 snd_printdd(SFX "%s: Clearing TCSEL\n", pci_name(chip->pci));
1321 update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0);
1322 }
1323
1324 /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
1325 * we need to enable snoop.
1326 */
1327 if (chip->driver_caps & AZX_DCAPS_ATI_SNOOP) {
1328 snd_printdd(SFX "%s: Setting ATI snoop: %d\n", pci_name(chip->pci), azx_snoop(chip));
1329 update_pci_byte(chip->pci,
1330 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR, 0x07,
1331 azx_snoop(chip) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP : 0);
1332 }
1333
1334 /* For NVIDIA HDA, enable snoop */
1335 if (chip->driver_caps & AZX_DCAPS_NVIDIA_SNOOP) {
1336 snd_printdd(SFX "%s: Setting Nvidia snoop: %d\n", pci_name(chip->pci), azx_snoop(chip));
1337 update_pci_byte(chip->pci,
1338 NVIDIA_HDA_TRANSREG_ADDR,
1339 0x0f, NVIDIA_HDA_ENABLE_COHBITS);
1340 update_pci_byte(chip->pci,
1341 NVIDIA_HDA_ISTRM_COH,
1342 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1343 update_pci_byte(chip->pci,
1344 NVIDIA_HDA_OSTRM_COH,
1345 0x01, NVIDIA_HDA_ENABLE_COHBIT);
1346 }
1347
1348 /* Enable SCH/PCH snoop if needed */
1349 if (chip->driver_caps & AZX_DCAPS_SCH_SNOOP) {
1350 unsigned short snoop;
1351 pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);
1352 if ((!azx_snoop(chip) && !(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)) ||
1353 (azx_snoop(chip) && (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP))) {
1354 snoop &= ~INTEL_SCH_HDA_DEVC_NOSNOOP;
1355 if (!azx_snoop(chip))
1356 snoop |= INTEL_SCH_HDA_DEVC_NOSNOOP;
1357 pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, snoop);
1358 pci_read_config_word(chip->pci,
1359 INTEL_SCH_HDA_DEVC, &snoop);
1360 }
1361 snd_printdd(SFX "%s: SCH snoop: %s\n",
1362 pci_name(chip->pci), (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)
1363 ? "Disabled" : "Enabled");
1364 }
1365 }
1366
1367
1368 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev);
1369
1370 /*
1371 * interrupt handler
1372 */
1373 static irqreturn_t azx_interrupt(int irq, void *dev_id)
1374 {
1375 struct azx *chip = dev_id;
1376 struct azx_dev *azx_dev;
1377 u32 status;
1378 u8 sd_status;
1379 int i, ok;
1380
1381 #ifdef CONFIG_PM_RUNTIME
1382 if (chip->pci->dev.power.runtime_status != RPM_ACTIVE)
1383 return IRQ_NONE;
1384 #endif
1385
1386 spin_lock(&chip->reg_lock);
1387
1388 if (chip->disabled) {
1389 spin_unlock(&chip->reg_lock);
1390 return IRQ_NONE;
1391 }
1392
1393 status = azx_readl(chip, INTSTS);
1394 if (status == 0) {
1395 spin_unlock(&chip->reg_lock);
1396 return IRQ_NONE;
1397 }
1398
1399 for (i = 0; i < chip->num_streams; i++) {
1400 azx_dev = &chip->azx_dev[i];
1401 if (status & azx_dev->sd_int_sta_mask) {
1402 sd_status = azx_sd_readb(azx_dev, SD_STS);
1403 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK);
1404 if (!azx_dev->substream || !azx_dev->running ||
1405 !(sd_status & SD_INT_COMPLETE))
1406 continue;
1407 /* check whether this IRQ is really acceptable */
1408 ok = azx_position_ok(chip, azx_dev);
1409 if (ok == 1) {
1410 azx_dev->irq_pending = 0;
1411 spin_unlock(&chip->reg_lock);
1412 snd_pcm_period_elapsed(azx_dev->substream);
1413 spin_lock(&chip->reg_lock);
1414 } else if (ok == 0 && chip->bus && chip->bus->workq) {
1415 /* bogus IRQ, process it later */
1416 azx_dev->irq_pending = 1;
1417 queue_work(chip->bus->workq,
1418 &chip->irq_pending_work);
1419 }
1420 }
1421 }
1422
1423 /* clear rirb int */
1424 status = azx_readb(chip, RIRBSTS);
1425 if (status & RIRB_INT_MASK) {
1426 if (status & RIRB_INT_RESPONSE) {
1427 if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY)
1428 udelay(80);
1429 azx_update_rirb(chip);
1430 }
1431 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK);
1432 }
1433
1434 #if 0
1435 /* clear state status int */
1436 if (azx_readb(chip, STATESTS) & 0x04)
1437 azx_writeb(chip, STATESTS, 0x04);
1438 #endif
1439 spin_unlock(&chip->reg_lock);
1440
1441 return IRQ_HANDLED;
1442 }
1443
1444
1445 /*
1446 * set up a BDL entry
1447 */
1448 static int setup_bdle(struct azx *chip,
1449 struct snd_dma_buffer *dmab,
1450 struct azx_dev *azx_dev, u32 **bdlp,
1451 int ofs, int size, int with_ioc)
1452 {
1453 u32 *bdl = *bdlp;
1454
1455 while (size > 0) {
1456 dma_addr_t addr;
1457 int chunk;
1458
1459 if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES)
1460 return -EINVAL;
1461
1462 addr = snd_sgbuf_get_addr(dmab, ofs);
1463 /* program the address field of the BDL entry */
1464 bdl[0] = cpu_to_le32((u32)addr);
1465 bdl[1] = cpu_to_le32(upper_32_bits(addr));
1466 /* program the size field of the BDL entry */
1467 chunk = snd_sgbuf_get_chunk_size(dmab, ofs, size);
1468 /* one BDLE cannot cross 4K boundary on CTHDA chips */
1469 if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) {
1470 u32 remain = 0x1000 - (ofs & 0xfff);
1471 if (chunk > remain)
1472 chunk = remain;
1473 }
1474 bdl[2] = cpu_to_le32(chunk);
1475 /* program the IOC to enable interrupt
1476 * only when the whole fragment is processed
1477 */
1478 size -= chunk;
1479 bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01);
1480 bdl += 4;
1481 azx_dev->frags++;
1482 ofs += chunk;
1483 }
1484 *bdlp = bdl;
1485 return ofs;
1486 }
1487
1488 /*
1489 * set up BDL entries
1490 */
1491 static int azx_setup_periods(struct azx *chip,
1492 struct snd_pcm_substream *substream,
1493 struct azx_dev *azx_dev)
1494 {
1495 u32 *bdl;
1496 int i, ofs, periods, period_bytes;
1497 int pos_adj;
1498
1499 /* reset BDL address */
1500 azx_sd_writel(azx_dev, SD_BDLPL, 0);
1501 azx_sd_writel(azx_dev, SD_BDLPU, 0);
1502
1503 period_bytes = azx_dev->period_bytes;
1504 periods = azx_dev->bufsize / period_bytes;
1505
1506 /* program the initial BDL entries */
1507 bdl = (u32 *)azx_dev->bdl.area;
1508 ofs = 0;
1509 azx_dev->frags = 0;
1510 pos_adj = bdl_pos_adj[chip->dev_index];
1511 if (!azx_dev->no_period_wakeup && pos_adj > 0) {
1512 struct snd_pcm_runtime *runtime = substream->runtime;
1513 int pos_align = pos_adj;
1514 pos_adj = (pos_adj * runtime->rate + 47999) / 48000;
1515 if (!pos_adj)
1516 pos_adj = pos_align;
1517 else
1518 pos_adj = ((pos_adj + pos_align - 1) / pos_align) *
1519 pos_align;
1520 pos_adj = frames_to_bytes(runtime, pos_adj);
1521 if (pos_adj >= period_bytes) {
1522 snd_printk(KERN_WARNING SFX "%s: Too big adjustment %d\n",
1523 pci_name(chip->pci), bdl_pos_adj[chip->dev_index]);
1524 pos_adj = 0;
1525 } else {
1526 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1527 azx_dev,
1528 &bdl, ofs, pos_adj, true);
1529 if (ofs < 0)
1530 goto error;
1531 }
1532 } else
1533 pos_adj = 0;
1534 for (i = 0; i < periods; i++) {
1535 if (i == periods - 1 && pos_adj)
1536 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1537 azx_dev, &bdl, ofs,
1538 period_bytes - pos_adj, 0);
1539 else
1540 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream),
1541 azx_dev, &bdl, ofs,
1542 period_bytes,
1543 !azx_dev->no_period_wakeup);
1544 if (ofs < 0)
1545 goto error;
1546 }
1547 return 0;
1548
1549 error:
1550 snd_printk(KERN_ERR SFX "%s: Too many BDL entries: buffer=%d, period=%d\n",
1551 pci_name(chip->pci), azx_dev->bufsize, period_bytes);
1552 return -EINVAL;
1553 }
1554
1555 /* reset stream */
1556 static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev)
1557 {
1558 unsigned char val;
1559 int timeout;
1560
1561 azx_stream_clear(chip, azx_dev);
1562
1563 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) |
1564 SD_CTL_STREAM_RESET);
1565 udelay(3);
1566 timeout = 300;
1567 while (!((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1568 --timeout)
1569 ;
1570 val &= ~SD_CTL_STREAM_RESET;
1571 azx_sd_writeb(azx_dev, SD_CTL, val);
1572 udelay(3);
1573
1574 timeout = 300;
1575 /* waiting for hardware to report that the stream is out of reset */
1576 while (((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) &&
1577 --timeout)
1578 ;
1579
1580 /* reset first position - may not be synced with hw at this time */
1581 *azx_dev->posbuf = 0;
1582 }
1583
1584 /*
1585 * set up the SD for streaming
1586 */
1587 static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev)
1588 {
1589 unsigned int val;
1590 /* make sure the run bit is zero for SD */
1591 azx_stream_clear(chip, azx_dev);
1592 /* program the stream_tag */
1593 val = azx_sd_readl(azx_dev, SD_CTL);
1594 val = (val & ~SD_CTL_STREAM_TAG_MASK) |
1595 (azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT);
1596 if (!azx_snoop(chip))
1597 val |= SD_CTL_TRAFFIC_PRIO;
1598 azx_sd_writel(azx_dev, SD_CTL, val);
1599
1600 /* program the length of samples in cyclic buffer */
1601 azx_sd_writel(azx_dev, SD_CBL, azx_dev->bufsize);
1602
1603 /* program the stream format */
1604 /* this value needs to be the same as the one programmed */
1605 azx_sd_writew(azx_dev, SD_FORMAT, azx_dev->format_val);
1606
1607 /* program the stream LVI (last valid index) of the BDL */
1608 azx_sd_writew(azx_dev, SD_LVI, azx_dev->frags - 1);
1609
1610 /* program the BDL address */
1611 /* lower BDL address */
1612 azx_sd_writel(azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr);
1613 /* upper BDL address */
1614 azx_sd_writel(azx_dev, SD_BDLPU, upper_32_bits(azx_dev->bdl.addr));
1615
1616 /* enable the position buffer */
1617 if (chip->position_fix[0] != POS_FIX_LPIB ||
1618 chip->position_fix[1] != POS_FIX_LPIB) {
1619 if (!(azx_readl(chip, DPLBASE) & ICH6_DPLBASE_ENABLE))
1620 azx_writel(chip, DPLBASE,
1621 (u32)chip->posbuf.addr | ICH6_DPLBASE_ENABLE);
1622 }
1623
1624 /* set the interrupt enable bits in the descriptor control register */
1625 azx_sd_writel(azx_dev, SD_CTL,
1626 azx_sd_readl(azx_dev, SD_CTL) | SD_INT_MASK);
1627
1628 return 0;
1629 }
1630
1631 /*
1632 * Probe the given codec address
1633 */
1634 static int probe_codec(struct azx *chip, int addr)
1635 {
1636 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) |
1637 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID;
1638 unsigned int res;
1639
1640 mutex_lock(&chip->bus->cmd_mutex);
1641 chip->probing = 1;
1642 azx_send_cmd(chip->bus, cmd);
1643 res = azx_get_response(chip->bus, addr);
1644 chip->probing = 0;
1645 mutex_unlock(&chip->bus->cmd_mutex);
1646 if (res == -1)
1647 return -EIO;
1648 snd_printdd(SFX "%s: codec #%d probed OK\n", pci_name(chip->pci), addr);
1649 return 0;
1650 }
1651
1652 static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
1653 struct hda_pcm *cpcm);
1654 static void azx_stop_chip(struct azx *chip);
1655
1656 static void azx_bus_reset(struct hda_bus *bus)
1657 {
1658 struct azx *chip = bus->private_data;
1659
1660 bus->in_reset = 1;
1661 azx_stop_chip(chip);
1662 azx_init_chip(chip, 1);
1663 #ifdef CONFIG_PM
1664 if (chip->initialized) {
1665 struct azx_pcm *p;
1666 list_for_each_entry(p, &chip->pcm_list, list)
1667 snd_pcm_suspend_all(p->pcm);
1668 snd_hda_suspend(chip->bus);
1669 snd_hda_resume(chip->bus);
1670 }
1671 #endif
1672 bus->in_reset = 0;
1673 }
1674
1675 static int get_jackpoll_interval(struct azx *chip)
1676 {
1677 int i = jackpoll_ms[chip->dev_index];
1678 unsigned int j;
1679 if (i == 0)
1680 return 0;
1681 if (i < 50 || i > 60000)
1682 j = 0;
1683 else
1684 j = msecs_to_jiffies(i);
1685 if (j == 0)
1686 snd_printk(KERN_WARNING SFX
1687 "jackpoll_ms value out of range: %d\n", i);
1688 return j;
1689 }
1690
1691 /*
1692 * Codec initialization
1693 */
1694
1695 /* number of codec slots for each chipset: 0 = default slots (i.e. 4) */
1696 static unsigned int azx_max_codecs[AZX_NUM_DRIVERS] = {
1697 [AZX_DRIVER_NVIDIA] = 8,
1698 [AZX_DRIVER_TERA] = 1,
1699 };
1700
1701 static int azx_codec_create(struct azx *chip, const char *model)
1702 {
1703 struct hda_bus_template bus_temp;
1704 int c, codecs, err;
1705 int max_slots;
1706
1707 memset(&bus_temp, 0, sizeof(bus_temp));
1708 bus_temp.private_data = chip;
1709 bus_temp.modelname = model;
1710 bus_temp.pci = chip->pci;
1711 bus_temp.ops.command = azx_send_cmd;
1712 bus_temp.ops.get_response = azx_get_response;
1713 bus_temp.ops.attach_pcm = azx_attach_pcm_stream;
1714 bus_temp.ops.bus_reset = azx_bus_reset;
1715 #ifdef CONFIG_PM
1716 bus_temp.power_save = &power_save;
1717 bus_temp.ops.pm_notify = azx_power_notify;
1718 #endif
1719 #ifdef CONFIG_SND_HDA_DSP_LOADER
1720 bus_temp.ops.load_dsp_prepare = azx_load_dsp_prepare;
1721 bus_temp.ops.load_dsp_trigger = azx_load_dsp_trigger;
1722 bus_temp.ops.load_dsp_cleanup = azx_load_dsp_cleanup;
1723 #endif
1724
1725 err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus);
1726 if (err < 0)
1727 return err;
1728
1729 if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) {
1730 snd_printd(SFX "%s: Enable delay in RIRB handling\n", pci_name(chip->pci));
1731 chip->bus->needs_damn_long_delay = 1;
1732 }
1733
1734 codecs = 0;
1735 max_slots = azx_max_codecs[chip->driver_type];
1736 if (!max_slots)
1737 max_slots = AZX_DEFAULT_CODECS;
1738
1739 /* First try to probe all given codec slots */
1740 for (c = 0; c < max_slots; c++) {
1741 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1742 if (probe_codec(chip, c) < 0) {
1743 /* Some BIOSen give you wrong codec addresses
1744 * that don't exist
1745 */
1746 snd_printk(KERN_WARNING SFX
1747 "%s: Codec #%d probe error; "
1748 "disabling it...\n", pci_name(chip->pci), c);
1749 chip->codec_mask &= ~(1 << c);
1750 /* More badly, accessing to a non-existing
1751 * codec often screws up the controller chip,
1752 * and disturbs the further communications.
1753 * Thus if an error occurs during probing,
1754 * better to reset the controller chip to
1755 * get back to the sanity state.
1756 */
1757 azx_stop_chip(chip);
1758 azx_init_chip(chip, 1);
1759 }
1760 }
1761 }
1762
1763 /* AMD chipsets often cause the communication stalls upon certain
1764 * sequence like the pin-detection. It seems that forcing the synced
1765 * access works around the stall. Grrr...
1766 */
1767 if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) {
1768 snd_printd(SFX "%s: Enable sync_write for stable communication\n",
1769 pci_name(chip->pci));
1770 chip->bus->sync_write = 1;
1771 chip->bus->allow_bus_reset = 1;
1772 }
1773
1774 /* Then create codec instances */
1775 for (c = 0; c < max_slots; c++) {
1776 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
1777 struct hda_codec *codec;
1778 err = snd_hda_codec_new(chip->bus, c, &codec);
1779 if (err < 0)
1780 continue;
1781 codec->jackpoll_interval = get_jackpoll_interval(chip);
1782 codec->beep_mode = chip->beep_mode;
1783 codecs++;
1784 }
1785 }
1786 if (!codecs) {
1787 snd_printk(KERN_ERR SFX "%s: no codecs initialized\n", pci_name(chip->pci));
1788 return -ENXIO;
1789 }
1790 return 0;
1791 }
1792
1793 /* configure each codec instance */
1794 static int azx_codec_configure(struct azx *chip)
1795 {
1796 struct hda_codec *codec;
1797 list_for_each_entry(codec, &chip->bus->codec_list, list) {
1798 snd_hda_codec_configure(codec);
1799 }
1800 return 0;
1801 }
1802
1803
1804 /*
1805 * PCM support
1806 */
1807
1808 /* assign a stream for the PCM */
1809 static inline struct azx_dev *
1810 azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream)
1811 {
1812 int dev, i, nums;
1813 struct azx_dev *res = NULL;
1814 /* make a non-zero unique key for the substream */
1815 int key = (substream->pcm->device << 16) | (substream->number << 2) |
1816 (substream->stream + 1);
1817
1818 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
1819 dev = chip->playback_index_offset;
1820 nums = chip->playback_streams;
1821 } else {
1822 dev = chip->capture_index_offset;
1823 nums = chip->capture_streams;
1824 }
1825 for (i = 0; i < nums; i++, dev++) {
1826 struct azx_dev *azx_dev = &chip->azx_dev[dev];
1827 dsp_lock(azx_dev);
1828 if (!azx_dev->opened && !dsp_is_locked(azx_dev)) {
1829 res = azx_dev;
1830 if (res->assigned_key == key) {
1831 res->opened = 1;
1832 res->assigned_key = key;
1833 dsp_unlock(azx_dev);
1834 return azx_dev;
1835 }
1836 }
1837 dsp_unlock(azx_dev);
1838 }
1839 if (res) {
1840 dsp_lock(res);
1841 res->opened = 1;
1842 res->assigned_key = key;
1843 dsp_unlock(res);
1844 }
1845 return res;
1846 }
1847
1848 /* release the assigned stream */
1849 static inline void azx_release_device(struct azx_dev *azx_dev)
1850 {
1851 azx_dev->opened = 0;
1852 }
1853
1854 static cycle_t azx_cc_read(const struct cyclecounter *cc)
1855 {
1856 struct azx_dev *azx_dev = container_of(cc, struct azx_dev, azx_cc);
1857 struct snd_pcm_substream *substream = azx_dev->substream;
1858 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1859 struct azx *chip = apcm->chip;
1860
1861 return azx_readl(chip, WALLCLK);
1862 }
1863
1864 static void azx_timecounter_init(struct snd_pcm_substream *substream,
1865 bool force, cycle_t last)
1866 {
1867 struct azx_dev *azx_dev = get_azx_dev(substream);
1868 struct timecounter *tc = &azx_dev->azx_tc;
1869 struct cyclecounter *cc = &azx_dev->azx_cc;
1870 u64 nsec;
1871
1872 cc->read = azx_cc_read;
1873 cc->mask = CLOCKSOURCE_MASK(32);
1874
1875 /*
1876 * Converting from 24 MHz to ns means applying a 125/3 factor.
1877 * To avoid any saturation issues in intermediate operations,
1878 * the 125 factor is applied first. The division is applied
1879 * last after reading the timecounter value.
1880 * Applying the 1/3 factor as part of the multiplication
1881 * requires at least 20 bits for a decent precision, however
1882 * overflows occur after about 4 hours or less, not a option.
1883 */
1884
1885 cc->mult = 125; /* saturation after 195 years */
1886 cc->shift = 0;
1887
1888 nsec = 0; /* audio time is elapsed time since trigger */
1889 timecounter_init(tc, cc, nsec);
1890 if (force)
1891 /*
1892 * force timecounter to use predefined value,
1893 * used for synchronized starts
1894 */
1895 tc->cycle_last = last;
1896 }
1897
1898 static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream,
1899 u64 nsec)
1900 {
1901 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1902 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1903 u64 codec_frames, codec_nsecs;
1904
1905 if (!hinfo->ops.get_delay)
1906 return nsec;
1907
1908 codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream);
1909 codec_nsecs = div_u64(codec_frames * 1000000000LL,
1910 substream->runtime->rate);
1911
1912 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
1913 return nsec + codec_nsecs;
1914
1915 return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0;
1916 }
1917
1918 static int azx_get_wallclock_tstamp(struct snd_pcm_substream *substream,
1919 struct timespec *ts)
1920 {
1921 struct azx_dev *azx_dev = get_azx_dev(substream);
1922 u64 nsec;
1923
1924 nsec = timecounter_read(&azx_dev->azx_tc);
1925 nsec = div_u64(nsec, 3); /* can be optimized */
1926 nsec = azx_adjust_codec_delay(substream, nsec);
1927
1928 *ts = ns_to_timespec(nsec);
1929
1930 return 0;
1931 }
1932
1933 static struct snd_pcm_hardware azx_pcm_hw = {
1934 .info = (SNDRV_PCM_INFO_MMAP |
1935 SNDRV_PCM_INFO_INTERLEAVED |
1936 SNDRV_PCM_INFO_BLOCK_TRANSFER |
1937 SNDRV_PCM_INFO_MMAP_VALID |
1938 /* No full-resume yet implemented */
1939 /* SNDRV_PCM_INFO_RESUME |*/
1940 SNDRV_PCM_INFO_PAUSE |
1941 SNDRV_PCM_INFO_SYNC_START |
1942 SNDRV_PCM_INFO_HAS_WALL_CLOCK |
1943 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP),
1944 .formats = SNDRV_PCM_FMTBIT_S16_LE,
1945 .rates = SNDRV_PCM_RATE_48000,
1946 .rate_min = 48000,
1947 .rate_max = 48000,
1948 .channels_min = 2,
1949 .channels_max = 2,
1950 .buffer_bytes_max = AZX_MAX_BUF_SIZE,
1951 .period_bytes_min = 128,
1952 .period_bytes_max = AZX_MAX_BUF_SIZE / 2,
1953 .periods_min = 2,
1954 .periods_max = AZX_MAX_FRAG,
1955 .fifo_size = 0,
1956 };
1957
1958 static int azx_pcm_open(struct snd_pcm_substream *substream)
1959 {
1960 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
1961 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
1962 struct azx *chip = apcm->chip;
1963 struct azx_dev *azx_dev;
1964 struct snd_pcm_runtime *runtime = substream->runtime;
1965 unsigned long flags;
1966 int err;
1967 int buff_step;
1968
1969 mutex_lock(&chip->open_mutex);
1970 azx_dev = azx_assign_device(chip, substream);
1971 if (azx_dev == NULL) {
1972 mutex_unlock(&chip->open_mutex);
1973 return -EBUSY;
1974 }
1975 runtime->hw = azx_pcm_hw;
1976 runtime->hw.channels_min = hinfo->channels_min;
1977 runtime->hw.channels_max = hinfo->channels_max;
1978 runtime->hw.formats = hinfo->formats;
1979 runtime->hw.rates = hinfo->rates;
1980 snd_pcm_limit_hw_rates(runtime);
1981 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS);
1982
1983 /* avoid wrap-around with wall-clock */
1984 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME,
1985 20,
1986 178000000);
1987
1988 if (chip->align_buffer_size)
1989 /* constrain buffer sizes to be multiple of 128
1990 bytes. This is more efficient in terms of memory
1991 access but isn't required by the HDA spec and
1992 prevents users from specifying exact period/buffer
1993 sizes. For example for 44.1kHz, a period size set
1994 to 20ms will be rounded to 19.59ms. */
1995 buff_step = 128;
1996 else
1997 /* Don't enforce steps on buffer sizes, still need to
1998 be multiple of 4 bytes (HDA spec). Tested on Intel
1999 HDA controllers, may not work on all devices where
2000 option needs to be disabled */
2001 buff_step = 4;
2002
2003 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES,
2004 buff_step);
2005 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES,
2006 buff_step);
2007 snd_hda_power_up_d3wait(apcm->codec);
2008 err = hinfo->ops.open(hinfo, apcm->codec, substream);
2009 if (err < 0) {
2010 azx_release_device(azx_dev);
2011 snd_hda_power_down(apcm->codec);
2012 mutex_unlock(&chip->open_mutex);
2013 return err;
2014 }
2015 snd_pcm_limit_hw_rates(runtime);
2016 /* sanity check */
2017 if (snd_BUG_ON(!runtime->hw.channels_min) ||
2018 snd_BUG_ON(!runtime->hw.channels_max) ||
2019 snd_BUG_ON(!runtime->hw.formats) ||
2020 snd_BUG_ON(!runtime->hw.rates)) {
2021 azx_release_device(azx_dev);
2022 hinfo->ops.close(hinfo, apcm->codec, substream);
2023 snd_hda_power_down(apcm->codec);
2024 mutex_unlock(&chip->open_mutex);
2025 return -EINVAL;
2026 }
2027
2028 /* disable WALLCLOCK timestamps for capture streams
2029 until we figure out how to handle digital inputs */
2030 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE)
2031 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK;
2032
2033 spin_lock_irqsave(&chip->reg_lock, flags);
2034 azx_dev->substream = substream;
2035 azx_dev->running = 0;
2036 spin_unlock_irqrestore(&chip->reg_lock, flags);
2037
2038 runtime->private_data = azx_dev;
2039 snd_pcm_set_sync(substream);
2040 mutex_unlock(&chip->open_mutex);
2041 return 0;
2042 }
2043
2044 static int azx_pcm_close(struct snd_pcm_substream *substream)
2045 {
2046 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2047 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2048 struct azx *chip = apcm->chip;
2049 struct azx_dev *azx_dev = get_azx_dev(substream);
2050 unsigned long flags;
2051
2052 mutex_lock(&chip->open_mutex);
2053 spin_lock_irqsave(&chip->reg_lock, flags);
2054 azx_dev->substream = NULL;
2055 azx_dev->running = 0;
2056 spin_unlock_irqrestore(&chip->reg_lock, flags);
2057 azx_release_device(azx_dev);
2058 hinfo->ops.close(hinfo, apcm->codec, substream);
2059 snd_hda_power_down(apcm->codec);
2060 mutex_unlock(&chip->open_mutex);
2061 return 0;
2062 }
2063
2064 static int azx_pcm_hw_params(struct snd_pcm_substream *substream,
2065 struct snd_pcm_hw_params *hw_params)
2066 {
2067 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2068 struct azx *chip = apcm->chip;
2069 struct azx_dev *azx_dev = get_azx_dev(substream);
2070 int ret;
2071
2072 dsp_lock(azx_dev);
2073 if (dsp_is_locked(azx_dev)) {
2074 ret = -EBUSY;
2075 goto unlock;
2076 }
2077
2078 mark_runtime_wc(chip, azx_dev, substream, false);
2079 azx_dev->bufsize = 0;
2080 azx_dev->period_bytes = 0;
2081 azx_dev->format_val = 0;
2082 ret = snd_pcm_lib_malloc_pages(substream,
2083 params_buffer_bytes(hw_params));
2084 if (ret < 0)
2085 goto unlock;
2086 mark_runtime_wc(chip, azx_dev, substream, true);
2087 unlock:
2088 dsp_unlock(azx_dev);
2089 return ret;
2090 }
2091
2092 static int azx_pcm_hw_free(struct snd_pcm_substream *substream)
2093 {
2094 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2095 struct azx_dev *azx_dev = get_azx_dev(substream);
2096 struct azx *chip = apcm->chip;
2097 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2098
2099 /* reset BDL address */
2100 dsp_lock(azx_dev);
2101 if (!dsp_is_locked(azx_dev)) {
2102 azx_sd_writel(azx_dev, SD_BDLPL, 0);
2103 azx_sd_writel(azx_dev, SD_BDLPU, 0);
2104 azx_sd_writel(azx_dev, SD_CTL, 0);
2105 azx_dev->bufsize = 0;
2106 azx_dev->period_bytes = 0;
2107 azx_dev->format_val = 0;
2108 }
2109
2110 snd_hda_codec_cleanup(apcm->codec, hinfo, substream);
2111
2112 mark_runtime_wc(chip, azx_dev, substream, false);
2113 azx_dev->prepared = 0;
2114 dsp_unlock(azx_dev);
2115 return snd_pcm_lib_free_pages(substream);
2116 }
2117
2118 static int azx_pcm_prepare(struct snd_pcm_substream *substream)
2119 {
2120 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2121 struct azx *chip = apcm->chip;
2122 struct azx_dev *azx_dev = get_azx_dev(substream);
2123 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream];
2124 struct snd_pcm_runtime *runtime = substream->runtime;
2125 unsigned int bufsize, period_bytes, format_val, stream_tag;
2126 int err;
2127 struct hda_spdif_out *spdif =
2128 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid);
2129 unsigned short ctls = spdif ? spdif->ctls : 0;
2130
2131 dsp_lock(azx_dev);
2132 if (dsp_is_locked(azx_dev)) {
2133 err = -EBUSY;
2134 goto unlock;
2135 }
2136
2137 azx_stream_reset(chip, azx_dev);
2138 format_val = snd_hda_calc_stream_format(runtime->rate,
2139 runtime->channels,
2140 runtime->format,
2141 hinfo->maxbps,
2142 ctls);
2143 if (!format_val) {
2144 snd_printk(KERN_ERR SFX
2145 "%s: invalid format_val, rate=%d, ch=%d, format=%d\n",
2146 pci_name(chip->pci), runtime->rate, runtime->channels, runtime->format);
2147 err = -EINVAL;
2148 goto unlock;
2149 }
2150
2151 bufsize = snd_pcm_lib_buffer_bytes(substream);
2152 period_bytes = snd_pcm_lib_period_bytes(substream);
2153
2154 snd_printdd(SFX "%s: azx_pcm_prepare: bufsize=0x%x, format=0x%x\n",
2155 pci_name(chip->pci), bufsize, format_val);
2156
2157 if (bufsize != azx_dev->bufsize ||
2158 period_bytes != azx_dev->period_bytes ||
2159 format_val != azx_dev->format_val ||
2160 runtime->no_period_wakeup != azx_dev->no_period_wakeup) {
2161 azx_dev->bufsize = bufsize;
2162 azx_dev->period_bytes = period_bytes;
2163 azx_dev->format_val = format_val;
2164 azx_dev->no_period_wakeup = runtime->no_period_wakeup;
2165 err = azx_setup_periods(chip, substream, azx_dev);
2166 if (err < 0)
2167 goto unlock;
2168 }
2169
2170 /* wallclk has 24Mhz clock source */
2171 azx_dev->period_wallclk = (((runtime->period_size * 24000) /
2172 runtime->rate) * 1000);
2173 azx_setup_controller(chip, azx_dev);
2174 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
2175 azx_dev->fifo_size = azx_sd_readw(azx_dev, SD_FIFOSIZE) + 1;
2176 else
2177 azx_dev->fifo_size = 0;
2178
2179 stream_tag = azx_dev->stream_tag;
2180 /* CA-IBG chips need the playback stream starting from 1 */
2181 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) &&
2182 stream_tag > chip->capture_streams)
2183 stream_tag -= chip->capture_streams;
2184 err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag,
2185 azx_dev->format_val, substream);
2186
2187 unlock:
2188 if (!err)
2189 azx_dev->prepared = 1;
2190 dsp_unlock(azx_dev);
2191 return err;
2192 }
2193
2194 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd)
2195 {
2196 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2197 struct azx *chip = apcm->chip;
2198 struct azx_dev *azx_dev;
2199 struct snd_pcm_substream *s;
2200 int rstart = 0, start, nsync = 0, sbits = 0;
2201 int nwait, timeout;
2202
2203 azx_dev = get_azx_dev(substream);
2204 trace_azx_pcm_trigger(chip, azx_dev, cmd);
2205
2206 if (dsp_is_locked(azx_dev) || !azx_dev->prepared)
2207 return -EPIPE;
2208
2209 switch (cmd) {
2210 case SNDRV_PCM_TRIGGER_START:
2211 rstart = 1;
2212 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
2213 case SNDRV_PCM_TRIGGER_RESUME:
2214 start = 1;
2215 break;
2216 case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
2217 case SNDRV_PCM_TRIGGER_SUSPEND:
2218 case SNDRV_PCM_TRIGGER_STOP:
2219 start = 0;
2220 break;
2221 default:
2222 return -EINVAL;
2223 }
2224
2225 snd_pcm_group_for_each_entry(s, substream) {
2226 if (s->pcm->card != substream->pcm->card)
2227 continue;
2228 azx_dev = get_azx_dev(s);
2229 sbits |= 1 << azx_dev->index;
2230 nsync++;
2231 snd_pcm_trigger_done(s, substream);
2232 }
2233
2234 spin_lock(&chip->reg_lock);
2235
2236 /* first, set SYNC bits of corresponding streams */
2237 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
2238 azx_writel(chip, OLD_SSYNC,
2239 azx_readl(chip, OLD_SSYNC) | sbits);
2240 else
2241 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits);
2242
2243 snd_pcm_group_for_each_entry(s, substream) {
2244 if (s->pcm->card != substream->pcm->card)
2245 continue;
2246 azx_dev = get_azx_dev(s);
2247 if (start) {
2248 azx_dev->start_wallclk = azx_readl(chip, WALLCLK);
2249 if (!rstart)
2250 azx_dev->start_wallclk -=
2251 azx_dev->period_wallclk;
2252 azx_stream_start(chip, azx_dev);
2253 } else {
2254 azx_stream_stop(chip, azx_dev);
2255 }
2256 azx_dev->running = start;
2257 }
2258 spin_unlock(&chip->reg_lock);
2259 if (start) {
2260 /* wait until all FIFOs get ready */
2261 for (timeout = 5000; timeout; timeout--) {
2262 nwait = 0;
2263 snd_pcm_group_for_each_entry(s, substream) {
2264 if (s->pcm->card != substream->pcm->card)
2265 continue;
2266 azx_dev = get_azx_dev(s);
2267 if (!(azx_sd_readb(azx_dev, SD_STS) &
2268 SD_STS_FIFO_READY))
2269 nwait++;
2270 }
2271 if (!nwait)
2272 break;
2273 cpu_relax();
2274 }
2275 } else {
2276 /* wait until all RUN bits are cleared */
2277 for (timeout = 5000; timeout; timeout--) {
2278 nwait = 0;
2279 snd_pcm_group_for_each_entry(s, substream) {
2280 if (s->pcm->card != substream->pcm->card)
2281 continue;
2282 azx_dev = get_azx_dev(s);
2283 if (azx_sd_readb(azx_dev, SD_CTL) &
2284 SD_CTL_DMA_START)
2285 nwait++;
2286 }
2287 if (!nwait)
2288 break;
2289 cpu_relax();
2290 }
2291 }
2292 spin_lock(&chip->reg_lock);
2293 /* reset SYNC bits */
2294 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC)
2295 azx_writel(chip, OLD_SSYNC,
2296 azx_readl(chip, OLD_SSYNC) & ~sbits);
2297 else
2298 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits);
2299 if (start) {
2300 azx_timecounter_init(substream, 0, 0);
2301 if (nsync > 1) {
2302 cycle_t cycle_last;
2303
2304 /* same start cycle for master and group */
2305 azx_dev = get_azx_dev(substream);
2306 cycle_last = azx_dev->azx_tc.cycle_last;
2307
2308 snd_pcm_group_for_each_entry(s, substream) {
2309 if (s->pcm->card != substream->pcm->card)
2310 continue;
2311 azx_timecounter_init(s, 1, cycle_last);
2312 }
2313 }
2314 }
2315 spin_unlock(&chip->reg_lock);
2316 return 0;
2317 }
2318
2319 /* get the current DMA position with correction on VIA chips */
2320 static unsigned int azx_via_get_position(struct azx *chip,
2321 struct azx_dev *azx_dev)
2322 {
2323 unsigned int link_pos, mini_pos, bound_pos;
2324 unsigned int mod_link_pos, mod_dma_pos, mod_mini_pos;
2325 unsigned int fifo_size;
2326
2327 link_pos = azx_sd_readl(azx_dev, SD_LPIB);
2328 if (azx_dev->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
2329 /* Playback, no problem using link position */
2330 return link_pos;
2331 }
2332
2333 /* Capture */
2334 /* For new chipset,
2335 * use mod to get the DMA position just like old chipset
2336 */
2337 mod_dma_pos = le32_to_cpu(*azx_dev->posbuf);
2338 mod_dma_pos %= azx_dev->period_bytes;
2339
2340 /* azx_dev->fifo_size can't get FIFO size of in stream.
2341 * Get from base address + offset.
2342 */
2343 fifo_size = readw(chip->remap_addr + VIA_IN_STREAM0_FIFO_SIZE_OFFSET);
2344
2345 if (azx_dev->insufficient) {
2346 /* Link position never gather than FIFO size */
2347 if (link_pos <= fifo_size)
2348 return 0;
2349
2350 azx_dev->insufficient = 0;
2351 }
2352
2353 if (link_pos <= fifo_size)
2354 mini_pos = azx_dev->bufsize + link_pos - fifo_size;
2355 else
2356 mini_pos = link_pos - fifo_size;
2357
2358 /* Find nearest previous boudary */
2359 mod_mini_pos = mini_pos % azx_dev->period_bytes;
2360 mod_link_pos = link_pos % azx_dev->period_bytes;
2361 if (mod_link_pos >= fifo_size)
2362 bound_pos = link_pos - mod_link_pos;
2363 else if (mod_dma_pos >= mod_mini_pos)
2364 bound_pos = mini_pos - mod_mini_pos;
2365 else {
2366 bound_pos = mini_pos - mod_mini_pos + azx_dev->period_bytes;
2367 if (bound_pos >= azx_dev->bufsize)
2368 bound_pos = 0;
2369 }
2370
2371 /* Calculate real DMA position we want */
2372 return bound_pos + mod_dma_pos;
2373 }
2374
2375 static unsigned int azx_get_position(struct azx *chip,
2376 struct azx_dev *azx_dev,
2377 bool with_check)
2378 {
2379 struct snd_pcm_substream *substream = azx_dev->substream;
2380 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2381 unsigned int pos;
2382 int stream = substream->stream;
2383 struct hda_pcm_stream *hinfo = apcm->hinfo[stream];
2384 int delay = 0;
2385
2386 switch (chip->position_fix[stream]) {
2387 case POS_FIX_LPIB:
2388 /* read LPIB */
2389 pos = azx_sd_readl(azx_dev, SD_LPIB);
2390 break;
2391 case POS_FIX_VIACOMBO:
2392 pos = azx_via_get_position(chip, azx_dev);
2393 break;
2394 default:
2395 /* use the position buffer */
2396 pos = le32_to_cpu(*azx_dev->posbuf);
2397 if (with_check && chip->position_fix[stream] == POS_FIX_AUTO) {
2398 if (!pos || pos == (u32)-1) {
2399 printk(KERN_WARNING
2400 "hda-intel: Invalid position buffer, "
2401 "using LPIB read method instead.\n");
2402 chip->position_fix[stream] = POS_FIX_LPIB;
2403 pos = azx_sd_readl(azx_dev, SD_LPIB);
2404 } else
2405 chip->position_fix[stream] = POS_FIX_POSBUF;
2406 }
2407 break;
2408 }
2409
2410 if (pos >= azx_dev->bufsize)
2411 pos = 0;
2412
2413 /* calculate runtime delay from LPIB */
2414 if (substream->runtime &&
2415 chip->position_fix[stream] == POS_FIX_POSBUF &&
2416 (chip->driver_caps & AZX_DCAPS_COUNT_LPIB_DELAY)) {
2417 unsigned int lpib_pos = azx_sd_readl(azx_dev, SD_LPIB);
2418 if (stream == SNDRV_PCM_STREAM_PLAYBACK)
2419 delay = pos - lpib_pos;
2420 else
2421 delay = lpib_pos - pos;
2422 if (delay < 0)
2423 delay += azx_dev->bufsize;
2424 if (delay >= azx_dev->period_bytes) {
2425 snd_printk(KERN_WARNING SFX
2426 "%s: Unstable LPIB (%d >= %d); "
2427 "disabling LPIB delay counting\n",
2428 pci_name(chip->pci), delay, azx_dev->period_bytes);
2429 delay = 0;
2430 chip->driver_caps &= ~AZX_DCAPS_COUNT_LPIB_DELAY;
2431 }
2432 delay = bytes_to_frames(substream->runtime, delay);
2433 }
2434
2435 if (substream->runtime) {
2436 if (hinfo->ops.get_delay)
2437 delay += hinfo->ops.get_delay(hinfo, apcm->codec,
2438 substream);
2439 substream->runtime->delay = delay;
2440 }
2441
2442 trace_azx_get_position(chip, azx_dev, pos, delay);
2443 return pos;
2444 }
2445
2446 static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream)
2447 {
2448 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2449 struct azx *chip = apcm->chip;
2450 struct azx_dev *azx_dev = get_azx_dev(substream);
2451 return bytes_to_frames(substream->runtime,
2452 azx_get_position(chip, azx_dev, false));
2453 }
2454
2455 /*
2456 * Check whether the current DMA position is acceptable for updating
2457 * periods. Returns non-zero if it's OK.
2458 *
2459 * Many HD-audio controllers appear pretty inaccurate about
2460 * the update-IRQ timing. The IRQ is issued before actually the
2461 * data is processed. So, we need to process it afterwords in a
2462 * workqueue.
2463 */
2464 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)
2465 {
2466 u32 wallclk;
2467 unsigned int pos;
2468
2469 wallclk = azx_readl(chip, WALLCLK) - azx_dev->start_wallclk;
2470 if (wallclk < (azx_dev->period_wallclk * 2) / 3)
2471 return -1; /* bogus (too early) interrupt */
2472
2473 pos = azx_get_position(chip, azx_dev, true);
2474
2475 if (WARN_ONCE(!azx_dev->period_bytes,
2476 "hda-intel: zero azx_dev->period_bytes"))
2477 return -1; /* this shouldn't happen! */
2478 if (wallclk < (azx_dev->period_wallclk * 5) / 4 &&
2479 pos % azx_dev->period_bytes > azx_dev->period_bytes / 2)
2480 /* NG - it's below the first next period boundary */
2481 return bdl_pos_adj[chip->dev_index] ? 0 : -1;
2482 azx_dev->start_wallclk += wallclk;
2483 return 1; /* OK, it's fine */
2484 }
2485
2486 /*
2487 * The work for pending PCM period updates.
2488 */
2489 static void azx_irq_pending_work(struct work_struct *work)
2490 {
2491 struct azx *chip = container_of(work, struct azx, irq_pending_work);
2492 int i, pending, ok;
2493
2494 if (!chip->irq_pending_warned) {
2495 printk(KERN_WARNING
2496 "hda-intel: IRQ timing workaround is activated "
2497 "for card #%d. Suggest a bigger bdl_pos_adj.\n",
2498 chip->card->number);
2499 chip->irq_pending_warned = 1;
2500 }
2501
2502 for (;;) {
2503 pending = 0;
2504 spin_lock_irq(&chip->reg_lock);
2505 for (i = 0; i < chip->num_streams; i++) {
2506 struct azx_dev *azx_dev = &chip->azx_dev[i];
2507 if (!azx_dev->irq_pending ||
2508 !azx_dev->substream ||
2509 !azx_dev->running)
2510 continue;
2511 ok = azx_position_ok(chip, azx_dev);
2512 if (ok > 0) {
2513 azx_dev->irq_pending = 0;
2514 spin_unlock(&chip->reg_lock);
2515 snd_pcm_period_elapsed(azx_dev->substream);
2516 spin_lock(&chip->reg_lock);
2517 } else if (ok < 0) {
2518 pending = 0; /* too early */
2519 } else
2520 pending++;
2521 }
2522 spin_unlock_irq(&chip->reg_lock);
2523 if (!pending)
2524 return;
2525 msleep(1);
2526 }
2527 }
2528
2529 /* clear irq_pending flags and assure no on-going workq */
2530 static void azx_clear_irq_pending(struct azx *chip)
2531 {
2532 int i;
2533
2534 spin_lock_irq(&chip->reg_lock);
2535 for (i = 0; i < chip->num_streams; i++)
2536 chip->azx_dev[i].irq_pending = 0;
2537 spin_unlock_irq(&chip->reg_lock);
2538 }
2539
2540 #ifdef CONFIG_X86
2541 static int azx_pcm_mmap(struct snd_pcm_substream *substream,
2542 struct vm_area_struct *area)
2543 {
2544 struct azx_pcm *apcm = snd_pcm_substream_chip(substream);
2545 struct azx *chip = apcm->chip;
2546 if (!azx_snoop(chip))
2547 area->vm_page_prot = pgprot_writecombine(area->vm_page_prot);
2548 return snd_pcm_lib_default_mmap(substream, area);
2549 }
2550 #else
2551 #define azx_pcm_mmap NULL
2552 #endif
2553
2554 static struct snd_pcm_ops azx_pcm_ops = {
2555 .open = azx_pcm_open,
2556 .close = azx_pcm_close,
2557 .ioctl = snd_pcm_lib_ioctl,
2558 .hw_params = azx_pcm_hw_params,
2559 .hw_free = azx_pcm_hw_free,
2560 .prepare = azx_pcm_prepare,
2561 .trigger = azx_pcm_trigger,
2562 .pointer = azx_pcm_pointer,
2563 .wall_clock = azx_get_wallclock_tstamp,
2564 .mmap = azx_pcm_mmap,
2565 .page = snd_pcm_sgbuf_ops_page,
2566 };
2567
2568 static void azx_pcm_free(struct snd_pcm *pcm)
2569 {
2570 struct azx_pcm *apcm = pcm->private_data;
2571 if (apcm) {
2572 list_del(&apcm->list);
2573 kfree(apcm);
2574 }
2575 }
2576
2577 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024)
2578
2579 static int
2580 azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec,
2581 struct hda_pcm *cpcm)
2582 {
2583 struct azx *chip = bus->private_data;
2584 struct snd_pcm *pcm;
2585 struct azx_pcm *apcm;
2586 int pcm_dev = cpcm->device;
2587 unsigned int size;
2588 int s, err;
2589
2590 list_for_each_entry(apcm, &chip->pcm_list, list) {
2591 if (apcm->pcm->device == pcm_dev) {
2592 snd_printk(KERN_ERR SFX "%s: PCM %d already exists\n",
2593 pci_name(chip->pci), pcm_dev);
2594 return -EBUSY;
2595 }
2596 }
2597 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev,
2598 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams,
2599 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams,
2600 &pcm);
2601 if (err < 0)
2602 return err;
2603 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name));
2604 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL);
2605 if (apcm == NULL)
2606 return -ENOMEM;
2607 apcm->chip = chip;
2608 apcm->pcm = pcm;
2609 apcm->codec = codec;
2610 pcm->private_data = apcm;
2611 pcm->private_free = azx_pcm_free;
2612 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM)
2613 pcm->dev_class = SNDRV_PCM_CLASS_MODEM;
2614 list_add_tail(&apcm->list, &chip->pcm_list);
2615 cpcm->pcm = pcm;
2616 for (s = 0; s < 2; s++) {
2617 apcm->hinfo[s] = &cpcm->stream[s];
2618 if (cpcm->stream[s].substreams)
2619 snd_pcm_set_ops(pcm, s, &azx_pcm_ops);
2620 }
2621 /* buffer pre-allocation */
2622 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024;
2623 if (size > MAX_PREALLOC_SIZE)
2624 size = MAX_PREALLOC_SIZE;
2625 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG,
2626 snd_dma_pci_data(chip->pci),
2627 size, MAX_PREALLOC_SIZE);
2628 return 0;
2629 }
2630
2631 /*
2632 * mixer creation - all stuff is implemented in hda module
2633 */
2634 static int azx_mixer_create(struct azx *chip)
2635 {
2636 return snd_hda_build_controls(chip->bus);
2637 }
2638
2639
2640 /*
2641 * initialize SD streams
2642 */
2643 static int azx_init_stream(struct azx *chip)
2644 {
2645 int i;
2646
2647 /* initialize each stream (aka device)
2648 * assign the starting bdl address to each stream (device)
2649 * and initialize
2650 */
2651 for (i = 0; i < chip->num_streams; i++) {
2652 struct azx_dev *azx_dev = &chip->azx_dev[i];
2653 azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8);
2654 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */
2655 azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80);
2656 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */
2657 azx_dev->sd_int_sta_mask = 1 << i;
2658 /* stream tag: must be non-zero and unique */
2659 azx_dev->index = i;
2660 azx_dev->stream_tag = i + 1;
2661 }
2662
2663 return 0;
2664 }
2665
2666 static int azx_acquire_irq(struct azx *chip, int do_disconnect)
2667 {
2668 if (request_irq(chip->pci->irq, azx_interrupt,
2669 chip->msi ? 0 : IRQF_SHARED,
2670 KBUILD_MODNAME, chip)) {
2671 printk(KERN_ERR "hda-intel: unable to grab IRQ %d, "
2672 "disabling device\n", chip->pci->irq);
2673 if (do_disconnect)
2674 snd_card_disconnect(chip->card);
2675 return -1;
2676 }
2677 chip->irq = chip->pci->irq;
2678 pci_intx(chip->pci, !chip->msi);
2679 return 0;
2680 }
2681
2682
2683 static void azx_stop_chip(struct azx *chip)
2684 {
2685 if (!chip->initialized)
2686 return;
2687
2688 /* disable interrupts */
2689 azx_int_disable(chip);
2690 azx_int_clear(chip);
2691
2692 /* disable CORB/RIRB */
2693 azx_free_cmd_io(chip);
2694
2695 /* disable position buffer */
2696 azx_writel(chip, DPLBASE, 0);
2697 azx_writel(chip, DPUBASE, 0);
2698
2699 chip->initialized = 0;
2700 }
2701
2702 #ifdef CONFIG_SND_HDA_DSP_LOADER
2703 /*
2704 * DSP loading code (e.g. for CA0132)
2705 */
2706
2707 /* use the first stream for loading DSP */
2708 static struct azx_dev *
2709 azx_get_dsp_loader_dev(struct azx *chip)
2710 {
2711 return &chip->azx_dev[chip->playback_index_offset];
2712 }
2713
2714 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format,
2715 unsigned int byte_size,
2716 struct snd_dma_buffer *bufp)
2717 {
2718 u32 *bdl;
2719 struct azx *chip = bus->private_data;
2720 struct azx_dev *azx_dev;
2721 int err;
2722
2723 azx_dev = azx_get_dsp_loader_dev(chip);
2724
2725 dsp_lock(azx_dev);
2726 spin_lock_irq(&chip->reg_lock);
2727 if (azx_dev->running || azx_dev->locked) {
2728 spin_unlock_irq(&chip->reg_lock);
2729 err = -EBUSY;
2730 goto unlock;
2731 }
2732 azx_dev->prepared = 0;
2733 chip->saved_azx_dev = *azx_dev;
2734 azx_dev->locked = 1;
2735 spin_unlock_irq(&chip->reg_lock);
2736
2737 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV_SG,
2738 snd_dma_pci_data(chip->pci),
2739 byte_size, bufp);
2740 if (err < 0)
2741 goto err_alloc;
2742
2743 mark_pages_wc(chip, bufp, true);
2744 azx_dev->bufsize = byte_size;
2745 azx_dev->period_bytes = byte_size;
2746 azx_dev->format_val = format;
2747
2748 azx_stream_reset(chip, azx_dev);
2749
2750 /* reset BDL address */
2751 azx_sd_writel(azx_dev, SD_BDLPL, 0);
2752 azx_sd_writel(azx_dev, SD_BDLPU, 0);
2753
2754 azx_dev->frags = 0;
2755 bdl = (u32 *)azx_dev->bdl.area;
2756 err = setup_bdle(chip, bufp, azx_dev, &bdl, 0, byte_size, 0);
2757 if (err < 0)
2758 goto error;
2759
2760 azx_setup_controller(chip, azx_dev);
2761 dsp_unlock(azx_dev);
2762 return azx_dev->stream_tag;
2763
2764 error:
2765 mark_pages_wc(chip, bufp, false);
2766 snd_dma_free_pages(bufp);
2767 err_alloc:
2768 spin_lock_irq(&chip->reg_lock);
2769 if (azx_dev->opened)
2770 *azx_dev = chip->saved_azx_dev;
2771 azx_dev->locked = 0;
2772 spin_unlock_irq(&chip->reg_lock);
2773 unlock:
2774 dsp_unlock(azx_dev);
2775 return err;
2776 }
2777
2778 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start)
2779 {
2780 struct azx *chip = bus->private_data;
2781 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
2782
2783 if (start)
2784 azx_stream_start(chip, azx_dev);
2785 else
2786 azx_stream_stop(chip, azx_dev);
2787 azx_dev->running = start;
2788 }
2789
2790 static void azx_load_dsp_cleanup(struct hda_bus *bus,
2791 struct snd_dma_buffer *dmab)
2792 {
2793 struct azx *chip = bus->private_data;
2794 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip);
2795
2796 if (!dmab->area || !azx_dev->locked)
2797 return;
2798
2799 dsp_lock(azx_dev);
2800 /* reset BDL address */
2801 azx_sd_writel(azx_dev, SD_BDLPL, 0);
2802 azx_sd_writel(azx_dev, SD_BDLPU, 0);
2803 azx_sd_writel(azx_dev, SD_CTL, 0);
2804 azx_dev->bufsize = 0;
2805 azx_dev->period_bytes = 0;
2806 azx_dev->format_val = 0;
2807
2808 mark_pages_wc(chip, dmab, false);
2809 snd_dma_free_pages(dmab);
2810 dmab->area = NULL;
2811
2812 spin_lock_irq(&chip->reg_lock);
2813 if (azx_dev->opened)
2814 *azx_dev = chip->saved_azx_dev;
2815 azx_dev->locked = 0;
2816 spin_unlock_irq(&chip->reg_lock);
2817 dsp_unlock(azx_dev);
2818 }
2819 #endif /* CONFIG_SND_HDA_DSP_LOADER */
2820
2821 #ifdef CONFIG_PM
2822 /* power-up/down the controller */
2823 static void azx_power_notify(struct hda_bus *bus, bool power_up)
2824 {
2825 struct azx *chip = bus->private_data;
2826
2827 if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
2828 return;
2829
2830 if (power_up)
2831 pm_runtime_get_sync(&chip->pci->dev);
2832 else
2833 pm_runtime_put_sync(&chip->pci->dev);
2834 }
2835
2836 static DEFINE_MUTEX(card_list_lock);
2837 static LIST_HEAD(card_list);
2838
2839 static void azx_add_card_list(struct azx *chip)
2840 {
2841 mutex_lock(&card_list_lock);
2842 list_add(&chip->list, &card_list);
2843 mutex_unlock(&card_list_lock);
2844 }
2845
2846 static void azx_del_card_list(struct azx *chip)
2847 {
2848 mutex_lock(&card_list_lock);
2849 list_del_init(&chip->list);
2850 mutex_unlock(&card_list_lock);
2851 }
2852
2853 /* trigger power-save check at writing parameter */
2854 static int param_set_xint(const char *val, const struct kernel_param *kp)
2855 {
2856 struct azx *chip;
2857 struct hda_codec *c;
2858 int prev = power_save;
2859 int ret = param_set_int(val, kp);
2860
2861 if (ret || prev == power_save)
2862 return ret;
2863
2864 mutex_lock(&card_list_lock);
2865 list_for_each_entry(chip, &card_list, list) {
2866 if (!chip->bus || chip->disabled)
2867 continue;
2868 list_for_each_entry(c, &chip->bus->codec_list, list)
2869 snd_hda_power_sync(c);
2870 }
2871 mutex_unlock(&card_list_lock);
2872 return 0;
2873 }
2874 #else
2875 #define azx_add_card_list(chip) /* NOP */
2876 #define azx_del_card_list(chip) /* NOP */
2877 #endif /* CONFIG_PM */
2878
2879 #if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO)
2880 /*
2881 * power management
2882 */
2883 static int azx_suspend(struct device *dev)
2884 {
2885 struct pci_dev *pci = to_pci_dev(dev);
2886 struct snd_card *card = dev_get_drvdata(dev);
2887 struct azx *chip = card->private_data;
2888 struct azx_pcm *p;
2889
2890 if (chip->disabled)
2891 return 0;
2892
2893 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);
2894 azx_clear_irq_pending(chip);
2895 list_for_each_entry(p, &chip->pcm_list, list)
2896 snd_pcm_suspend_all(p->pcm);
2897 if (chip->initialized)
2898 snd_hda_suspend(chip->bus);
2899 azx_stop_chip(chip);
2900 if (chip->irq >= 0) {
2901 free_irq(chip->irq, chip);
2902 chip->irq = -1;
2903 }
2904 if (chip->msi)
2905 pci_disable_msi(chip->pci);
2906 pci_disable_device(pci);
2907 pci_save_state(pci);
2908 pci_set_power_state(pci, PCI_D3hot);
2909 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
2910 hda_display_power(false);
2911 return 0;
2912 }
2913
2914 static int azx_resume(struct device *dev)
2915 {
2916 struct pci_dev *pci = to_pci_dev(dev);
2917 struct snd_card *card = dev_get_drvdata(dev);
2918 struct azx *chip = card->private_data;
2919
2920 if (chip->disabled)
2921 return 0;
2922
2923 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
2924 hda_display_power(true);
2925 pci_set_power_state(pci, PCI_D0);
2926 pci_restore_state(pci);
2927 if (pci_enable_device(pci) < 0) {
2928 printk(KERN_ERR "hda-intel: pci_enable_device failed, "
2929 "disabling device\n");
2930 snd_card_disconnect(card);
2931 return -EIO;
2932 }
2933 pci_set_master(pci);
2934 if (chip->msi)
2935 if (pci_enable_msi(pci) < 0)
2936 chip->msi = 0;
2937 if (azx_acquire_irq(chip, 1) < 0)
2938 return -EIO;
2939 azx_init_pci(chip);
2940
2941 azx_init_chip(chip, 1);
2942
2943 snd_hda_resume(chip->bus);
2944 snd_power_change_state(card, SNDRV_CTL_POWER_D0);
2945 return 0;
2946 }
2947 #endif /* CONFIG_PM_SLEEP || SUPPORT_VGA_SWITCHEROO */
2948
2949 #ifdef CONFIG_PM_RUNTIME
2950 static int azx_runtime_suspend(struct device *dev)
2951 {
2952 struct snd_card *card = dev_get_drvdata(dev);
2953 struct azx *chip = card->private_data;
2954
2955 azx_stop_chip(chip);
2956 azx_clear_irq_pending(chip);
2957 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
2958 hda_display_power(false);
2959 return 0;
2960 }
2961
2962 static int azx_runtime_resume(struct device *dev)
2963 {
2964 struct snd_card *card = dev_get_drvdata(dev);
2965 struct azx *chip = card->private_data;
2966
2967 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)
2968 hda_display_power(true);
2969 azx_init_pci(chip);
2970 azx_init_chip(chip, 1);
2971 return 0;
2972 }
2973
2974 static int azx_runtime_idle(struct device *dev)
2975 {
2976 struct snd_card *card = dev_get_drvdata(dev);
2977 struct azx *chip = card->private_data;
2978
2979 if (!power_save_controller ||
2980 !(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
2981 return -EBUSY;
2982
2983 return 0;
2984 }
2985
2986 #endif /* CONFIG_PM_RUNTIME */
2987
2988 #ifdef CONFIG_PM
2989 static const struct dev_pm_ops azx_pm = {
2990 SET_SYSTEM_SLEEP_PM_OPS(azx_suspend, azx_resume)
2991 SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, azx_runtime_idle)
2992 };
2993
2994 #define AZX_PM_OPS &azx_pm
2995 #else
2996 #define AZX_PM_OPS NULL
2997 #endif /* CONFIG_PM */
2998
2999
3000 /*
3001 * reboot notifier for hang-up problem at power-down
3002 */
3003 static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf)
3004 {
3005 struct azx *chip = container_of(nb, struct azx, reboot_notifier);
3006 snd_hda_bus_reboot_notify(chip->bus);
3007 azx_stop_chip(chip);
3008 return NOTIFY_OK;
3009 }
3010
3011 static void azx_notifier_register(struct azx *chip)
3012 {
3013 chip->reboot_notifier.notifier_call = azx_halt;
3014 register_reboot_notifier(&chip->reboot_notifier);
3015 }
3016
3017 static void azx_notifier_unregister(struct azx *chip)
3018 {
3019 if (chip->reboot_notifier.notifier_call)
3020 unregister_reboot_notifier(&chip->reboot_notifier);
3021 }
3022
3023 static int azx_probe_continue(struct azx *chip);
3024
3025 #ifdef SUPPORT_VGA_SWITCHEROO
3026 static struct pci_dev *get_bound_vga(struct pci_dev *pci);
3027
3028 static void azx_vs_set_state(struct pci_dev *pci,
3029 enum vga_switcheroo_state state)
3030 {
3031 struct snd_card *card = pci_get_drvdata(pci);
3032 struct azx *chip = card->private_data;
3033 bool disabled;
3034
3035 wait_for_completion(&chip->probe_wait);
3036 if (chip->init_failed)
3037 return;
3038
3039 disabled = (state == VGA_SWITCHEROO_OFF);
3040 if (chip->disabled == disabled)
3041 return;
3042
3043 if (!chip->bus) {
3044 chip->disabled = disabled;
3045 if (!disabled) {
3046 snd_printk(KERN_INFO SFX
3047 "%s: Start delayed initialization\n",
3048 pci_name(chip->pci));
3049 if (azx_probe_continue(chip) < 0) {
3050 snd_printk(KERN_ERR SFX
3051 "%s: initialization error\n",
3052 pci_name(chip->pci));
3053 chip->init_failed = true;
3054 }
3055 }
3056 } else {
3057 snd_printk(KERN_INFO SFX
3058 "%s: %s via VGA-switcheroo\n", pci_name(chip->pci),
3059 disabled ? "Disabling" : "Enabling");
3060 if (disabled) {
3061 azx_suspend(&pci->dev);
3062 chip->disabled = true;
3063 if (snd_hda_lock_devices(chip->bus))
3064 snd_printk(KERN_WARNING SFX "%s: Cannot lock devices!\n",
3065 pci_name(chip->pci));
3066 } else {
3067 snd_hda_unlock_devices(chip->bus);
3068 chip->disabled = false;
3069 azx_resume(&pci->dev);
3070 }
3071 }
3072 }
3073
3074 static bool azx_vs_can_switch(struct pci_dev *pci)
3075 {
3076 struct snd_card *card = pci_get_drvdata(pci);
3077 struct azx *chip = card->private_data;
3078
3079 wait_for_completion(&chip->probe_wait);
3080 if (chip->init_failed)
3081 return false;
3082 if (chip->disabled || !chip->bus)
3083 return true;
3084 if (snd_hda_lock_devices(chip->bus))
3085 return false;
3086 snd_hda_unlock_devices(chip->bus);
3087 return true;
3088 }
3089
3090 static void init_vga_switcheroo(struct azx *chip)
3091 {
3092 struct pci_dev *p = get_bound_vga(chip->pci);
3093 if (p) {
3094 snd_printk(KERN_INFO SFX
3095 "%s: Handle VGA-switcheroo audio client\n",
3096 pci_name(chip->pci));
3097 chip->use_vga_switcheroo = 1;
3098 pci_dev_put(p);
3099 }
3100 }
3101
3102 static const struct vga_switcheroo_client_ops azx_vs_ops = {
3103 .set_gpu_state = azx_vs_set_state,
3104 .can_switch = azx_vs_can_switch,
3105 };
3106
3107 static int register_vga_switcheroo(struct azx *chip)
3108 {
3109 int err;
3110
3111 if (!chip->use_vga_switcheroo)
3112 return 0;
3113 /* FIXME: currently only handling DIS controller
3114 * is there any machine with two switchable HDMI audio controllers?
3115 */
3116 err = vga_switcheroo_register_audio_client(chip->pci, &azx_vs_ops,
3117 VGA_SWITCHEROO_DIS,
3118 chip->bus != NULL);
3119 if (err < 0)
3120 return err;
3121 chip->vga_switcheroo_registered = 1;
3122 return 0;
3123 }
3124 #else
3125 #define init_vga_switcheroo(chip) /* NOP */
3126 #define register_vga_switcheroo(chip) 0
3127 #define check_hdmi_disabled(pci) false
3128 #endif /* SUPPORT_VGA_SWITCHER */
3129
3130 /*
3131 * destructor
3132 */
3133 static int azx_free(struct azx *chip)
3134 {
3135 struct pci_dev *pci = chip->pci;
3136 int i;
3137
3138 if ((chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
3139 && chip->running)
3140 pm_runtime_get_noresume(&pci->dev);
3141
3142 azx_del_card_list(chip);
3143
3144 azx_notifier_unregister(chip);
3145
3146 chip->init_failed = 1; /* to be sure */
3147 complete_all(&chip->probe_wait);
3148
3149 if (use_vga_switcheroo(chip)) {
3150 if (chip->disabled && chip->bus)
3151 snd_hda_unlock_devices(chip->bus);
3152 if (chip->vga_switcheroo_registered)
3153 vga_switcheroo_unregister_client(chip->pci);
3154 }
3155
3156 if (chip->initialized) {
3157 azx_clear_irq_pending(chip);
3158 for (i = 0; i < chip->num_streams; i++)
3159 azx_stream_stop(chip, &chip->azx_dev[i]);
3160 azx_stop_chip(chip);
3161 }
3162
3163 if (chip->irq >= 0)
3164 free_irq(chip->irq, (void*)chip);
3165 if (chip->msi)
3166 pci_disable_msi(chip->pci);
3167 if (chip->remap_addr)
3168 iounmap(chip->remap_addr);
3169
3170 if (chip->azx_dev) {
3171 for (i = 0; i < chip->num_streams; i++)
3172 if (chip->azx_dev[i].bdl.area) {
3173 mark_pages_wc(chip, &chip->azx_dev[i].bdl, false);
3174 snd_dma_free_pages(&chip->azx_dev[i].bdl);
3175 }
3176 }
3177 if (chip->rb.area) {
3178 mark_pages_wc(chip, &chip->rb, false);
3179 snd_dma_free_pages(&chip->rb);
3180 }
3181 if (chip->posbuf.area) {
3182 mark_pages_wc(chip, &chip->posbuf, false);
3183 snd_dma_free_pages(&chip->posbuf);
3184 }
3185 if (chip->region_requested)
3186 pci_release_regions(chip->pci);
3187 pci_disable_device(chip->pci);
3188 kfree(chip->azx_dev);
3189 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3190 if (chip->fw)
3191 release_firmware(chip->fw);
3192 #endif
3193 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {
3194 hda_display_power(false);
3195 hda_i915_exit();
3196 }
3197 kfree(chip);
3198
3199 return 0;
3200 }
3201
3202 static int azx_dev_free(struct snd_device *device)
3203 {
3204 return azx_free(device->device_data);
3205 }
3206
3207 #ifdef SUPPORT_VGA_SWITCHEROO
3208 /*
3209 * Check of disabled HDMI controller by vga-switcheroo
3210 */
3211 static struct pci_dev *get_bound_vga(struct pci_dev *pci)
3212 {
3213 struct pci_dev *p;
3214
3215 /* check only discrete GPU */
3216 switch (pci->vendor) {
3217 case PCI_VENDOR_ID_ATI:
3218 case PCI_VENDOR_ID_AMD:
3219 case PCI_VENDOR_ID_NVIDIA:
3220 if (pci->devfn == 1) {
3221 p = pci_get_domain_bus_and_slot(pci_domain_nr(pci->bus),
3222 pci->bus->number, 0);
3223 if (p) {
3224 if ((p->class >> 8) == PCI_CLASS_DISPLAY_VGA)
3225 return p;
3226 pci_dev_put(p);
3227 }
3228 }
3229 break;
3230 }
3231 return NULL;
3232 }
3233
3234 static bool check_hdmi_disabled(struct pci_dev *pci)
3235 {
3236 bool vga_inactive = false;
3237 struct pci_dev *p = get_bound_vga(pci);
3238
3239 if (p) {
3240 if (vga_switcheroo_get_client_state(p) == VGA_SWITCHEROO_OFF)
3241 vga_inactive = true;
3242 pci_dev_put(p);
3243 }
3244 return vga_inactive;
3245 }
3246 #endif /* SUPPORT_VGA_SWITCHEROO */
3247
3248 /*
3249 * white/black-listing for position_fix
3250 */
3251 static struct snd_pci_quirk position_fix_list[] = {
3252 SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),
3253 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),
3254 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),
3255 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),
3256 SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),
3257 SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),
3258 SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),
3259 SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB),
3260 SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB),
3261 SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB),
3262 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),
3263 SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB),
3264 SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB),
3265 SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB),
3266 {}
3267 };
3268
3269 static int check_position_fix(struct azx *chip, int fix)
3270 {
3271 const struct snd_pci_quirk *q;
3272
3273 switch (fix) {
3274 case POS_FIX_AUTO:
3275 case POS_FIX_LPIB:
3276 case POS_FIX_POSBUF:
3277 case POS_FIX_VIACOMBO:
3278 case POS_FIX_COMBO:
3279 return fix;
3280 }
3281
3282 q = snd_pci_quirk_lookup(chip->pci, position_fix_list);
3283 if (q) {
3284 printk(KERN_INFO
3285 "hda_intel: position_fix set to %d "
3286 "for device %04x:%04x\n",
3287 q->value, q->subvendor, q->subdevice);
3288 return q->value;
3289 }
3290
3291 /* Check VIA/ATI HD Audio Controller exist */
3292 if (chip->driver_caps & AZX_DCAPS_POSFIX_VIA) {
3293 snd_printd(SFX "%s: Using VIACOMBO position fix\n", pci_name(chip->pci));
3294 return POS_FIX_VIACOMBO;
3295 }
3296 if (chip->driver_caps & AZX_DCAPS_POSFIX_LPIB) {
3297 snd_printd(SFX "%s: Using LPIB position fix\n", pci_name(chip->pci));
3298 return POS_FIX_LPIB;
3299 }
3300 return POS_FIX_AUTO;
3301 }
3302
3303 /*
3304 * black-lists for probe_mask
3305 */
3306 static struct snd_pci_quirk probe_mask_list[] = {
3307 /* Thinkpad often breaks the controller communication when accessing
3308 * to the non-working (or non-existing) modem codec slot.
3309 */
3310 SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01),
3311 SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01),
3312 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01),
3313 /* broken BIOS */
3314 SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),
3315 /* including bogus ALC268 in slot#2 that conflicts with ALC888 */
3316 SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),
3317 /* forced codec slots */
3318 SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),
3319 SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),
3320 /* WinFast VP200 H (Teradici) user reported broken communication */
3321 SND_PCI_QUIRK(0x3a21, 0x040d, "WinFast VP200 H", 0x101),
3322 {}
3323 };
3324
3325 #define AZX_FORCE_CODEC_MASK 0x100
3326
3327 static void check_probe_mask(struct azx *chip, int dev)
3328 {
3329 const struct snd_pci_quirk *q;
3330
3331 chip->codec_probe_mask = probe_mask[dev];
3332 if (chip->codec_probe_mask == -1) {
3333 q = snd_pci_quirk_lookup(chip->pci, probe_mask_list);
3334 if (q) {
3335 printk(KERN_INFO
3336 "hda_intel: probe_mask set to 0x%x "
3337 "for device %04x:%04x\n",
3338 q->value, q->subvendor, q->subdevice);
3339 chip->codec_probe_mask = q->value;
3340 }
3341 }
3342
3343 /* check forced option */
3344 if (chip->codec_probe_mask != -1 &&
3345 (chip->codec_probe_mask & AZX_FORCE_CODEC_MASK)) {
3346 chip->codec_mask = chip->codec_probe_mask & 0xff;
3347 printk(KERN_INFO "hda_intel: codec_mask forced to 0x%x\n",
3348 chip->codec_mask);
3349 }
3350 }
3351
3352 /*
3353 * white/black-list for enable_msi
3354 */
3355 static struct snd_pci_quirk msi_black_list[] = {
3356 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */
3357 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */
3358 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */
3359 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */
3360 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */
3361 {}
3362 };
3363
3364 static void check_msi(struct azx *chip)
3365 {
3366 const struct snd_pci_quirk *q;
3367
3368 if (enable_msi >= 0) {
3369 chip->msi = !!enable_msi;
3370 return;
3371 }
3372 chip->msi = 1; /* enable MSI as default */
3373 q = snd_pci_quirk_lookup(chip->pci, msi_black_list);
3374 if (q) {
3375 printk(KERN_INFO
3376 "hda_intel: msi for device %04x:%04x set to %d\n",
3377 q->subvendor, q->subdevice, q->value);
3378 chip->msi = q->value;
3379 return;
3380 }
3381
3382 /* NVidia chipsets seem to cause troubles with MSI */
3383 if (chip->driver_caps & AZX_DCAPS_NO_MSI) {
3384 printk(KERN_INFO "hda_intel: Disabling MSI\n");
3385 chip->msi = 0;
3386 }
3387 }
3388
3389 /* check the snoop mode availability */
3390 static void azx_check_snoop_available(struct azx *chip)
3391 {
3392 bool snoop = chip->snoop;
3393
3394 switch (chip->driver_type) {
3395 case AZX_DRIVER_VIA:
3396 /* force to non-snoop mode for a new VIA controller
3397 * when BIOS is set
3398 */
3399 if (snoop) {
3400 u8 val;
3401 pci_read_config_byte(chip->pci, 0x42, &val);
3402 if (!(val & 0x80) && chip->pci->revision == 0x30)
3403 snoop = false;
3404 }
3405 break;
3406 case AZX_DRIVER_ATIHDMI_NS:
3407 /* new ATI HDMI requires non-snoop */
3408 snoop = false;
3409 break;
3410 case AZX_DRIVER_CTHDA:
3411 snoop = false;
3412 break;
3413 }
3414
3415 if (snoop != chip->snoop) {
3416 snd_printk(KERN_INFO SFX "%s: Force to %s mode\n",
3417 pci_name(chip->pci), snoop ? "snoop" : "non-snoop");
3418 chip->snoop = snoop;
3419 }
3420 }
3421
3422 #ifdef CONFIG_SND_HDA_I915
3423 static void azx_probe_work(struct work_struct *work)
3424 {
3425 azx_probe_continue(container_of(work, struct azx, probe_work));
3426 }
3427 #endif
3428
3429 /*
3430 * constructor
3431 */
3432 static int azx_create(struct snd_card *card, struct pci_dev *pci,
3433 int dev, unsigned int driver_caps,
3434 struct azx **rchip)
3435 {
3436 static struct snd_device_ops ops = {
3437 .dev_free = azx_dev_free,
3438 };
3439 struct azx *chip;
3440 int err;
3441
3442 *rchip = NULL;
3443
3444 err = pci_enable_device(pci);
3445 if (err < 0)
3446 return err;
3447
3448 chip = kzalloc(sizeof(*chip), GFP_KERNEL);
3449 if (!chip) {
3450 snd_printk(KERN_ERR SFX "%s: Cannot allocate chip\n", pci_name(pci));
3451 pci_disable_device(pci);
3452 return -ENOMEM;
3453 }
3454
3455 spin_lock_init(&chip->reg_lock);
3456 mutex_init(&chip->open_mutex);
3457 chip->card = card;
3458 chip->pci = pci;
3459 chip->irq = -1;
3460 chip->driver_caps = driver_caps;
3461 chip->driver_type = driver_caps & 0xff;
3462 check_msi(chip);
3463 chip->dev_index = dev;
3464 INIT_WORK(&chip->irq_pending_work, azx_irq_pending_work);
3465 INIT_LIST_HEAD(&chip->pcm_list);
3466 INIT_LIST_HEAD(&chip->list);
3467 init_vga_switcheroo(chip);
3468 init_completion(&chip->probe_wait);
3469
3470 chip->position_fix[0] = chip->position_fix[1] =
3471 check_position_fix(chip, position_fix[dev]);
3472 /* combo mode uses LPIB for playback */
3473 if (chip->position_fix[0] == POS_FIX_COMBO) {
3474 chip->position_fix[0] = POS_FIX_LPIB;
3475 chip->position_fix[1] = POS_FIX_AUTO;
3476 }
3477
3478 check_probe_mask(chip, dev);
3479
3480 chip->single_cmd = single_cmd;
3481 chip->snoop = hda_snoop;
3482 azx_check_snoop_available(chip);
3483
3484 if (bdl_pos_adj[dev] < 0) {
3485 switch (chip->driver_type) {
3486 case AZX_DRIVER_ICH:
3487 case AZX_DRIVER_PCH:
3488 bdl_pos_adj[dev] = 1;
3489 break;
3490 default:
3491 bdl_pos_adj[dev] = 32;
3492 break;
3493 }
3494 }
3495
3496 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);
3497 if (err < 0) {
3498 snd_printk(KERN_ERR SFX "%s: Error creating device [card]!\n",
3499 pci_name(chip->pci));
3500 azx_free(chip);
3501 return err;
3502 }
3503
3504 #ifdef CONFIG_SND_HDA_I915
3505 /* continue probing in work context as may trigger request module */
3506 INIT_WORK(&chip->probe_work, azx_probe_work);
3507 #endif
3508
3509 *rchip = chip;
3510
3511 return 0;
3512 }
3513
3514 static int azx_first_init(struct azx *chip)
3515 {
3516 int dev = chip->dev_index;
3517 struct pci_dev *pci = chip->pci;
3518 struct snd_card *card = chip->card;
3519 int i, err;
3520 unsigned short gcap;
3521
3522 #if BITS_PER_LONG != 64
3523 /* Fix up base address on ULI M5461 */
3524 if (chip->driver_type == AZX_DRIVER_ULI) {
3525 u16 tmp3;
3526 pci_read_config_word(pci, 0x40, &tmp3);
3527 pci_write_config_word(pci, 0x40, tmp3 | 0x10);
3528 pci_write_config_dword(pci, PCI_BASE_ADDRESS_1, 0);
3529 }
3530 #endif
3531
3532 err = pci_request_regions(pci, "ICH HD audio");
3533 if (err < 0)
3534 return err;
3535 chip->region_requested = 1;
3536
3537 chip->addr = pci_resource_start(pci, 0);
3538 chip->remap_addr = pci_ioremap_bar(pci, 0);
3539 if (chip->remap_addr == NULL) {
3540 snd_printk(KERN_ERR SFX "%s: ioremap error\n", pci_name(chip->pci));
3541 return -ENXIO;
3542 }
3543
3544 if (chip->msi)
3545 if (pci_enable_msi(pci) < 0)
3546 chip->msi = 0;
3547
3548 if (azx_acquire_irq(chip, 0) < 0)
3549 return -EBUSY;
3550
3551 pci_set_master(pci);
3552 synchronize_irq(chip->irq);
3553
3554 gcap = azx_readw(chip, GCAP);
3555 snd_printdd(SFX "%s: chipset global capabilities = 0x%x\n", pci_name(chip->pci), gcap);
3556
3557 /* disable SB600 64bit support for safety */
3558 if (chip->pci->vendor == PCI_VENDOR_ID_ATI) {
3559 struct pci_dev *p_smbus;
3560 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,
3561 PCI_DEVICE_ID_ATI_SBX00_SMBUS,
3562 NULL);
3563 if (p_smbus) {
3564 if (p_smbus->revision < 0x30)
3565 gcap &= ~ICH6_GCAP_64OK;
3566 pci_dev_put(p_smbus);
3567 }
3568 }
3569
3570 /* disable 64bit DMA address on some devices */
3571 if (chip->driver_caps & AZX_DCAPS_NO_64BIT) {
3572 snd_printd(SFX "%s: Disabling 64bit DMA\n", pci_name(chip->pci));
3573 gcap &= ~ICH6_GCAP_64OK;
3574 }
3575
3576 /* disable buffer size rounding to 128-byte multiples if supported */
3577 if (align_buffer_size >= 0)
3578 chip->align_buffer_size = !!align_buffer_size;
3579 else {
3580 if (chip->driver_caps & AZX_DCAPS_BUFSIZE)
3581 chip->align_buffer_size = 0;
3582 else if (chip->driver_caps & AZX_DCAPS_ALIGN_BUFSIZE)
3583 chip->align_buffer_size = 1;
3584 else
3585 chip->align_buffer_size = 1;
3586 }
3587
3588 /* allow 64bit DMA address if supported by H/W */
3589 if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64)))
3590 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(64));
3591 else {
3592 pci_set_dma_mask(pci, DMA_BIT_MASK(32));
3593 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32));
3594 }
3595
3596 /* read number of streams from GCAP register instead of using
3597 * hardcoded value
3598 */
3599 chip->capture_streams = (gcap >> 8) & 0x0f;
3600 chip->playback_streams = (gcap >> 12) & 0x0f;
3601 if (!chip->playback_streams && !chip->capture_streams) {
3602 /* gcap didn't give any info, switching to old method */
3603
3604 switch (chip->driver_type) {
3605 case AZX_DRIVER_ULI:
3606 chip->playback_streams = ULI_NUM_PLAYBACK;
3607 chip->capture_streams = ULI_NUM_CAPTURE;
3608 break;
3609 case AZX_DRIVER_ATIHDMI:
3610 case AZX_DRIVER_ATIHDMI_NS:
3611 chip->playback_streams = ATIHDMI_NUM_PLAYBACK;
3612 chip->capture_streams = ATIHDMI_NUM_CAPTURE;
3613 break;
3614 case AZX_DRIVER_GENERIC:
3615 default:
3616 chip->playback_streams = ICH6_NUM_PLAYBACK;
3617 chip->capture_streams = ICH6_NUM_CAPTURE;
3618 break;
3619 }
3620 }
3621 chip->capture_index_offset = 0;
3622 chip->playback_index_offset = chip->capture_streams;
3623 chip->num_streams = chip->playback_streams + chip->capture_streams;
3624 chip->azx_dev = kcalloc(chip->num_streams, sizeof(*chip->azx_dev),
3625 GFP_KERNEL);
3626 if (!chip->azx_dev) {
3627 snd_printk(KERN_ERR SFX "%s: cannot malloc azx_dev\n", pci_name(chip->pci));
3628 return -ENOMEM;
3629 }
3630
3631 for (i = 0; i < chip->num_streams; i++) {
3632 dsp_lock_init(&chip->azx_dev[i]);
3633 /* allocate memory for the BDL for each stream */
3634 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
3635 snd_dma_pci_data(chip->pci),
3636 BDL_SIZE, &chip->azx_dev[i].bdl);
3637 if (err < 0) {
3638 snd_printk(KERN_ERR SFX "%s: cannot allocate BDL\n", pci_name(chip->pci));
3639 return -ENOMEM;
3640 }
3641 mark_pages_wc(chip, &chip->azx_dev[i].bdl, true);
3642 }
3643 /* allocate memory for the position buffer */
3644 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV,
3645 snd_dma_pci_data(chip->pci),
3646 chip->num_streams * 8, &chip->posbuf);
3647 if (err < 0) {
3648 snd_printk(KERN_ERR SFX "%s: cannot allocate posbuf\n", pci_name(chip->pci));
3649 return -ENOMEM;
3650 }
3651 mark_pages_wc(chip, &chip->posbuf, true);
3652 /* allocate CORB/RIRB */
3653 err = azx_alloc_cmd_io(chip);
3654 if (err < 0)
3655 return err;
3656
3657 /* initialize streams */
3658 azx_init_stream(chip);
3659
3660 /* initialize chip */
3661 azx_init_pci(chip);
3662 azx_init_chip(chip, (probe_only[dev] & 2) == 0);
3663
3664 /* codec detection */
3665 if (!chip->codec_mask) {
3666 snd_printk(KERN_ERR SFX "%s: no codecs found!\n", pci_name(chip->pci));
3667 return -ENODEV;
3668 }
3669
3670 strcpy(card->driver, "HDA-Intel");
3671 strlcpy(card->shortname, driver_short_names[chip->driver_type],
3672 sizeof(card->shortname));
3673 snprintf(card->longname, sizeof(card->longname),
3674 "%s at 0x%lx irq %i",
3675 card->shortname, chip->addr, chip->irq);
3676
3677 return 0;
3678 }
3679
3680 static void power_down_all_codecs(struct azx *chip)
3681 {
3682 #ifdef CONFIG_PM
3683 /* The codecs were powered up in snd_hda_codec_new().
3684 * Now all initialization done, so turn them down if possible
3685 */
3686 struct hda_codec *codec;
3687 list_for_each_entry(codec, &chip->bus->codec_list, list) {
3688 snd_hda_power_down(codec);
3689 }
3690 #endif
3691 }
3692
3693 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3694 /* callback from request_firmware_nowait() */
3695 static void azx_firmware_cb(const struct firmware *fw, void *context)
3696 {
3697 struct snd_card *card = context;
3698 struct azx *chip = card->private_data;
3699 struct pci_dev *pci = chip->pci;
3700
3701 if (!fw) {
3702 snd_printk(KERN_ERR SFX "%s: Cannot load firmware, aborting\n",
3703 pci_name(chip->pci));
3704 goto error;
3705 }
3706
3707 chip->fw = fw;
3708 if (!chip->disabled) {
3709 /* continue probing */
3710 if (azx_probe_continue(chip))
3711 goto error;
3712 }
3713 return; /* OK */
3714
3715 error:
3716 snd_card_free(card);
3717 pci_set_drvdata(pci, NULL);
3718 }
3719 #endif
3720
3721 static int azx_probe(struct pci_dev *pci,
3722 const struct pci_device_id *pci_id)
3723 {
3724 static int dev;
3725 struct snd_card *card;
3726 struct azx *chip;
3727 bool probe_now;
3728 int err;
3729
3730 if (dev >= SNDRV_CARDS)
3731 return -ENODEV;
3732 if (!enable[dev]) {
3733 dev++;
3734 return -ENOENT;
3735 }
3736
3737 err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card);
3738 if (err < 0) {
3739 snd_printk(KERN_ERR "hda-intel: Error creating card!\n");
3740 return err;
3741 }
3742
3743 snd_card_set_dev(card, &pci->dev);
3744
3745 err = azx_create(card, pci, dev, pci_id->driver_data, &chip);
3746 if (err < 0)
3747 goto out_free;
3748 card->private_data = chip;
3749
3750 pci_set_drvdata(pci, card);
3751
3752 err = register_vga_switcheroo(chip);
3753 if (err < 0) {
3754 snd_printk(KERN_ERR SFX
3755 "%s: Error registering VGA-switcheroo client\n", pci_name(pci));
3756 goto out_free;
3757 }
3758
3759 if (check_hdmi_disabled(pci)) {
3760 snd_printk(KERN_INFO SFX "%s: VGA controller is disabled\n",
3761 pci_name(pci));
3762 snd_printk(KERN_INFO SFX "%s: Delaying initialization\n", pci_name(pci));
3763 chip->disabled = true;
3764 }
3765
3766 probe_now = !chip->disabled;
3767
3768 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3769 if (patch[dev] && *patch[dev]) {
3770 snd_printk(KERN_ERR SFX "%s: Applying patch firmware '%s'\n",
3771 pci_name(pci), patch[dev]);
3772 err = request_firmware_nowait(THIS_MODULE, true, patch[dev],
3773 &pci->dev, GFP_KERNEL, card,
3774 azx_firmware_cb);
3775 if (err < 0)
3776 goto out_free;
3777 probe_now = false; /* continued in azx_firmware_cb() */
3778 }
3779 #endif /* CONFIG_SND_HDA_PATCH_LOADER */
3780
3781 /* continue probing in work context, avoid request_module deadlock */
3782 if (probe_now && (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)) {
3783 #ifdef CONFIG_SND_HDA_I915
3784 probe_now = false;
3785 schedule_work(&chip->probe_work);
3786 #else
3787 snd_printk(KERN_ERR SFX "Haswell must build in CONFIG_SND_HDA_I915\n");
3788 #endif
3789 }
3790
3791 if (probe_now) {
3792 err = azx_probe_continue(chip);
3793 if (err < 0)
3794 goto out_free;
3795 }
3796
3797 dev++;
3798 complete_all(&chip->probe_wait);
3799 return 0;
3800
3801 out_free:
3802 snd_card_free(card);
3803 pci_set_drvdata(pci, NULL);
3804 return err;
3805 }
3806
3807 static int azx_probe_continue(struct azx *chip)
3808 {
3809 struct pci_dev *pci = chip->pci;
3810 int dev = chip->dev_index;
3811 int err;
3812
3813 /* Request power well for Haswell HDA controller and codec */
3814 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) {
3815 err = hda_i915_init();
3816 if (err < 0) {
3817 snd_printk(KERN_ERR SFX "Error request power-well from i915\n");
3818 goto out_free;
3819 }
3820 hda_display_power(true);
3821 }
3822
3823 err = azx_first_init(chip);
3824 if (err < 0)
3825 goto out_free;
3826
3827 #ifdef CONFIG_SND_HDA_INPUT_BEEP
3828 chip->beep_mode = beep_mode[dev];
3829 #endif
3830
3831 /* create codec instances */
3832 err = azx_codec_create(chip, model[dev]);
3833 if (err < 0)
3834 goto out_free;
3835 #ifdef CONFIG_SND_HDA_PATCH_LOADER
3836 if (chip->fw) {
3837 err = snd_hda_load_patch(chip->bus, chip->fw->size,
3838 chip->fw->data);
3839 if (err < 0)
3840 goto out_free;
3841 #ifndef CONFIG_PM
3842 release_firmware(chip->fw); /* no longer needed */
3843 chip->fw = NULL;
3844 #endif
3845 }
3846 #endif
3847 if ((probe_only[dev] & 1) == 0) {
3848 err = azx_codec_configure(chip);
3849 if (err < 0)
3850 goto out_free;
3851 }
3852
3853 /* create PCM streams */
3854 err = snd_hda_build_pcms(chip->bus);
3855 if (err < 0)
3856 goto out_free;
3857
3858 /* create mixer controls */
3859 err = azx_mixer_create(chip);
3860 if (err < 0)
3861 goto out_free;
3862
3863 err = snd_card_register(chip->card);
3864 if (err < 0)
3865 goto out_free;
3866
3867 chip->running = 1;
3868 power_down_all_codecs(chip);
3869 azx_notifier_register(chip);
3870 azx_add_card_list(chip);
3871 if (chip->driver_caps & AZX_DCAPS_PM_RUNTIME)
3872 pm_runtime_put_noidle(&pci->dev);
3873
3874 return 0;
3875
3876 out_free:
3877 chip->init_failed = 1;
3878 return err;
3879 }
3880
3881 static void azx_remove(struct pci_dev *pci)
3882 {
3883 struct snd_card *card = pci_get_drvdata(pci);
3884
3885 if (card)
3886 snd_card_free(card);
3887 pci_set_drvdata(pci, NULL);
3888 }
3889
3890 /* PCI IDs */
3891 static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
3892 /* CPT */
3893 { PCI_DEVICE(0x8086, 0x1c20),
3894 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3895 /* PBG */
3896 { PCI_DEVICE(0x8086, 0x1d20),
3897 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3898 /* Panther Point */
3899 { PCI_DEVICE(0x8086, 0x1e20),
3900 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM },
3901 /* Lynx Point */
3902 { PCI_DEVICE(0x8086, 0x8c20),
3903 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3904 /* Wellsburg */
3905 { PCI_DEVICE(0x8086, 0x8d20),
3906 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3907 { PCI_DEVICE(0x8086, 0x8d21),
3908 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3909 /* Lynx Point-LP */
3910 { PCI_DEVICE(0x8086, 0x9c20),
3911 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3912 /* Lynx Point-LP */
3913 { PCI_DEVICE(0x8086, 0x9c21),
3914 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
3915 /* Haswell */
3916 { PCI_DEVICE(0x8086, 0x0a0c),
3917 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH |
3918 AZX_DCAPS_I915_POWERWELL },
3919 { PCI_DEVICE(0x8086, 0x0c0c),
3920 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH |
3921 AZX_DCAPS_I915_POWERWELL },
3922 { PCI_DEVICE(0x8086, 0x0d0c),
3923 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH |
3924 AZX_DCAPS_I915_POWERWELL },
3925 /* 5 Series/3400 */
3926 { PCI_DEVICE(0x8086, 0x3b56),
3927 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
3928 /* Poulsbo */
3929 { PCI_DEVICE(0x8086, 0x811b),
3930 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
3931 /* Oaktrail */
3932 { PCI_DEVICE(0x8086, 0x080a),
3933 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM },
3934 /* ICH */
3935 { PCI_DEVICE(0x8086, 0x2668),
3936 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3937 AZX_DCAPS_BUFSIZE }, /* ICH6 */
3938 { PCI_DEVICE(0x8086, 0x27d8),
3939 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3940 AZX_DCAPS_BUFSIZE }, /* ICH7 */
3941 { PCI_DEVICE(0x8086, 0x269a),
3942 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3943 AZX_DCAPS_BUFSIZE }, /* ESB2 */
3944 { PCI_DEVICE(0x8086, 0x284b),
3945 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3946 AZX_DCAPS_BUFSIZE }, /* ICH8 */
3947 { PCI_DEVICE(0x8086, 0x293e),
3948 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3949 AZX_DCAPS_BUFSIZE }, /* ICH9 */
3950 { PCI_DEVICE(0x8086, 0x293f),
3951 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3952 AZX_DCAPS_BUFSIZE }, /* ICH9 */
3953 { PCI_DEVICE(0x8086, 0x3a3e),
3954 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3955 AZX_DCAPS_BUFSIZE }, /* ICH10 */
3956 { PCI_DEVICE(0x8086, 0x3a6e),
3957 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC |
3958 AZX_DCAPS_BUFSIZE }, /* ICH10 */
3959 /* Generic Intel */
3960 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),
3961 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
3962 .class_mask = 0xffffff,
3963 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_BUFSIZE },
3964 /* ATI SB 450/600/700/800/900 */
3965 { PCI_DEVICE(0x1002, 0x437b),
3966 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
3967 { PCI_DEVICE(0x1002, 0x4383),
3968 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
3969 /* AMD Hudson */
3970 { PCI_DEVICE(0x1022, 0x780d),
3971 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
3972 /* ATI HDMI */
3973 { PCI_DEVICE(0x1002, 0x793b),
3974 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3975 { PCI_DEVICE(0x1002, 0x7919),
3976 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3977 { PCI_DEVICE(0x1002, 0x960f),
3978 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3979 { PCI_DEVICE(0x1002, 0x970f),
3980 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3981 { PCI_DEVICE(0x1002, 0xaa00),
3982 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3983 { PCI_DEVICE(0x1002, 0xaa08),
3984 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3985 { PCI_DEVICE(0x1002, 0xaa10),
3986 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3987 { PCI_DEVICE(0x1002, 0xaa18),
3988 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3989 { PCI_DEVICE(0x1002, 0xaa20),
3990 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3991 { PCI_DEVICE(0x1002, 0xaa28),
3992 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3993 { PCI_DEVICE(0x1002, 0xaa30),
3994 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3995 { PCI_DEVICE(0x1002, 0xaa38),
3996 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3997 { PCI_DEVICE(0x1002, 0xaa40),
3998 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
3999 { PCI_DEVICE(0x1002, 0xaa48),
4000 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
4001 { PCI_DEVICE(0x1002, 0x9902),
4002 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4003 { PCI_DEVICE(0x1002, 0xaaa0),
4004 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4005 { PCI_DEVICE(0x1002, 0xaaa8),
4006 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4007 { PCI_DEVICE(0x1002, 0xaab0),
4008 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI },
4009 /* VIA VT8251/VT8237A */
4010 { PCI_DEVICE(0x1106, 0x3288),
4011 .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
4012 /* VIA GFX VT7122/VX900 */
4013 { PCI_DEVICE(0x1106, 0x9170), .driver_data = AZX_DRIVER_GENERIC },
4014 /* VIA GFX VT6122/VX11 */
4015 { PCI_DEVICE(0x1106, 0x9140), .driver_data = AZX_DRIVER_GENERIC },
4016 /* SIS966 */
4017 { PCI_DEVICE(0x1039, 0x7502), .driver_data = AZX_DRIVER_SIS },
4018 /* ULI M5461 */
4019 { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI },
4020 /* NVIDIA MCP */
4021 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID),
4022 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4023 .class_mask = 0xffffff,
4024 .driver_data = AZX_DRIVER_NVIDIA | AZX_DCAPS_PRESET_NVIDIA },
4025 /* Teradici */
4026 { PCI_DEVICE(0x6549, 0x1200),
4027 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
4028 { PCI_DEVICE(0x6549, 0x2200),
4029 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },
4030 /* Creative X-Fi (CA0110-IBG) */
4031 /* CTHDA chips */
4032 { PCI_DEVICE(0x1102, 0x0010),
4033 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
4034 { PCI_DEVICE(0x1102, 0x0012),
4035 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },
4036 #if !defined(CONFIG_SND_CTXFI) && !defined(CONFIG_SND_CTXFI_MODULE)
4037 /* the following entry conflicts with snd-ctxfi driver,
4038 * as ctxfi driver mutates from HD-audio to native mode with
4039 * a special command sequence.
4040 */
4041 { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_ANY_ID),
4042 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4043 .class_mask = 0xffffff,
4044 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
4045 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
4046 #else
4047 /* this entry seems still valid -- i.e. without emu20kx chip */
4048 { PCI_DEVICE(0x1102, 0x0009),
4049 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
4050 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
4051 #endif
4052 /* Vortex86MX */
4053 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
4054 /* VMware HDAudio */
4055 { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC },
4056 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */
4057 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID),
4058 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4059 .class_mask = 0xffffff,
4060 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
4061 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_ANY_ID),
4062 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
4063 .class_mask = 0xffffff,
4064 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },
4065 { 0, }
4066 };
4067 MODULE_DEVICE_TABLE(pci, azx_ids);
4068
4069 /* pci_driver definition */
4070 static struct pci_driver azx_driver = {
4071 .name = KBUILD_MODNAME,
4072 .id_table = azx_ids,
4073 .probe = azx_probe,
4074 .remove = azx_remove,
4075 .driver = {
4076 .pm = AZX_PM_OPS,
4077 },
4078 };
4079
4080 module_pci_driver(azx_driver);
This page took 0.214056 seconds and 5 git commands to generate.