aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci
diff options
context:
space:
mode:
authorTakashi Iwai <tiwai@suse.de>2014-08-06 08:27:42 -0400
committerTakashi Iwai <tiwai@suse.de>2014-08-07 04:11:26 -0400
commitc563f473ac31c182d93f4c6ec8eb0ce199439978 (patch)
tree6c41c1530b478ebca9003b20689a575542b87bd5 /sound/pci
parentf7ae9ba0e80dd3a359cd9e4075b7b6f8acc5a3fa (diff)
ALSA: hda - Fix probing and stuttering on CMI8888 HD-audio controller
ASUS Phoebus with CMI8888 HD-audio chip (PCI id 13f6:5011) doesn't work with HD-audio driver as is because of some weird nature. For making DMA properly working, we need to disable MSI. The position report buffer doesn't work, thus we need to force reading LPIB instead. And yet, the codec CORB/RIRB communication gives errors unless we disable the snooping (caching). In this patch, all these workarounds are added as a quirk for the device. The HD-audio *codec* chip needs yet another workaround, but it'll be provided in the succeeding patch. Reported-and-tested-by: Vincent Lejeune <vljn@ovi.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci')
-rw-r--r--sound/pci/hda/hda_intel.c7
1 files changed, 7 insertions, 0 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c
index 5db1948699d8..aa302fb03fc5 100644
--- a/sound/pci/hda/hda_intel.c
+++ b/sound/pci/hda/hda_intel.c
@@ -265,6 +265,7 @@ enum {
265 AZX_DRIVER_TERA, 265 AZX_DRIVER_TERA,
266 AZX_DRIVER_CTX, 266 AZX_DRIVER_CTX,
267 AZX_DRIVER_CTHDA, 267 AZX_DRIVER_CTHDA,
268 AZX_DRIVER_CMEDIA,
268 AZX_DRIVER_GENERIC, 269 AZX_DRIVER_GENERIC,
269 AZX_NUM_DRIVERS, /* keep this as last entry */ 270 AZX_NUM_DRIVERS, /* keep this as last entry */
270}; 271};
@@ -330,6 +331,7 @@ static char *driver_short_names[] = {
330 [AZX_DRIVER_TERA] = "HDA Teradici", 331 [AZX_DRIVER_TERA] = "HDA Teradici",
331 [AZX_DRIVER_CTX] = "HDA Creative", 332 [AZX_DRIVER_CTX] = "HDA Creative",
332 [AZX_DRIVER_CTHDA] = "HDA Creative", 333 [AZX_DRIVER_CTHDA] = "HDA Creative",
334 [AZX_DRIVER_CMEDIA] = "HDA C-Media",
333 [AZX_DRIVER_GENERIC] = "HD-Audio Generic", 335 [AZX_DRIVER_GENERIC] = "HD-Audio Generic",
334}; 336};
335 337
@@ -1373,6 +1375,7 @@ static void azx_check_snoop_available(struct azx *chip)
1373 snoop = false; 1375 snoop = false;
1374 break; 1376 break;
1375 case AZX_DRIVER_CTHDA: 1377 case AZX_DRIVER_CTHDA:
1378 case AZX_DRIVER_CMEDIA:
1376 snoop = false; 1379 snoop = false;
1377 break; 1380 break;
1378 } 1381 }
@@ -2154,6 +2157,10 @@ static const struct pci_device_id azx_ids[] = {
2154 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND | 2157 .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |
2155 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB }, 2158 AZX_DCAPS_RIRB_PRE_DELAY | AZX_DCAPS_POSFIX_LPIB },
2156#endif 2159#endif
2160 /* CM8888 */
2161 { PCI_DEVICE(0x13f6, 0x5011),
2162 .driver_data = AZX_DRIVER_CMEDIA |
2163 AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB },
2157 /* Vortex86MX */ 2164 /* Vortex86MX */
2158 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC }, 2165 { PCI_DEVICE(0x17f3, 0x3010), .driver_data = AZX_DRIVER_GENERIC },
2159 /* VMware HDAudio */ 2166 /* VMware HDAudio */