On Wed, 14 Nov 2018 17:23:08 +0100, Pierre-Louis Bossart wrote:
On 11/14/18 8:53 AM, Takashi Iwai wrote:
On Mon, 12 Nov 2018 15:00:36 +0100, Pierre-Louis Bossart wrote:
And btw the big topic is still how we provide distributions the means to handle a 'graceful' fallback from DSP-enabled solutions (SST or SOF) to legacy HDAudio, it's already popped up for cases where we have HDaudio solutions with DMICs.
Yeah, that's a long-standing problem. I've experimented some scenarios in the past, and the conclusion is that there is no really working fallback mechanism in general in Linux driver binding. That is, the only reasonable way seems to make a dedicated driver for the specific PCI ID (SKL+) doing the probe-and-fallback by itself, while excluding these IDs from other existing driver entries.
Yep, agree, the PCI folks I talked to came to the same conclusion. Except that we made things more complicated with SOF, so it's really a choice between 3 drivers...
Heh, English plural has no distinguish between 2 and 3 :)
I'd love to proceed this but unfortunately I have no machine that can run SKL+ SST driver right now. I have a new CFL devel box, but it has no support (PCI ID 8086:a348) as well as no firmware...
Looks like the CFL is already supported in Linux
sound/pci/hda/hda_intel.c:#define IS_CFL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa348)
Yes, the legacy driver works fine.
So in theory all we need to add is a new table entry in skl.c, e.g. with the following untested code. I'll have to check if this is correct offline but it'd allow you to test the probe part.
diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c index ac0b4ff21acc..375f4b60e515 100644 --- a/sound/soc/intel/skylake/skl.c +++ b/sound/soc/intel/skylake/skl.c @@ -1098,6 +1098,9 @@ static const struct pci_device_id skl_ids[] = { /* CNL */ { PCI_DEVICE(0x8086, 0x9dc8), .driver_data = (unsigned long)&snd_soc_acpi_intel_cnl_machines}, + /* CFL */ + { PCI_DEVICE(0x8086, 0xa348), + .driver_data = (unsigned long)&snd_soc_acpi_intel_cnl_machines} { 0, } };
I've already tried it but this doesn't seem enough. The similar addition for 0xa348 is needed in skl-messages.c for clk setup. (BTW, reloading the module after this error triggered the leftover sysfs entries; you can try to inject the error and reproduce it.)
After these changes, the driver was loaded, but it still complains about the lack of firmware (both SOF and fallback one). The binding with HDMI codec seems working, but the analog one is still missing.
thanks,
Takashi