We have an Acer SWIFT laptop equipped with Intel Whiskey Lake CPU and Intel audio controller [8086:9dc8]. 00:1f.3 Multimedia audio controller [0401]: Intel Corporation Device [8086:9dc8] (rev 30) Subsystem: Acer Incorporated [ALI] Device [1025:129c] Control: I/O- Mem+ BusMaster+ SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B- DisINTx+ Status: Cap+ 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort- <TAbort- <MAbort- >SERR- <PERR- INTx- Latency: 32, Cache Line Size: 64 bytes Interrupt: pin A routed to IRQ 133 Region 0: Memory at a1110000 (64-bit, non-prefetchable) [size=16K] Region 4: Memory at a1000000 (64-bit, non-prefetchable) [size=1M] Capabilities: [50] Power Management version 3 Flags: PMEClk- DSI- D1- D2- AuxCurrent=55mA PME(D0-,D1-,D2-,D3hot+,D3cold+) Status: D0 NoSoftRst+ PME-Enable- DSel=0 DScale=0 PME- Capabilities: [80] Vendor Specific Information: Len=14 <?> Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+ Address: 00000000fee10004 Data: 4023 Kernel driver in use: snd_hda_intel Kernel modules: snd_hda_intel, snd_soc_skl We get information from installed Windows that the internal MIC is a Microphone Array - Front Panel Digital Jack using the Intel Smart Sound Technology (Intel SST) driver. So, we tried to reconfigure the Pin Node ID 0x12's default value as
Created attachment 278783 [details] alsa info So, we tried to reconfigure the Pin Node ID 0x12's default value as 0x90a60120 (also tried NID 0x13) of ALC256. But the internal microphone still cannot be used. It only records white noise.
Created attachment 278785 [details] Intenal MIC on Windows Microphone Array - Front Panel Digital Jack uses Intel Smart Sound Technology (Intel SST) driver.
Created attachment 278787 [details] Internal speaker uses Realtek driver on Windows
Created attachment 278789 [details] Other MICs use Realtek driver on Windows All of the audio things use Realtek driver, except internal microphone on Windows.
Created attachment 278791 [details] dmesg with snd_hda_intel I also notice the PCI ID [8086:9dc8] is listed in sound/soc/intel/skylake/skl.c which is related to Intel SST on Linux. Therefore, I add some debug messages to trace the code path intel sound skylake which is based on 4.19-rc5 diff --git a/sound/soc/intel/skylake/skl.c b/sound/soc/intel/skylake/skl.c index 1d17be0f78a0..aac57b69459b 100644 --- a/sound/soc/intel/skylake/skl.c +++ b/sound/soc/intel/skylake/skl.c @@ -503,6 +503,7 @@ static int skl_machine_device_register(struct skl *skl) struct platform_device *pdev; int ret; + dev_warn(bus->dev, "%s\n", __func__); pdev = platform_device_alloc(mach->drv_name, -1); if (pdev == NULL) { dev_err(bus->dev, "platform device alloc failed\n"); @@ -536,6 +537,7 @@ static int skl_dmic_device_register(struct skl *skl) struct platform_device *pdev; int ret; + dev_warn(bus->dev, "%s\n", __func__); /* SKL has one dmic port, so allocate dmic device for this */ pdev = platform_device_alloc("dmic-codec", -1); if (!pdev) { @@ -639,6 +641,7 @@ static int probe_codec(struct hdac_bus *bus, int addr) struct skl *skl = bus_to_skl(bus); struct hdac_device *hdev; + dev_warn(bus->dev, "%s\n", __func__); mutex_lock(&bus->cmd_mutex); snd_hdac_bus_send_cmd(bus, cmd); snd_hdac_bus_get_response(bus, addr, &res); @@ -659,6 +662,7 @@ static void skl_codec_create(struct hdac_bus *bus) { int c, max_slots; + dev_warn(bus->dev, "%s\n", __func__); max_slots = HDA_MAX_CODECS; /* First try to probe all given codec slots */ @@ -718,6 +722,7 @@ static void skl_probe_work(struct work_struct *work) struct hdac_ext_link *hlink = NULL; int err; + dev_warn(bus->dev, "%s\n", __func__); if (IS_ENABLED(CONFIG_SND_SOC_HDAC_HDMI)) { err = skl_i915_init(bus); if (err < 0) @@ -804,6 +809,7 @@ static int skl_create(struct pci_dev *pci, } bus = skl_to_bus(skl); + dev_warn(bus->dev, "%s\n", __func__); snd_hdac_ext_bus_init(bus, &pci->dev, &bus_core_ops, io_ops, NULL); bus->use_posbuf = 1; skl->pci = pci; @@ -823,6 +829,7 @@ static int skl_first_init(struct hdac_bus *bus) unsigned short gcap; int cp_streams, pb_streams, start_idx; + dev_warn(bus->dev, "%s\n", __func__); err = pci_request_regions(pci, "Skylake HD audio"); if (err < 0) return err; @@ -888,6 +895,7 @@ static int skl_probe(struct pci_dev *pci, struct hdac_bus *bus = NULL; int err; + pr_warn("snd_soc_skl: %s\n", __func__); /* we use ext core ops, so provide NULL for ops here */ err = skl_create(pci, NULL, &skl); if (err < 0) @@ -898,7 +906,7 @@ static int skl_probe(struct pci_dev *pci, err = skl_first_init(bus); if (err < 0) goto out_free; - + dev_warn(bus->dev, "%s\n", __func__); skl->pci_id = pci->device; device_disable_async_suspend(bus->dev); However, there is no related message shown in dmesg. The snd_soc_skl is loaded, but skl_probe() is not called.
Created attachment 278793 [details] dmesg without snd_hda_intel According to comment 5, I add "modprobe.blacklist=snd_hda_intel" to boot command to disable snd_hda_intel module. skl_probe() function is called now, but it cannot find a driver. [ 8.612356] snd_soc_skl: skl_probe [ 8.612371] snd_soc_skl 0000:00:1f.3: enabling device (0000 -> 0002) [ 8.612550] (NULL device *): skl_create [ 8.612552] snd_soc_skl 0000:00:1f.3: skl_first_init [ 8.621218] snd_soc_skl 0000:00:1f.3: skl_probe [ 8.622230] snd_soc_skl 0000:00:1f.3: No matching machine driver found
Created attachment 278795 [details] Intel SST driver's Device instance path on Windows According to comment 4, we also notice the Device instance path on Windows is: INTELAUDIO\CTLR_DEV_9DC8&LINKTYPE_02&DEVTYPE_01&VEN_8086&DEV_AE20&SUBSYS_1025129C&REV_10EC\5&394DE642&0&0100
Created attachment 278799 [details] acpidump After disassemble the ACPI dump, the subsystem PCI ID [1025:129C], also listed in comment 7, is in NHLT part. However, it is only Raw Table Data now. /* * Intel ACPI Component Architecture * AML/ASL+ Disassembler version 20160831-64 * Copyright (c) 2000 - 2016 Intel Corporation * * Disassembly of nhlt.dat, Wed Sep 26 16:31:06 2018 * * ACPI Data Table [NHLT] * * Format: [HexOffset DecimalOffset ByteLength] FieldName : FieldValue */ [000h 0000 4] Signature : "NHLT" [004h 0004 4] Table Length : 0000185C [008h 0008 1] Revision : 00 [009h 0009 1] Checksum : 46 [00Ah 0010 6] Oem ID : "ACRSYS" [010h 0016 8] Oem Table ID : "ACRPRDCT" [018h 0024 4] Oem Revision : 00000002 [01Ch 0028 4] Asl Compiler ID : " " [020h 0032 4] Asl Compiler Revision : 01000013 **** Unknown ACPI table signature [NHLT] Raw Table Data: Length 6236 (0x185C) 0000: 4E 48 4C 54 5C 18 00 00 00 46 41 43 52 53 59 53 // NHLT\....FACRSYS 0010: 41 43 52 50 52 44 43 54 02 00 00 00 20 20 20 20 // ACRPRDCT.... 0020: 13 00 00 01 01 2F 18 00 00 02 00 86 80 20 AE EC // ...../....... .. 0030: 10 9C 12 25 10 01 01 00 5C 00 00 00 00 01 0F 04 // ...%....\....... 0040: 01 04 00 00 DE FF 64 00 04 28 00 00 00 00 C4 FF // ......d..(...... 0050: 3C 00 C4 FF 3C 00 01 04 00 00 1A 00 64 00 04 28 // <...<.......d..( ...
https://www.pcworld.com/article/3300798/intel/intels-whiskey-lake-notebook-chip-launches-emphasizing-connectivity.html > Intel also added a new quad-core audio DSP, designed to be used in > conjunction > with far-field mics on laptops. Though Windows 10 has included the Cortana > digital assistant since its inception, Amazon and Microsoft have finalized > their partnership to put Alexa on to Windows PCs, as well. We believe that's why this config has appeared in this product, the first one we've seen that has the mic device not as part of HDA. But it sounds like it won't be the only product that appears in this way. In addition to figuring out how to make the existing SST driver detect and work with this mic array, it seems like we will need to find a way to allow both HDA and SST drivers to bind to the same PCI device.
Thanks for the information. The only way to enable DMIC support with HDA is to enable the DSP support. If you use the legacy HDaudio driver you will not be able to access the DSP. So far, the only users of the DMIC were also using I2S, so there was a clear distinction between the HDaudio world and the DMIC/I2S world. With new products based on HDAudio + DMIC this is no longer the case. However things are not that bad. Intel worked on enabling HDAudio + DSP and the patches were merged by Mark Brown so should be queued for 4.20 or 5.0. We have not however tested the DMIC path. Would you mind providing the references of the ACER device, I'll try to get one purchased to solve this.
It's Acer Swift SF314-55. Let me know if you have trouble getting hold of it.
Humm, yes it looks difficult to find, AnandTech tells me this model will be for sale in November. Even on the Acer site it's SF314-51..54 that's for sale at the moment, the 55 is not even listed.
just to confirm, the probe does happen with skl_hda_probe: [ 8.612356] snd_soc_skl: skl_probe [ 8.612371] snd_soc_skl 0000:00:1f.3: enabling device (0000 -> 0002) [ 8.612550] (NULL device *): skl_create [ 8.612552] snd_soc_skl 0000:00:1f.3: skl_first_init [ 8.621218] snd_soc_skl 0000:00:1f.3: skl_probe [ 8.622230] snd_soc_skl 0000:00:1f.3: No matching machine driver found but it since you are missing the HDaudio card support w/ the SKL driver the probe stops. I'll give it a try with the updated code
Created attachment 279181 [details] dmesg with Skylake driver w/ latest ASoC code The log show the probe progresses but stops due to a firmware download issue and there is also an error message during the DMIC NHLT parsing. Both issues will have to involve people smarter than me.
My latest code is at https://github.com/plbossart/sound/tree/debug/skl a dedicated topology file is required (will attach) kernel config for SST: https://github.com/thesofproject/kconfig/blob/master/sst-defconfig
Created attachment 279183 [details] topology file needs to be copied as /lib/firmware/dfw_sst.bin
I am able to play audio on the speakers by a) using Mark Brown's for-next branch b) using the topology file described in Comment 16 c) install and boot, then set amixer -Dhw:0 cset numid=1 on What needs to be fixed is the firmware file, apparently the one in /lib/firmware/intel/dsp_fw_cnl_v1191.bin will not boot while the one extracted from the Windows driver does (need to copy it to the lib/firmware/intel directory and update the dsp_fw_cnl.bin link), likely due to the wrong key being used. This does not solve the DMIC issue just yet but at least it shows the HDaudio work done over the Summer works fine on this platform. I'll share more info when I progress further. In the mean time can the EndlessM folks try and reproduce my setup? Thanks!
Thanks for the update! Are you saying you are now playing audio through the speakers using the SST driver? That's a little surprising as (I think) we had speaker output working fine through HDA audio. You have our only sample of this unit, but I will see if we can get hold of another.
To play on the speaker, you can either use the hardware in legacy mode (as you tested with the snd_hda driver, or you can use the enhancement mode with the DSP enabled (with the Skylake/SST driver). When you use the DMIC you have to rely on the DSP. So basically we are now at feature parity with the HDaudio legacy stuff (speaker playback works for both cases) and only need to add DMIC support.
Created attachment 279619 [details] Acer Z24-890 acpidump output
Created attachment 279621 [details] Acer Z24-890 lspci output
Created attachment 279623 [details] Acer Z24-890 dmesg of for-next branch
We got another Acer machine (AIO Z24-890) which has the same issue as Swift SF314-55. The internal microphone also connects to the SST instead of the built-in Realtek audio codec. Please ref attachment 279619 [details] for NHLT definition. The difference is that the PCI id of the device (attachment 279621 [details]) is 8086:a348 which can not been found in skl.c and skl-message.c. So I made the following modification to allow it to be probed at boot. --- a/sound/soc/intel/skylake/skl-messages.c +++ b/sound/soc/intel/skylake/skl-messages.c @@ -247,6 +247,14 @@ static const struct skl_dsp_ops dsp_ops[] = { .init_fw = cnl_sst_init_fw, .cleanup = cnl_sst_dsp_cleanup }, + { + .id = 0xa348, + .num_cores = 4, + .loader_ops = bxt_get_loader_ops, + .init = cnl_sst_dsp_init, + .init_fw = cnl_sst_init_fw, + .cleanup = cnl_sst_dsp_cleanup + }, }; const struct skl_dsp_ops *skl_get_dsp_ops(int pci_id) --- a/sound/soc/intel/skylake/skl.c +++ b/sound/soc/intel/skylake/skl.c @@ -1121,6 +1121,8 @@ static const struct pci_device_id skl_ids[] = { /* CNL */ { PCI_DEVICE(0x8086, 0x9dc8), .driver_data = (unsigned long)&snd_soc_acpi_intel_cnl_machines}, + { PCI_DEVICE(0x8086, 0xa348), + .driver_data = (unsigned long)&snd_soc_acpi_intel_cnl_machines}, { 0, } }; MODULE_DEVICE_TABLE(pci, skl_ids); I follow your instructions, a). build kernel from Mark Brown's for-next branch (https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git/) b) using the topology file described in Comment 16 and copy to /lib/firmware/dfw_sst.bin c) install and reboot The dmesg in attachment 279623 [details] shows the result. Seems it has trouble on the dsp. I don't know whether if it's due to the modification I made in skl-messages.c. Can you suggest what I should do next? Thanks
Ah, that looks like a CFL machine, see http://mailman.alsa-project.org/pipermail/alsa-devel/2018-November/142017.html, your changes look legit [ 22.996968] snd_soc_skl 0000:00:1f.3: undefined DMIC array_type 0xf This means "vendor defined", not sure what to do with it [ 22.997164] snd_soc_skl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915]) [ 23.205954] skl_hda_dsp_generic skl_hda_dsp_generic: Unsupported HDAudio/iDisp configuration found [ 23.205958] skl_hda_dsp_generic: probe of skl_hda_dsp_generic failed with error -22 Ah not good. can you try to get more details, this is unusual.
The message "Unsupported HDAudio/iDisp configuration found" is due to the fail of snd_hda_fill_card_info(). This function mainly checks the codec count and codec mask, and the codec mask seems to be unexpected. I then add the following code to print the codec mask. --- a/sound/soc/intel/skylake/skl.c +++ b/sound/soc/intel/skylake/skl.c @@ -538,6 +538,7 @@ static int skl_machine_device_register(struct skl *skl) mach->mach_params.platform = dev_name(bus->dev); mach->mach_params.codec_mask = bus->codec_mask; +pr_warn("%s: platform %s codec_mask 0x%x\n", __func__, dev_name(bus->dev), bus->codec_mask); ret = platform_device_add_data(pdev, (const void *)mach, sizeof(*mach)); if (ret) { The dmesg shows [ 23.706679] snd_soc_skl 0000:00:1f.3: enabling device (0000 -> 0002) [ 23.715998] snd_soc_skl 0000:00:1f.3: undefined DMIC array_type 0xf [ 23.716065] snd_soc_skl 0000:00:1f.3: dsp registration status=0 [ 23.716161] snd_soc_skl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915]) [ 23.804479] skl_machine_device_register: platform 0000:00:1f.3 codec_mask 0x1 But snd_hda_fill_card_info() expect the (codec_mask & IDISP_CODEC_MASK) to be true. IDISP_CODEC_MASK is defined 0x4 though I don't know what it means. The codec_mask should directly comes from the snd_hdac_chip_readw(bus, STATESTS) in snd_hdac_bus_reset_link(). Anything could go wrong here?
you need to enable more logs w/ dynamic debug and share them. I'd need all the info from sound/soc/intel/skylake, sound/soc/codecs and sound/soc/intel/boards. Just add this in all the Makefile for the directories I listed: ccflags-y += -DDEBUG
Created attachment 279667 [details] dmesg with sound/soc DEBUG enabled
Created attachment 279669 [details] DSDT table of Z24-890
attachment 279667 [details] is the dmesg log per your suggestion. And per this log, the problem is "snd_soc_skl 0000:00:1f.3: No matching I2S machine driver found". It indicats that the INT34C2 we expect for snd_soc_apci_intel_cnl_machines not exists. Then I dump the dsdt in attachment 279669 [details]. Device (HDAC) { Name (_HID, "INT0000") // _HID: Hardware ID Name (_CID, "INT0000") // _CID: Compatible ID Name (_DDN, "Intel(R) Smart Sound Technology Audio Codec") // _DDN: DOS Device Name Name (_UID, One) // _UID: Unique ID Name (CDIS, Zero) Method (_INI, 0, NotSerialized) // _INI: Initialize { If (I2SC == One) { _HID = "INT34C2" _CID = "INT34C2" Return (Zero) } } } And I only find INT0000 instead of INT34C2 in /sys/bus/acpi/devices. I can't see where I2SC been initialized/assigned. Should I just modify the DSDT and load the customized DSDT for the kernel or any better idea?
There're HDAC definitions under each _SB.PCI0.I2Cx. I override them with INT34C2 and there's now INT34C2 entry under /sys/bus/acpi/devices. However, the dmesg still shows the same "snd_soc_skl 0000:00:1f.3: No matching I2S machine driver found". No idea so far, please advise if any. Thanks.
No, please don't define *any* ACPI IDs, that will interfere with the HDaudio selection. The problem you have is that the hdac_hdmi does not seem to work, the iDISP codec is not detected and hence everything falls apart since HDMI is expected to work in the skl_generic machine driver. it's very surprising that there is no message, can you please compile sound/soc/codecs with the DEBUG stuff I listed?
Created attachment 279709 [details] Acer Z24-890 dmesg w/ initcall_debug
I did add ccflags-y += DEBUG in the Makefile of sound/soc/codecs. There's no message. I look into the hdac_hdmi.c, the hdac_hdmi_dev_probe not even invoked but the hdmi id(8086:280b) does exist. attachment 279709 [details] dumps the dmesg with kernel parameter initcall_debug. Nothing seems really helpful. Or which part of code you want me to look into?
Not sure what goes on. I am tempted to err on the side of a configuration issue. all my tests are based on make defconfig + the -defconfigs found on https://github.com/thesofproject/kconfig scripts/kconfig/merge_config.sh .config <PATH>/kconfig/base-defconfig <PATH>/kconfig/sst-defconfig <PATH>/kconfig/hdaudio-codecs-defconfig
Created attachment 279733 [details] Acer Z24-890 dmesg for intel-sst hdaudio
My bad, it's the configuration issue. I've reconfigure the kernel and run it again. dmesg attachment 279733 [details] here. It's about the "transfer firmware fail" so no sound card/pcm available for amixer. Could you help on that?
(In reply to Chris Chiu from comment #36) > My bad, it's the configuration issue. I've reconfigure the kernel and run it > again. dmesg attachment 279733 [details] here. It's about the "transfer > firmware fail" so no sound card/pcm available for amixer. Could you help on > that? Forgot to mention, I've already used the topology file described in Comment 16 and follow steps in Comment 17. So maybe it's not the firmware for this?
Just to be clear, you used the topology file provided in Comment 16 and the firmware extracted from the Windows driver, not the default in /lib/firmware/intel/dfw_cnl.bin which is know to have an incompatibility with recent BIOS? If the firmware from Windows fails that's a new dimension...
Created attachment 279749 [details] Acer Z24-890 dsp_fw_cnl.bin
Sorry, we lost the audio driver file for the Acer Swift laptop so we request the driver again for this Z24-890. Replace the fw bin as you mentioned in Comment 17. Not I can successfully "set amixer -Dhw:0 cset numid=1 on". And could you suggest what's next? Thanks
> Sorry, we lost the audio driver file for the Acer Swift laptop so we request > the driver again for this Z24-890. Replace the fw bin as you mentioned in > Comment 17. Not I can successfully "set amixer -Dhw:0 cset numid=1 on". And > could you suggest what's next? Thanks Can you please check things with the latest firmware that was just released by Intel this morning: http://mailman.alsa-project.org/pipermail/alsa-devel/2018-December/142476.html https://github.com/crojewsk/linux-firmware.git for-upstream The next step would be to define a topology file for dmics. Most likely it'll require some help from other folks at Intel.
Created attachment 279839 [details] Acer Z24-890 dmesg for cnl_v1858 dw
Created attachment 279841 [details] Acer Z24-890 dmesg for windows fw
Unfortunately, I tried the upstream firmware but it fails at [ 17.305886] snd_soc_skl 0000:00:1f.3: DSP core(s) enabled? 1: core_mask 0x1 [ 20.379198] snd_soc_skl 0000:00:1f.3: transfer firmware failed: -62 [ 20.379213] snd_soc_skl 0000:00:1f.3: DSP core(s) enabled? 0: core_mask 0x1 [ 20.379243] snd_soc_skl 0000:00:1f.3: load base fw failed: -62 [ 20.379266] snd_soc_skl 0000:00:1f.3: Failed to boot first fw: -62 [ 20.379270] snd_soc_skl 0000:00:1f.3: ASoC: failed to probe component -62 [ 20.379327] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: failed to instantiate card -62 I logged by dmesg for different firmwares on the same kernel and topology file. Hope they can do some help. Let me know if there's any update need me to help verify. Thanks.
(In reply to Chris Chiu from comment #44) > Unfortunately, I tried the upstream firmware but it fails at > [ 17.305886] snd_soc_skl 0000:00:1f.3: DSP core(s) enabled? 1: core_mask > 0x1 > [ 20.379198] snd_soc_skl 0000:00:1f.3: transfer firmware failed: -62 > [ 20.379213] snd_soc_skl 0000:00:1f.3: DSP core(s) enabled? 0: core_mask > 0x1 > [ 20.379243] snd_soc_skl 0000:00:1f.3: load base fw failed: -62 > [ 20.379266] snd_soc_skl 0000:00:1f.3: Failed to boot first fw: -62 > [ 20.379270] snd_soc_skl 0000:00:1f.3: ASoC: failed to probe component -62 > [ 20.379327] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: failed to > instantiate card -62 > > > I logged by dmesg for different firmwares on the same kernel and topology > file. Hope they can do some help. Let me know if there's any update need me > to help verify. Thanks. Can you please retry with the latest firmware? I am not sure which version you took and I don't see a reason why this fails. Thanks!
The firmware I tried is /lib/firmware/intel/dsp_fw_cnl_v1858.bin. Is there any newer version?
(In reply to Chris Chiu from comment #46) > The firmware I tried is /lib/firmware/intel/dsp_fw_cnl_v1858.bin. Is there > any newer version? I tried the latest Mark Brown's for-next branch, which also includes the recently upstream commits from you and 8086:a348 already supported, but still no luck. I verified the fw file is still dsp_fw_cnl_v1858.bin. The error message is the same as attachment 279839 [details].
> The firmware I tried is /lib/firmware/intel/dsp_fw_cnl_v1858.bin. Is there > any > newer version? No, that's the latest. It works fine for me on WHL. What I don't get is what the Windows firmware is. Is this the same your Endless colleagues used for the previous program on WHL, or is this a CFL-specific one? There is a mismatch somewhere. Could you also try with the previous version dsp_fw_cnl_v1191.bin?
The dsp_fw_cnl_v1191.bin also fails just like dsp_fw_cnl_v1858.bin. The error messages are the same. So the only working firmware is attachment 279749 [details]. We can try to find out the Windows firmware which used to work on WHL (Acer Swift SF314-55) because I'm not really sure the driver is the same. Maybe binary diff between these 2 woudld do some helpful.
Created attachment 280693 [details] dmesg of Acer Crux I get another Acer Crux laptop which also uses DMIC as the internal MIC and the PCI ID is 8086:9dc8. 00:1f.3 Multimedia audio controller [0401]: Intel Corporation Device [8086:9dc8] (rev 30) Subsystem: Acer Incorporated [ALI] Device [1025:1330] Flags: bus master, fast devsel, latency 32, IRQ 16 Memory at a121c000 (64-bit, non-prefetchable) [size=16K] Memory at a1000000 (64-bit, non-prefetchable) [size=1M] Capabilities: <access denied> Kernel driver in use: snd_soc_skl Kernel modules: snd_hda_intel, snd_soc_skl I follow steps in Comment 17 and blacklist snd_hda_intel module. System loads the firmware but the audio does not work. [ 8.182241] snd_soc_skl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040100 [ 8.191390] snd_soc_skl 0000:00:1f.3: undefined DMIC array_type 0xf [ 8.191997] snd_soc_skl 0000:00:1f.3: Linked as a consumer to 0000:00:02.0 [ 8.192009] snd_soc_skl 0000:00:1f.3: bound 0000:00:02.0 (ops 0xffffffffaf89be20) [ 8.273977] HDMI HDA Codec ehdaudio0D2: Max dais supported: 3 [ 8.303663] snd_soc_skl 0000:00:1f.3: Direct firmware load for 9dc8-ACRSYS-ACRPRDCT-2-tplg.bin failed with error -2 [ 8.303667] snd_soc_skl 0000:00:1f.3: tplg fw 9dc8-ACRSYS-ACRPRDCT-2-tplg.bin load failed with -2, falling back to dfw_sst.bin [ 8.318544] snd_soc_skl 0000:00:1f.3: ASoC: Parent card not yet available, widget card binding deferred [ 8.452454] HDMI HDA Codec ehdaudio0D2: hdac_hdmi_present_sense: disconnect for pin:port 5:0 [ 8.452827] HDMI HDA Codec ehdaudio0D2: hdac_hdmi_present_sense: disconnect for pin:port 6:0 [ 8.453144] HDMI HDA Codec ehdaudio0D2: hdac_hdmi_present_sense: disconnect for pin:port 7:0 [ 8.495726] snd_hda_codec_realtek ehdaudio0D0: autoconfig for ALC255: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker [ 8.495735] snd_hda_codec_realtek ehdaudio0D0: speaker_outs=0 (0x0/0x0/0x0/0x0/0x0) [ 8.495739] snd_hda_codec_realtek ehdaudio0D0: hp_outs=1 (0x21/0x0/0x0/0x0/0x0) [ 8.495742] snd_hda_codec_realtek ehdaudio0D0: mono: mono_out=0x0 [ 8.495745] snd_hda_codec_realtek ehdaudio0D0: inputs: [ 8.495748] snd_hda_codec_realtek ehdaudio0D0: Headphone Mic=0x1a [ 8.495752] snd_hda_codec_realtek ehdaudio0D0: Headset Mic=0x19 [ 8.553107] skl_hda_dsp_generic skl_hda_dsp_generic: intel-hdmi-hifi1 <-> iDisp1 Pin mapping ok [ 8.553120] skl_hda_dsp_generic skl_hda_dsp_generic: intel-hdmi-hifi2 <-> iDisp2 Pin mapping ok [ 8.553128] skl_hda_dsp_generic skl_hda_dsp_generic: intel-hdmi-hifi3 <-> iDisp3 Pin mapping ok [ 8.553137] skl_hda_dsp_generic skl_hda_dsp_generic: Analog Codec DAI <-> Analog CPU DAI mapping ok [ 8.553146] skl_hda_dsp_generic skl_hda_dsp_generic: Digital Codec DAI <-> Digital CPU DAI mapping ok [ 8.553210] skl_hda_dsp_generic skl_hda_dsp_generic: snd-soc-dummy-dai <-> cnl-audio-dai mapping ok [ 8.553233] skl_hda_dsp_generic skl_hda_dsp_generic: snd-soc-dummy-dai <-> hdmi1 mapping ok [ 8.553255] skl_hda_dsp_generic skl_hda_dsp_generic: snd-soc-dummy-dai <-> hdmi2 mapping ok [ 8.553276] skl_hda_dsp_generic skl_hda_dsp_generic: snd-soc-dummy-dai <-> hdmi3 mapping ok [ 8.553357] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: no source widget found for codec1_out [ 8.553359] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: Failed to add route codec1_out -> direct -> Digital CPU Playback [ 8.553364] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: no source widget found for codec2_out [ 8.553366] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: Failed to add route codec2_out -> direct -> Alt Analog CPU Playback [ 8.553374] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: no sink widget found for codec1_in [ 8.553375] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: Failed to add route Digital CPU Capture -> direct -> codec1_in [ 8.553381] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: no sink widget found for codec2_in [ 8.553383] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: Failed to add route Alt Analog CPU Capture -> direct -> codec2_in [ 8.555467] input: skl_hda_card Headphone Mic as /devices/platform/skl_hda_dsp_generic/sound/card0/input8 [ 8.555540] input: skl_hda_card Headset Mic as /devices/platform/skl_hda_dsp_generic/sound/card0/input9 [ 8.555607] input: skl_hda_card HDMI/DP, pcm=6 Jack as /devices/platform/skl_hda_dsp_generic/sound/card0/input10 [ 8.555670] input: skl_hda_card HDMI/DP, pcm=7 Jack as /devices/platform/skl_hda_dsp_generic/sound/card0/input11 [ 8.555740] input: skl_hda_card HDMI/DP, pcm=8 Jack as /devices/platform/skl_hda_dsp_generic/sound/card0/input12
On 1/23/19 2:44 AM, bugzilla-daemon@bugzilla.kernel.org wrote: > https://bugzilla.kernel.org/show_bug.cgi?id=201251 > > --- Comment #50 from jian-hong@endlessm.com --- > Created attachment 280693 [details] > --> https://bugzilla.kernel.org/attachment.cgi?id=280693&action=edit > dmesg of Acer Crux > > I get another Acer Crux laptop which also uses DMIC as the internal MIC and > the > PCI ID is 8086:9dc8. > > 00:1f.3 Multimedia audio controller [0401]: Intel Corporation Device > [8086:9dc8] (rev 30) > Subsystem: Acer Incorporated [ALI] Device [1025:1330] > Flags: bus master, fast devsel, latency 32, IRQ 16 > Memory at a121c000 (64-bit, non-prefetchable) [size=16K] > Memory at a1000000 (64-bit, non-prefetchable) [size=1M] > Capabilities: <access denied> > Kernel driver in use: snd_soc_skl > Kernel modules: snd_hda_intel, snd_soc_skl > > I follow steps in Comment 17 and blacklist snd_hda_intel module. System > loads > the firmware but the audio does not work. > > [ 8.182241] snd_soc_skl 0000:00:1f.3: DSP detected with PCI > class/subclass/prog-if info 0x040100 > [ 8.191390] snd_soc_skl 0000:00:1f.3: undefined DMIC array_type 0xf > [ 8.191997] snd_soc_skl 0000:00:1f.3: Linked as a consumer to 0000:00:02.0 > [ 8.192009] snd_soc_skl 0000:00:1f.3: bound 0000:00:02.0 (ops > 0xffffffffaf89be20) > [ 8.273977] HDMI HDA Codec ehdaudio0D2: Max dais supported: 3 > [ 8.303663] snd_soc_skl 0000:00:1f.3: Direct firmware load for > 9dc8-ACRSYS-ACRPRDCT-2-tplg.bin failed with error -2 > [ 8.303667] snd_soc_skl 0000:00:1f.3: tplg fw > 9dc8-ACRSYS-ACRPRDCT-2-tplg.bin load failed with -2, falling back to > dfw_sst.bin > [ 8.318544] snd_soc_skl 0000:00:1f.3: ASoC: Parent card not yet available, > widget card binding deferred > [ 8.452454] HDMI HDA Codec ehdaudio0D2: hdac_hdmi_present_sense: > disconnect > for pin:port 5:0 > [ 8.452827] HDMI HDA Codec ehdaudio0D2: hdac_hdmi_present_sense: > disconnect > for pin:port 6:0 > [ 8.453144] HDMI HDA Codec ehdaudio0D2: hdac_hdmi_present_sense: > disconnect > for pin:port 7:0 > [ 8.495726] snd_hda_codec_realtek ehdaudio0D0: autoconfig for ALC255: > line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker > [ 8.495735] snd_hda_codec_realtek ehdaudio0D0: speaker_outs=0 > (0x0/0x0/0x0/0x0/0x0) > [ 8.495739] snd_hda_codec_realtek ehdaudio0D0: hp_outs=1 > (0x21/0x0/0x0/0x0/0x0) > [ 8.495742] snd_hda_codec_realtek ehdaudio0D0: mono: mono_out=0x0 > [ 8.495745] snd_hda_codec_realtek ehdaudio0D0: inputs: > [ 8.495748] snd_hda_codec_realtek ehdaudio0D0: Headphone Mic=0x1a > [ 8.495752] snd_hda_codec_realtek ehdaudio0D0: Headset Mic=0x19 > [ 8.553107] skl_hda_dsp_generic skl_hda_dsp_generic: intel-hdmi-hifi1 <-> > iDisp1 Pin mapping ok > [ 8.553120] skl_hda_dsp_generic skl_hda_dsp_generic: intel-hdmi-hifi2 <-> > iDisp2 Pin mapping ok > [ 8.553128] skl_hda_dsp_generic skl_hda_dsp_generic: intel-hdmi-hifi3 <-> > iDisp3 Pin mapping ok > [ 8.553137] skl_hda_dsp_generic skl_hda_dsp_generic: Analog Codec DAI <-> > Analog CPU DAI mapping ok > [ 8.553146] skl_hda_dsp_generic skl_hda_dsp_generic: Digital Codec DAI <-> > Digital CPU DAI mapping ok > [ 8.553210] skl_hda_dsp_generic skl_hda_dsp_generic: snd-soc-dummy-dai <-> > cnl-audio-dai mapping ok > [ 8.553233] skl_hda_dsp_generic skl_hda_dsp_generic: snd-soc-dummy-dai <-> > hdmi1 mapping ok > [ 8.553255] skl_hda_dsp_generic skl_hda_dsp_generic: snd-soc-dummy-dai <-> > hdmi2 mapping ok > [ 8.553276] skl_hda_dsp_generic skl_hda_dsp_generic: snd-soc-dummy-dai <-> > hdmi3 mapping ok > [ 8.553357] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: no source > widget > found for codec1_out > [ 8.553359] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: Failed to add > route codec1_out -> direct -> Digital CPU Playback > [ 8.553364] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: no source > widget > found for codec2_out > [ 8.553366] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: Failed to add > route codec2_out -> direct -> Alt Analog CPU Playback > [ 8.553374] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: no sink widget > found for codec1_in > [ 8.553375] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: Failed to add > route Digital CPU Capture -> direct -> codec1_in > [ 8.553381] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: no sink widget > found for codec2_in > [ 8.553383] skl_hda_dsp_generic skl_hda_dsp_generic: ASoC: Failed to add > route Alt Analog CPU Capture -> direct -> codec2_in > [ 8.555467] input: skl_hda_card Headphone Mic as > /devices/platform/skl_hda_dsp_generic/sound/card0/input8 > [ 8.555540] input: skl_hda_card Headset Mic as > /devices/platform/skl_hda_dsp_generic/sound/card0/input9 > [ 8.555607] input: skl_hda_card HDMI/DP, pcm=6 Jack as > /devices/platform/skl_hda_dsp_generic/sound/card0/input10 > [ 8.555670] input: skl_hda_card HDMI/DP, pcm=7 Jack as > /devices/platform/skl_hda_dsp_generic/sound/card0/input11 > [ 8.555740] input: skl_hda_card HDMI/DP, pcm=8 Jack as > /devices/platform/skl_hda_dsp_generic/sound/card0/input12 The warnings above are just noise, did you try to see if the card is created? Also what does "audio does not work" mean? card not created, capture not happening, etc? it helps if you attach the full dmesg and alsa-info.sh >
Created attachment 280703 [details] alsa-info with Mark Brown's for-next kernel (HDA quirk) I have tried Mark Brown's for-next branch on Acer Crux (TravelMate X514-51T) laptop. And quirked the audio pin nodes as the alsa-info as this attachment. The internal speaker, headphone and headset MIC work correctly. But the internal MIC cannot record any sound. Then, I checked Windows on Acer Crux and found the internal MIC is a DMIC which uses Intel SST as the driver. So, I copy the topology file in Comment 16 to /lib/firmware/dfw_sst.bin Then, cold reboot again. I made system boot with blacklist snd_hda_intel commad for using snd_soc_skl. The alsa-info and dmesg will be uploaded.
Created attachment 280705 [details] alsa-info with Mark Brown's for-next kernel with snd_soc_skl for Comment 52 I blacklist the snd_hda_intel for using snd_soc_skl. According to this alsa-info, sound card is not found!? Should snd_hda_intel not be in blacklist? !!Soundcards recognised by ALSA !!----------------------------- --- no soundcards --- Any config or parameter can make snd_hda_intel and snd_soc_skl work together? Thanks
Created attachment 280707 [details] dmesg with Mark Brown's for-next kernel with snd_soc_skl for Comment 53
On 1/23/19 11:33 PM, bugzilla-daemon@bugzilla.kernel.org wrote: > https://bugzilla.kernel.org/show_bug.cgi?id=201251 > > --- Comment #54 from jian-hong@endlessm.com --- > Created attachment 280707 [details] > --> https://bugzilla.kernel.org/attachment.cgi?id=280707&action=edit > dmesg with Mark Brown's for-next kernel with snd_soc_skl for Comment 53 You need to update your firmware, the errors below are a telltale sign of authentication issues that are solved. Make sure you use dsp_fw_cnl.bin -> dsp_fw_cnl_v1858.bin [ 11.895374] snd_soc_skl 0000:00:1f.3: transfer firmware failed: -62 [ 11.895429] snd_soc_skl 0000:00:1f.3: load base fw failed: -62 [ 11.895455] snd_soc_skl 0000:00:1f.3: Failed to boot first fw: -62 [ 11.895458] snd_soc_skl 0000:00:1f.3: ASoC: failed to probe component -62
Created attachment 280757 [details] alsa-info with Mark Brown's for-next kernel with snd_soc_skl and v1858.bin I changed the symbolic link of dsp_fw_cnl.bin to dsp_fw_cnl_v1858.bin ls -l /lib/firmware/intel/dsp_fw_cnl* lrwxrwxrwx 1 root root 20 Jan 25 10:36 /lib/firmware/intel/dsp_fw_cnl.bin -> dsp_fw_cnl_v1858.bin -rw-r--r-- 3 root root 583852 Jan 24 11:09 /lib/firmware/intel/dsp_fw_cnl_v1191.bin -rw-r--r-- 1 root root 583852 Jan 23 14:19 /lib/firmware/intel/dsp_fw_cnl_v1858.bin Also "amixer -Dhw:0 cset numid=1 on" However, "pactl list cards" shows nothing. The new alsa-info is as this attachment. The new dmesg will be uploaded.
Created attachment 280759 [details] dmesg with Mark Brown's for-next kernel with snd_soc_skl and v1858.bin for Comment 56
The card creation happened now, so the move to the new firmware was successful 0 [sklhdacard ]: skl_hda_card - skl_hda_card WL-TravelMateX514_51T-V1.02-Crux_WL You probably miss a UCM profile for PulseAudio to work, but that's a different issue. For now you should be able to play on the speakers and HDMI.
Created attachment 280823 [details] dmesg with Mark Brown's for-next kernel with snd_soc_skl and v1858.bin - no backend DAIs (In reply to Pierre Bossart from comment #58) > The card creation happened now, so the move to the new firmware was > successful > > 0 [sklhdacard ]: skl_hda_card - skl_hda_card > WL-TravelMateX514_51T-V1.02-Crux_WL Thanks for your help! > You probably miss a UCM profile for PulseAudio to work, but that's a > different issue. For now you should be able to play on the speakers and HDMI. However, I got no sound output when I play with the command: aplay -l **** List of PLAYBACK Hardware Devices **** card 0: sklhdacard [skl_hda_card], device 5: CNL Audio (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: sklhdacard [skl_hda_card], device 6: CNL HDMI1 (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: sklhdacard [skl_hda_card], device 7: CNL HDMI2 (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0 card 0: sklhdacard [skl_hda_card], device 8: CNL HDMI3 (*) [] Subdevices: 1/1 Subdevice #0: subdevice #0 aplay -D plughw:0,5 ~/Downloads/Yamaha-V50-Rock-Beat-120bpm.wav -v Playing WAVE '/home/dev/Downloads/Yamaha-V50-Rock-Beat-120bpm.wav' : Signed 16 bit Little Endian, Rate 44100 Hz, Stereo aplay: set_params:1363: Unable to install hw params: ACCESS: RW_INTERLEAVED FORMAT: S16_LE SUBFORMAT: STD SAMPLE_BITS: 16 FRAME_BITS: 32 CHANNELS: 2 RATE: 44100 PERIOD_TIME: (85333 85334) PERIOD_SIZE: [3763 3763] PERIOD_BYTES: (15052 15056) PERIODS: (3 4) BUFFER_TIME: (341315 341316) BUFFER_SIZE: 15052 BUFFER_BYTES: 60208 TICK_TIME: 0 And I notice there is the error message: [ 54.099485] CNL Audio: ASoC: no backend DAIs enabled for CNL Audio
You need to set 'amixer -Dhw:0 cset numid=1'
I meant 'amixer -Dhw:0 cset numid=1 on'
(In reply to Pierre Bossart from comment #61) > I meant 'amixer -Dhw:0 cset numid=1 on' I can play and get sound output from internal speaker and headphone with snd_soc_skl now. Thanks for your guide.