|
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 2549-2554
Link Here
|
| 2549 |
static int __devinit snd_intel8x0_create(snd_card_t * card, |
2556 |
static int __devinit snd_intel8x0_create(snd_card_t * card, |
| 2550 |
struct pci_dev *pci, |
2557 |
struct pci_dev *pci, |
| 2551 |
unsigned long device_type, |
2558 |
unsigned long device_type, |
|
|
2559 |
int buggy_sem, |
| 2552 |
intel8x0_t ** r_intel8x0) |
2560 |
intel8x0_t ** r_intel8x0) |
| 2553 |
{ |
2561 |
{ |
| 2554 |
intel8x0_t *chip; |
2562 |
intel8x0_t *chip; |
|
Lines 2606-2611
Link Here
|
| 2606 |
chip->card = card; |
2614 |
chip->card = card; |
| 2607 |
chip->pci = pci; |
2615 |
chip->pci = pci; |
| 2608 |
chip->irq = -1; |
2616 |
chip->irq = -1; |
|
|
2617 |
chip->buggy_semaphore = buggy_sem; |
| 2609 |
|
2618 |
|
| 2610 |
if (pci->vendor == PCI_VENDOR_ID_INTEL && |
2619 |
if (pci->vendor == PCI_VENDOR_ID_INTEL && |
| 2611 |
pci->device == PCI_DEVICE_ID_INTEL_440MX) |
2620 |
pci->device == PCI_DEVICE_ID_INTEL_440MX) |
|
Lines 2810-2816
Link Here
|
| 2810 |
} |
2819 |
} |
| 2811 |
} |
2820 |
} |
| 2812 |
|
2821 |
|
| 2813 |
if ((err = snd_intel8x0_create(card, pci, pci_id->driver_data, &chip)) < 0) { |
2822 |
if ((err = snd_intel8x0_create(card, pci, pci_id->driver_data, |
|
|
2823 |
buggy_semaphore[dev], &chip)) < 0) { |
| 2814 |
snd_card_free(card); |
2824 |
snd_card_free(card); |
| 2815 |
return err; |
2825 |
return err; |
| 2816 |
} |
2826 |
} |