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.c23
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 */
2297static struct snd_pci_quirk position_fix_list[] __devinitdata = { 2303static 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,