ASoC: SOF: Force polling mode on CFL and CNL
authorBard Liao <yung-chuan.liao@linux.intel.com>
Sun, 26 May 2019 16:58:36 +0000 (00:58 +0800)
committerTakashi Iwai <tiwai@suse.de>
Tue, 28 May 2019 05:52:02 +0000 (07:52 +0200)
There is a workaround in legacy HDA codec for too long time respone
with CFL machine. We need the same workaround on SOF driver. The same
issue is also seen on CNL machine.

Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/soc/sof/intel/hda.c

index 7e3980a2f7ba229497568abe7170b75d3d0b39a2..ff973e8d054b13dc1698c738c2eac2da4e1212f6 100644 (file)
@@ -32,6 +32,9 @@
 /* platform specific devices */
 #include "shim.h"
 
+#define IS_CFL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa348)
+#define IS_CNL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9dc8)
+
 /*
  * Debug
  */
@@ -213,6 +216,11 @@ static int hda_init(struct snd_sof_dev *sdev)
        ext_ops = snd_soc_hdac_hda_get_ops();
 #endif
        sof_hda_bus_init(bus, &pci->dev, ext_ops);
+
+       /* Workaround for a communication error on CFL (bko#199007) and CNL */
+       if (IS_CFL(pci) || IS_CNL(pci))
+               bus->polling_mode = 1;
+
        bus->use_posbuf = 1;
        bus->bdl_pos_adj = 0;