Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 8844
b: refs/heads/master
c: a06147d
h: refs/heads/master
v: v3
  • Loading branch information
Takashi Iwai authored and Jaroslav Kysela committed Sep 12, 2005
1 parent 6c50658 commit 6a2f4ea
Show file tree
Hide file tree
Showing 3 changed files with 17 additions and 3 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 10f69f9e42833b82288882d10901dc86adc3e473
refs/heads/master: a06147d22865e9becb2918baec59d618fb09d896
6 changes: 5 additions & 1 deletion trunk/Documentation/sound/alsa/ALSA-Configuration.txt
Original file line number Diff line number Diff line change
Expand Up @@ -805,7 +805,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed.
ac97_quirk - AC'97 workaround for strange hardware
See "AC97 Quirk Option" section below.
buggy_irq - Enable workaround for buggy interrupts on some
motherboards (default off)
motherboards (default yes on nForce chips,
otherwise off)
buggy_semaphore - Enable workaround for hardwares with buggy
semaphores (e.g. on some ASUS laptops)
(default off)

Module supports autoprobe and multiple bus-master chips (max 8).

Expand Down
12 changes: 11 additions & 1 deletion trunk/sound/pci/intel8x0.c
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,7 @@ static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR; /* ID for this card */
static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card */
static int ac97_clock[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0};
static char *ac97_quirk[SNDRV_CARDS];
static int buggy_semaphore[SNDRV_CARDS];
static int buggy_irq[SNDRV_CARDS];
static int xbox[SNDRV_CARDS];

Expand All @@ -86,6 +87,8 @@ module_param_array(ac97_clock, int, NULL, 0444);
MODULE_PARM_DESC(ac97_clock, "AC'97 codec clock (0 = auto-detect).");
module_param_array(ac97_quirk, charp, NULL, 0444);
MODULE_PARM_DESC(ac97_quirk, "AC'97 workaround for strange hardware.");
module_param_array(buggy_semaphore, bool, NULL, 0444);
MODULE_PARM_DESC(buggy_semaphore, "Enable workaround for hardwares with problematic codec semaphores.");
module_param_array(buggy_irq, bool, NULL, 0444);
MODULE_PARM_DESC(buggy_irq, "Enable workaround for buggy interrupts on some motherboards.");
module_param_array(xbox, bool, NULL, 0444);
Expand Down Expand Up @@ -367,6 +370,7 @@ struct _snd_intel8x0 {
unsigned fix_nocache: 1; /* workaround for 440MX */
unsigned buggy_irq: 1; /* workaround for buggy mobos */
unsigned xbox: 1; /* workaround for Xbox AC'97 detection */
unsigned buggy_semaphore: 1; /* workaround for buggy codec semaphore */

int spdif_idx; /* SPDIF BAR index; *_SPBAR or -1 if use PCMOUT */
unsigned int sdm_saved; /* SDM reg value */
Expand Down Expand Up @@ -521,6 +525,9 @@ static int snd_intel8x0_codec_semaphore(intel8x0_t *chip, unsigned int codec)
if ((igetdword(chip, ICHREG(GLOB_STA)) & codec) == 0)
return -EIO;

if (chip->buggy_semaphore)
return 0; /* just ignore ... */

/* Anyone holding a semaphore for 1 msec should be shot... */
time = 100;
do {
Expand Down Expand Up @@ -2549,6 +2556,7 @@ struct ich_reg_info {
static int __devinit snd_intel8x0_create(snd_card_t * card,
struct pci_dev *pci,
unsigned long device_type,
int buggy_sem,
intel8x0_t ** r_intel8x0)
{
intel8x0_t *chip;
Expand Down Expand Up @@ -2606,6 +2614,7 @@ static int __devinit snd_intel8x0_create(snd_card_t * card,
chip->card = card;
chip->pci = pci;
chip->irq = -1;
chip->buggy_semaphore = buggy_sem;

if (pci->vendor == PCI_VENDOR_ID_INTEL &&
pci->device == PCI_DEVICE_ID_INTEL_440MX)
Expand Down Expand Up @@ -2810,7 +2819,8 @@ static int __devinit snd_intel8x0_probe(struct pci_dev *pci,
}
}

if ((err = snd_intel8x0_create(card, pci, pci_id->driver_data, &chip)) < 0) {
if ((err = snd_intel8x0_create(card, pci, pci_id->driver_data,
buggy_semaphore[dev], &chip)) < 0) {
snd_card_free(card);
return err;
}
Expand Down

0 comments on commit 6a2f4ea

Please sign in to comment.