@@ -281,6 +281,9 @@ static char *driver_short_names[] = {
[AZX_DRIVER_GENERIC] = "HD-Audio Generic",
};
+#define is_broadwell_controller(pci) \
+ ((pci)->vendor == 0x8086 && (pci)->device == 0x160c)
+
#ifdef CONFIG_X86
static void __mark_pages_wc(struct azx *chip, struct snd_dma_buffer *dmab, bool on)
{
@@ -1249,6 +1252,7 @@ static int azx_first_init(struct azx *chip)
struct snd_card *card = chip->card;
int err;
unsigned short gcap;
+ unsigned int stream_mask = 0;
#if BITS_PER_LONG != 64
/* Fix up base address on ULI M5461 */
@@ -1364,7 +1368,10 @@ static int azx_first_init(struct azx *chip)
return err;
/* initialize streams */
- azx_init_stream(chip, 0);
+ if (is_broadwell_controller(pci))
+ stream_mask = 0x1; /* mask buggy stream DMA0 */
+
+ azx_init_stream(chip, stream_mask);
/* initialize chip */
azx_init_pci(chip);