diff options
author | Takashi Iwai <tiwai@suse.de> | 2005-04-07 09:48:42 -0400 |
---|---|---|
committer | Jaroslav Kysela <perex@suse.cz> | 2005-05-29 03:58:22 -0400 |
commit | bdaed50292bea3e2b20c68c2ffe9dbde7c0d6910 (patch) | |
tree | 7f056ec8acce0c50b9dc84611b24e4a711d0100d | |
parent | 5af4c83375cba113fb7e1ed57024a5442ca5060e (diff) |
[ALSA] Check revision for the proper detection of audigy 2
EMU10K1/EMU10K2 driver
Check ther revision to detect non-listed audigy 2 boards.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | include/sound/emu10k1.h | 1 | ||||
-rw-r--r-- | sound/pci/emu10k1/emu10k1_main.c | 18 |
2 files changed, 15 insertions, 4 deletions
diff --git a/include/sound/emu10k1.h b/include/sound/emu10k1.h index 6647919768bf..f5babd3f8452 100644 --- a/include/sound/emu10k1.h +++ b/include/sound/emu10k1.h | |||
@@ -1040,6 +1040,7 @@ typedef struct { | |||
1040 | u32 vendor; | 1040 | u32 vendor; |
1041 | u32 device; | 1041 | u32 device; |
1042 | u32 subsystem; | 1042 | u32 subsystem; |
1043 | unsigned char revision; | ||
1043 | unsigned char emu10k1_chip; /* Original SB Live. Not SB Live 24bit. */ | 1044 | unsigned char emu10k1_chip; /* Original SB Live. Not SB Live 24bit. */ |
1044 | unsigned char emu10k2_chip; /* Audigy 1 or Audigy 2. */ | 1045 | unsigned char emu10k2_chip; /* Audigy 1 or Audigy 2. */ |
1045 | unsigned char ca0102_chip; /* Audigy 1 or Audigy 2. Not SB Audigy 2 Value. */ | 1046 | unsigned char ca0102_chip; /* Audigy 1 or Audigy 2. Not SB Audigy 2 Value. */ |
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c index a3a1a10fb0c9..c6d53b459254 100644 --- a/sound/pci/emu10k1/emu10k1_main.c +++ b/sound/pci/emu10k1/emu10k1_main.c | |||
@@ -679,6 +679,14 @@ static emu_chip_details_t emu_chip_details[] = { | |||
679 | .spk71 = 1, | 679 | .spk71 = 1, |
680 | .spdif_bug = 1, | 680 | .spdif_bug = 1, |
681 | .ac97_chip = 1} , | 681 | .ac97_chip = 1} , |
682 | {.vendor = 0x1102, .device = 0x0004, .revision = 0x04, | ||
683 | .driver = "Audigy2", .name = "Audigy 2 [Unknown]", | ||
684 | .id = "Audigy2", | ||
685 | .emu10k2_chip = 1, | ||
686 | .ca0102_chip = 1, | ||
687 | .ca0151_chip = 1, | ||
688 | .spdif_bug = 1, | ||
689 | .ac97_chip = 1} , | ||
682 | {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10020052, | 690 | {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10020052, |
683 | .driver = "Audigy", .name = "Audigy 1 ES [SB0160]", | 691 | .driver = "Audigy", .name = "Audigy 1 ES [SB0160]", |
684 | .id = "Audigy", | 692 | .id = "Audigy", |
@@ -693,11 +701,10 @@ static emu_chip_details_t emu_chip_details[] = { | |||
693 | .ca0102_chip = 1, | 701 | .ca0102_chip = 1, |
694 | .ac97_chip = 1} , | 702 | .ac97_chip = 1} , |
695 | {.vendor = 0x1102, .device = 0x0004, | 703 | {.vendor = 0x1102, .device = 0x0004, |
696 | .driver = "Audigy", .name = "Audigy 1 or 2 [Unknown]", | 704 | .driver = "Audigy", .name = "Audigy 1 [Unknown]", |
697 | .id = "Audigy", | 705 | .id = "Audigy", |
698 | .emu10k2_chip = 1, | 706 | .emu10k2_chip = 1, |
699 | .ca0102_chip = 1, | 707 | .ca0102_chip = 1, |
700 | .spdif_bug = 1, | ||
701 | .ac97_chip = 1} , | 708 | .ac97_chip = 1} , |
702 | {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102, | 709 | {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102, |
703 | .driver = "EMU10K1", .name = "E-mu APS [4001]", | 710 | .driver = "EMU10K1", .name = "E-mu APS [4001]", |
@@ -781,8 +788,11 @@ int __devinit snd_emu10k1_create(snd_card_t * card, | |||
781 | 788 | ||
782 | for (c = emu_chip_details; c->vendor; c++) { | 789 | for (c = emu_chip_details; c->vendor; c++) { |
783 | if (c->vendor == pci->vendor && c->device == pci->device) { | 790 | if (c->vendor == pci->vendor && c->device == pci->device) { |
784 | if (c->subsystem == emu->serial) break; | 791 | if (c->subsystem && c->subsystem != emu->serial) |
785 | if (c->subsystem == 0) break; | 792 | continue; |
793 | if (c->revision && c->revision != emu->revision) | ||
794 | continue; | ||
795 | break; | ||
786 | } | 796 | } |
787 | } | 797 | } |
788 | if (c->vendor == 0) { | 798 | if (c->vendor == 0) { |