aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/emu10k1
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/emu10k1')
-rw-r--r--sound/pci/emu10k1/emu10k1.c10
-rw-r--r--sound/pci/emu10k1/emu10k1_main.c133
-rw-r--r--sound/pci/emu10k1/p16v.c20
3 files changed, 91 insertions, 72 deletions
diff --git a/sound/pci/emu10k1/emu10k1.c b/sound/pci/emu10k1/emu10k1.c
index 2085a998eaeb..b17142cabead 100644
--- a/sound/pci/emu10k1/emu10k1.c
+++ b/sound/pci/emu10k1/emu10k1.c
@@ -52,6 +52,7 @@ static int seq_ports[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 4};
52static int max_synth_voices[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 64}; 52static int max_synth_voices[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 64};
53static int max_buffer_size[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 128}; 53static int max_buffer_size[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 128};
54static int enable_ir[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; 54static int enable_ir[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0};
55static uint subsystem[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS - 1)] = 0}; /* Force card subsystem model */
55 56
56module_param_array(index, int, NULL, 0444); 57module_param_array(index, int, NULL, 0444);
57MODULE_PARM_DESC(index, "Index value for the EMU10K1 soundcard."); 58MODULE_PARM_DESC(index, "Index value for the EMU10K1 soundcard.");
@@ -71,7 +72,8 @@ module_param_array(max_buffer_size, int, NULL, 0444);
71MODULE_PARM_DESC(max_buffer_size, "Maximum sample buffer size in MB."); 72MODULE_PARM_DESC(max_buffer_size, "Maximum sample buffer size in MB.");
72module_param_array(enable_ir, bool, NULL, 0444); 73module_param_array(enable_ir, bool, NULL, 0444);
73MODULE_PARM_DESC(enable_ir, "Enable IR."); 74MODULE_PARM_DESC(enable_ir, "Enable IR.");
74 75module_param_array(subsystem, uint, NULL, 0444);
76MODULE_PARM_DESC(subsystem, "Force card subsystem model.");
75/* 77/*
76 * Class 0401: 1102:0008 (rev 00) Subsystem: 1102:1001 -> Audigy2 Value Model:SB0400 78 * Class 0401: 1102:0008 (rev 00) Subsystem: 1102:1001 -> Audigy2 Value Model:SB0400
77 */ 79 */
@@ -122,7 +124,7 @@ static int __devinit snd_card_emu10k1_probe(struct pci_dev *pci,
122 max_buffer_size[dev] = 1024; 124 max_buffer_size[dev] = 1024;
123 if ((err = snd_emu10k1_create(card, pci, extin[dev], extout[dev], 125 if ((err = snd_emu10k1_create(card, pci, extin[dev], extout[dev],
124 (long)max_buffer_size[dev] * 1024 * 1024, 126 (long)max_buffer_size[dev] * 1024 * 1024,
125 enable_ir[dev], 127 enable_ir[dev], subsystem[dev],
126 &emu)) < 0) { 128 &emu)) < 0) {
127 snd_card_free(card); 129 snd_card_free(card);
128 return err; 130 return err;
@@ -140,7 +142,7 @@ static int __devinit snd_card_emu10k1_probe(struct pci_dev *pci,
140 return err; 142 return err;
141 } 143 }
142 /* This stores the periods table. */ 144 /* This stores the periods table. */
143 if (emu->audigy && emu->revision == 4) { /* P16V */ 145 if (emu->card_capabilities->ca0151_chip) { /* P16V */
144 if(snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci), 1024, &emu->p16v_buffer) < 0) { 146 if(snd_dma_alloc_pages(SNDRV_DMA_TYPE_DEV, snd_dma_pci_data(pci), 1024, &emu->p16v_buffer) < 0) {
145 snd_p16v_free(emu); 147 snd_p16v_free(emu);
146 return -ENOMEM; 148 return -ENOMEM;
@@ -161,7 +163,7 @@ static int __devinit snd_card_emu10k1_probe(struct pci_dev *pci,
161 snd_card_free(card); 163 snd_card_free(card);
162 return err; 164 return err;
163 } 165 }
164 if (emu->audigy && emu->revision == 4) { /* P16V */ 166 if (emu->card_capabilities->ca0151_chip) { /* P16V */
165 if ((err = snd_p16v_pcm(emu, 4, NULL)) < 0) { 167 if ((err = snd_p16v_pcm(emu, 4, NULL)) < 0) {
166 snd_card_free(card); 168 snd_card_free(card);
167 return err; 169 return err;
diff --git a/sound/pci/emu10k1/emu10k1_main.c b/sound/pci/emu10k1/emu10k1_main.c
index a341e758acde..746b51ef3966 100644
--- a/sound/pci/emu10k1/emu10k1_main.c
+++ b/sound/pci/emu10k1/emu10k1_main.c
@@ -191,7 +191,7 @@ static int __devinit snd_emu10k1_init(emu10k1_t * emu, int enable_ir)
191 /* Set playback routing. */ 191 /* Set playback routing. */
192 snd_emu10k1_ptr20_write(emu, CAPTURE_P16V_SOURCE, 0, 0x78e4); 192 snd_emu10k1_ptr20_write(emu, CAPTURE_P16V_SOURCE, 0, 0x78e4);
193 } 193 }
194 if (emu->audigy && (emu->serial == 0x10011102) ) { /* audigy2 Value */ 194 if (emu->card_capabilities->ca0108_chip) { /* audigy2 Value */
195 /* Hacks for Alice3 to work independent of haP16V driver */ 195 /* Hacks for Alice3 to work independent of haP16V driver */
196 u32 tmp; 196 u32 tmp;
197 197
@@ -253,6 +253,8 @@ static int __devinit snd_emu10k1_init(emu10k1_t * emu, int enable_ir)
253 HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); 253 HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
254 else 254 else
255 outl(HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG); 255 outl(HCFG_AUTOMUTE | HCFG_JOYENABLE, emu->port + HCFG);
256 /* FIXME: Remove all these emu->model and replace it with a card recognition parameter,
257 * e.g. card_capabilities->joystick */
256 } else if (emu->model == 0x20 || 258 } else if (emu->model == 0x20 ||
257 emu->model == 0xc400 || 259 emu->model == 0xc400 ||
258 (emu->model == 0x21 && emu->revision < 6)) 260 (emu->model == 0x21 && emu->revision < 6))
@@ -299,12 +301,12 @@ static int __devinit snd_emu10k1_init(emu10k1_t * emu, int enable_ir)
299 if (emu->audigy) { 301 if (emu->audigy) {
300 outl(inl(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG); 302 outl(inl(emu->port + A_IOCFG) & ~0x44, emu->port + A_IOCFG);
301 303
302 if (emu->revision == 4) { /* audigy2 */ 304 if (emu->card_capabilities->ca0151_chip) { /* audigy2 */
303 /* Unmute Analog now. Set GPO6 to 1 for Apollo. 305 /* Unmute Analog now. Set GPO6 to 1 for Apollo.
304 * This has to be done after init ALice3 I2SOut beyond 48KHz. 306 * This has to be done after init ALice3 I2SOut beyond 48KHz.
305 * So, sequence is important. */ 307 * So, sequence is important. */
306 outl(inl(emu->port + A_IOCFG) | 0x0040, emu->port + A_IOCFG); 308 outl(inl(emu->port + A_IOCFG) | 0x0040, emu->port + A_IOCFG);
307 } else if (emu->serial == 0x10011102) { /* audigy2 value */ 309 } else if (emu->card_capabilities->ca0108_chip) { /* audigy2 value */
308 /* Unmute Analog now. */ 310 /* Unmute Analog now. */
309 outl(inl(emu->port + A_IOCFG) | 0x0060, emu->port + A_IOCFG); 311 outl(inl(emu->port + A_IOCFG) | 0x0060, emu->port + A_IOCFG);
310 } else { 312 } else {
@@ -614,6 +616,7 @@ static int snd_emu10k1_dev_free(snd_device_t *device)
614 616
615static emu_chip_details_t emu_chip_details[] = { 617static emu_chip_details_t emu_chip_details[] = {
616 /* Audigy 2 Value AC3 out does not work yet. Need to find out how to turn off interpolators.*/ 618 /* Audigy 2 Value AC3 out does not work yet. Need to find out how to turn off interpolators.*/
619 /* Tested by James@superbug.co.uk 3rd July 2005 */
617 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10011102, 620 {.vendor = 0x1102, .device = 0x0008, .subsystem = 0x10011102,
618 .driver = "Audigy2", .name = "Audigy 2 Value [SB0400]", 621 .driver = "Audigy2", .name = "Audigy 2 Value [SB0400]",
619 .id = "Audigy2", 622 .id = "Audigy2",
@@ -627,6 +630,14 @@ static emu_chip_details_t emu_chip_details[] = {
627 .emu10k2_chip = 1, 630 .emu10k2_chip = 1,
628 .ca0108_chip = 1, 631 .ca0108_chip = 1,
629 .ac97_chip = 1} , 632 .ac97_chip = 1} ,
633 /* Tested by James@superbug.co.uk 8th July 2005. No sound available yet. */
634 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x40011102,
635 .driver = "Audigy2", .name = "E-mu 1212m [4001]",
636 .id = "EMU1212m",
637 .emu10k2_chip = 1,
638 .ca0102_chip = 1,
639 .ecard = 1} ,
640 /* Tested by James@superbug.co.uk 3rd July 2005 */
630 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102, 641 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x20071102,
631 .driver = "Audigy2", .name = "Audigy 4 PRO [SB0380]", 642 .driver = "Audigy2", .name = "Audigy 4 PRO [SB0380]",
632 .id = "Audigy2", 643 .id = "Audigy2",
@@ -687,18 +698,18 @@ static emu_chip_details_t emu_chip_details[] = {
687 .ca0151_chip = 1, 698 .ca0151_chip = 1,
688 .spdif_bug = 1, 699 .spdif_bug = 1,
689 .ac97_chip = 1} , 700 .ac97_chip = 1} ,
690 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x10020052, 701 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00531102,
691 .driver = "Audigy", .name = "Audigy 1 ES [SB0160]", 702 .driver = "Audigy", .name = "Audigy 1 [SB0090]",
692 .id = "Audigy", 703 .id = "Audigy",
693 .emu10k2_chip = 1, 704 .emu10k2_chip = 1,
694 .ca0102_chip = 1, 705 .ca0102_chip = 1,
695 .spdif_bug = 1,
696 .ac97_chip = 1} , 706 .ac97_chip = 1} ,
697 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00531102, 707 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00521102,
698 .driver = "Audigy", .name = "Audigy 1 [SB0090]", 708 .driver = "Audigy", .name = "Audigy 1 ES [SB0160]",
699 .id = "Audigy", 709 .id = "Audigy",
700 .emu10k2_chip = 1, 710 .emu10k2_chip = 1,
701 .ca0102_chip = 1, 711 .ca0102_chip = 1,
712 .spdif_bug = 1,
702 .ac97_chip = 1} , 713 .ac97_chip = 1} ,
703 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00511102, 714 {.vendor = 0x1102, .device = 0x0004, .subsystem = 0x00511102,
704 .driver = "Audigy", .name = "Audigy 1 [SB0090]", 715 .driver = "Audigy", .name = "Audigy 1 [SB0090]",
@@ -712,54 +723,49 @@ static emu_chip_details_t emu_chip_details[] = {
712 .emu10k2_chip = 1, 723 .emu10k2_chip = 1,
713 .ca0102_chip = 1, 724 .ca0102_chip = 1,
714 .ac97_chip = 1} , 725 .ac97_chip = 1} ,
715 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102, 726 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806B1102,
716 .driver = "EMU10K1", .name = "E-mu APS [4001]", 727 .driver = "EMU10K1", .name = "SBLive! [SB0105]",
717 .id = "APS",
718 .emu10k1_chip = 1,
719 .ecard = 1} ,
720 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
721 .driver = "EMU10K1", .name = "SBLive! Player 5.1 [SB0060]",
722 .id = "Live", 728 .id = "Live",
723 .emu10k1_chip = 1, 729 .emu10k1_chip = 1,
724 .ac97_chip = 1, 730 .ac97_chip = 1,
725 .sblive51 = 1} , 731 .sblive51 = 1} ,
726 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80641102, 732 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806A1102,
727 .driver = "EMU10K1", .name = "SB Live 5.1", 733 .driver = "EMU10K1", .name = "SBLive! Value [SB0103]",
728 .id = "Live", 734 .id = "Live",
729 .emu10k1_chip = 1, 735 .emu10k1_chip = 1,
730 .ac97_chip = 1, 736 .ac97_chip = 1,
731 .sblive51 = 1} , 737 .sblive51 = 1} ,
732 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80401102, 738 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80691102,
733 .driver = "EMU10K1", .name = "SBLive! Platinum [CT4760P]", 739 .driver = "EMU10K1", .name = "SBLive! Value [SB0101]",
734 .id = "Live",
735 .emu10k1_chip = 1,
736 .ac97_chip = 1} ,
737 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00211102,
738 .driver = "EMU10K1", .name = "SBLive! [CT4620]",
739 .id = "Live", 740 .id = "Live",
740 .emu10k1_chip = 1, 741 .emu10k1_chip = 1,
741 .ac97_chip = 1, 742 .ac97_chip = 1,
742 .sblive51 = 1} , 743 .sblive51 = 1} ,
743 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00201102, 744 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80641102,
744 .driver = "EMU10K1", .name = "SBLive! Value [CT4670]", 745 .driver = "EMU10K1", .name = "SB Live 5.1",
745 .id = "Live", 746 .id = "Live",
746 .emu10k1_chip = 1, 747 .emu10k1_chip = 1,
747 .ac97_chip = 1, 748 .ac97_chip = 1,
748 .sblive51 = 1} , 749 .sblive51 = 1} ,
749 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80221102, 750 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102,
750 .driver = "EMU10K1", .name = "SBLive! Value [CT4780]", 751 .driver = "EMU10K1", .name = "SBLive! Player 5.1 [SB0060]",
751 .id = "Live", 752 .id = "Live",
752 .emu10k1_chip = 1, 753 .emu10k1_chip = 1,
753 .ac97_chip = 1, 754 .ac97_chip = 1,
754 .sblive51 = 1} , 755 .sblive51 = 1} ,
755 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80231102, 756 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102,
756 .driver = "EMU10K1", .name = "SB PCI512 [CT4790]", 757 .driver = "EMU10K1", .name = "SBLive! Value [CT4850]",
757 .id = "Live", 758 .id = "Live",
758 .emu10k1_chip = 1, 759 .emu10k1_chip = 1,
759 .ac97_chip = 1, 760 .ac97_chip = 1,
760 .sblive51 = 1} , 761 .sblive51 = 1} ,
761 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80261102, 762 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80401102,
762 .driver = "EMU10K1", .name = "SBLive! Value [CT4830]", 763 .driver = "EMU10K1", .name = "SBLive! Platinum [CT4760P]",
764 .id = "Live",
765 .emu10k1_chip = 1,
766 .ac97_chip = 1} ,
767 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80321102,
768 .driver = "EMU10K1", .name = "SBLive! Value [CT4871]",
763 .id = "Live", 769 .id = "Live",
764 .emu10k1_chip = 1, 770 .emu10k1_chip = 1,
765 .ac97_chip = 1, 771 .ac97_chip = 1,
@@ -770,50 +776,50 @@ static emu_chip_details_t emu_chip_details[] = {
770 .emu10k1_chip = 1, 776 .emu10k1_chip = 1,
771 .ac97_chip = 1, 777 .ac97_chip = 1,
772 .sblive51 = 1} , 778 .sblive51 = 1} ,
773 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80271102, 779 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80281102,
774 .driver = "EMU10K1", .name = "SBLive! Value [CT4832]", 780 .driver = "EMU10K1", .name = "SBLive! Value [CT4870]",
775 .id = "Live", 781 .id = "Live",
776 .emu10k1_chip = 1, 782 .emu10k1_chip = 1,
777 .ac97_chip = 1, 783 .ac97_chip = 1,
778 .sblive51 = 1} , 784 .sblive51 = 1} ,
779 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80511102, 785 /* Tested by James@superbug.co.uk 3rd July 2005 */
780 .driver = "EMU10K1", .name = "SBLive! Value [CT4850]", 786 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80271102,
787 .driver = "EMU10K1", .name = "SBLive! Value [CT4832]",
781 .id = "Live", 788 .id = "Live",
782 .emu10k1_chip = 1, 789 .emu10k1_chip = 1,
783 .ac97_chip = 1, 790 .ac97_chip = 1,
784 .sblive51 = 1} , 791 .sblive51 = 1} ,
785 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80281102, 792 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80261102,
786 .driver = "EMU10K1", .name = "SBLive! Value [CT4870]", 793 .driver = "EMU10K1", .name = "SBLive! Value [CT4830]",
787 .id = "Live", 794 .id = "Live",
788 .emu10k1_chip = 1, 795 .emu10k1_chip = 1,
789 .ac97_chip = 1, 796 .ac97_chip = 1,
790 .sblive51 = 1} , 797 .sblive51 = 1} ,
791 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80321102, 798 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80231102,
792 .driver = "EMU10K1", .name = "SBLive! Value [CT4871]", 799 .driver = "EMU10K1", .name = "SB PCI512 [CT4790]",
793 .id = "Live", 800 .id = "Live",
794 .emu10k1_chip = 1, 801 .emu10k1_chip = 1,
795 .ac97_chip = 1, 802 .ac97_chip = 1,
796 .sblive51 = 1} , 803 .sblive51 = 1} ,
797 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80611102, 804 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80221102,
798 .driver = "EMU10K1", .name = "SBLive! Value [SB0060]", 805 .driver = "EMU10K1", .name = "SBLive! Value [CT4780]",
799 .id = "Live", 806 .id = "Live",
800 .emu10k1_chip = 1, 807 .emu10k1_chip = 1,
801 .ac97_chip = 1, 808 .ac97_chip = 1,
802 .sblive51 = 1} , 809 .sblive51 = 1} ,
803 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x80691102, 810 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x40011102,
804 .driver = "EMU10K1", .name = "SBLive! Value [SB0101]", 811 .driver = "EMU10K1", .name = "E-mu APS [4001]",
805 .id = "Live", 812 .id = "APS",
806 .emu10k1_chip = 1, 813 .emu10k1_chip = 1,
807 .ac97_chip = 1, 814 .ecard = 1} ,
808 .sblive51 = 1} , 815 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00211102,
809 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806A1102, 816 .driver = "EMU10K1", .name = "SBLive! [CT4620]",
810 .driver = "EMU10K1", .name = "SBLive! Value [SB0103]",
811 .id = "Live", 817 .id = "Live",
812 .emu10k1_chip = 1, 818 .emu10k1_chip = 1,
813 .ac97_chip = 1, 819 .ac97_chip = 1,
814 .sblive51 = 1} , 820 .sblive51 = 1} ,
815 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x806B1102, 821 {.vendor = 0x1102, .device = 0x0002, .subsystem = 0x00201102,
816 .driver = "EMU10K1", .name = "SBLive! [SB0105]", 822 .driver = "EMU10K1", .name = "SBLive! Value [CT4670]",
817 .id = "Live", 823 .id = "Live",
818 .emu10k1_chip = 1, 824 .emu10k1_chip = 1,
819 .ac97_chip = 1, 825 .ac97_chip = 1,
@@ -833,6 +839,7 @@ int __devinit snd_emu10k1_create(snd_card_t * card,
833 unsigned short extout_mask, 839 unsigned short extout_mask,
834 long max_cache_bytes, 840 long max_cache_bytes,
835 int enable_ir, 841 int enable_ir,
842 uint subsystem,
836 emu10k1_t ** remu) 843 emu10k1_t ** remu)
837{ 844{
838 emu10k1_t *emu; 845 emu10k1_t *emu;
@@ -878,10 +885,16 @@ int __devinit snd_emu10k1_create(snd_card_t * card,
878 885
879 for (c = emu_chip_details; c->vendor; c++) { 886 for (c = emu_chip_details; c->vendor; c++) {
880 if (c->vendor == pci->vendor && c->device == pci->device) { 887 if (c->vendor == pci->vendor && c->device == pci->device) {
881 if (c->subsystem && c->subsystem != emu->serial) 888 if (subsystem) {
882 continue; 889 if (c->subsystem && (c->subsystem == subsystem) ) {
883 if (c->revision && c->revision != emu->revision) 890 break;
884 continue; 891 } else continue;
892 } else {
893 if (c->subsystem && (c->subsystem != emu->serial) )
894 continue;
895 if (c->revision && c->revision != emu->revision)
896 continue;
897 }
885 break; 898 break;
886 } 899 }
887 } 900 }
@@ -892,10 +905,14 @@ int __devinit snd_emu10k1_create(snd_card_t * card,
892 return -ENOENT; 905 return -ENOENT;
893 } 906 }
894 emu->card_capabilities = c; 907 emu->card_capabilities = c;
895 if (c->subsystem != 0) 908 if (c->subsystem && !subsystem)
896 snd_printdd("Sound card name=%s\n", c->name); 909 snd_printdd("Sound card name=%s\n", c->name);
897 else 910 else if (subsystem)
898 snd_printdd("Sound card name=%s, vendor=0x%x, device=0x%x, subsystem=0x%x\n", c->name, pci->vendor, pci->device, emu->serial); 911 snd_printdd("Sound card name=%s, vendor=0x%x, device=0x%x, subsystem=0x%x. Forced to subsytem=0x%x\n",
912 c->name, pci->vendor, pci->device, emu->serial, c->subsystem);
913 else
914 snd_printdd("Sound card name=%s, vendor=0x%x, device=0x%x, subsystem=0x%x.\n",
915 c->name, pci->vendor, pci->device, emu->serial);
899 916
900 if (!*card->id && c->id) { 917 if (!*card->id && c->id) {
901 int i, n = 0; 918 int i, n = 0;
diff --git a/sound/pci/emu10k1/p16v.c b/sound/pci/emu10k1/p16v.c
index 98f980189892..a1691330d3b6 100644
--- a/sound/pci/emu10k1/p16v.c
+++ b/sound/pci/emu10k1/p16v.c
@@ -822,7 +822,7 @@ static int snd_p16v_volume_put_analog_unknown(snd_kcontrol_t * kcontrol,
822static snd_kcontrol_new_t snd_p16v_volume_control_analog_front = 822static snd_kcontrol_new_t snd_p16v_volume_control_analog_front =
823{ 823{
824 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 824 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
825 .name = "HD Analog Front Volume", 825 .name = "HD Analog Front Playback Volume",
826 .info = snd_p16v_volume_info, 826 .info = snd_p16v_volume_info,
827 .get = snd_p16v_volume_get_analog_front, 827 .get = snd_p16v_volume_get_analog_front,
828 .put = snd_p16v_volume_put_analog_front 828 .put = snd_p16v_volume_put_analog_front
@@ -831,7 +831,7 @@ static snd_kcontrol_new_t snd_p16v_volume_control_analog_front =
831static snd_kcontrol_new_t snd_p16v_volume_control_analog_center_lfe = 831static snd_kcontrol_new_t snd_p16v_volume_control_analog_center_lfe =
832{ 832{
833 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 833 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
834 .name = "HD Analog Center/LFE Volume", 834 .name = "HD Analog Center/LFE Playback Volume",
835 .info = snd_p16v_volume_info, 835 .info = snd_p16v_volume_info,
836 .get = snd_p16v_volume_get_analog_center_lfe, 836 .get = snd_p16v_volume_get_analog_center_lfe,
837 .put = snd_p16v_volume_put_analog_center_lfe 837 .put = snd_p16v_volume_put_analog_center_lfe
@@ -840,7 +840,7 @@ static snd_kcontrol_new_t snd_p16v_volume_control_analog_center_lfe =
840static snd_kcontrol_new_t snd_p16v_volume_control_analog_unknown = 840static snd_kcontrol_new_t snd_p16v_volume_control_analog_unknown =
841{ 841{
842 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 842 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
843 .name = "HD Analog Unknown Volume", 843 .name = "HD Analog Unknown Playback Volume",
844 .info = snd_p16v_volume_info, 844 .info = snd_p16v_volume_info,
845 .get = snd_p16v_volume_get_analog_unknown, 845 .get = snd_p16v_volume_get_analog_unknown,
846 .put = snd_p16v_volume_put_analog_unknown 846 .put = snd_p16v_volume_put_analog_unknown
@@ -849,7 +849,7 @@ static snd_kcontrol_new_t snd_p16v_volume_control_analog_unknown =
849static snd_kcontrol_new_t snd_p16v_volume_control_analog_rear = 849static snd_kcontrol_new_t snd_p16v_volume_control_analog_rear =
850{ 850{
851 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 851 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
852 .name = "HD Analog Rear Volume", 852 .name = "HD Analog Rear Playback Volume",
853 .info = snd_p16v_volume_info, 853 .info = snd_p16v_volume_info,
854 .get = snd_p16v_volume_get_analog_rear, 854 .get = snd_p16v_volume_get_analog_rear,
855 .put = snd_p16v_volume_put_analog_rear 855 .put = snd_p16v_volume_put_analog_rear
@@ -858,7 +858,7 @@ static snd_kcontrol_new_t snd_p16v_volume_control_analog_rear =
858static snd_kcontrol_new_t snd_p16v_volume_control_spdif_front = 858static snd_kcontrol_new_t snd_p16v_volume_control_spdif_front =
859{ 859{
860 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 860 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
861 .name = "HD SPDIF Front Volume", 861 .name = "HD SPDIF Front Playback Volume",
862 .info = snd_p16v_volume_info, 862 .info = snd_p16v_volume_info,
863 .get = snd_p16v_volume_get_spdif_front, 863 .get = snd_p16v_volume_get_spdif_front,
864 .put = snd_p16v_volume_put_spdif_front 864 .put = snd_p16v_volume_put_spdif_front
@@ -867,7 +867,7 @@ static snd_kcontrol_new_t snd_p16v_volume_control_spdif_front =
867static snd_kcontrol_new_t snd_p16v_volume_control_spdif_center_lfe = 867static snd_kcontrol_new_t snd_p16v_volume_control_spdif_center_lfe =
868{ 868{
869 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 869 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
870 .name = "HD SPDIF Center/LFE Volume", 870 .name = "HD SPDIF Center/LFE Playback Volume",
871 .info = snd_p16v_volume_info, 871 .info = snd_p16v_volume_info,
872 .get = snd_p16v_volume_get_spdif_center_lfe, 872 .get = snd_p16v_volume_get_spdif_center_lfe,
873 .put = snd_p16v_volume_put_spdif_center_lfe 873 .put = snd_p16v_volume_put_spdif_center_lfe
@@ -876,7 +876,7 @@ static snd_kcontrol_new_t snd_p16v_volume_control_spdif_center_lfe =
876static snd_kcontrol_new_t snd_p16v_volume_control_spdif_unknown = 876static snd_kcontrol_new_t snd_p16v_volume_control_spdif_unknown =
877{ 877{
878 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 878 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
879 .name = "HD SPDIF Unknown Volume", 879 .name = "HD SPDIF Unknown Playback Volume",
880 .info = snd_p16v_volume_info, 880 .info = snd_p16v_volume_info,
881 .get = snd_p16v_volume_get_spdif_unknown, 881 .get = snd_p16v_volume_get_spdif_unknown,
882 .put = snd_p16v_volume_put_spdif_unknown 882 .put = snd_p16v_volume_put_spdif_unknown
@@ -885,7 +885,7 @@ static snd_kcontrol_new_t snd_p16v_volume_control_spdif_unknown =
885static snd_kcontrol_new_t snd_p16v_volume_control_spdif_rear = 885static snd_kcontrol_new_t snd_p16v_volume_control_spdif_rear =
886{ 886{
887 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 887 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
888 .name = "HD SPDIF Rear Volume", 888 .name = "HD SPDIF Rear Playback Volume",
889 .info = snd_p16v_volume_info, 889 .info = snd_p16v_volume_info,
890 .get = snd_p16v_volume_get_spdif_rear, 890 .get = snd_p16v_volume_get_spdif_rear,
891 .put = snd_p16v_volume_put_spdif_rear 891 .put = snd_p16v_volume_put_spdif_rear
@@ -936,7 +936,7 @@ static int snd_p16v_capture_source_put(snd_kcontrol_t * kcontrol,
936static snd_kcontrol_new_t snd_p16v_capture_source __devinitdata = 936static snd_kcontrol_new_t snd_p16v_capture_source __devinitdata =
937{ 937{
938 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 938 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
939 .name = "HD Capture source", 939 .name = "HD source Capture",
940 .info = snd_p16v_capture_source_info, 940 .info = snd_p16v_capture_source_info,
941 .get = snd_p16v_capture_source_get, 941 .get = snd_p16v_capture_source_get,
942 .put = snd_p16v_capture_source_put 942 .put = snd_p16v_capture_source_put
@@ -985,7 +985,7 @@ static int snd_p16v_capture_channel_put(snd_kcontrol_t * kcontrol,
985static snd_kcontrol_new_t snd_p16v_capture_channel __devinitdata = 985static snd_kcontrol_new_t snd_p16v_capture_channel __devinitdata =
986{ 986{
987 .iface = SNDRV_CTL_ELEM_IFACE_MIXER, 987 .iface = SNDRV_CTL_ELEM_IFACE_MIXER,
988 .name = "HD Capture channel", 988 .name = "HD channel Capture",
989 .info = snd_p16v_capture_channel_info, 989 .info = snd_p16v_capture_channel_info,
990 .get = snd_p16v_capture_channel_get, 990 .get = snd_p16v_capture_channel_get,
991 .put = snd_p16v_capture_channel_put 991 .put = snd_p16v_capture_channel_put