aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/hda/hda_intel.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/hda/hda_intel.c')
-rw-r--r--sound/pci/hda/hda_intel.c38
1 files changed, 36 insertions, 2 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 70a9d32f0e96..43a036716d25 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -126,6 +126,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6},"
126 "{Intel, ICH10}," 126 "{Intel, ICH10},"
127 "{Intel, PCH}," 127 "{Intel, PCH},"
128 "{Intel, CPT}," 128 "{Intel, CPT},"
129 "{Intel, PPT},"
129 "{Intel, PBG}," 130 "{Intel, PBG},"
130 "{Intel, SCH}," 131 "{Intel, SCH},"
131 "{ATI, SB450}," 132 "{ATI, SB450},"
@@ -1091,7 +1092,13 @@ static void azx_init_pci(struct azx *chip)
1091 ? "Failed" : "OK"); 1092 ? "Failed" : "OK");
1092 } 1093 }
1093 break; 1094 break;
1094 1095 default:
1096 /* AMD Hudson needs the similar snoop, as it seems... */
1097 if (chip->pci->vendor == PCI_VENDOR_ID_AMD)
1098 update_pci_byte(chip->pci,
1099 ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR,
1100 0x07, ATI_SB450_HDAUDIO_ENABLE_SNOOP);
1101 break;
1095 } 1102 }
1096} 1103}
1097 1104
@@ -1446,6 +1453,17 @@ static int __devinit azx_codec_create(struct azx *chip, const char *model)
1446 } 1453 }
1447 } 1454 }
1448 1455
1456 /* AMD chipsets often cause the communication stalls upon certain
1457 * sequence like the pin-detection. It seems that forcing the synced
1458 * access works around the stall. Grrr...
1459 */
1460 if (chip->pci->vendor == PCI_VENDOR_ID_AMD ||
1461 chip->pci->vendor == PCI_VENDOR_ID_ATI) {
1462 snd_printk(KERN_INFO SFX "Enable sync_write for AMD chipset\n");
1463 chip->bus->sync_write = 1;
1464 chip->bus->allow_bus_reset = 1;
1465 }
1466
1449 /* Then create codec instances */ 1467 /* Then create codec instances */
1450 for (c = 0; c < max_slots; c++) { 1468 for (c = 0; c < max_slots; c++) {
1451 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) { 1469 if ((chip->codec_mask & (1 << c)) & chip->codec_probe_mask) {
@@ -2349,9 +2367,16 @@ static int __devinit check_position_fix(struct azx *chip, int fix)
2349 /* Check VIA/ATI HD Audio Controller exist */ 2367 /* Check VIA/ATI HD Audio Controller exist */
2350 switch (chip->driver_type) { 2368 switch (chip->driver_type) {
2351 case AZX_DRIVER_VIA: 2369 case AZX_DRIVER_VIA:
2352 case AZX_DRIVER_ATI:
2353 /* Use link position directly, avoid any transfer problem. */ 2370 /* Use link position directly, avoid any transfer problem. */
2354 return POS_FIX_VIACOMBO; 2371 return POS_FIX_VIACOMBO;
2372 case AZX_DRIVER_ATI:
2373 /* ATI chipsets don't work well with position-buffer */
2374 return POS_FIX_LPIB;
2375 case AZX_DRIVER_GENERIC:
2376 /* AMD chipsets also don't work with position-buffer */
2377 if (chip->pci->vendor == PCI_VENDOR_ID_AMD)
2378 return POS_FIX_LPIB;
2379 break;
2355 } 2380 }
2356 2381
2357 return POS_FIX_AUTO; 2382 return POS_FIX_AUTO;
@@ -2549,6 +2574,13 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
2549 gcap &= ~ICH6_GCAP_64OK; 2574 gcap &= ~ICH6_GCAP_64OK;
2550 pci_dev_put(p_smbus); 2575 pci_dev_put(p_smbus);
2551 } 2576 }
2577 } else {
2578 /* FIXME: not sure whether this is really needed, but
2579 * Hudson isn't stable enough for allowing everything...
2580 * let's check later again.
2581 */
2582 if (chip->pci->vendor == PCI_VENDOR_ID_AMD)
2583 gcap &= ~ICH6_GCAP_64OK;
2552 } 2584 }
2553 2585
2554 /* disable 64bit DMA address for Teradici */ 2586 /* disable 64bit DMA address for Teradici */
@@ -2759,6 +2791,8 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
2759 { PCI_DEVICE(0x8086, 0x1c20), .driver_data = AZX_DRIVER_PCH }, 2791 { PCI_DEVICE(0x8086, 0x1c20), .driver_data = AZX_DRIVER_PCH },
2760 /* PBG */ 2792 /* PBG */
2761 { PCI_DEVICE(0x8086, 0x1d20), .driver_data = AZX_DRIVER_PCH }, 2793 { PCI_DEVICE(0x8086, 0x1d20), .driver_data = AZX_DRIVER_PCH },
2794 /* Panther Point */
2795 { PCI_DEVICE(0x8086, 0x1e20), .driver_data = AZX_DRIVER_PCH },
2762 /* SCH */ 2796 /* SCH */
2763 { PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH }, 2797 { PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH },
2764 /* Generic Intel */ 2798 /* Generic Intel */