463
465
AZX_NUM_DRIVERS, /* keep this as last entry */
468
/* driver quirks (capabilities) */
469
/* bits 0-7 are used for indicating driver type */
470
#define AZX_DCAPS_NO_TCSEL (1 << 8) /* No Intel TCSEL bit */
471
#define AZX_DCAPS_NO_MSI (1 << 9) /* No MSI support */
472
#define AZX_DCAPS_ATI_SNOOP (1 << 10) /* ATI snoop enable */
473
#define AZX_DCAPS_NVIDIA_SNOOP (1 << 11) /* Nvidia snoop enable */
474
#define AZX_DCAPS_SCH_SNOOP (1 << 12) /* SCH/PCH snoop enable */
475
#define AZX_DCAPS_RIRB_DELAY (1 << 13) /* Long delay in read loop */
476
#define AZX_DCAPS_RIRB_PRE_DELAY (1 << 14) /* Put a delay before read */
477
#define AZX_DCAPS_CTX_WORKAROUND (1 << 15) /* X-Fi workaround */
478
#define AZX_DCAPS_POSFIX_LPIB (1 << 16) /* Use LPIB as default */
479
#define AZX_DCAPS_POSFIX_VIA (1 << 17) /* Use VIACOMBO as default */
480
#define AZX_DCAPS_NO_64BIT (1 << 18) /* No 64bit address */
481
#define AZX_DCAPS_SYNC_WRITE (1 << 19) /* sync each cmd write */
483
/* quirks for ATI SB / AMD Hudson */
484
#define AZX_DCAPS_PRESET_ATI_SB \
485
(AZX_DCAPS_ATI_SNOOP | AZX_DCAPS_NO_TCSEL | \
486
AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
488
/* quirks for ATI/AMD HDMI */
489
#define AZX_DCAPS_PRESET_ATI_HDMI \
490
(AZX_DCAPS_NO_TCSEL | AZX_DCAPS_SYNC_WRITE | AZX_DCAPS_POSFIX_LPIB)
492
/* quirks for Nvidia */
493
#define AZX_DCAPS_PRESET_NVIDIA \
494
(AZX_DCAPS_NVIDIA_SNOOP | AZX_DCAPS_RIRB_DELAY | AZX_DCAPS_NO_MSI)
466
496
static char *driver_short_names[] __devinitdata = {
467
497
[AZX_DRIVER_ICH] = "HDA Intel",
468
498
[AZX_DRIVER_PCH] = "HDA Intel PCH",
1056
1086
* The PCI register TCSEL is defined in the Intel manuals.
1058
if (chip->driver_type != AZX_DRIVER_ATI &&
1059
chip->driver_type != AZX_DRIVER_ATIHDMI)
1088
if (!(chip->driver_caps & AZX_DCAPS_NO_TCSEL)) {
1089
snd_printdd(SFX "Clearing TCSEL\n");
1060
1090
update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0);
1062
switch (chip->driver_type) {
1063
case AZX_DRIVER_ATI:
1064
/* For ATI SB450 azalia HD audio, we need to enable snoop */
1093
/* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,
1094
* we need to enable snoop.
1096
if (chip->driver_caps & AZX_DCAPS_ATI_SNOOP) {
1097
snd_printdd(SFX "Enabling ATI snoop\n");
1065
1098
update_pci_byte(chip->pci,
1066
1099
ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR,
1067
1100
0x07, ATI_SB450_HDAUDIO_ENABLE_SNOOP);
1069
case AZX_DRIVER_NVIDIA:
1070
/* For NVIDIA HDA, enable snoop */
1103
/* For NVIDIA HDA, enable snoop */
1104
if (chip->driver_caps & AZX_DCAPS_NVIDIA_SNOOP) {
1105
snd_printdd(SFX "Enabling Nvidia snoop\n");
1071
1106
update_pci_byte(chip->pci,
1072
1107
NVIDIA_HDA_TRANSREG_ADDR,
1073
1108
0x0f, NVIDIA_HDA_ENABLE_COHBITS);
2776
2817
static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
2778
{ PCI_DEVICE(0x8086, 0x1c20), .driver_data = AZX_DRIVER_PCH },
2819
{ PCI_DEVICE(0x8086, 0x1c20),
2820
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP },
2780
{ PCI_DEVICE(0x8086, 0x1d20), .driver_data = AZX_DRIVER_PCH },
2822
{ PCI_DEVICE(0x8086, 0x1d20),
2823
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP },
2825
{ PCI_DEVICE(0x8086, 0x1e20),
2826
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP },
2782
{ PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH },
2828
{ PCI_DEVICE(0x8086, 0x811b),
2829
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP },
2783
2830
/* Generic Intel */
2784
2831
{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),
2785
2832
.class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,
2786
2833
.class_mask = 0xffffff,
2787
2834
.driver_data = AZX_DRIVER_ICH },
2788
/* ATI SB 450/600 */
2789
{ PCI_DEVICE(0x1002, 0x437b), .driver_data = AZX_DRIVER_ATI },
2790
{ PCI_DEVICE(0x1002, 0x4383), .driver_data = AZX_DRIVER_ATI },
2835
/* ATI SB 450/600/700/800/900 */
2836
{ PCI_DEVICE(0x1002, 0x437b),
2837
.driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
2838
{ PCI_DEVICE(0x1002, 0x4383),
2839
.driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },
2841
{ PCI_DEVICE(0x1022, 0x780d),
2842
.driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },
2792
{ PCI_DEVICE(0x1002, 0x793b), .driver_data = AZX_DRIVER_ATIHDMI },
2793
{ PCI_DEVICE(0x1002, 0x7919), .driver_data = AZX_DRIVER_ATIHDMI },
2794
{ PCI_DEVICE(0x1002, 0x960f), .driver_data = AZX_DRIVER_ATIHDMI },
2795
{ PCI_DEVICE(0x1002, 0x970f), .driver_data = AZX_DRIVER_ATIHDMI },
2796
{ PCI_DEVICE(0x1002, 0xaa00), .driver_data = AZX_DRIVER_ATIHDMI },
2797
{ PCI_DEVICE(0x1002, 0xaa08), .driver_data = AZX_DRIVER_ATIHDMI },
2798
{ PCI_DEVICE(0x1002, 0xaa10), .driver_data = AZX_DRIVER_ATIHDMI },
2799
{ PCI_DEVICE(0x1002, 0xaa18), .driver_data = AZX_DRIVER_ATIHDMI },
2800
{ PCI_DEVICE(0x1002, 0xaa20), .driver_data = AZX_DRIVER_ATIHDMI },
2801
{ PCI_DEVICE(0x1002, 0xaa28), .driver_data = AZX_DRIVER_ATIHDMI },
2802
{ PCI_DEVICE(0x1002, 0xaa30), .driver_data = AZX_DRIVER_ATIHDMI },
2803
{ PCI_DEVICE(0x1002, 0xaa38), .driver_data = AZX_DRIVER_ATIHDMI },
2804
{ PCI_DEVICE(0x1002, 0xaa40), .driver_data = AZX_DRIVER_ATIHDMI },
2805
{ PCI_DEVICE(0x1002, 0xaa48), .driver_data = AZX_DRIVER_ATIHDMI },
2844
{ PCI_DEVICE(0x1002, 0x793b),
2845
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2846
{ PCI_DEVICE(0x1002, 0x7919),
2847
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2848
{ PCI_DEVICE(0x1002, 0x960f),
2849
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2850
{ PCI_DEVICE(0x1002, 0x970f),
2851
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2852
{ PCI_DEVICE(0x1002, 0xaa00),
2853
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2854
{ PCI_DEVICE(0x1002, 0xaa08),
2855
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2856
{ PCI_DEVICE(0x1002, 0xaa10),
2857
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2858
{ PCI_DEVICE(0x1002, 0xaa18),
2859
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2860
{ PCI_DEVICE(0x1002, 0xaa20),
2861
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2862
{ PCI_DEVICE(0x1002, 0xaa28),
2863
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2864
{ PCI_DEVICE(0x1002, 0xaa30),
2865
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2866
{ PCI_DEVICE(0x1002, 0xaa38),
2867
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2868
{ PCI_DEVICE(0x1002, 0xaa40),
2869
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2870
{ PCI_DEVICE(0x1002, 0xaa48),
2871
.driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },
2806
2872
/* VIA VT8251/VT8237A */
2807
{ PCI_DEVICE(0x1106, 0x3288), .driver_data = AZX_DRIVER_VIA },
2873
{ PCI_DEVICE(0x1106, 0x3288),
2874
.driver_data = AZX_DRIVER_VIA | AZX_DCAPS_POSFIX_VIA },
2809
2876
{ PCI_DEVICE(0x1039, 0x7502), .driver_data = AZX_DRIVER_SIS },
2810
2877
/* ULI M5461 */