diff options
Diffstat (limited to 'sound/pci/hda/hda_intel.c')
-rw-r--r-- | sound/pci/hda/hda_intel.c | 23 |
1 files changed, 17 insertions, 6 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 21aa9b0e28f6..70a9d32f0e96 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -1052,9 +1052,12 @@ static void azx_init_pci(struct azx *chip) | |||
1052 | /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44) | 1052 | /* Clear bits 0-2 of PCI register TCSEL (at offset 0x44) |
1053 | * TCSEL == Traffic Class Select Register, which sets PCI express QOS | 1053 | * TCSEL == Traffic Class Select Register, which sets PCI express QOS |
1054 | * Ensuring these bits are 0 clears playback static on some HD Audio | 1054 | * Ensuring these bits are 0 clears playback static on some HD Audio |
1055 | * codecs | 1055 | * codecs. |
1056 | * The PCI register TCSEL is defined in the Intel manuals. | ||
1056 | */ | 1057 | */ |
1057 | update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0); | 1058 | if (chip->driver_type != AZX_DRIVER_ATI && |
1059 | chip->driver_type != AZX_DRIVER_ATIHDMI) | ||
1060 | update_pci_byte(chip->pci, ICH6_PCIREG_TCSEL, 0x07, 0); | ||
1058 | 1061 | ||
1059 | switch (chip->driver_type) { | 1062 | switch (chip->driver_type) { |
1060 | case AZX_DRIVER_ATI: | 1063 | case AZX_DRIVER_ATI: |
@@ -1235,7 +1238,8 @@ static int azx_setup_periods(struct azx *chip, | |||
1235 | pos_adj = 0; | 1238 | pos_adj = 0; |
1236 | } else { | 1239 | } else { |
1237 | ofs = setup_bdle(substream, azx_dev, | 1240 | ofs = setup_bdle(substream, azx_dev, |
1238 | &bdl, ofs, pos_adj, 1); | 1241 | &bdl, ofs, pos_adj, |
1242 | !substream->runtime->no_period_wakeup); | ||
1239 | if (ofs < 0) | 1243 | if (ofs < 0) |
1240 | goto error; | 1244 | goto error; |
1241 | } | 1245 | } |
@@ -1247,7 +1251,8 @@ static int azx_setup_periods(struct azx *chip, | |||
1247 | period_bytes - pos_adj, 0); | 1251 | period_bytes - pos_adj, 0); |
1248 | else | 1252 | else |
1249 | ofs = setup_bdle(substream, azx_dev, &bdl, ofs, | 1253 | ofs = setup_bdle(substream, azx_dev, &bdl, ofs, |
1250 | period_bytes, 1); | 1254 | period_bytes, |
1255 | !substream->runtime->no_period_wakeup); | ||
1251 | if (ofs < 0) | 1256 | if (ofs < 0) |
1252 | goto error; | 1257 | goto error; |
1253 | } | 1258 | } |
@@ -1515,7 +1520,8 @@ static struct snd_pcm_hardware azx_pcm_hw = { | |||
1515 | /* No full-resume yet implemented */ | 1520 | /* No full-resume yet implemented */ |
1516 | /* SNDRV_PCM_INFO_RESUME |*/ | 1521 | /* SNDRV_PCM_INFO_RESUME |*/ |
1517 | SNDRV_PCM_INFO_PAUSE | | 1522 | SNDRV_PCM_INFO_PAUSE | |
1518 | SNDRV_PCM_INFO_SYNC_START), | 1523 | SNDRV_PCM_INFO_SYNC_START | |
1524 | SNDRV_PCM_INFO_NO_PERIOD_WAKEUP), | ||
1519 | .formats = SNDRV_PCM_FMTBIT_S16_LE, | 1525 | .formats = SNDRV_PCM_FMTBIT_S16_LE, |
1520 | .rates = SNDRV_PCM_RATE_48000, | 1526 | .rates = SNDRV_PCM_RATE_48000, |
1521 | .rate_min = 48000, | 1527 | .rate_min = 48000, |
@@ -2296,13 +2302,16 @@ static int azx_dev_free(struct snd_device *device) | |||
2296 | */ | 2302 | */ |
2297 | static struct snd_pci_quirk position_fix_list[] __devinitdata = { | 2303 | static struct snd_pci_quirk position_fix_list[] __devinitdata = { |
2298 | SND_PCI_QUIRK(0x1025, 0x009f, "Acer Aspire 5110", POS_FIX_LPIB), | 2304 | SND_PCI_QUIRK(0x1025, 0x009f, "Acer Aspire 5110", POS_FIX_LPIB), |
2305 | SND_PCI_QUIRK(0x1025, 0x026f, "Acer Aspire 5538", POS_FIX_LPIB), | ||
2299 | SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB), | 2306 | SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB), |
2300 | SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB), | 2307 | SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB), |
2301 | SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB), | 2308 | SND_PCI_QUIRK(0x1028, 0x01f6, "Dell Latitude 131L", POS_FIX_LPIB), |
2309 | SND_PCI_QUIRK(0x1028, 0x0470, "Dell Inspiron 1120", POS_FIX_LPIB), | ||
2302 | SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB), | 2310 | SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB), |
2303 | SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), | 2311 | SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), |
2304 | SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB), | 2312 | SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB), |
2305 | SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB), | 2313 | SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB), |
2314 | SND_PCI_QUIRK(0x1043, 0x8410, "ASUS", POS_FIX_LPIB), | ||
2306 | SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB), | 2315 | SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB), |
2307 | SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB), | 2316 | SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB), |
2308 | SND_PCI_QUIRK(0x1179, 0xff10, "Toshiba A100-259", POS_FIX_LPIB), | 2317 | SND_PCI_QUIRK(0x1179, 0xff10, "Toshiba A100-259", POS_FIX_LPIB), |
@@ -2698,7 +2707,7 @@ static int __devinit azx_probe(struct pci_dev *pci, | |||
2698 | if (err < 0) | 2707 | if (err < 0) |
2699 | goto out_free; | 2708 | goto out_free; |
2700 | #ifdef CONFIG_SND_HDA_PATCH_LOADER | 2709 | #ifdef CONFIG_SND_HDA_PATCH_LOADER |
2701 | if (patch[dev]) { | 2710 | if (patch[dev] && *patch[dev]) { |
2702 | snd_printk(KERN_ERR SFX "Applying patch firmware '%s'\n", | 2711 | snd_printk(KERN_ERR SFX "Applying patch firmware '%s'\n", |
2703 | patch[dev]); | 2712 | patch[dev]); |
2704 | err = snd_hda_load_patch(chip->bus, patch[dev]); | 2713 | err = snd_hda_load_patch(chip->bus, patch[dev]); |
@@ -2804,6 +2813,8 @@ static DEFINE_PCI_DEVICE_TABLE(azx_ids) = { | |||
2804 | #endif | 2813 | #endif |
2805 | /* Vortex86MX */ | 2814 | /* Vortex86MX */ |
2806 | { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC }, | 2815 | { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC }, |
2816 | /* VMware HDAudio */ | ||
2817 | { PCI_DEVICE(0x15ad, 0x1977), .driver_data = AZX_DRIVER_GENERIC }, | ||
2807 | /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */ | 2818 | /* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */ |
2808 | { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID), | 2819 | { PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID), |
2809 | .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, | 2820 | .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, |