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 (!bus->no_response_fallback) 952 return -1; 953 954 if (!chip->polling_mode && chip->poll_count < 2) { 955 snd_printdd(SFX "%s: azx_get_response timeout, " 956 "polling the codec once: last cmd=0x%08x\n", 957 pci_name(chip->pci), chip->last_cmd[addr]); 958 do_poll = 1; 959 chip->poll_count++; 960 goto again; 961 } 962 963 964 if (!chip->polling_mode) { 965 snd_printk(KERN_WARNING SFX "%s: azx_get_response timeout, " 966 "switching to polling mode: last cmd=0x%08x\n", 967 pci_name(chip->pci), chip->last_cmd[addr]); 968 chip->polling_mode = 1; 969 goto again; 970 } 971 972 if (chip->msi) { 973 snd_printk(KERN_WARNING SFX "%s: No response from codec, " 974 "disabling MSI: last cmd=0x%08x\n", 975 pci_name(chip->pci), chip->last_cmd[addr]); 976 free_irq(chip->irq, chip); 977 chip->irq = -1; 978 pci_disable_msi(chip->pci); 979 chip->msi = 0; 980 if (azx_acquire_irq(chip, 1) < 0) { 981 bus->rirb_error = 1; 982 return -1; 983 } 984 goto again; 985 } 986 987 if (chip->probing) { 988 /* If this critical timeout happens during the codec probing 989 * phase, this is likely an access to a non-existing codec 990 * slot. Better to return an error and reset the system. 991 */ 992 return -1; 993 } 994 995 /* a fatal communication error; need either to reset or to fallback 996 * to the single_cmd mode 997 */ 998 bus->rirb_error = 1; 999 if (bus->allow_bus_reset && !bus->response_reset && !bus->in_reset) { 1000 bus->response_reset = 1; 1001 return -1; /* give a chance to retry */ 1002 } 1003 1004 snd_printk(KERN_ERR "hda_intel: azx_get_response timeout, " 1005 "switching to single_cmd mode: last cmd=0x%08x\n", 1006 chip->last_cmd[addr]); 1007 chip->single_cmd = 1; 1008 bus->response_reset = 0; 1009 /* release CORB/RIRB */ 1010 azx_free_cmd_io(chip); 1011 /* disable unsolicited responses */ 1012 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_UNSOL); 1013 return -1; 1014 } 1015 1016 /* 1017 * Use the single immediate command instead of CORB/RIRB for simplicity 1018 * 1019 * Note: according to Intel, this is not preferred use. The command was 1020 * intended for the BIOS only, and may get confused with unsolicited 1021 * responses. So, we shouldn't use it for normal operation from the 1022 * driver. 1023 * I left the codes, however, for debugging/testing purposes. 1024 */ 1025 1026 /* receive a response */ 1027 static int azx_single_wait_for_response(struct azx *chip, unsigned int addr) 1028 { 1029 int timeout = 50; 1030 1031 while (timeout--) { 1032 /* check IRV busy bit */ 1033 if (azx_readw(chip, IRS) & ICH6_IRS_VALID) { 1034 /* reuse rirb.res as the response return value */ 1035 chip->rirb.res[addr] = azx_readl(chip, IR); 1036 return 0; 1037 } 1038 udelay(1); 1039 } 1040 if (printk_ratelimit()) 1041 snd_printd(SFX "%s: get_response timeout: IRS=0x%x\n", 1042 pci_name(chip->pci), azx_readw(chip, IRS)); 1043 chip->rirb.res[addr] = -1; 1044 return -EIO; 1045 } 1046 1047 /* send a command */ 1048 static int azx_single_send_cmd(struct hda_bus *bus, u32 val) 1049 { 1050 struct azx *chip = bus->private_data; 1051 unsigned int addr = azx_command_addr(val); 1052 int timeout = 50; 1053 1054 bus->rirb_error = 0; 1055 while (timeout--) { 1056 /* check ICB busy bit */ 1057 if (!((azx_readw(chip, IRS) & ICH6_IRS_BUSY))) { 1058 /* Clear IRV valid bit */ 1059 azx_writew(chip, IRS, azx_readw(chip, IRS) | 1060 ICH6_IRS_VALID); 1061 azx_writel(chip, IC, val); 1062 azx_writew(chip, IRS, azx_readw(chip, IRS) | 1063 ICH6_IRS_BUSY); 1064 return azx_single_wait_for_response(chip, addr); 1065 } 1066 udelay(1); 1067 } 1068 if (printk_ratelimit()) 1069 snd_printd(SFX "%s: send_cmd timeout: IRS=0x%x, val=0x%x\n", 1070 pci_name(chip->pci), azx_readw(chip, IRS), val); 1071 return -EIO; 1072 } 1073 1074 /* receive a response */ 1075 static unsigned int azx_single_get_response(struct hda_bus *bus, 1076 unsigned int addr) 1077 { 1078 struct azx *chip = bus->private_data; 1079 return chip->rirb.res[addr]; 1080 } 1081 1082 /* 1083 * The below are the main callbacks from hda_codec. 1084 * 1085 * They are just the skeleton to call sub-callbacks according to the 1086 * current setting of chip->single_cmd. 1087 */ 1088 1089 /* send a command */ 1090 static int azx_send_cmd(struct hda_bus *bus, unsigned int val) 1091 { 1092 struct azx *chip = bus->private_data; 1093 1094 if (chip->disabled) 1095 return 0; 1096 chip->last_cmd[azx_command_addr(val)] = val; 1097 if (chip->single_cmd) 1098 return azx_single_send_cmd(bus, val); 1099 else 1100 return azx_corb_send_cmd(bus, val); 1101 } 1102 1103 /* get a response */ 1104 static unsigned int azx_get_response(struct hda_bus *bus, 1105 unsigned int addr) 1106 { 1107 struct azx *chip = bus->private_data; 1108 if (chip->disabled) 1109 return 0; 1110 if (chip->single_cmd) 1111 return azx_single_get_response(bus, addr); 1112 else 1113 return azx_rirb_get_response(bus, addr); 1114 } 1115 1116 #ifdef CONFIG_PM 1117 static void azx_power_notify(struct hda_bus *bus, bool power_up); 1118 #endif 1119 1120 #ifdef CONFIG_SND_HDA_DSP_LOADER 1121 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format, 1122 unsigned int byte_size, 1123 struct snd_dma_buffer *bufp); 1124 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start); 1125 static void azx_load_dsp_cleanup(struct hda_bus *bus, 1126 struct snd_dma_buffer *dmab); 1127 #endif 1128 1129 /* enter link reset */ 1130 static void azx_enter_link_reset(struct azx *chip) 1131 { 1132 unsigned long timeout; 1133 1134 /* reset controller */ 1135 azx_writel(chip, GCTL, azx_readl(chip, GCTL) & ~ICH6_GCTL_RESET); 1136 1137 timeout = jiffies + msecs_to_jiffies(100); 1138 while ((azx_readb(chip, GCTL) & ICH6_GCTL_RESET) && 1139 time_before(jiffies, timeout)) 1140 usleep_range(500, 1000); 1141 } 1142 1143 /* exit link reset */ 1144 static void azx_exit_link_reset(struct azx *chip) 1145 { 1146 unsigned long timeout; 1147 1148 azx_writeb(chip, GCTL, azx_readb(chip, GCTL) | ICH6_GCTL_RESET); 1149 1150 timeout = jiffies + msecs_to_jiffies(100); 1151 while (!azx_readb(chip, GCTL) && 1152 time_before(jiffies, timeout)) 1153 usleep_range(500, 1000); 1154 } 1155 1156 /* reset codec link */ 1157 static int azx_reset(struct azx *chip, int full_reset) 1158 { 1159 if (!full_reset) 1160 goto __skip; 1161 1162 /* clear STATESTS */ 1163 azx_writeb(chip, STATESTS, STATESTS_INT_MASK); 1164 1165 /* reset controller */ 1166 azx_enter_link_reset(chip); 1167 1168 /* delay for >= 100us for codec PLL to settle per spec 1169 * Rev 0.9 section 5.5.1 1170 */ 1171 usleep_range(500, 1000); 1172 1173 /* Bring controller out of reset */ 1174 azx_exit_link_reset(chip); 1175 1176 /* Brent Chartrand said to wait >= 540us for codecs to initialize */ 1177 usleep_range(1000, 1200); 1178 1179 __skip: 1180 /* check to see if controller is ready */ 1181 if (!azx_readb(chip, GCTL)) { 1182 snd_printd(SFX "%s: azx_reset: controller not ready!\n", pci_name(chip->pci)); 1183 return -EBUSY; 1184 } 1185 1186 /* Accept unsolicited responses */ 1187 if (!chip->single_cmd) 1188 azx_writel(chip, GCTL, azx_readl(chip, GCTL) | 1189 ICH6_GCTL_UNSOL); 1190 1191 /* detect codecs */ 1192 if (!chip->codec_mask) { 1193 chip->codec_mask = azx_readw(chip, STATESTS); 1194 snd_printdd(SFX "%s: codec_mask = 0x%x\n", pci_name(chip->pci), chip->codec_mask); 1195 } 1196 1197 return 0; 1198 } 1199 1200 1201 /* 1202 * Lowlevel interface 1203 */ 1204 1205 /* enable interrupts */ 1206 static void azx_int_enable(struct azx *chip) 1207 { 1208 /* enable controller CIE and GIE */ 1209 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) | 1210 ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN); 1211 } 1212 1213 /* disable interrupts */ 1214 static void azx_int_disable(struct azx *chip) 1215 { 1216 int i; 1217 1218 /* disable interrupts in stream descriptor */ 1219 for (i = 0; i < chip->num_streams; i++) { 1220 struct azx_dev *azx_dev = &chip->azx_dev[i]; 1221 azx_sd_writeb(azx_dev, SD_CTL, 1222 azx_sd_readb(azx_dev, SD_CTL) & ~SD_INT_MASK); 1223 } 1224 1225 /* disable SIE for all streams */ 1226 azx_writeb(chip, INTCTL, 0); 1227 1228 /* disable controller CIE and GIE */ 1229 azx_writel(chip, INTCTL, azx_readl(chip, INTCTL) & 1230 ~(ICH6_INT_CTRL_EN | ICH6_INT_GLOBAL_EN)); 1231 } 1232 1233 /* clear interrupts */ 1234 static void azx_int_clear(struct azx *chip) 1235 { 1236 int i; 1237 1238 /* clear stream status */ 1239 for (i = 0; i < chip->num_streams; i++) { 1240 struct azx_dev *azx_dev = &chip->azx_dev[i]; 1241 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); 1242 } 1243 1244 /* clear STATESTS */ 1245 azx_writeb(chip, STATESTS, STATESTS_INT_MASK); 1246 1247 /* clear rirb status */ 1248 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK); 1249 1250 /* clear int status */ 1251 azx_writel(chip, INTSTS, ICH6_INT_CTRL_EN | ICH6_INT_ALL_STREAM); 1252 } 1253 1254 /* start a stream */ 1255 static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev) 1256 { 1257 /* 1258 * Before stream start, initialize parameter 1259 */ 1260 azx_dev->insufficient = 1; 1261 1262 /* enable SIE */ 1263 azx_writel(chip, INTCTL, 1264 azx_readl(chip, INTCTL) | (1 << azx_dev->index)); 1265 /* set DMA start and interrupt mask */ 1266 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) | 1267 SD_CTL_DMA_START | SD_INT_MASK); 1268 } 1269 1270 /* stop DMA */ 1271 static void azx_stream_clear(struct azx *chip, struct azx_dev *azx_dev) 1272 { 1273 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) & 1274 ~(SD_CTL_DMA_START | SD_INT_MASK)); 1275 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); /* to be sure */ 1276 } 1277 1278 /* stop a stream */ 1279 static void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev) 1280 { 1281 azx_stream_clear(chip, azx_dev); 1282 /* disable SIE */ 1283 azx_writel(chip, INTCTL, 1284 azx_readl(chip, INTCTL) & ~(1 << azx_dev->index)); 1285 } 1286 1287 1288 /* 1289 * reset and start the controller registers 1290 */ 1291 static void azx_init_chip(struct azx *chip, int full_reset) 1292 { 1293 if (chip->initialized) 1294 return; 1295 1296 /* reset controller */ 1297 azx_reset(chip, full_reset); 1298 1299 /* initialize interrupts */ 1300 azx_int_clear(chip); 1301 azx_int_enable(chip); 1302 1303 /* initialize the codec command I/O */ 1304 if (!chip->single_cmd) 1305 azx_init_cmd_io(chip); 1306 1307 /* program the position buffer */ 1308 azx_writel(chip, DPLBASE, (u32)chip->posbuf.addr); 1309 azx_writel(chip, DPUBASE, upper_32_bits(chip->posbuf.addr)); 1310 1311 chip->initialized = 1; 1312 } 1313 1314 /* 1315 * initialize the PCI registers 1316 */ 1317 /* update bits in a PCI register byte */ 1318 static void update_pci_byte(struct pci_dev *pci, unsigned int reg, 1319 unsigned char mask, unsigned char val) 1320 { 1321 unsigned char data; 1322 1323 pci_read_config_byte(pci, reg, &data); 1324 data &= ~mask; 1325 data |= (val & mask); 1326 pci_write_config_byte(pci, reg, data); 1327 } 1328 1329 static void azx_init_pci(struct azx *chip) 1330 { 1331 /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44) 1332 * TCSEL == Traffic Class Select Register, which sets PCI express QOS 1333 * Ensuring these bits are 0 clears playback static on some HD Audio 1334 * codecs. 1335 * The PCI register TCSEL is defined in the Intel manuals. 1336 */ 1337 if (!(chip->driver_caps & AZX_DCAPS_NO_TCSEL)) { 1338 snd_printdd(SFX "%s: Clearing TCSEL\n", pci_name(chip->pci)); 1339 update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0); 1340 } 1341 1342 /* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio, 1343 * we need to enable snoop. 1344 */ 1345 if (chip->driver_caps & AZX_DCAPS_ATI_SNOOP) { 1346 snd_printdd(SFX "%s: Setting ATI snoop: %d\n", pci_name(chip->pci), azx_snoop(chip)); 1347 update_pci_byte(chip->pci, 1348 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR, 0x07, 1349 azx_snoop(chip) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP : 0); 1350 } 1351 1352 /* For NVIDIA HDA, enable snoop */ 1353 if (chip->driver_caps & AZX_DCAPS_NVIDIA_SNOOP) { 1354 snd_printdd(SFX "%s: Setting Nvidia snoop: %d\n", pci_name(chip->pci), azx_snoop(chip)); 1355 update_pci_byte(chip->pci, 1356 NVIDIA_HDA_TRANSREG_ADDR, 1357 0x0f, NVIDIA_HDA_ENABLE_COHBITS); 1358 update_pci_byte(chip->pci, 1359 NVIDIA_HDA_ISTRM_COH, 1360 0x01, NVIDIA_HDA_ENABLE_COHBIT); 1361 update_pci_byte(chip->pci, 1362 NVIDIA_HDA_OSTRM_COH, 1363 0x01, NVIDIA_HDA_ENABLE_COHBIT); 1364 } 1365 1366 /* Enable SCH/PCH snoop if needed */ 1367 if (chip->driver_caps & AZX_DCAPS_SCH_SNOOP) { 1368 unsigned short snoop; 1369 pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop); 1370 if ((!azx_snoop(chip) && !(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)) || 1371 (azx_snoop(chip) && (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP))) { 1372 snoop &= ~INTEL_SCH_HDA_DEVC_NOSNOOP; 1373 if (!azx_snoop(chip)) 1374 snoop |= INTEL_SCH_HDA_DEVC_NOSNOOP; 1375 pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, snoop); 1376 pci_read_config_word(chip->pci, 1377 INTEL_SCH_HDA_DEVC, &snoop); 1378 } 1379 snd_printdd(SFX "%s: SCH snoop: %s\n", 1380 pci_name(chip->pci), (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP) 1381 ? "Disabled" : "Enabled"); 1382 } 1383 } 1384 1385 1386 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev); 1387 1388 /* 1389 * interrupt handler 1390 */ 1391 static irqreturn_t azx_interrupt(int irq, void *dev_id) 1392 { 1393 struct azx *chip = dev_id; 1394 struct azx_dev *azx_dev; 1395 u32 status; 1396 u8 sd_status; 1397 int i, ok; 1398 1399 #ifdef CONFIG_PM_RUNTIME 1400 if (chip->pci->dev.power.runtime_status != RPM_ACTIVE) 1401 return IRQ_NONE; 1402 #endif 1403 1404 spin_lock(&chip->reg_lock); 1405 1406 if (chip->disabled) { 1407 spin_unlock(&chip->reg_lock); 1408 return IRQ_NONE; 1409 } 1410 1411 status = azx_readl(chip, INTSTS); 1412 if (status == 0) { 1413 spin_unlock(&chip->reg_lock); 1414 return IRQ_NONE; 1415 } 1416 1417 for (i = 0; i < chip->num_streams; i++) { 1418 azx_dev = &chip->azx_dev[i]; 1419 if (status & azx_dev->sd_int_sta_mask) { 1420 sd_status = azx_sd_readb(azx_dev, SD_STS); 1421 azx_sd_writeb(azx_dev, SD_STS, SD_INT_MASK); 1422 if (!azx_dev->substream || !azx_dev->running || 1423 !(sd_status & SD_INT_COMPLETE)) 1424 continue; 1425 /* check whether this IRQ is really acceptable */ 1426 ok = azx_position_ok(chip, azx_dev); 1427 if (ok == 1) { 1428 azx_dev->irq_pending = 0; 1429 spin_unlock(&chip->reg_lock); 1430 snd_pcm_period_elapsed(azx_dev->substream); 1431 spin_lock(&chip->reg_lock); 1432 } else if (ok == 0 && chip->bus && chip->bus->workq) { 1433 /* bogus IRQ, process it later */ 1434 azx_dev->irq_pending = 1; 1435 queue_work(chip->bus->workq, 1436 &chip->irq_pending_work); 1437 } 1438 } 1439 } 1440 1441 /* clear rirb int */ 1442 status = azx_readb(chip, RIRBSTS); 1443 if (status & RIRB_INT_MASK) { 1444 if (status & RIRB_INT_RESPONSE) { 1445 if (chip->driver_caps & AZX_DCAPS_RIRB_PRE_DELAY) 1446 udelay(80); 1447 azx_update_rirb(chip); 1448 } 1449 azx_writeb(chip, RIRBSTS, RIRB_INT_MASK); 1450 } 1451 1452 #if 0 1453 /* clear state status int */ 1454 if (azx_readb(chip, STATESTS) & 0x04) 1455 azx_writeb(chip, STATESTS, 0x04); 1456 #endif 1457 spin_unlock(&chip->reg_lock); 1458 1459 return IRQ_HANDLED; 1460 } 1461 1462 1463 /* 1464 * set up a BDL entry 1465 */ 1466 static int setup_bdle(struct azx *chip, 1467 struct snd_dma_buffer *dmab, 1468 struct azx_dev *azx_dev, u32 **bdlp, 1469 int ofs, int size, int with_ioc) 1470 { 1471 u32 *bdl = *bdlp; 1472 1473 while (size > 0) { 1474 dma_addr_t addr; 1475 int chunk; 1476 1477 if (azx_dev->frags >= AZX_MAX_BDL_ENTRIES) 1478 return -EINVAL; 1479 1480 addr = snd_sgbuf_get_addr(dmab, ofs); 1481 /* program the address field of the BDL entry */ 1482 bdl[0] = cpu_to_le32((u32)addr); 1483 bdl[1] = cpu_to_le32(upper_32_bits(addr)); 1484 /* program the size field of the BDL entry */ 1485 chunk = snd_sgbuf_get_chunk_size(dmab, ofs, size); 1486 /* one BDLE cannot cross 4K boundary on CTHDA chips */ 1487 if (chip->driver_caps & AZX_DCAPS_4K_BDLE_BOUNDARY) { 1488 u32 remain = 0x1000 - (ofs & 0xfff); 1489 if (chunk > remain) 1490 chunk = remain; 1491 } 1492 bdl[2] = cpu_to_le32(chunk); 1493 /* program the IOC to enable interrupt 1494 * only when the whole fragment is processed 1495 */ 1496 size -= chunk; 1497 bdl[3] = (size || !with_ioc) ? 0 : cpu_to_le32(0x01); 1498 bdl += 4; 1499 azx_dev->frags++; 1500 ofs += chunk; 1501 } 1502 *bdlp = bdl; 1503 return ofs; 1504 } 1505 1506 /* 1507 * set up BDL entries 1508 */ 1509 static int azx_setup_periods(struct azx *chip, 1510 struct snd_pcm_substream *substream, 1511 struct azx_dev *azx_dev) 1512 { 1513 u32 *bdl; 1514 int i, ofs, periods, period_bytes; 1515 int pos_adj; 1516 1517 /* reset BDL address */ 1518 azx_sd_writel(azx_dev, SD_BDLPL, 0); 1519 azx_sd_writel(azx_dev, SD_BDLPU, 0); 1520 1521 period_bytes = azx_dev->period_bytes; 1522 periods = azx_dev->bufsize / period_bytes; 1523 1524 /* program the initial BDL entries */ 1525 bdl = (u32 *)azx_dev->bdl.area; 1526 ofs = 0; 1527 azx_dev->frags = 0; 1528 pos_adj = bdl_pos_adj[chip->dev_index]; 1529 if (!azx_dev->no_period_wakeup && pos_adj > 0) { 1530 struct snd_pcm_runtime *runtime = substream->runtime; 1531 int pos_align = pos_adj; 1532 pos_adj = (pos_adj * runtime->rate + 47999) / 48000; 1533 if (!pos_adj) 1534 pos_adj = pos_align; 1535 else 1536 pos_adj = ((pos_adj + pos_align - 1) / pos_align) * 1537 pos_align; 1538 pos_adj = frames_to_bytes(runtime, pos_adj); 1539 if (pos_adj >= period_bytes) { 1540 snd_printk(KERN_WARNING SFX "%s: Too big adjustment %d\n", 1541 pci_name(chip->pci), bdl_pos_adj[chip->dev_index]); 1542 pos_adj = 0; 1543 } else { 1544 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream), 1545 azx_dev, 1546 &bdl, ofs, pos_adj, true); 1547 if (ofs < 0) 1548 goto error; 1549 } 1550 } else 1551 pos_adj = 0; 1552 for (i = 0; i < periods; i++) { 1553 if (i == periods - 1 && pos_adj) 1554 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream), 1555 azx_dev, &bdl, ofs, 1556 period_bytes - pos_adj, 0); 1557 else 1558 ofs = setup_bdle(chip, snd_pcm_get_dma_buf(substream), 1559 azx_dev, &bdl, ofs, 1560 period_bytes, 1561 !azx_dev->no_period_wakeup); 1562 if (ofs < 0) 1563 goto error; 1564 } 1565 return 0; 1566 1567 error: 1568 snd_printk(KERN_ERR SFX "%s: Too many BDL entries: buffer=%d, period=%d\n", 1569 pci_name(chip->pci), azx_dev->bufsize, period_bytes); 1570 return -EINVAL; 1571 } 1572 1573 /* reset stream */ 1574 static void azx_stream_reset(struct azx *chip, struct azx_dev *azx_dev) 1575 { 1576 unsigned char val; 1577 int timeout; 1578 1579 azx_stream_clear(chip, azx_dev); 1580 1581 azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) | 1582 SD_CTL_STREAM_RESET); 1583 udelay(3); 1584 timeout = 300; 1585 while (!((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) && 1586 --timeout) 1587 ; 1588 val &= ~SD_CTL_STREAM_RESET; 1589 azx_sd_writeb(azx_dev, SD_CTL, val); 1590 udelay(3); 1591 1592 timeout = 300; 1593 /* waiting for hardware to report that the stream is out of reset */ 1594 while (((val = azx_sd_readb(azx_dev, SD_CTL)) & SD_CTL_STREAM_RESET) && 1595 --timeout) 1596 ; 1597 1598 /* reset first position - may not be synced with hw at this time */ 1599 *azx_dev->posbuf = 0; 1600 } 1601 1602 /* 1603 * set up the SD for streaming 1604 */ 1605 static int azx_setup_controller(struct azx *chip, struct azx_dev *azx_dev) 1606 { 1607 unsigned int val; 1608 /* make sure the run bit is zero for SD */ 1609 azx_stream_clear(chip, azx_dev); 1610 /* program the stream_tag */ 1611 val = azx_sd_readl(azx_dev, SD_CTL); 1612 val = (val & ~SD_CTL_STREAM_TAG_MASK) | 1613 (azx_dev->stream_tag << SD_CTL_STREAM_TAG_SHIFT); 1614 if (!azx_snoop(chip)) 1615 val |= SD_CTL_TRAFFIC_PRIO; 1616 azx_sd_writel(azx_dev, SD_CTL, val); 1617 1618 /* program the length of samples in cyclic buffer */ 1619 azx_sd_writel(azx_dev, SD_CBL, azx_dev->bufsize); 1620 1621 /* program the stream format */ 1622 /* this value needs to be the same as the one programmed */ 1623 azx_sd_writew(azx_dev, SD_FORMAT, azx_dev->format_val); 1624 1625 /* program the stream LVI (last valid index) of the BDL */ 1626 azx_sd_writew(azx_dev, SD_LVI, azx_dev->frags - 1); 1627 1628 /* program the BDL address */ 1629 /* lower BDL address */ 1630 azx_sd_writel(azx_dev, SD_BDLPL, (u32)azx_dev->bdl.addr); 1631 /* upper BDL address */ 1632 azx_sd_writel(azx_dev, SD_BDLPU, upper_32_bits(azx_dev->bdl.addr)); 1633 1634 /* enable the position buffer */ 1635 if (chip->position_fix[0] != POS_FIX_LPIB || 1636 chip->position_fix[1] != POS_FIX_LPIB) { 1637 if (!(azx_readl(chip, DPLBASE) & ICH6_DPLBASE_ENABLE)) 1638 azx_writel(chip, DPLBASE, 1639 (u32)chip->posbuf.addr | ICH6_DPLBASE_ENABLE); 1640 } 1641 1642 /* set the interrupt enable bits in the descriptor control register */ 1643 azx_sd_writel(azx_dev, SD_CTL, 1644 azx_sd_readl(azx_dev, SD_CTL) | SD_INT_MASK); 1645 1646 return 0; 1647 } 1648 1649 /* 1650 * Probe the given codec address 1651 */ 1652 static int probe_codec(struct azx *chip, int addr) 1653 { 1654 unsigned int cmd = (addr << 28) | (AC_NODE_ROOT << 20) | 1655 (AC_VERB_PARAMETERS << 8) | AC_PAR_VENDOR_ID; 1656 unsigned int res; 1657 1658 mutex_lock(&chip->bus->cmd_mutex); 1659 chip->probing = 1; 1660 azx_send_cmd(chip->bus, cmd); 1661 res = azx_get_response(chip->bus, addr); 1662 chip->probing = 0; 1663 mutex_unlock(&chip->bus->cmd_mutex); 1664 if (res == -1) 1665 return -EIO; 1666 snd_printdd(SFX "%s: codec #%d probed OK\n", pci_name(chip->pci), addr); 1667 return 0; 1668 } 1669 1670 static int azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec, 1671 struct hda_pcm *cpcm); 1672 static void azx_stop_chip(struct azx *chip); 1673 1674 static void azx_bus_reset(struct hda_bus *bus) 1675 { 1676 struct azx *chip = bus->private_data; 1677 1678 bus->in_reset = 1; 1679 azx_stop_chip(chip); 1680 azx_init_chip(chip, 1); 1681 #ifdef CONFIG_PM 1682 if (chip->initialized) { 1683 struct azx_pcm *p; 1684 list_for_each_entry(p, &chip->pcm_list, list) 1685 snd_pcm_suspend_all(p->pcm); 1686 snd_hda_suspend(chip->bus); 1687 snd_hda_resume(chip->bus); 1688 } 1689 #endif 1690 bus->in_reset = 0; 1691 } 1692 1693 static int get_jackpoll_interval(struct azx *chip) 1694 { 1695 int i = jackpoll_ms[chip->dev_index]; 1696 unsigned int j; 1697 if (i == 0) 1698 return 0; 1699 if (i < 50 || i > 60000) 1700 j = 0; 1701 else 1702 j = msecs_to_jiffies(i); 1703 if (j == 0) 1704 snd_printk(KERN_WARNING SFX 1705 "jackpoll_ms value out of range: %d\n", i); 1706 return j; 1707 } 1708 1709 /* 1710 * Codec initialization 1711 */ 1712 1713 /* number of codec slots for each chipset: 0 = default slots (i.e. 4) */ 1714 static unsigned int azx_max_codecs[AZX_NUM_DRIVERS] = { 1715 [AZX_DRIVER_NVIDIA] = 8, 1716 [AZX_DRIVER_TERA] = 1, 1717 }; 1718 1719 static int azx_codec_create(struct azx *chip, const char *model) 1720 { 1721 struct hda_bus_template bus_temp; 1722 int c, codecs, err; 1723 int max_slots; 1724 1725 memset(&bus_temp, 0, sizeof(bus_temp)); 1726 bus_temp.private_data = chip; 1727 bus_temp.modelname = model; 1728 bus_temp.pci = chip->pci; 1729 bus_temp.ops.command = azx_send_cmd; 1730 bus_temp.ops.get_response = azx_get_response; 1731 bus_temp.ops.attach_pcm = azx_attach_pcm_stream; 1732 bus_temp.ops.bus_reset = azx_bus_reset; 1733 #ifdef CONFIG_PM 1734 bus_temp.power_save = &power_save; 1735 bus_temp.ops.pm_notify = azx_power_notify; 1736 #endif 1737 #ifdef CONFIG_SND_HDA_DSP_LOADER 1738 bus_temp.ops.load_dsp_prepare = azx_load_dsp_prepare; 1739 bus_temp.ops.load_dsp_trigger = azx_load_dsp_trigger; 1740 bus_temp.ops.load_dsp_cleanup = azx_load_dsp_cleanup; 1741 #endif 1742 1743 err = snd_hda_bus_new(chip->card, &bus_temp, &chip->bus); 1744 if (err < 0) 1745 return err; 1746 1747 if (chip->driver_caps & AZX_DCAPS_RIRB_DELAY) { 1748 snd_printd(SFX "%s: Enable delay in RIRB handling\n", pci_name(chip->pci)); 1749 chip->bus->needs_damn_long_delay = 1; 1750 } 1751 1752 codecs = 0; 1753 max_slots = azx_max_codecs[chip->driver_type]; 1754 if (!max_slots) 1755 max_slots = AZX_DEFAULT_CODECS; 1756 1757 /* First try to probe all given codec slots */ 1758 for (c = 0; c < max_slots; c++) { 1759 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) { 1760 if (probe_codec(chip, c) < 0) { 1761 /* Some BIOSen give you wrong codec addresses 1762 * that don't exist 1763 */ 1764 snd_printk(KERN_WARNING SFX 1765 "%s: Codec #%d probe error; " 1766 "disabling it...\n", pci_name(chip->pci), c); 1767 chip->codec_mask &= ~(1 << c); 1768 /* More badly, accessing to a non-existing 1769 * codec often screws up the controller chip, 1770 * and disturbs the further communications. 1771 * Thus if an error occurs during probing, 1772 * better to reset the controller chip to 1773 * get back to the sanity state. 1774 */ 1775 azx_stop_chip(chip); 1776 azx_init_chip(chip, 1); 1777 } 1778 } 1779 } 1780 1781 /* AMD chipsets often cause the communication stalls upon certain 1782 * sequence like the pin-detection. It seems that forcing the synced 1783 * access works around the stall. Grrr... 1784 */ 1785 if (chip->driver_caps & AZX_DCAPS_SYNC_WRITE) { 1786 snd_printd(SFX "%s: Enable sync_write for stable communication\n", 1787 pci_name(chip->pci)); 1788 chip->bus->sync_write = 1; 1789 chip->bus->allow_bus_reset = 1; 1790 } 1791 1792 /* Then create codec instances */ 1793 for (c = 0; c < max_slots; c++) { 1794 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) { 1795 struct hda_codec *codec; 1796 err = snd_hda_codec_new(chip->bus, c, &codec); 1797 if (err < 0) 1798 continue; 1799 codec->jackpoll_interval = get_jackpoll_interval(chip); 1800 codec->beep_mode = chip->beep_mode; 1801 codecs++; 1802 } 1803 } 1804 if (!codecs) { 1805 snd_printk(KERN_ERR SFX "%s: no codecs initialized\n", pci_name(chip->pci)); 1806 return -ENXIO; 1807 } 1808 return 0; 1809 } 1810 1811 /* configure each codec instance */ 1812 static int azx_codec_configure(struct azx *chip) 1813 { 1814 struct hda_codec *codec; 1815 list_for_each_entry(codec, &chip->bus->codec_list, list) { 1816 snd_hda_codec_configure(codec); 1817 } 1818 return 0; 1819 } 1820 1821 1822 /* 1823 * PCM support 1824 */ 1825 1826 /* assign a stream for the PCM */ 1827 static inline struct azx_dev * 1828 azx_assign_device(struct azx *chip, struct snd_pcm_substream *substream) 1829 { 1830 int dev, i, nums; 1831 struct azx_dev *res = NULL; 1832 /* make a non-zero unique key for the substream */ 1833 int key = (substream->pcm->device << 16) | (substream->number << 2) | 1834 (substream->stream + 1); 1835 1836 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { 1837 dev = chip->playback_index_offset; 1838 nums = chip->playback_streams; 1839 } else { 1840 dev = chip->capture_index_offset; 1841 nums = chip->capture_streams; 1842 } 1843 for (i = 0; i < nums; i++, dev++) { 1844 struct azx_dev *azx_dev = &chip->azx_dev[dev]; 1845 dsp_lock(azx_dev); 1846 if (!azx_dev->opened && !dsp_is_locked(azx_dev)) { 1847 res = azx_dev; 1848 if (res->assigned_key == key) { 1849 res->opened = 1; 1850 res->assigned_key = key; 1851 dsp_unlock(azx_dev); 1852 return azx_dev; 1853 } 1854 } 1855 dsp_unlock(azx_dev); 1856 } 1857 if (res) { 1858 dsp_lock(res); 1859 res->opened = 1; 1860 res->assigned_key = key; 1861 dsp_unlock(res); 1862 } 1863 return res; 1864 } 1865 1866 /* release the assigned stream */ 1867 static inline void azx_release_device(struct azx_dev *azx_dev) 1868 { 1869 azx_dev->opened = 0; 1870 } 1871 1872 static cycle_t azx_cc_read(const struct cyclecounter *cc) 1873 { 1874 struct azx_dev *azx_dev = container_of(cc, struct azx_dev, azx_cc); 1875 struct snd_pcm_substream *substream = azx_dev->substream; 1876 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 1877 struct azx *chip = apcm->chip; 1878 1879 return azx_readl(chip, WALLCLK); 1880 } 1881 1882 static void azx_timecounter_init(struct snd_pcm_substream *substream, 1883 bool force, cycle_t last) 1884 { 1885 struct azx_dev *azx_dev = get_azx_dev(substream); 1886 struct timecounter *tc = &azx_dev->azx_tc; 1887 struct cyclecounter *cc = &azx_dev->azx_cc; 1888 u64 nsec; 1889 1890 cc->read = azx_cc_read; 1891 cc->mask = CLOCKSOURCE_MASK(32); 1892 1893 /* 1894 * Converting from 24 MHz to ns means applying a 125/3 factor. 1895 * To avoid any saturation issues in intermediate operations, 1896 * the 125 factor is applied first. The division is applied 1897 * last after reading the timecounter value. 1898 * Applying the 1/3 factor as part of the multiplication 1899 * requires at least 20 bits for a decent precision, however 1900 * overflows occur after about 4 hours or less, not a option. 1901 */ 1902 1903 cc->mult = 125; /* saturation after 195 years */ 1904 cc->shift = 0; 1905 1906 nsec = 0; /* audio time is elapsed time since trigger */ 1907 timecounter_init(tc, cc, nsec); 1908 if (force) 1909 /* 1910 * force timecounter to use predefined value, 1911 * used for synchronized starts 1912 */ 1913 tc->cycle_last = last; 1914 } 1915 1916 static u64 azx_adjust_codec_delay(struct snd_pcm_substream *substream, 1917 u64 nsec) 1918 { 1919 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 1920 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream]; 1921 u64 codec_frames, codec_nsecs; 1922 1923 if (!hinfo->ops.get_delay) 1924 return nsec; 1925 1926 codec_frames = hinfo->ops.get_delay(hinfo, apcm->codec, substream); 1927 codec_nsecs = div_u64(codec_frames * 1000000000LL, 1928 substream->runtime->rate); 1929 1930 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) 1931 return nsec + codec_nsecs; 1932 1933 return (nsec > codec_nsecs) ? nsec - codec_nsecs : 0; 1934 } 1935 1936 static int azx_get_wallclock_tstamp(struct snd_pcm_substream *substream, 1937 struct timespec *ts) 1938 { 1939 struct azx_dev *azx_dev = get_azx_dev(substream); 1940 u64 nsec; 1941 1942 nsec = timecounter_read(&azx_dev->azx_tc); 1943 nsec = div_u64(nsec, 3); /* can be optimized */ 1944 nsec = azx_adjust_codec_delay(substream, nsec); 1945 1946 *ts = ns_to_timespec(nsec); 1947 1948 return 0; 1949 } 1950 1951 static struct snd_pcm_hardware azx_pcm_hw = { 1952 .info = (SNDRV_PCM_INFO_MMAP | 1953 SNDRV_PCM_INFO_INTERLEAVED | 1954 SNDRV_PCM_INFO_BLOCK_TRANSFER | 1955 SNDRV_PCM_INFO_MMAP_VALID | 1956 /* No full-resume yet implemented */ 1957 /* SNDRV_PCM_INFO_RESUME |*/ 1958 SNDRV_PCM_INFO_PAUSE | 1959 SNDRV_PCM_INFO_SYNC_START | 1960 SNDRV_PCM_INFO_HAS_WALL_CLOCK | 1961 SNDRV_PCM_INFO_NO_PERIOD_WAKEUP), 1962 .formats = SNDRV_PCM_FMTBIT_S16_LE, 1963 .rates = SNDRV_PCM_RATE_48000, 1964 .rate_min = 48000, 1965 .rate_max = 48000, 1966 .channels_min = 2, 1967 .channels_max = 2, 1968 .buffer_bytes_max = AZX_MAX_BUF_SIZE, 1969 .period_bytes_min = 128, 1970 .period_bytes_max = AZX_MAX_BUF_SIZE / 2, 1971 .periods_min = 2, 1972 .periods_max = AZX_MAX_FRAG, 1973 .fifo_size = 0, 1974 }; 1975 1976 static int azx_pcm_open(struct snd_pcm_substream *substream) 1977 { 1978 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 1979 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream]; 1980 struct azx *chip = apcm->chip; 1981 struct azx_dev *azx_dev; 1982 struct snd_pcm_runtime *runtime = substream->runtime; 1983 unsigned long flags; 1984 int err; 1985 int buff_step; 1986 1987 mutex_lock(&chip->open_mutex); 1988 azx_dev = azx_assign_device(chip, substream); 1989 if (azx_dev == NULL) { 1990 mutex_unlock(&chip->open_mutex); 1991 return -EBUSY; 1992 } 1993 runtime->hw = azx_pcm_hw; 1994 runtime->hw.channels_min = hinfo->channels_min; 1995 runtime->hw.channels_max = hinfo->channels_max; 1996 runtime->hw.formats = hinfo->formats; 1997 runtime->hw.rates = hinfo->rates; 1998 snd_pcm_limit_hw_rates(runtime); 1999 snd_pcm_hw_constraint_integer(runtime, SNDRV_PCM_HW_PARAM_PERIODS); 2000 2001 /* avoid wrap-around with wall-clock */ 2002 snd_pcm_hw_constraint_minmax(runtime, SNDRV_PCM_HW_PARAM_BUFFER_TIME, 2003 20, 2004 178000000); 2005 2006 if (chip->align_buffer_size) 2007 /* constrain buffer sizes to be multiple of 128 2008 bytes. This is more efficient in terms of memory 2009 access but isn't required by the HDA spec and 2010 prevents users from specifying exact period/buffer 2011 sizes. For example for 44.1kHz, a period size set 2012 to 20ms will be rounded to 19.59ms. */ 2013 buff_step = 128; 2014 else 2015 /* Don't enforce steps on buffer sizes, still need to 2016 be multiple of 4 bytes (HDA spec). Tested on Intel 2017 HDA controllers, may not work on all devices where 2018 option needs to be disabled */ 2019 buff_step = 4; 2020 2021 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_BUFFER_BYTES, 2022 buff_step); 2023 snd_pcm_hw_constraint_step(runtime, 0, SNDRV_PCM_HW_PARAM_PERIOD_BYTES, 2024 buff_step); 2025 snd_hda_power_up_d3wait(apcm->codec); 2026 err = hinfo->ops.open(hinfo, apcm->codec, substream); 2027 if (err < 0) { 2028 azx_release_device(azx_dev); 2029 snd_hda_power_down(apcm->codec); 2030 mutex_unlock(&chip->open_mutex); 2031 return err; 2032 } 2033 snd_pcm_limit_hw_rates(runtime); 2034 /* sanity check */ 2035 if (snd_BUG_ON(!runtime->hw.channels_min) || 2036 snd_BUG_ON(!runtime->hw.channels_max) || 2037 snd_BUG_ON(!runtime->hw.formats) || 2038 snd_BUG_ON(!runtime->hw.rates)) { 2039 azx_release_device(azx_dev); 2040 hinfo->ops.close(hinfo, apcm->codec, substream); 2041 snd_hda_power_down(apcm->codec); 2042 mutex_unlock(&chip->open_mutex); 2043 return -EINVAL; 2044 } 2045 2046 /* disable WALLCLOCK timestamps for capture streams 2047 until we figure out how to handle digital inputs */ 2048 if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) 2049 runtime->hw.info &= ~SNDRV_PCM_INFO_HAS_WALL_CLOCK; 2050 2051 spin_lock_irqsave(&chip->reg_lock, flags); 2052 azx_dev->substream = substream; 2053 azx_dev->running = 0; 2054 spin_unlock_irqrestore(&chip->reg_lock, flags); 2055 2056 runtime->private_data = azx_dev; 2057 snd_pcm_set_sync(substream); 2058 mutex_unlock(&chip->open_mutex); 2059 return 0; 2060 } 2061 2062 static int azx_pcm_close(struct snd_pcm_substream *substream) 2063 { 2064 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 2065 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream]; 2066 struct azx *chip = apcm->chip; 2067 struct azx_dev *azx_dev = get_azx_dev(substream); 2068 unsigned long flags; 2069 2070 mutex_lock(&chip->open_mutex); 2071 spin_lock_irqsave(&chip->reg_lock, flags); 2072 azx_dev->substream = NULL; 2073 azx_dev->running = 0; 2074 spin_unlock_irqrestore(&chip->reg_lock, flags); 2075 azx_release_device(azx_dev); 2076 hinfo->ops.close(hinfo, apcm->codec, substream); 2077 snd_hda_power_down(apcm->codec); 2078 mutex_unlock(&chip->open_mutex); 2079 return 0; 2080 } 2081 2082 static int azx_pcm_hw_params(struct snd_pcm_substream *substream, 2083 struct snd_pcm_hw_params *hw_params) 2084 { 2085 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 2086 struct azx *chip = apcm->chip; 2087 struct azx_dev *azx_dev = get_azx_dev(substream); 2088 int ret; 2089 2090 dsp_lock(azx_dev); 2091 if (dsp_is_locked(azx_dev)) { 2092 ret = -EBUSY; 2093 goto unlock; 2094 } 2095 2096 mark_runtime_wc(chip, azx_dev, substream, false); 2097 azx_dev->bufsize = 0; 2098 azx_dev->period_bytes = 0; 2099 azx_dev->format_val = 0; 2100 ret = snd_pcm_lib_malloc_pages(substream, 2101 params_buffer_bytes(hw_params)); 2102 if (ret < 0) 2103 goto unlock; 2104 mark_runtime_wc(chip, azx_dev, substream, true); 2105 unlock: 2106 dsp_unlock(azx_dev); 2107 return ret; 2108 } 2109 2110 static int azx_pcm_hw_free(struct snd_pcm_substream *substream) 2111 { 2112 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 2113 struct azx_dev *azx_dev = get_azx_dev(substream); 2114 struct azx *chip = apcm->chip; 2115 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream]; 2116 2117 /* reset BDL address */ 2118 dsp_lock(azx_dev); 2119 if (!dsp_is_locked(azx_dev)) { 2120 azx_sd_writel(azx_dev, SD_BDLPL, 0); 2121 azx_sd_writel(azx_dev, SD_BDLPU, 0); 2122 azx_sd_writel(azx_dev, SD_CTL, 0); 2123 azx_dev->bufsize = 0; 2124 azx_dev->period_bytes = 0; 2125 azx_dev->format_val = 0; 2126 } 2127 2128 snd_hda_codec_cleanup(apcm->codec, hinfo, substream); 2129 2130 mark_runtime_wc(chip, azx_dev, substream, false); 2131 azx_dev->prepared = 0; 2132 dsp_unlock(azx_dev); 2133 return snd_pcm_lib_free_pages(substream); 2134 } 2135 2136 static int azx_pcm_prepare(struct snd_pcm_substream *substream) 2137 { 2138 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 2139 struct azx *chip = apcm->chip; 2140 struct azx_dev *azx_dev = get_azx_dev(substream); 2141 struct hda_pcm_stream *hinfo = apcm->hinfo[substream->stream]; 2142 struct snd_pcm_runtime *runtime = substream->runtime; 2143 unsigned int bufsize, period_bytes, format_val, stream_tag; 2144 int err; 2145 struct hda_spdif_out *spdif = 2146 snd_hda_spdif_out_of_nid(apcm->codec, hinfo->nid); 2147 unsigned short ctls = spdif ? spdif->ctls : 0; 2148 2149 dsp_lock(azx_dev); 2150 if (dsp_is_locked(azx_dev)) { 2151 err = -EBUSY; 2152 goto unlock; 2153 } 2154 2155 azx_stream_reset(chip, azx_dev); 2156 format_val = snd_hda_calc_stream_format(runtime->rate, 2157 runtime->channels, 2158 runtime->format, 2159 hinfo->maxbps, 2160 ctls); 2161 if (!format_val) { 2162 snd_printk(KERN_ERR SFX 2163 "%s: invalid format_val, rate=%d, ch=%d, format=%d\n", 2164 pci_name(chip->pci), runtime->rate, runtime->channels, runtime->format); 2165 err = -EINVAL; 2166 goto unlock; 2167 } 2168 2169 bufsize = snd_pcm_lib_buffer_bytes(substream); 2170 period_bytes = snd_pcm_lib_period_bytes(substream); 2171 2172 snd_printdd(SFX "%s: azx_pcm_prepare: bufsize=0x%x, format=0x%x\n", 2173 pci_name(chip->pci), bufsize, format_val); 2174 2175 if (bufsize != azx_dev->bufsize || 2176 period_bytes != azx_dev->period_bytes || 2177 format_val != azx_dev->format_val || 2178 runtime->no_period_wakeup != azx_dev->no_period_wakeup) { 2179 azx_dev->bufsize = bufsize; 2180 azx_dev->period_bytes = period_bytes; 2181 azx_dev->format_val = format_val; 2182 azx_dev->no_period_wakeup = runtime->no_period_wakeup; 2183 err = azx_setup_periods(chip, substream, azx_dev); 2184 if (err < 0) 2185 goto unlock; 2186 } 2187 2188 /* wallclk has 24Mhz clock source */ 2189 azx_dev->period_wallclk = (((runtime->period_size * 24000) / 2190 runtime->rate) * 1000); 2191 azx_setup_controller(chip, azx_dev); 2192 if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) 2193 azx_dev->fifo_size = azx_sd_readw(azx_dev, SD_FIFOSIZE) + 1; 2194 else 2195 azx_dev->fifo_size = 0; 2196 2197 stream_tag = azx_dev->stream_tag; 2198 /* CA-IBG chips need the playback stream starting from 1 */ 2199 if ((chip->driver_caps & AZX_DCAPS_CTX_WORKAROUND) && 2200 stream_tag > chip->capture_streams) 2201 stream_tag -= chip->capture_streams; 2202 err = snd_hda_codec_prepare(apcm->codec, hinfo, stream_tag, 2203 azx_dev->format_val, substream); 2204 2205 unlock: 2206 if (!err) 2207 azx_dev->prepared = 1; 2208 dsp_unlock(azx_dev); 2209 return err; 2210 } 2211 2212 static int azx_pcm_trigger(struct snd_pcm_substream *substream, int cmd) 2213 { 2214 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 2215 struct azx *chip = apcm->chip; 2216 struct azx_dev *azx_dev; 2217 struct snd_pcm_substream *s; 2218 int rstart = 0, start, nsync = 0, sbits = 0; 2219 int nwait, timeout; 2220 2221 azx_dev = get_azx_dev(substream); 2222 trace_azx_pcm_trigger(chip, azx_dev, cmd); 2223 2224 if (dsp_is_locked(azx_dev) || !azx_dev->prepared) 2225 return -EPIPE; 2226 2227 switch (cmd) { 2228 case SNDRV_PCM_TRIGGER_START: 2229 rstart = 1; 2230 case SNDRV_PCM_TRIGGER_PAUSE_RELEASE: 2231 case SNDRV_PCM_TRIGGER_RESUME: 2232 start = 1; 2233 break; 2234 case SNDRV_PCM_TRIGGER_PAUSE_PUSH: 2235 case SNDRV_PCM_TRIGGER_SUSPEND: 2236 case SNDRV_PCM_TRIGGER_STOP: 2237 start = 0; 2238 break; 2239 default: 2240 return -EINVAL; 2241 } 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 sbits |= 1 << azx_dev->index; 2248 nsync++; 2249 snd_pcm_trigger_done(s, substream); 2250 } 2251 2252 spin_lock(&chip->reg_lock); 2253 2254 /* first, set SYNC bits of corresponding streams */ 2255 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC) 2256 azx_writel(chip, OLD_SSYNC, 2257 azx_readl(chip, OLD_SSYNC) | sbits); 2258 else 2259 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) | sbits); 2260 2261 snd_pcm_group_for_each_entry(s, substream) { 2262 if (s->pcm->card != substream->pcm->card) 2263 continue; 2264 azx_dev = get_azx_dev(s); 2265 if (start) { 2266 azx_dev->start_wallclk = azx_readl(chip, WALLCLK); 2267 if (!rstart) 2268 azx_dev->start_wallclk -= 2269 azx_dev->period_wallclk; 2270 azx_stream_start(chip, azx_dev); 2271 } else { 2272 azx_stream_stop(chip, azx_dev); 2273 } 2274 azx_dev->running = start; 2275 } 2276 spin_unlock(&chip->reg_lock); 2277 if (start) { 2278 /* wait until all FIFOs get ready */ 2279 for (timeout = 5000; timeout; timeout--) { 2280 nwait = 0; 2281 snd_pcm_group_for_each_entry(s, substream) { 2282 if (s->pcm->card != substream->pcm->card) 2283 continue; 2284 azx_dev = get_azx_dev(s); 2285 if (!(azx_sd_readb(azx_dev, SD_STS) & 2286 SD_STS_FIFO_READY)) 2287 nwait++; 2288 } 2289 if (!nwait) 2290 break; 2291 cpu_relax(); 2292 } 2293 } else { 2294 /* wait until all RUN bits are cleared */ 2295 for (timeout = 5000; timeout; timeout--) { 2296 nwait = 0; 2297 snd_pcm_group_for_each_entry(s, substream) { 2298 if (s->pcm->card != substream->pcm->card) 2299 continue; 2300 azx_dev = get_azx_dev(s); 2301 if (azx_sd_readb(azx_dev, SD_CTL) & 2302 SD_CTL_DMA_START) 2303 nwait++; 2304 } 2305 if (!nwait) 2306 break; 2307 cpu_relax(); 2308 } 2309 } 2310 spin_lock(&chip->reg_lock); 2311 /* reset SYNC bits */ 2312 if (chip->driver_caps & AZX_DCAPS_OLD_SSYNC) 2313 azx_writel(chip, OLD_SSYNC, 2314 azx_readl(chip, OLD_SSYNC) & ~sbits); 2315 else 2316 azx_writel(chip, SSYNC, azx_readl(chip, SSYNC) & ~sbits); 2317 if (start) { 2318 azx_timecounter_init(substream, 0, 0); 2319 if (nsync > 1) { 2320 cycle_t cycle_last; 2321 2322 /* same start cycle for master and group */ 2323 azx_dev = get_azx_dev(substream); 2324 cycle_last = azx_dev->azx_tc.cycle_last; 2325 2326 snd_pcm_group_for_each_entry(s, substream) { 2327 if (s->pcm->card != substream->pcm->card) 2328 continue; 2329 azx_timecounter_init(s, 1, cycle_last); 2330 } 2331 } 2332 } 2333 spin_unlock(&chip->reg_lock); 2334 return 0; 2335 } 2336 2337 /* get the current DMA position with correction on VIA chips */ 2338 static unsigned int azx_via_get_position(struct azx *chip, 2339 struct azx_dev *azx_dev) 2340 { 2341 unsigned int link_pos, mini_pos, bound_pos; 2342 unsigned int mod_link_pos, mod_dma_pos, mod_mini_pos; 2343 unsigned int fifo_size; 2344 2345 link_pos = azx_sd_readl(azx_dev, SD_LPIB); 2346 if (azx_dev->substream->stream == SNDRV_PCM_STREAM_PLAYBACK) { 2347 /* Playback, no problem using link position */ 2348 return link_pos; 2349 } 2350 2351 /* Capture */ 2352 /* For new chipset, 2353 * use mod to get the DMA position just like old chipset 2354 */ 2355 mod_dma_pos = le32_to_cpu(*azx_dev->posbuf); 2356 mod_dma_pos %= azx_dev->period_bytes; 2357 2358 /* azx_dev->fifo_size can't get FIFO size of in stream. 2359 * Get from base address + offset. 2360 */ 2361 fifo_size = readw(chip->remap_addr + VIA_IN_STREAM0_FIFO_SIZE_OFFSET); 2362 2363 if (azx_dev->insufficient) { 2364 /* Link position never gather than FIFO size */ 2365 if (link_pos <= fifo_size) 2366 return 0; 2367 2368 azx_dev->insufficient = 0; 2369 } 2370 2371 if (link_pos <= fifo_size) 2372 mini_pos = azx_dev->bufsize + link_pos - fifo_size; 2373 else 2374 mini_pos = link_pos - fifo_size; 2375 2376 /* Find nearest previous boudary */ 2377 mod_mini_pos = mini_pos % azx_dev->period_bytes; 2378 mod_link_pos = link_pos % azx_dev->period_bytes; 2379 if (mod_link_pos >= fifo_size) 2380 bound_pos = link_pos - mod_link_pos; 2381 else if (mod_dma_pos >= mod_mini_pos) 2382 bound_pos = mini_pos - mod_mini_pos; 2383 else { 2384 bound_pos = mini_pos - mod_mini_pos + azx_dev->period_bytes; 2385 if (bound_pos >= azx_dev->bufsize) 2386 bound_pos = 0; 2387 } 2388 2389 /* Calculate real DMA position we want */ 2390 return bound_pos + mod_dma_pos; 2391 } 2392 2393 static unsigned int azx_get_position(struct azx *chip, 2394 struct azx_dev *azx_dev, 2395 bool with_check) 2396 { 2397 struct snd_pcm_substream *substream = azx_dev->substream; 2398 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 2399 unsigned int pos; 2400 int stream = substream->stream; 2401 struct hda_pcm_stream *hinfo = apcm->hinfo[stream]; 2402 int delay = 0; 2403 2404 switch (chip->position_fix[stream]) { 2405 case POS_FIX_LPIB: 2406 /* read LPIB */ 2407 pos = azx_sd_readl(azx_dev, SD_LPIB); 2408 break; 2409 case POS_FIX_VIACOMBO: 2410 pos = azx_via_get_position(chip, azx_dev); 2411 break; 2412 default: 2413 /* use the position buffer */ 2414 pos = le32_to_cpu(*azx_dev->posbuf); 2415 if (with_check && chip->position_fix[stream] == POS_FIX_AUTO) { 2416 if (!pos || pos == (u32)-1) { 2417 printk(KERN_WARNING 2418 "hda-intel: Invalid position buffer, " 2419 "using LPIB read method instead.\n"); 2420 chip->position_fix[stream] = POS_FIX_LPIB; 2421 pos = azx_sd_readl(azx_dev, SD_LPIB); 2422 } else 2423 chip->position_fix[stream] = POS_FIX_POSBUF; 2424 } 2425 break; 2426 } 2427 2428 if (pos >= azx_dev->bufsize) 2429 pos = 0; 2430 2431 /* calculate runtime delay from LPIB */ 2432 if (substream->runtime && 2433 chip->position_fix[stream] == POS_FIX_POSBUF && 2434 (chip->driver_caps & AZX_DCAPS_COUNT_LPIB_DELAY)) { 2435 unsigned int lpib_pos = azx_sd_readl(azx_dev, SD_LPIB); 2436 if (stream == SNDRV_PCM_STREAM_PLAYBACK) 2437 delay = pos - lpib_pos; 2438 else 2439 delay = lpib_pos - pos; 2440 if (delay < 0) 2441 delay += azx_dev->bufsize; 2442 if (delay >= azx_dev->period_bytes) { 2443 snd_printk(KERN_WARNING SFX 2444 "%s: Unstable LPIB (%d >= %d); " 2445 "disabling LPIB delay counting\n", 2446 pci_name(chip->pci), delay, azx_dev->period_bytes); 2447 delay = 0; 2448 chip->driver_caps &= ~AZX_DCAPS_COUNT_LPIB_DELAY; 2449 } 2450 delay = bytes_to_frames(substream->runtime, delay); 2451 } 2452 2453 if (substream->runtime) { 2454 if (hinfo->ops.get_delay) 2455 delay += hinfo->ops.get_delay(hinfo, apcm->codec, 2456 substream); 2457 substream->runtime->delay = delay; 2458 } 2459 2460 trace_azx_get_position(chip, azx_dev, pos, delay); 2461 return pos; 2462 } 2463 2464 static snd_pcm_uframes_t azx_pcm_pointer(struct snd_pcm_substream *substream) 2465 { 2466 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 2467 struct azx *chip = apcm->chip; 2468 struct azx_dev *azx_dev = get_azx_dev(substream); 2469 return bytes_to_frames(substream->runtime, 2470 azx_get_position(chip, azx_dev, false)); 2471 } 2472 2473 /* 2474 * Check whether the current DMA position is acceptable for updating 2475 * periods. Returns non-zero if it's OK. 2476 * 2477 * Many HD-audio controllers appear pretty inaccurate about 2478 * the update-IRQ timing. The IRQ is issued before actually the 2479 * data is processed. So, we need to process it afterwords in a 2480 * workqueue. 2481 */ 2482 static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev) 2483 { 2484 u32 wallclk; 2485 unsigned int pos; 2486 2487 wallclk = azx_readl(chip, WALLCLK) - azx_dev->start_wallclk; 2488 if (wallclk < (azx_dev->period_wallclk * 2) / 3) 2489 return -1; /* bogus (too early) interrupt */ 2490 2491 pos = azx_get_position(chip, azx_dev, true); 2492 2493 if (WARN_ONCE(!azx_dev->period_bytes, 2494 "hda-intel: zero azx_dev->period_bytes")) 2495 return -1; /* this shouldn't happen! */ 2496 if (wallclk < (azx_dev->period_wallclk * 5) / 4 && 2497 pos % azx_dev->period_bytes > azx_dev->period_bytes / 2) 2498 /* NG - it's below the first next period boundary */ 2499 return bdl_pos_adj[chip->dev_index] ? 0 : -1; 2500 azx_dev->start_wallclk += wallclk; 2501 return 1; /* OK, it's fine */ 2502 } 2503 2504 /* 2505 * The work for pending PCM period updates. 2506 */ 2507 static void azx_irq_pending_work(struct work_struct *work) 2508 { 2509 struct azx *chip = container_of(work, struct azx, irq_pending_work); 2510 int i, pending, ok; 2511 2512 if (!chip->irq_pending_warned) { 2513 printk(KERN_WARNING 2514 "hda-intel: IRQ timing workaround is activated " 2515 "for card #%d. Suggest a bigger bdl_pos_adj.\n", 2516 chip->card->number); 2517 chip->irq_pending_warned = 1; 2518 } 2519 2520 for (;;) { 2521 pending = 0; 2522 spin_lock_irq(&chip->reg_lock); 2523 for (i = 0; i < chip->num_streams; i++) { 2524 struct azx_dev *azx_dev = &chip->azx_dev[i]; 2525 if (!azx_dev->irq_pending || 2526 !azx_dev->substream || 2527 !azx_dev->running) 2528 continue; 2529 ok = azx_position_ok(chip, azx_dev); 2530 if (ok > 0) { 2531 azx_dev->irq_pending = 0; 2532 spin_unlock(&chip->reg_lock); 2533 snd_pcm_period_elapsed(azx_dev->substream); 2534 spin_lock(&chip->reg_lock); 2535 } else if (ok < 0) { 2536 pending = 0; /* too early */ 2537 } else 2538 pending++; 2539 } 2540 spin_unlock_irq(&chip->reg_lock); 2541 if (!pending) 2542 return; 2543 msleep(1); 2544 } 2545 } 2546 2547 /* clear irq_pending flags and assure no on-going workq */ 2548 static void azx_clear_irq_pending(struct azx *chip) 2549 { 2550 int i; 2551 2552 spin_lock_irq(&chip->reg_lock); 2553 for (i = 0; i < chip->num_streams; i++) 2554 chip->azx_dev[i].irq_pending = 0; 2555 spin_unlock_irq(&chip->reg_lock); 2556 } 2557 2558 #ifdef CONFIG_X86 2559 static int azx_pcm_mmap(struct snd_pcm_substream *substream, 2560 struct vm_area_struct *area) 2561 { 2562 struct azx_pcm *apcm = snd_pcm_substream_chip(substream); 2563 struct azx *chip = apcm->chip; 2564 if (!azx_snoop(chip)) 2565 area->vm_page_prot = pgprot_writecombine(area->vm_page_prot); 2566 return snd_pcm_lib_default_mmap(substream, area); 2567 } 2568 #else 2569 #define azx_pcm_mmap NULL 2570 #endif 2571 2572 static struct snd_pcm_ops azx_pcm_ops = { 2573 .open = azx_pcm_open, 2574 .close = azx_pcm_close, 2575 .ioctl = snd_pcm_lib_ioctl, 2576 .hw_params = azx_pcm_hw_params, 2577 .hw_free = azx_pcm_hw_free, 2578 .prepare = azx_pcm_prepare, 2579 .trigger = azx_pcm_trigger, 2580 .pointer = azx_pcm_pointer, 2581 .wall_clock = azx_get_wallclock_tstamp, 2582 .mmap = azx_pcm_mmap, 2583 .page = snd_pcm_sgbuf_ops_page, 2584 }; 2585 2586 static void azx_pcm_free(struct snd_pcm *pcm) 2587 { 2588 struct azx_pcm *apcm = pcm->private_data; 2589 if (apcm) { 2590 list_del(&apcm->list); 2591 kfree(apcm); 2592 } 2593 } 2594 2595 #define MAX_PREALLOC_SIZE (32 * 1024 * 1024) 2596 2597 static int 2598 azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec, 2599 struct hda_pcm *cpcm) 2600 { 2601 struct azx *chip = bus->private_data; 2602 struct snd_pcm *pcm; 2603 struct azx_pcm *apcm; 2604 int pcm_dev = cpcm->device; 2605 unsigned int size; 2606 int s, err; 2607 2608 list_for_each_entry(apcm, &chip->pcm_list, list) { 2609 if (apcm->pcm->device == pcm_dev) { 2610 snd_printk(KERN_ERR SFX "%s: PCM %d already exists\n", 2611 pci_name(chip->pci), pcm_dev); 2612 return -EBUSY; 2613 } 2614 } 2615 err = snd_pcm_new(chip->card, cpcm->name, pcm_dev, 2616 cpcm->stream[SNDRV_PCM_STREAM_PLAYBACK].substreams, 2617 cpcm->stream[SNDRV_PCM_STREAM_CAPTURE].substreams, 2618 &pcm); 2619 if (err < 0) 2620 return err; 2621 strlcpy(pcm->name, cpcm->name, sizeof(pcm->name)); 2622 apcm = kzalloc(sizeof(*apcm), GFP_KERNEL); 2623 if (apcm == NULL) 2624 return -ENOMEM; 2625 apcm->chip = chip; 2626 apcm->pcm = pcm; 2627 apcm->codec = codec; 2628 pcm->private_data = apcm; 2629 pcm->private_free = azx_pcm_free; 2630 if (cpcm->pcm_type == HDA_PCM_TYPE_MODEM) 2631 pcm->dev_class = SNDRV_PCM_CLASS_MODEM; 2632 list_add_tail(&apcm->list, &chip->pcm_list); 2633 cpcm->pcm = pcm; 2634 for (s = 0; s < 2; s++) { 2635 apcm->hinfo[s] = &cpcm->stream[s]; 2636 if (cpcm->stream[s].substreams) 2637 snd_pcm_set_ops(pcm, s, &azx_pcm_ops); 2638 } 2639 /* buffer pre-allocation */ 2640 size = CONFIG_SND_HDA_PREALLOC_SIZE * 1024; 2641 if (size > MAX_PREALLOC_SIZE) 2642 size = MAX_PREALLOC_SIZE; 2643 snd_pcm_lib_preallocate_pages_for_all(pcm, SNDRV_DMA_TYPE_DEV_SG, 2644 snd_dma_pci_data(chip->pci), 2645 size, MAX_PREALLOC_SIZE); 2646 return 0; 2647 } 2648 2649 /* 2650 * mixer creation - all stuff is implemented in hda module 2651 */ 2652 static int azx_mixer_create(struct azx *chip) 2653 { 2654 return snd_hda_build_controls(chip->bus); 2655 } 2656 2657 2658 /* 2659 * initialize SD streams 2660 */ 2661 static int azx_init_stream(struct azx *chip) 2662 { 2663 int i; 2664 2665 /* initialize each stream (aka device) 2666 * assign the starting bdl address to each stream (device) 2667 * and initialize 2668 */ 2669 for (i = 0; i < chip->num_streams; i++) { 2670 struct azx_dev *azx_dev = &chip->azx_dev[i]; 2671 azx_dev->posbuf = (u32 __iomem *)(chip->posbuf.area + i * 8); 2672 /* offset: SDI0=0x80, SDI1=0xa0, ... SDO3=0x160 */ 2673 azx_dev->sd_addr = chip->remap_addr + (0x20 * i + 0x80); 2674 /* int mask: SDI0=0x01, SDI1=0x02, ... SDO3=0x80 */ 2675 azx_dev->sd_int_sta_mask = 1 << i; 2676 /* stream tag: must be non-zero and unique */ 2677 azx_dev->index = i; 2678 azx_dev->stream_tag = i + 1; 2679 } 2680 2681 return 0; 2682 } 2683 2684 static int azx_acquire_irq(struct azx *chip, int do_disconnect) 2685 { 2686 if (request_irq(chip->pci->irq, azx_interrupt, 2687 chip->msi ? 0 : IRQF_SHARED, 2688 KBUILD_MODNAME, chip)) { 2689 printk(KERN_ERR "hda-intel: unable to grab IRQ %d, " 2690 "disabling device\n", chip->pci->irq); 2691 if (do_disconnect) 2692 snd_card_disconnect(chip->card); 2693 return -1; 2694 } 2695 chip->irq = chip->pci->irq; 2696 pci_intx(chip->pci, !chip->msi); 2697 return 0; 2698 } 2699 2700 2701 static void azx_stop_chip(struct azx *chip) 2702 { 2703 if (!chip->initialized) 2704 return; 2705 2706 /* disable interrupts */ 2707 azx_int_disable(chip); 2708 azx_int_clear(chip); 2709 2710 /* disable CORB/RIRB */ 2711 azx_free_cmd_io(chip); 2712 2713 /* disable position buffer */ 2714 azx_writel(chip, DPLBASE, 0); 2715 azx_writel(chip, DPUBASE, 0); 2716 2717 chip->initialized = 0; 2718 } 2719 2720 #ifdef CONFIG_SND_HDA_DSP_LOADER 2721 /* 2722 * DSP loading code (e.g. for CA0132) 2723 */ 2724 2725 /* use the first stream for loading DSP */ 2726 static struct azx_dev * 2727 azx_get_dsp_loader_dev(struct azx *chip) 2728 { 2729 return &chip->azx_dev[chip->playback_index_offset]; 2730 } 2731 2732 static int azx_load_dsp_prepare(struct hda_bus *bus, unsigned int format, 2733 unsigned int byte_size, 2734 struct snd_dma_buffer *bufp) 2735 { 2736 u32 *bdl; 2737 struct azx *chip = bus->private_data; 2738 struct azx_dev *azx_dev; 2739 int err; 2740 2741 azx_dev = azx_get_dsp_loader_dev(chip); 2742 2743 dsp_lock(azx_dev); 2744 spin_lock_irq(&chip->reg_lock); 2745 if (azx_dev->running || azx_dev->locked) { 2746 spin_unlock_irq(&chip->reg_lock); 2747 err = -EBUSY; 2748 goto unlock; 2749 } 2750 azx_dev->prepared = 0; 2751 chip->saved_azx_dev = *azx_dev; 2752 azx_dev->locked = 1; 2753 spin_unlock_irq(&chip->reg_lock); 2754 2755 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV_SG, 2756 snd_dma_pci_data(chip->pci), 2757 byte_size, bufp); 2758 if (err < 0) 2759 goto err_alloc; 2760 2761 mark_pages_wc(chip, bufp, true); 2762 azx_dev->bufsize = byte_size; 2763 azx_dev->period_bytes = byte_size; 2764 azx_dev->format_val = format; 2765 2766 azx_stream_reset(chip, azx_dev); 2767 2768 /* reset BDL address */ 2769 azx_sd_writel(azx_dev, SD_BDLPL, 0); 2770 azx_sd_writel(azx_dev, SD_BDLPU, 0); 2771 2772 azx_dev->frags = 0; 2773 bdl = (u32 *)azx_dev->bdl.area; 2774 err = setup_bdle(chip, bufp, azx_dev, &bdl, 0, byte_size, 0); 2775 if (err < 0) 2776 goto error; 2777 2778 azx_setup_controller(chip, azx_dev); 2779 dsp_unlock(azx_dev); 2780 return azx_dev->stream_tag; 2781 2782 error: 2783 mark_pages_wc(chip, bufp, false); 2784 snd_dma_free_pages(bufp); 2785 err_alloc: 2786 spin_lock_irq(&chip->reg_lock); 2787 if (azx_dev->opened) 2788 *azx_dev = chip->saved_azx_dev; 2789 azx_dev->locked = 0; 2790 spin_unlock_irq(&chip->reg_lock); 2791 unlock: 2792 dsp_unlock(azx_dev); 2793 return err; 2794 } 2795 2796 static void azx_load_dsp_trigger(struct hda_bus *bus, bool start) 2797 { 2798 struct azx *chip = bus->private_data; 2799 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip); 2800 2801 if (start) 2802 azx_stream_start(chip, azx_dev); 2803 else 2804 azx_stream_stop(chip, azx_dev); 2805 azx_dev->running = start; 2806 } 2807 2808 static void azx_load_dsp_cleanup(struct hda_bus *bus, 2809 struct snd_dma_buffer *dmab) 2810 { 2811 struct azx *chip = bus->private_data; 2812 struct azx_dev *azx_dev = azx_get_dsp_loader_dev(chip); 2813 2814 if (!dmab->area || !azx_dev->locked) 2815 return; 2816 2817 dsp_lock(azx_dev); 2818 /* reset BDL address */ 2819 azx_sd_writel(azx_dev, SD_BDLPL, 0); 2820 azx_sd_writel(azx_dev, SD_BDLPU, 0); 2821 azx_sd_writel(azx_dev, SD_CTL, 0); 2822 azx_dev->bufsize = 0; 2823 azx_dev->period_bytes = 0; 2824 azx_dev->format_val = 0; 2825 2826 mark_pages_wc(chip, dmab, false); 2827 snd_dma_free_pages(dmab); 2828 dmab->area = NULL; 2829 2830 spin_lock_irq(&chip->reg_lock); 2831 if (azx_dev->opened) 2832 *azx_dev = chip->saved_azx_dev; 2833 azx_dev->locked = 0; 2834 spin_unlock_irq(&chip->reg_lock); 2835 dsp_unlock(azx_dev); 2836 } 2837 #endif /* CONFIG_SND_HDA_DSP_LOADER */ 2838 2839 #ifdef CONFIG_PM 2840 /* power-up/down the controller */ 2841 static void azx_power_notify(struct hda_bus *bus, bool power_up) 2842 { 2843 struct azx *chip = bus->private_data; 2844 2845 if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME)) 2846 return; 2847 2848 if (power_up) 2849 pm_runtime_get_sync(&chip->pci->dev); 2850 else 2851 pm_runtime_put_sync(&chip->pci->dev); 2852 } 2853 2854 static DEFINE_MUTEX(card_list_lock); 2855 static LIST_HEAD(card_list); 2856 2857 static void azx_add_card_list(struct azx *chip) 2858 { 2859 mutex_lock(&card_list_lock); 2860 list_add(&chip->list, &card_list); 2861 mutex_unlock(&card_list_lock); 2862 } 2863 2864 static void azx_del_card_list(struct azx *chip) 2865 { 2866 mutex_lock(&card_list_lock); 2867 list_del_init(&chip->list); 2868 mutex_unlock(&card_list_lock); 2869 } 2870 2871 /* trigger power-save check at writing parameter */ 2872 static int param_set_xint(const char *val, const struct kernel_param *kp) 2873 { 2874 struct azx *chip; 2875 struct hda_codec *c; 2876 int prev = power_save; 2877 int ret = param_set_int(val, kp); 2878 2879 if (ret || prev == power_save) 2880 return ret; 2881 2882 mutex_lock(&card_list_lock); 2883 list_for_each_entry(chip, &card_list, list) { 2884 if (!chip->bus || chip->disabled) 2885 continue; 2886 list_for_each_entry(c, &chip->bus->codec_list, list) 2887 snd_hda_power_sync(c); 2888 } 2889 mutex_unlock(&card_list_lock); 2890 return 0; 2891 } 2892 #else 2893 #define azx_add_card_list(chip) /* NOP */ 2894 #define azx_del_card_list(chip) /* NOP */ 2895 #endif /* CONFIG_PM */ 2896 2897 #if defined(CONFIG_PM_SLEEP) || defined(SUPPORT_VGA_SWITCHEROO) 2898 /* 2899 * power management 2900 */ 2901 static int azx_suspend(struct device *dev) 2902 { 2903 struct pci_dev *pci = to_pci_dev(dev); 2904 struct snd_card *card = dev_get_drvdata(dev); 2905 struct azx *chip = card->private_data; 2906 struct azx_pcm *p; 2907 2908 if (chip->disabled) 2909 return 0; 2910 2911 snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); 2912 azx_clear_irq_pending(chip); 2913 list_for_each_entry(p, &chip->pcm_list, list) 2914 snd_pcm_suspend_all(p->pcm); 2915 if (chip->initialized) 2916 snd_hda_suspend(chip->bus); 2917 azx_stop_chip(chip); 2918 azx_enter_link_reset(chip); 2919 if (chip->irq >= 0) { 2920 free_irq(chip->irq, chip); 2921 chip->irq = -1; 2922 } 2923 if (chip->msi) 2924 pci_disable_msi(chip->pci); 2925 pci_disable_device(pci); 2926 pci_save_state(pci); 2927 pci_set_power_state(pci, PCI_D3hot); 2928 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) 2929 hda_display_power(false); 2930 return 0; 2931 } 2932 2933 static int azx_resume(struct device *dev) 2934 { 2935 struct pci_dev *pci = to_pci_dev(dev); 2936 struct snd_card *card = dev_get_drvdata(dev); 2937 struct azx *chip = card->private_data; 2938 2939 if (chip->disabled) 2940 return 0; 2941 2942 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) 2943 hda_display_power(true); 2944 pci_set_power_state(pci, PCI_D0); 2945 pci_restore_state(pci); 2946 if (pci_enable_device(pci) < 0) { 2947 printk(KERN_ERR "hda-intel: pci_enable_device failed, " 2948 "disabling device\n"); 2949 snd_card_disconnect(card); 2950 return -EIO; 2951 } 2952 pci_set_master(pci); 2953 if (chip->msi) 2954 if (pci_enable_msi(pci) < 0) 2955 chip->msi = 0; 2956 if (azx_acquire_irq(chip, 1) < 0) 2957 return -EIO; 2958 azx_init_pci(chip); 2959 2960 azx_init_chip(chip, 1); 2961 2962 snd_hda_resume(chip->bus); 2963 snd_power_change_state(card, SNDRV_CTL_POWER_D0); 2964 return 0; 2965 } 2966 #endif /* CONFIG_PM_SLEEP || SUPPORT_VGA_SWITCHEROO */ 2967 2968 #ifdef CONFIG_PM_RUNTIME 2969 static int azx_runtime_suspend(struct device *dev) 2970 { 2971 struct snd_card *card = dev_get_drvdata(dev); 2972 struct azx *chip = card->private_data; 2973 2974 azx_stop_chip(chip); 2975 azx_enter_link_reset(chip); 2976 azx_clear_irq_pending(chip); 2977 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) 2978 hda_display_power(false); 2979 return 0; 2980 } 2981 2982 static int azx_runtime_resume(struct device *dev) 2983 { 2984 struct snd_card *card = dev_get_drvdata(dev); 2985 struct azx *chip = card->private_data; 2986 2987 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) 2988 hda_display_power(true); 2989 azx_init_pci(chip); 2990 azx_init_chip(chip, 1); 2991 return 0; 2992 } 2993 2994 static int azx_runtime_idle(struct device *dev) 2995 { 2996 struct snd_card *card = dev_get_drvdata(dev); 2997 struct azx *chip = card->private_data; 2998 2999 if (!power_save_controller || 3000 !(chip->driver_caps & AZX_DCAPS_PM_RUNTIME)) 3001 return -EBUSY; 3002 3003 return 0; 3004 } 3005 3006 #endif /* CONFIG_PM_RUNTIME */ 3007 3008 #ifdef CONFIG_PM 3009 static const struct dev_pm_ops azx_pm = { 3010 SET_SYSTEM_SLEEP_PM_OPS(azx_suspend, azx_resume) 3011 SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, azx_runtime_idle) 3012 }; 3013 3014 #define AZX_PM_OPS &azx_pm 3015 #else 3016 #define AZX_PM_OPS NULL 3017 #endif /* CONFIG_PM */ 3018 3019 3020 /* 3021 * reboot notifier for hang-up problem at power-down 3022 */ 3023 static int azx_halt(struct notifier_block *nb, unsigned long event, void *buf) 3024 { 3025 struct azx *chip = container_of(nb, struct azx, reboot_notifier); 3026 snd_hda_bus_reboot_notify(chip->bus); 3027 azx_stop_chip(chip); 3028 return NOTIFY_OK; 3029 } 3030 3031 static void azx_notifier_register(struct azx *chip) 3032 { 3033 chip->reboot_notifier.notifier_call = azx_halt; 3034 register_reboot_notifier(&chip->reboot_notifier); 3035 } 3036 3037 static void azx_notifier_unregister(struct azx *chip) 3038 { 3039 if (chip->reboot_notifier.notifier_call) 3040 unregister_reboot_notifier(&chip->reboot_notifier); 3041 } 3042 3043 static int azx_probe_continue(struct azx *chip); 3044 3045 #ifdef SUPPORT_VGA_SWITCHEROO 3046 static struct pci_dev *get_bound_vga(struct pci_dev *pci); 3047 3048 static void azx_vs_set_state(struct pci_dev *pci, 3049 enum vga_switcheroo_state state) 3050 { 3051 struct snd_card *card = pci_get_drvdata(pci); 3052 struct azx *chip = card->private_data; 3053 bool disabled; 3054 3055 wait_for_completion(&chip->probe_wait); 3056 if (chip->init_failed) 3057 return; 3058 3059 disabled = (state == VGA_SWITCHEROO_OFF); 3060 if (chip->disabled == disabled) 3061 return; 3062 3063 if (!chip->bus) { 3064 chip->disabled = disabled; 3065 if (!disabled) { 3066 snd_printk(KERN_INFO SFX 3067 "%s: Start delayed initialization\n", 3068 pci_name(chip->pci)); 3069 if (azx_probe_continue(chip) < 0) { 3070 snd_printk(KERN_ERR SFX 3071 "%s: initialization error\n", 3072 pci_name(chip->pci)); 3073 chip->init_failed = true; 3074 } 3075 } 3076 } else { 3077 snd_printk(KERN_INFO SFX 3078 "%s: %s via VGA-switcheroo\n", pci_name(chip->pci), 3079 disabled ? "Disabling" : "Enabling"); 3080 if (disabled) { 3081 azx_suspend(&pci->dev); 3082 chip->disabled = true; 3083 if (snd_hda_lock_devices(chip->bus)) 3084 snd_printk(KERN_WARNING SFX "%s: Cannot lock devices!\n", 3085 pci_name(chip->pci)); 3086 } else { 3087 snd_hda_unlock_devices(chip->bus); 3088 chip->disabled = false; 3089 azx_resume(&pci->dev); 3090 } 3091 } 3092 } 3093 3094 static bool azx_vs_can_switch(struct pci_dev *pci) 3095 { 3096 struct snd_card *card = pci_get_drvdata(pci); 3097 struct azx *chip = card->private_data; 3098 3099 wait_for_completion(&chip->probe_wait); 3100 if (chip->init_failed) 3101 return false; 3102 if (chip->disabled || !chip->bus) 3103 return true; 3104 if (snd_hda_lock_devices(chip->bus)) 3105 return false; 3106 snd_hda_unlock_devices(chip->bus); 3107 return true; 3108 } 3109 3110 static void init_vga_switcheroo(struct azx *chip) 3111 { 3112 struct pci_dev *p = get_bound_vga(chip->pci); 3113 if (p) { 3114 snd_printk(KERN_INFO SFX 3115 "%s: Handle VGA-switcheroo audio client\n", 3116 pci_name(chip->pci)); 3117 chip->use_vga_switcheroo = 1; 3118 pci_dev_put(p); 3119 } 3120 } 3121 3122 static const struct vga_switcheroo_client_ops azx_vs_ops = { 3123 .set_gpu_state = azx_vs_set_state, 3124 .can_switch = azx_vs_can_switch, 3125 }; 3126 3127 static int register_vga_switcheroo(struct azx *chip) 3128 { 3129 int err; 3130 3131 if (!chip->use_vga_switcheroo) 3132 return 0; 3133 /* FIXME: currently only handling DIS controller 3134 * is there any machine with two switchable HDMI audio controllers? 3135 */ 3136 err = vga_switcheroo_register_audio_client(chip->pci, &azx_vs_ops, 3137 VGA_SWITCHEROO_DIS, 3138 chip->bus != NULL); 3139 if (err < 0) 3140 return err; 3141 chip->vga_switcheroo_registered = 1; 3142 return 0; 3143 } 3144 #else 3145 #define init_vga_switcheroo(chip) /* NOP */ 3146 #define register_vga_switcheroo(chip) 0 3147 #define check_hdmi_disabled(pci) false 3148 #endif /* SUPPORT_VGA_SWITCHER */ 3149 3150 /* 3151 * destructor 3152 */ 3153 static int azx_free(struct azx *chip) 3154 { 3155 struct pci_dev *pci = chip->pci; 3156 int i; 3157 3158 if ((chip->driver_caps & AZX_DCAPS_PM_RUNTIME) 3159 && chip->running) 3160 pm_runtime_get_noresume(&pci->dev); 3161 3162 azx_del_card_list(chip); 3163 3164 azx_notifier_unregister(chip); 3165 3166 chip->init_failed = 1; /* to be sure */ 3167 complete_all(&chip->probe_wait); 3168 3169 if (use_vga_switcheroo(chip)) { 3170 if (chip->disabled && chip->bus) 3171 snd_hda_unlock_devices(chip->bus); 3172 if (chip->vga_switcheroo_registered) 3173 vga_switcheroo_unregister_client(chip->pci); 3174 } 3175 3176 if (chip->initialized) { 3177 azx_clear_irq_pending(chip); 3178 for (i = 0; i < chip->num_streams; i++) 3179 azx_stream_stop(chip, &chip->azx_dev[i]); 3180 azx_stop_chip(chip); 3181 } 3182 3183 if (chip->irq >= 0) 3184 free_irq(chip->irq, (void*)chip); 3185 if (chip->msi) 3186 pci_disable_msi(chip->pci); 3187 if (chip->remap_addr) 3188 iounmap(chip->remap_addr); 3189 3190 if (chip->azx_dev) { 3191 for (i = 0; i < chip->num_streams; i++) 3192 if (chip->azx_dev[i].bdl.area) { 3193 mark_pages_wc(chip, &chip->azx_dev[i].bdl, false); 3194 snd_dma_free_pages(&chip->azx_dev[i].bdl); 3195 } 3196 } 3197 if (chip->rb.area) { 3198 mark_pages_wc(chip, &chip->rb, false); 3199 snd_dma_free_pages(&chip->rb); 3200 } 3201 if (chip->posbuf.area) { 3202 mark_pages_wc(chip, &chip->posbuf, false); 3203 snd_dma_free_pages(&chip->posbuf); 3204 } 3205 if (chip->region_requested) 3206 pci_release_regions(chip->pci); 3207 pci_disable_device(chip->pci); 3208 kfree(chip->azx_dev); 3209 #ifdef CONFIG_SND_HDA_PATCH_LOADER 3210 if (chip->fw) 3211 release_firmware(chip->fw); 3212 #endif 3213 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) { 3214 hda_display_power(false); 3215 hda_i915_exit(); 3216 } 3217 kfree(chip); 3218 3219 return 0; 3220 } 3221 3222 static int azx_dev_free(struct snd_device *device) 3223 { 3224 return azx_free(device->device_data); 3225 } 3226 3227 #ifdef SUPPORT_VGA_SWITCHEROO 3228 /* 3229 * Check of disabled HDMI controller by vga-switcheroo 3230 */ 3231 static struct pci_dev *get_bound_vga(struct pci_dev *pci) 3232 { 3233 struct pci_dev *p; 3234 3235 /* check only discrete GPU */ 3236 switch (pci->vendor) { 3237 case PCI_VENDOR_ID_ATI: 3238 case PCI_VENDOR_ID_AMD: 3239 case PCI_VENDOR_ID_NVIDIA: 3240 if (pci->devfn == 1) { 3241 p = pci_get_domain_bus_and_slot(pci_domain_nr(pci->bus), 3242 pci->bus->number, 0); 3243 if (p) { 3244 if ((p->class >> 8) == PCI_CLASS_DISPLAY_VGA) 3245 return p; 3246 pci_dev_put(p); 3247 } 3248 } 3249 break; 3250 } 3251 return NULL; 3252 } 3253 3254 static bool check_hdmi_disabled(struct pci_dev *pci) 3255 { 3256 bool vga_inactive = false; 3257 struct pci_dev *p = get_bound_vga(pci); 3258 3259 if (p) { 3260 if (vga_switcheroo_get_client_state(p) == VGA_SWITCHEROO_OFF) 3261 vga_inactive = true; 3262 pci_dev_put(p); 3263 } 3264 return vga_inactive; 3265 } 3266 #endif /* SUPPORT_VGA_SWITCHEROO */ 3267 3268 /* 3269 * white/black-listing for position_fix 3270 */ 3271 static struct snd_pci_quirk position_fix_list[] = { 3272 SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB), 3273 SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB), 3274 SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB), 3275 SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), 3276 SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB), 3277 SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB), 3278 SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB), 3279 SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB), 3280 SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB), 3281 SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB), 3282 SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB), 3283 SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB), 3284 SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB), 3285 SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB), 3286 {} 3287 }; 3288 3289 static int check_position_fix(struct azx *chip, int fix) 3290 { 3291 const struct snd_pci_quirk *q; 3292 3293 switch (fix) { 3294 case POS_FIX_AUTO: 3295 case POS_FIX_LPIB: 3296 case POS_FIX_POSBUF: 3297 case POS_FIX_VIACOMBO: 3298 case POS_FIX_COMBO: 3299 return fix; 3300 } 3301 3302 q = snd_pci_quirk_lookup(chip->pci, position_fix_list); 3303 if (q) { 3304 printk(KERN_INFO 3305 "hda_intel: position_fix set to %d " 3306 "for device %04x:%04x\n", 3307 q->value, q->subvendor, q->subdevice); 3308 return q->value; 3309 } 3310 3311 /* Check VIA/ATI HD Audio Controller exist */ 3312 if (chip->driver_caps & AZX_DCAPS_POSFIX_VIA) { 3313 snd_printd(SFX "%s: Using VIACOMBO position fix\n", pci_name(chip->pci)); 3314 return POS_FIX_VIACOMBO; 3315 } 3316 if (chip->driver_caps & AZX_DCAPS_POSFIX_LPIB) { 3317 snd_printd(SFX "%s: Using LPIB position fix\n", pci_name(chip->pci)); 3318 return POS_FIX_LPIB; 3319 } 3320 return POS_FIX_AUTO; 3321 } 3322 3323 /* 3324 * black-lists for probe_mask 3325 */ 3326 static struct snd_pci_quirk probe_mask_list[] = { 3327 /* Thinkpad often breaks the controller communication when accessing 3328 * to the non-working (or non-existing) modem codec slot. 3329 */ 3330 SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01), 3331 SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01), 3332 SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01), 3333 /* broken BIOS */ 3334 SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01), 3335 /* including bogus ALC268 in slot#2 that conflicts with ALC888 */ 3336 SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01), 3337 /* forced codec slots */ 3338 SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103), 3339 SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103), 3340 /* WinFast VP200 H (Teradici) user reported broken communication */ 3341 SND_PCI_QUIRK(0x3a21, 0x040d, "WinFast VP200 H", 0x101), 3342 {} 3343 }; 3344 3345 #define AZX_FORCE_CODEC_MASK 0x100 3346 3347 static void check_probe_mask(struct azx *chip, int dev) 3348 { 3349 const struct snd_pci_quirk *q; 3350 3351 chip->codec_probe_mask = probe_mask[dev]; 3352 if (chip->codec_probe_mask == -1) { 3353 q = snd_pci_quirk_lookup(chip->pci, probe_mask_list); 3354 if (q) { 3355 printk(KERN_INFO 3356 "hda_intel: probe_mask set to 0x%x " 3357 "for device %04x:%04x\n", 3358 q->value, q->subvendor, q->subdevice); 3359 chip->codec_probe_mask = q->value; 3360 } 3361 } 3362 3363 /* check forced option */ 3364 if (chip->codec_probe_mask != -1 && 3365 (chip->codec_probe_mask & AZX_FORCE_CODEC_MASK)) { 3366 chip->codec_mask = chip->codec_probe_mask & 0xff; 3367 printk(KERN_INFO "hda_intel: codec_mask forced to 0x%x\n", 3368 chip->codec_mask); 3369 } 3370 } 3371 3372 /* 3373 * white/black-list for enable_msi 3374 */ 3375 static struct snd_pci_quirk msi_black_list[] = { 3376 SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */ 3377 SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */ 3378 SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */ 3379 SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */ 3380 SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */ 3381 {} 3382 }; 3383 3384 static void check_msi(struct azx *chip) 3385 { 3386 const struct snd_pci_quirk *q; 3387 3388 if (enable_msi >= 0) { 3389 chip->msi = !!enable_msi; 3390 return; 3391 } 3392 chip->msi = 1; /* enable MSI as default */ 3393 q = snd_pci_quirk_lookup(chip->pci, msi_black_list); 3394 if (q) { 3395 printk(KERN_INFO 3396 "hda_intel: msi for device %04x:%04x set to %d\n", 3397 q->subvendor, q->subdevice, q->value); 3398 chip->msi = q->value; 3399 return; 3400 } 3401 3402 /* NVidia chipsets seem to cause troubles with MSI */ 3403 if (chip->driver_caps & AZX_DCAPS_NO_MSI) { 3404 printk(KERN_INFO "hda_intel: Disabling MSI\n"); 3405 chip->msi = 0; 3406 } 3407 } 3408 3409 /* check the snoop mode availability */ 3410 static void azx_check_snoop_available(struct azx *chip) 3411 { 3412 bool snoop = chip->snoop; 3413 3414 switch (chip->driver_type) { 3415 case AZX_DRIVER_VIA: 3416 /* force to non-snoop mode for a new VIA controller 3417 * when BIOS is set 3418 */ 3419 if (snoop) { 3420 u8 val; 3421 pci_read_config_byte(chip->pci, 0x42, &val); 3422 if (!(val & 0x80) && chip->pci->revision == 0x30) 3423 snoop = false; 3424 } 3425 break; 3426 case AZX_DRIVER_ATIHDMI_NS: 3427 /* new ATI HDMI requires non-snoop */ 3428 snoop = false; 3429 break; 3430 case AZX_DRIVER_CTHDA: 3431 snoop = false; 3432 break; 3433 } 3434 3435 if (snoop != chip->snoop) { 3436 snd_printk(KERN_INFO SFX "%s: Force to %s mode\n", 3437 pci_name(chip->pci), snoop ? "snoop" : "non-snoop"); 3438 chip->snoop = snoop; 3439 } 3440 } 3441 3442 #ifdef CONFIG_SND_HDA_I915 3443 static void azx_probe_work(struct work_struct *work) 3444 { 3445 azx_probe_continue(container_of(work, struct azx, probe_work)); 3446 } 3447 #endif 3448 3449 /* 3450 * constructor 3451 */ 3452 static int azx_create(struct snd_card *card, struct pci_dev *pci, 3453 int dev, unsigned int driver_caps, 3454 struct azx **rchip) 3455 { 3456 static struct snd_device_ops ops = { 3457 .dev_free = azx_dev_free, 3458 }; 3459 struct azx *chip; 3460 int err; 3461 3462 *rchip = NULL; 3463 3464 err = pci_enable_device(pci); 3465 if (err < 0) 3466 return err; 3467 3468 chip = kzalloc(sizeof(*chip), GFP_KERNEL); 3469 if (!chip) { 3470 snd_printk(KERN_ERR SFX "%s: Cannot allocate chip\n", pci_name(pci)); 3471 pci_disable_device(pci); 3472 return -ENOMEM; 3473 } 3474 3475 spin_lock_init(&chip->reg_lock); 3476 mutex_init(&chip->open_mutex); 3477 chip->card = card; 3478 chip->pci = pci; 3479 chip->irq = -1; 3480 chip->driver_caps = driver_caps; 3481 chip->driver_type = driver_caps & 0xff; 3482 check_msi(chip); 3483 chip->dev_index = dev; 3484 INIT_WORK(&chip->irq_pending_work, azx_irq_pending_work); 3485 INIT_LIST_HEAD(&chip->pcm_list); 3486 INIT_LIST_HEAD(&chip->list); 3487 init_vga_switcheroo(chip); 3488 init_completion(&chip->probe_wait); 3489 3490 chip->position_fix[0] = chip->position_fix[1] = 3491 check_position_fix(chip, position_fix[dev]); 3492 /* combo mode uses LPIB for playback */ 3493 if (chip->position_fix[0] == POS_FIX_COMBO) { 3494 chip->position_fix[0] = POS_FIX_LPIB; 3495 chip->position_fix[1] = POS_FIX_AUTO; 3496 } 3497 3498 check_probe_mask(chip, dev); 3499 3500 chip->single_cmd = single_cmd; 3501 chip->snoop = hda_snoop; 3502 azx_check_snoop_available(chip); 3503 3504 if (bdl_pos_adj[dev] < 0) { 3505 switch (chip->driver_type) { 3506 case AZX_DRIVER_ICH: 3507 case AZX_DRIVER_PCH: 3508 bdl_pos_adj[dev] = 1; 3509 break; 3510 default: 3511 bdl_pos_adj[dev] = 32; 3512 break; 3513 } 3514 } 3515 3516 err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops); 3517 if (err < 0) { 3518 snd_printk(KERN_ERR SFX "%s: Error creating device [card]!\n", 3519 pci_name(chip->pci)); 3520 azx_free(chip); 3521 return err; 3522 } 3523 3524 #ifdef CONFIG_SND_HDA_I915 3525 /* continue probing in work context as may trigger request module */ 3526 INIT_WORK(&chip->probe_work, azx_probe_work); 3527 #endif 3528 3529 *rchip = chip; 3530 3531 return 0; 3532 } 3533 3534 static int azx_first_init(struct azx *chip) 3535 { 3536 int dev = chip->dev_index; 3537 struct pci_dev *pci = chip->pci; 3538 struct snd_card *card = chip->card; 3539 int i, err; 3540 unsigned short gcap; 3541 3542 #if BITS_PER_LONG != 64 3543 /* Fix up base address on ULI M5461 */ 3544 if (chip->driver_type == AZX_DRIVER_ULI) { 3545 u16 tmp3; 3546 pci_read_config_word(pci, 0x40, &tmp3); 3547 pci_write_config_word(pci, 0x40, tmp3 | 0x10); 3548 pci_write_config_dword(pci, PCI_BASE_ADDRESS_1, 0); 3549 } 3550 #endif 3551 3552 err = pci_request_regions(pci, "ICH HD audio"); 3553 if (err < 0) 3554 return err; 3555 chip->region_requested = 1; 3556 3557 chip->addr = pci_resource_start(pci, 0); 3558 chip->remap_addr = pci_ioremap_bar(pci, 0); 3559 if (chip->remap_addr == NULL) { 3560 snd_printk(KERN_ERR SFX "%s: ioremap error\n", pci_name(chip->pci)); 3561 return -ENXIO; 3562 } 3563 3564 if (chip->msi) 3565 if (pci_enable_msi(pci) < 0) 3566 chip->msi = 0; 3567 3568 if (azx_acquire_irq(chip, 0) < 0) 3569 return -EBUSY; 3570 3571 pci_set_master(pci); 3572 synchronize_irq(chip->irq); 3573 3574 gcap = azx_readw(chip, GCAP); 3575 snd_printdd(SFX "%s: chipset global capabilities = 0x%x\n", pci_name(chip->pci), gcap); 3576 3577 /* disable SB600 64bit support for safety */ 3578 if (chip->pci->vendor == PCI_VENDOR_ID_ATI) { 3579 struct pci_dev *p_smbus; 3580 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI, 3581 PCI_DEVICE_ID_ATI_SBX00_SMBUS, 3582 NULL); 3583 if (p_smbus) { 3584 if (p_smbus->revision < 0x30) 3585 gcap &= ~ICH6_GCAP_64OK; 3586 pci_dev_put(p_smbus); 3587 } 3588 } 3589 3590 /* disable 64bit DMA address on some devices */ 3591 if (chip->driver_caps & AZX_DCAPS_NO_64BIT) { 3592 snd_printd(SFX "%s: Disabling 64bit DMA\n", pci_name(chip->pci)); 3593 gcap &= ~ICH6_GCAP_64OK; 3594 } 3595 3596 /* disable buffer size rounding to 128-byte multiples if supported */ 3597 if (align_buffer_size >= 0) 3598 chip->align_buffer_size = !!align_buffer_size; 3599 else { 3600 if (chip->driver_caps & AZX_DCAPS_BUFSIZE) 3601 chip->align_buffer_size = 0; 3602 else if (chip->driver_caps & AZX_DCAPS_ALIGN_BUFSIZE) 3603 chip->align_buffer_size = 1; 3604 else 3605 chip->align_buffer_size = 1; 3606 } 3607 3608 /* allow 64bit DMA address if supported by H/W */ 3609 if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64))) 3610 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(64)); 3611 else { 3612 pci_set_dma_mask(pci, DMA_BIT_MASK(32)); 3613 pci_set_consistent_dma_mask(pci, DMA_BIT_MASK(32)); 3614 } 3615 3616 /* read number of streams from GCAP register instead of using 3617 * hardcoded value 3618 */ 3619 chip->capture_streams = (gcap >> 8) & 0x0f; 3620 chip->playback_streams = (gcap >> 12) & 0x0f; 3621 if (!chip->playback_streams && !chip->capture_streams) { 3622 /* gcap didn't give any info, switching to old method */ 3623 3624 switch (chip->driver_type) { 3625 case AZX_DRIVER_ULI: 3626 chip->playback_streams = ULI_NUM_PLAYBACK; 3627 chip->capture_streams = ULI_NUM_CAPTURE; 3628 break; 3629 case AZX_DRIVER_ATIHDMI: 3630 case AZX_DRIVER_ATIHDMI_NS: 3631 chip->playback_streams = ATIHDMI_NUM_PLAYBACK; 3632 chip->capture_streams = ATIHDMI_NUM_CAPTURE; 3633 break; 3634 case AZX_DRIVER_GENERIC: 3635 default: 3636 chip->playback_streams = ICH6_NUM_PLAYBACK; 3637 chip->capture_streams = ICH6_NUM_CAPTURE; 3638 break; 3639 } 3640 } 3641 chip->capture_index_offset = 0; 3642 chip->playback_index_offset = chip->capture_streams; 3643 chip->num_streams = chip->playback_streams + chip->capture_streams; 3644 chip->azx_dev = kcalloc(chip->num_streams, sizeof(*chip->azx_dev), 3645 GFP_KERNEL); 3646 if (!chip->azx_dev) { 3647 snd_printk(KERN_ERR SFX "%s: cannot malloc azx_dev\n", pci_name(chip->pci)); 3648 return -ENOMEM; 3649 } 3650 3651 for (i = 0; i < chip->num_streams; i++) { 3652 dsp_lock_init(&chip->azx_dev[i]); 3653 /* allocate memory for the BDL for each stream */ 3654 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, 3655 snd_dma_pci_data(chip->pci), 3656 BDL_SIZE, &chip->azx_dev[i].bdl); 3657 if (err < 0) { 3658 snd_printk(KERN_ERR SFX "%s: cannot allocate BDL\n", pci_name(chip->pci)); 3659 return -ENOMEM; 3660 } 3661 mark_pages_wc(chip, &chip->azx_dev[i].bdl, true); 3662 } 3663 /* allocate memory for the position buffer */ 3664 err = snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, 3665 snd_dma_pci_data(chip->pci), 3666 chip->num_streams * 8, &chip->posbuf); 3667 if (err < 0) { 3668 snd_printk(KERN_ERR SFX "%s: cannot allocate posbuf\n", pci_name(chip->pci)); 3669 return -ENOMEM; 3670 } 3671 mark_pages_wc(chip, &chip->posbuf, true); 3672 /* allocate CORB/RIRB */ 3673 err = azx_alloc_cmd_io(chip); 3674 if (err < 0) 3675 return err; 3676 3677 /* initialize streams */ 3678 azx_init_stream(chip); 3679 3680 /* initialize chip */ 3681 azx_init_pci(chip); 3682 azx_init_chip(chip, (probe_only[dev] & 2) == 0); 3683 3684 /* codec detection */ 3685 if (!chip->codec_mask) { 3686 snd_printk(KERN_ERR SFX "%s: no codecs found!\n", pci_name(chip->pci)); 3687 return -ENODEV; 3688 } 3689 3690 strcpy(card->driver, "HDA-Intel"); 3691 strlcpy(card->shortname, driver_short_names[chip->driver_type], 3692 sizeof(card->shortname)); 3693 snprintf(card->longname, sizeof(card->longname), 3694 "%s at 0x%lx irq %i", 3695 card->shortname, chip->addr, chip->irq); 3696 3697 return 0; 3698 } 3699 3700 static void power_down_all_codecs(struct azx *chip) 3701 { 3702 #ifdef CONFIG_PM 3703 /* The codecs were powered up in snd_hda_codec_new(). 3704 * Now all initialization done, so turn them down if possible 3705 */ 3706 struct hda_codec *codec; 3707 list_for_each_entry(codec, &chip->bus->codec_list, list) { 3708 snd_hda_power_down(codec); 3709 } 3710 #endif 3711 } 3712 3713 #ifdef CONFIG_SND_HDA_PATCH_LOADER 3714 /* callback from request_firmware_nowait() */ 3715 static void azx_firmware_cb(const struct firmware *fw, void *context) 3716 { 3717 struct snd_card *card = context; 3718 struct azx *chip = card->private_data; 3719 struct pci_dev *pci = chip->pci; 3720 3721 if (!fw) { 3722 snd_printk(KERN_ERR SFX "%s: Cannot load firmware, aborting\n", 3723 pci_name(chip->pci)); 3724 goto error; 3725 } 3726 3727 chip->fw = fw; 3728 if (!chip->disabled) { 3729 /* continue probing */ 3730 if (azx_probe_continue(chip)) 3731 goto error; 3732 } 3733 return; /* OK */ 3734 3735 error: 3736 snd_card_free(card); 3737 pci_set_drvdata(pci, NULL); 3738 } 3739 #endif 3740 3741 static int azx_probe(struct pci_dev *pci, 3742 const struct pci_device_id *pci_id) 3743 { 3744 static int dev; 3745 struct snd_card *card; 3746 struct azx *chip; 3747 bool probe_now; 3748 int err; 3749 3750 if (dev >= SNDRV_CARDS) 3751 return -ENODEV; 3752 if (!enable[dev]) { 3753 dev++; 3754 return -ENOENT; 3755 } 3756 3757 err = snd_card_create(index[dev], id[dev], THIS_MODULE, 0, &card); 3758 if (err < 0) { 3759 snd_printk(KERN_ERR "hda-intel: Error creating card!\n"); 3760 return err; 3761 } 3762 3763 snd_card_set_dev(card, &pci->dev); 3764 3765 err = azx_create(card, pci, dev, pci_id->driver_data, &chip); 3766 if (err < 0) 3767 goto out_free; 3768 card->private_data = chip; 3769 3770 pci_set_drvdata(pci, card); 3771 3772 err = register_vga_switcheroo(chip); 3773 if (err < 0) { 3774 snd_printk(KERN_ERR SFX 3775 "%s: Error registering VGA-switcheroo client\n", pci_name(pci)); 3776 goto out_free; 3777 } 3778 3779 if (check_hdmi_disabled(pci)) { 3780 snd_printk(KERN_INFO SFX "%s: VGA controller is disabled\n", 3781 pci_name(pci)); 3782 snd_printk(KERN_INFO SFX "%s: Delaying initialization\n", pci_name(pci)); 3783 chip->disabled = true; 3784 } 3785 3786 probe_now = !chip->disabled; 3787 3788 #ifdef CONFIG_SND_HDA_PATCH_LOADER 3789 if (patch[dev] && *patch[dev]) { 3790 snd_printk(KERN_ERR SFX "%s: Applying patch firmware '%s'\n", 3791 pci_name(pci), patch[dev]); 3792 err = request_firmware_nowait(THIS_MODULE, true, patch[dev], 3793 &pci->dev, GFP_KERNEL, card, 3794 azx_firmware_cb); 3795 if (err < 0) 3796 goto out_free; 3797 probe_now = false; /* continued in azx_firmware_cb() */ 3798 } 3799 #endif /* CONFIG_SND_HDA_PATCH_LOADER */ 3800 3801 /* continue probing in work context, avoid request_module deadlock */ 3802 if (probe_now && (chip->driver_caps & AZX_DCAPS_I915_POWERWELL)) { 3803 #ifdef CONFIG_SND_HDA_I915 3804 probe_now = false; 3805 schedule_work(&chip->probe_work); 3806 #else 3807 snd_printk(KERN_ERR SFX "Haswell must build in CONFIG_SND_HDA_I915\n"); 3808 #endif 3809 } 3810 3811 if (probe_now) { 3812 err = azx_probe_continue(chip); 3813 if (err < 0) 3814 goto out_free; 3815 } 3816 3817 dev++; 3818 complete_all(&chip->probe_wait); 3819 return 0; 3820 3821 out_free: 3822 snd_card_free(card); 3823 return err; 3824 } 3825 3826 static int azx_probe_continue(struct azx *chip) 3827 { 3828 struct pci_dev *pci = chip->pci; 3829 int dev = chip->dev_index; 3830 int err; 3831 3832 /* Request power well for Haswell HDA controller and codec */ 3833 if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) { 3834 err = hda_i915_init(); 3835 if (err < 0) { 3836 snd_printk(KERN_ERR SFX "Error request power-well from i915\n"); 3837 goto out_free; 3838 } 3839 hda_display_power(true); 3840 } 3841 3842 err = azx_first_init(chip); 3843 if (err < 0) 3844 goto out_free; 3845 3846 #ifdef CONFIG_SND_HDA_INPUT_BEEP 3847 chip->beep_mode = beep_mode[dev]; 3848 #endif 3849 3850 /* create codec instances */ 3851 err = azx_codec_create(chip, model[dev]); 3852 if (err < 0) 3853 goto out_free; 3854 #ifdef CONFIG_SND_HDA_PATCH_LOADER 3855 if (chip->fw) { 3856 err = snd_hda_load_patch(chip->bus, chip->fw->size, 3857 chip->fw->data); 3858 if (err < 0) 3859 goto out_free; 3860 #ifndef CONFIG_PM 3861 release_firmware(chip->fw); /* no longer needed */ 3862 chip->fw = NULL; 3863 #endif 3864 } 3865 #endif 3866 if ((probe_only[dev] & 1) == 0) { 3867 err = azx_codec_configure(chip); 3868 if (err < 0) 3869 goto out_free; 3870 } 3871 3872 /* create PCM streams */ 3873 err = snd_hda_build_pcms(chip->bus); 3874 if (err < 0) 3875 goto out_free; 3876 3877 /* create mixer controls */ 3878 err = azx_mixer_create(chip); 3879 if (err < 0) 3880 goto out_free; 3881 3882 err = snd_card_register(chip->card); 3883 if (err < 0) 3884 goto out_free; 3885 3886 chip->running = 1; 3887 power_down_all_codecs(chip); 3888 azx_notifier_register(chip); 3889 azx_add_card_list(chip); 3890 if (chip->driver_caps & AZX_DCAPS_PM_RUNTIME) 3891 pm_runtime_put_noidle(&pci->dev); 3892 3893 return 0; 3894 3895 out_free: 3896 chip->init_failed = 1; 3897 return err; 3898 } 3899 3900 static void azx_remove(struct pci_dev *pci) 3901 { 3902 struct snd_card *card = pci_get_drvdata(pci); 3903 3904 if (card) 3905 snd_card_free(card); 3906 } 3907 3908 /* PCI IDs */ 3909 static DEFINE_PCI_DEVICE_TABLE(azx_ids) = { 3910 /* CPT */ 3911 { PCI_DEVICE(0x8086, 0x1c20), 3912 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM }, 3913 /* PBG */ 3914 { PCI_DEVICE(0x8086, 0x1d20), 3915 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM }, 3916 /* Panther Point */ 3917 { PCI_DEVICE(0x8086, 0x1e20), 3918 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM }, 3919 /* Lynx Point */ 3920 { PCI_DEVICE(0x8086, 0x8c20), 3921 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 3922 /* Wellsburg */ 3923 { PCI_DEVICE(0x8086, 0x8d20), 3924 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 3925 { PCI_DEVICE(0x8086, 0x8d21), 3926 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 3927 /* Lynx Point-LP */ 3928 { PCI_DEVICE(0x8086, 0x9c20), 3929 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 3930 /* Lynx Point-LP */ 3931 { PCI_DEVICE(0x8086, 0x9c21), 3932 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, 3933 /* Haswell */ 3934 { PCI_DEVICE(0x8086, 0x0a0c), 3935 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH | 3936 AZX_DCAPS_I915_POWERWELL }, 3937 { PCI_DEVICE(0x8086, 0x0c0c), 3938 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH | 3939 AZX_DCAPS_I915_POWERWELL }, 3940 { PCI_DEVICE(0x8086, 0x0d0c), 3941 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH | 3942 AZX_DCAPS_I915_POWERWELL }, 3943 /* 5 Series/3400 */ 3944 { PCI_DEVICE(0x8086, 0x3b56), 3945 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM }, 3946 /* Poulsbo */ 3947 { PCI_DEVICE(0x8086, 0x811b), 3948 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM }, 3949 /* Oaktrail */ 3950 { PCI_DEVICE(0x8086, 0x080a), 3951 .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM }, 3952 /* BayTrail */ 3953 { PCI_DEVICE(0x8086, 0x0f04), 3954 .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM }, 3955 /* ICH */ 3956 { PCI_DEVICE(0x8086, 0x2668), 3957 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC | 3958 AZX_DCAPS_BUFSIZE }, /* ICH6 */ 3959 { PCI_DEVICE(0x8086, 0x27d8), 3960 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC | 3961 AZX_DCAPS_BUFSIZE }, /* ICH7 */ 3962 { PCI_DEVICE(0x8086, 0x269a), 3963 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC | 3964 AZX_DCAPS_BUFSIZE }, /* ESB2 */ 3965 { PCI_DEVICE(0x8086, 0x284b), 3966 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC | 3967 AZX_DCAPS_BUFSIZE }, /* ICH8 */ 3968 { PCI_DEVICE(0x8086, 0x293e), 3969 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC | 3970 AZX_DCAPS_BUFSIZE }, /* ICH9 */ 3971 { PCI_DEVICE(0x8086, 0x293f), 3972 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC | 3973 AZX_DCAPS_BUFSIZE }, /* ICH9 */ 3974 { PCI_DEVICE(0x8086, 0x3a3e), 3975 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC | 3976 AZX_DCAPS_BUFSIZE }, /* ICH10 */ 3977 { PCI_DEVICE(0x8086, 0x3a6e), 3978 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_OLD_SSYNC | 3979 AZX_DCAPS_BUFSIZE }, /* ICH10 */ 3980 /* Generic Intel */ 3981 { PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID), 3982 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, 3983 .class_mask = 0xffffff, 3984 .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_BUFSIZE }, 3985 /* ATI SB 450/600/700/800/900 */ 3986 { PCI_DEVICE(0x1002, 0x437b), 3987 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB }, 3988 { PCI_DEVICE(0x1002, 0x4383), 3989 .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB }, 3990 /* AMD Hudson */ 3991 { PCI_DEVICE(0x1022, 0x780d), 3992 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB }, 3993 /* ATI HDMI */ 3994 { PCI_DEVICE(0x1002, 0x793b), 3995 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 3996 { PCI_DEVICE(0x1002, 0x7919), 3997 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 3998 { PCI_DEVICE(0x1002, 0x960f), 3999 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4000 { PCI_DEVICE(0x1002, 0x970f), 4001 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4002 { PCI_DEVICE(0x1002, 0xaa00), 4003 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4004 { PCI_DEVICE(0x1002, 0xaa08), 4005 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4006 { PCI_DEVICE(0x1002, 0xaa10), 4007 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4008 { PCI_DEVICE(0x1002, 0xaa18), 4009 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4010 { PCI_DEVICE(0x1002, 0xaa20), 4011 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4012 { PCI_DEVICE(0x1002, 0xaa28), 4013 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4014 { PCI_DEVICE(0x1002, 0xaa30), 4015 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4016 { PCI_DEVICE(0x1002, 0xaa38), 4017 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4018 { PCI_DEVICE(0x1002, 0xaa40), 4019 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4020 { PCI_DEVICE(0x1002, 0xaa48), 4021 .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI }, 4022 { PCI_DEVICE(0x1002, 0x9902), 4023 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, 4024 { PCI_DEVICE(0x1002, 0xaaa0), 4025 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, 4026 { PCI_DEVICE(0x1002, 0xaaa8), 4027 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, 4028 { PCI_DEVICE(0x1002, 0xaab0), 4029 .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI }, 4030 /* VIA VT8251/VT8237A */ 4031 { PCI_DEVICE(0x1106, 0x3288), 4032 .driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA }, 4033 /* VIA GFX VT7122/VX900 */ 4034 { PCI_DEVICE(0x1106, 0x9170), .driver_data = AZX_DRIVER_GENERIC }, 4035 /* VIA GFX VT6122/VX11 */ 4036 { PCI_DEVICE(0x1106, 0x9140), .driver_data = AZX_DRIVER_GENERIC }, 4037 /* SIS966 */ 4038 { PCI_DEVICE(0x1039, 0x7502), .driver_data = AZX_DRIVER_SIS }, 4039 /* ULI M5461 */ 4040 { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI }, 4041 /* NVIDIA MCP */ 4042 { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID), 4043 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, 4044 .class_mask = 0xffffff, 4045 .driver_data = AZX_DRIVER_NVIDIA | AZX_DCAPS_PRESET_NVIDIA }, 4046 /* Teradici */ 4047 { PCI_DEVICE(0x6549, 0x1200), 4048 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT }, 4049 { PCI_DEVICE(0x6549, 0x2200), 4050 .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT }, 4051 /* Creative X-Fi (CA0110-IBG) */ 4052 /* CTHDA chips */ 4053 { PCI_DEVICE(0x1102, 0x0010), 4054 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA }, 4055 { PCI_DEVICE(0x1102, 0x0012), 4056 .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA }, 4057 #if !defined(CONFIG_SND_CTXFI) && !defined(CONFIG_SND_CTXFI_MODULE) 4058 /* the following entry conflicts with snd-ctxfi driver, 4059 * as ctxfi driver mutates from HD-audio to native mode with 4060 * a special command sequence. 4061 */ 4062 { PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_ANY_ID), 4063 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, 4064 .class_mask = 0xffffff, 4065 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND | 4066 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB }, 4067 #else 4068 /* this entry seems still valid -- i.e. without emu20kx chip */ 4069 { PCI_DEVICE(0x1102, 0x0009), 4070 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND | 4071 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB }, 4072 #endif 4073 /* Vortex86MX */ 4074 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC }, 4075 /* VMware HDAudio */ 4076 { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC }, 4077 /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */ 4078 { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID), 4079 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, 4080 .class_mask = 0xffffff, 4081 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI }, 4082 { PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_ANY_ID), 4083 .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, 4084 .class_mask = 0xffffff, 4085 .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI }, 4086 { 0, } 4087 }; 4088 MODULE_DEVICE_TABLE(pci, azx_ids); 4089 4090 /* pci_driver definition */ 4091 static struct pci_driver azx_driver = { 4092 .name = KBUILD_MODNAME, 4093 .id_table = azx_ids, 4094 .probe = azx_probe, 4095 .remove = azx_remove, 4096 .driver = { 4097 .pm = AZX_PM_OPS, 4098 }, 4099 }; 4100 4101 module_pci_driver(azx_driver); 4102