|
Lines 69-74
Link Here
|
| 69 |
static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ |
69 |
static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */ |
| 70 |
static int ac97_clock[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; |
70 |
static int ac97_clock[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; |
| 71 |
static char *ac97_quirk[SNDRV_CARDS]; |
71 |
static char *ac97_quirk[SNDRV_CARDS]; |
|
|
72 |
static int buggy_semaphore[SNDRV_CARDS]; |
| 72 |
static int buggy_irq[SNDRV_CARDS]; |
73 |
static int buggy_irq[SNDRV_CARDS]; |
| 73 |
static int xbox[SNDRV_CARDS]; |
74 |
static int xbox[SNDRV_CARDS]; |
| 74 |
|
75 |
|
|
Lines 86-91
Link Here
|
| 86 |
MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (0 = auto-detect)."); |
87 |
MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (0 = auto-detect)."); |
| 87 |
module_param_array(ac97_quirk, charp, NULL, 0444); |
88 |
module_param_array(ac97_quirk, charp, NULL, 0444); |
| 88 |
MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware."); |
89 |
MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware."); |
|
|
90 |
module_param_array(buggy_semaphore, bool, NULL, 0444); |
| 91 |
MODULE_PARM_DESC(buggy_semaphore, "Enable workaround for hardwares with problematic codec semaphores."); |
| 89 |
module_param_array(buggy_irq, bool, NULL, 0444); |
92 |
module_param_array(buggy_irq, bool, NULL, 0444); |
| 90 |
MODULE_PARM_DESC(buggy_irq, "Enable workaround for buggy interrupts on some motherboards."); |
93 |
MODULE_PARM_DESC(buggy_irq, "Enable workaround for buggy interrupts on some motherboards."); |
| 91 |
module_param_array(xbox, bool, NULL, 0444); |
94 |
module_param_array(xbox, bool, NULL, 0444); |
|
Lines 367-372
Link Here
|
| 367 |
unsigned fix_nocache: 1; /* workaround for 440MX */ |
370 |
unsigned fix_nocache: 1; /* workaround for 440MX */ |
| 368 |
unsigned buggy_irq: 1; /* workaround for buggy mobos */ |
371 |
unsigned buggy_irq: 1; /* workaround for buggy mobos */ |
| 369 |
unsigned xbox: 1; /* workaround for Xbox AC'97 detection */ |
372 |
unsigned xbox: 1; /* workaround for Xbox AC'97 detection */ |
|
|
373 |
unsigned buggy_semaphore: 1; /* workaround for buggy codec semaphore */ |
| 370 |
|
374 |
|
| 371 |
int spdif_idx; /* SPDIF BAR index; *_SPBAR or -1 if use PCMOUT */ |
375 |
int spdif_idx; /* SPDIF BAR index; *_SPBAR or -1 if use PCMOUT */ |
| 372 |
unsigned int sdm_saved; /* SDM reg value */ |
376 |
unsigned int sdm_saved; /* SDM reg value */ |
|
Lines 521-526
Link Here
|
| 521 |
if ((igetdword(chip, ICHREG(GLOB_STA)) & codec) == 0) |
525 |
if ((igetdword(chip, ICHREG(GLOB_STA)) & codec) == 0) |
| 522 |
return -EIO; |
526 |
return -EIO; |
| 523 |
|
527 |
|
|
|
528 |
if (chip->buggy_semaphore) |
| 529 |
return 0; /* just ignore ... */ |
| 530 |
|
| 524 |
/* Anyone holding a semaphore for 1 msec should be shot... */ |
531 |
/* Anyone holding a semaphore for 1 msec should be shot... */ |
| 525 |
time = 100; |
532 |
time = 100; |
| 526 |
do { |
533 |
do { |
|
Lines 2818-2823
Link Here
|
| 2818 |
chip->buggy_irq = 1; |
2825 |
chip->buggy_irq = 1; |
| 2819 |
if (xbox[dev]) |
2826 |
if (xbox[dev]) |
| 2820 |
chip->xbox = 1; |
2827 |
chip->xbox = 1; |
|
|
2828 |
if (buggy_semaphore[dev]) |
| 2829 |
chip->buggy_semaphore = 1; |
| 2821 |
|
2830 |
|
| 2822 |
if ((err = snd_intel8x0_mixer(chip, ac97_clock[dev], ac97_quirk[dev])) < 0) { |
2831 |
if ((err = snd_intel8x0_mixer(chip, ac97_clock[dev], ac97_quirk[dev])) < 0) { |
| 2823 |
snd_card_free(card); |
2832 |
snd_card_free(card); |