aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAndiry Brienza <andiry.xu@amd.com>2009-07-08 01:55:31 -0400
committerTakashi Iwai <tiwai@suse.de>2009-07-08 02:01:47 -0400
commitdc4c2e6bde77735071dbef7aca6bd6c0116102b3 (patch)
treef615b8a8c81c776ed85fadd6b1c39f21dc560928
parent1c55d521f4e58be55735d7ac47e8197d6791fa9a (diff)
ALSA: hda - Disable AMD SB600 64bit address support only
HDA driver disabled HD audio 64bit address support for all AMD SB600/SB700/SB800 platforms with commit 09240cf429505891d6123ce14a29f58f2a60121e due to one SB600 issue reported by community, but we do not see the similar issue on SB700/SB800 platforms. This patch is to refine the workaround for SB600 only. Signed-off-by: Andiry Xu <andiry.xu@amd.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r--sound/pci/hda/hda_intel.c16
1 files changed, 13 insertions, 3 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 16e09d740572..77c1b840ca8b 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -2333,9 +2333,19 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci,
2333 gcap = azx_readw(chip, GCAP); 2333 gcap = azx_readw(chip, GCAP);
2334 snd_printdd(SFX "chipset global capabilities = 0x%x\n", gcap); 2334 snd_printdd(SFX "chipset global capabilities = 0x%x\n", gcap);
2335 2335
2336 /* ATI chips seems buggy about 64bit DMA addresses */ 2336 /* disable SB600 64bit support for safety */
2337 if (chip->driver_type == AZX_DRIVER_ATI) 2337 if ((chip->driver_type == AZX_DRIVER_ATI) ||
2338 gcap &= ~ICH6_GCAP_64OK; 2338 (chip->driver_type == AZX_DRIVER_ATIHDMI)) {
2339 struct pci_dev *p_smbus;
2340 p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,
2341 PCI_DEVICE_ID_ATI_SBX00_SMBUS,
2342 NULL);
2343 if (p_smbus) {
2344 if (p_smbus->revision < 0x30)
2345 gcap &= ~ICH6_GCAP_64OK;
2346 pci_dev_put(p_smbus);
2347 }
2348 }
2339 2349
2340 /* allow 64bit DMA address if supported by H/W */ 2350 /* allow 64bit DMA address if supported by H/W */
2341 if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64))) 2351 if ((gcap & ICH6_GCAP_64OK) && !pci_set_dma_mask(pci, DMA_BIT_MASK(64)))