thesofproject / linux

Linux kernel source tree
Other
89 stars 129 forks source link

[FEATURE] Support for ES8336 on Intel Comet Lake #3248

Closed playXE closed 2 years ago

playXE commented 2 years ago

Moved from thesofproject/sof

Is your feature request related to a problem? Please describe. Huawei laptops ship with an Everest ES8336 sound card that is not supported by sofproject. Describe the solution you'd like Adding support for it would be really awesome Describe alternatives you've considered I already tried this repo which seems to contain a kernel built with support for it but the audio clearly does not work: https://github.com/himozzza/essx8336 Additional context Booting Linux and trying lsmod or dmsg shows only one valid HDMI sound output on the laptop and nothing more. Here's what I get from Device Manager on Windows:

ACPI\VEN_ESSX&DEV_8336&SUBSYS_152D1262
ACPI\ESSX8336
*ESSX8336
fcsm1922 commented 2 years ago

@lennartvg , вы можете обновить ядро ​​​​до последней версии 5.16, и вы можете получить звук. Это работает только на ноутбуках с процессором Intel. I have kernel version 5.16.2-arch1-1 matebook version on intel and there was no sound .... it costs alsa, pipewire so even after updating to kernel 5.16, a kernel panic appeared, both when rebooting and when turning off the laptop

darrell-k commented 2 years ago

OK, I've been going down this path as it's the closest I've found to my issue. Different laptop, though:

dmidecode:

System Information
    Manufacturer: GEO
    Product Name: GeoFlex 340
    Version: Default string
    Serial Number: xxxxx
    UUID: xxxxx
    Wake-up Type: Power Switch
    SKU Number: GE199-UK-1
    Family: Flex

lspci -v

00:1f.3 Audio device: Intel Corporation Device 02c8 (prog-if 80)
    DeviceName: Onboard - Sound
    Subsystem: Device 1e50:6002
    Flags: bus master, fast devsel, latency 32, IRQ 130
    Memory at b1210000 (64-bit, non-prefetchable) [size=16K]
    Memory at b1000000 (64-bit, non-prefetchable) [size=1M]
    Capabilities: [50] Power Management version 3
    Capabilities: [80] Vendor Specific Information: Len=14 <?>
    Capabilities: [60] MSI: Enable+ Count=1/1 Maskable- 64bit+
    Kernel driver in use: sof-audio-pci-intel-cnl
    Kernel modules: snd_hda_intel, snd_sof_pci_intel_cnl

I've installed the latest Ubuntu test kernel: uname -a Linux darrell-GeoFlex-340 5.16.5-051605-generic #202202011731 SMP PREEMPT Tue Feb 1 18:21:22 UTC 2022 x86_64 x86_64 x86_64 GNU/Linux I've upgraded to sof-2.0 manually from this project and copied sof-cml-es8336-0.tplg to the sof-tplg folder, and added "options snd-soc-sof-es8336 quirk=0x20" to /etc/modprobe.d/alsa-base.conf.

This is the result: dmesg | grep sof

[    4.463557] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040380
[    4.463683] sof-audio-pci-intel-cnl 0000:00:1f.3: Digital mics found on Skylake+ platform, using SOF driver
[    4.463696] sof-audio-pci-intel-cnl 0000:00:1f.3: enabling device (0000 -> 0002)
[    4.463885] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040380
[    4.464118] sof-audio-pci-intel-cnl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[    4.474506] sof-audio-pci-intel-cnl 0000:00:1f.3: use msi interrupt mode
[    4.510469] sof-audio-pci-intel-cnl 0000:00:1f.3: hda codecs found, mask 4
[    4.512984] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 2:0:0-b678a
[    4.512990] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:20:0 Kernel ABI 3:18:0
[    4.512993] sof-audio-pci-intel-cnl 0000:00:1f.3: warn: FW ABI is more recent than kernel
[    4.512999] sof-audio-pci-intel-cnl 0000:00:1f.3: unknown sof_ext_man header type 3 size 0x30
[    4.614475] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 2:0:0-b678a
[    4.614479] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:20:0 Kernel ABI 3:18:0
[    4.614481] sof-audio-pci-intel-cnl 0000:00:1f.3: warn: FW ABI is more recent than kernel
[    4.635551] sof-essx8336 sof-essx8336: Overriding quirk 0x2 => 0x20
[    4.635556] sof-essx8336 sof-essx8336: quirk SSP0
[    4.635659] es8316 i2c-ESSX8336:00: sof_es8336_probe, could not get pa-enable: -2
[    4.635664] sof-essx8336: probe of sof-essx8336 failed with error -2

I would be very grateful for further ideas, and can of course test anything for you if that is useful.

darrell-k commented 2 years ago

I should add that before I started experimenting, I had 3 HDMI outputs in alsa, but the above error has killed those.

plbossart commented 2 years ago

@darrell-k options snd-soc-sof-es8336 quirk=0x20 means you enabled the DMICs BIT(5)

Try the alternate GPIO use with BIT(4) so the quirk would be options snd-soc-sof-es8336 quirk=0x30

In the latest PR https://github.com/thesofproject/linux/pull/3338 I made these GPIOs optional so that the probe would not fail. It would not allow you to use the speakers if somehow the GPIO was needed, but at least you'd get headset and HDMI. Please give it a try if you can (you will need new topologies since I changed the naming conventions as well, see https://github.com/thesofproject/linux/pull/3338#issuecomment-1013246294)

darrell-k commented 2 years ago

@darrell-k options snd-soc-sof-es8336 quirk=0x20 means you enabled the DMICs BIT(5)

Try the alternate GPIO use with BIT(4) so the quirk would be options snd-soc-sof-es8336 quirk=0x30

In the latest PR #3338 I made these GPIOs optional so that the probe would not fail. It would not allow you to use the speakers if somehow the GPIO was needed, but at least you'd get headset and HDMI. Please give it a try if you can (you will need new topologies since I changed the naming conventions as well, see #3338 (comment))

Thanks for the reply. So I need to build a kernel with this PR incorporated?

plbossart commented 2 years ago

So I need to build a kernel with this PR incorporated?

You can build from the PR itself, e.g.

git remote add sof git@github.com:thesofproject/linux.git git fetch sof pull/3338/head:pr3338 git checkout pr3338

use make menuconfig to make sure the ES8336 is selected and build.

darrell-k commented 2 years ago

The 5.16 kernel stuff I've installed means that I can't install the build packages from the Mint Linux repositories at the moment. I'll work on this (might switch repos to Ubuntu testing and hope for the best!). In the meantime, I tried the kernel here, built from 3338.

Results (with the 0x30 quirk): working headset jack, but no internal mic. Internal speakers are recognised by alsa/pulse, but continue to be mute. I don't know if this is because the system thinks the headset is always present, or due to there being no volume control for the internal speaker in alsamixer (the control is there, but no adjustment bar, can only switch between "mm" and "00".

Without the quirk, it fails to load, as above.

plbossart commented 2 years ago

@darrell-k I don't know what happens here. it looks like the right GPIO is found.

@yangxiaohua2009 @hli25 any idea how the volume can be controlled through alsamixer?

yangxiaohua2009 commented 2 years ago

@darrell-k I don't know what happens here. it looks like the right GPIO is found.

@yangxiaohua2009 @hli25 any idea how the volume can be controlled through alsamixer?

The user have no sound from speaker because the GPIO is not found. For example, the dsdt dump_cml.zip is so complicated that the machine driver cannot find the GPIO using default approach. I recommand that the user use a custom dsdt table. First dump the dsdt table by sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.dat iasl -d dsdt.dat Then edit the dsl by search the 'ESSX' device and add the following properity Name (_DSD, Package() { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package (){"pa-enable-gpios",Package() {^ESSX, 0, 0, 0 }}//{ ref, index, pin, active_low} }
}) Save the dsl and turn the dsdt.dsl into hex file by iasl -tc dsdt.dsl Then apply the new dsdt table. See this link for detail.

fcsm1922 commented 2 years ago

Should we expect that the problem of the lack of sound will be solved in the new kernel version 5.18? Now I have the mainline kernel version: 5.17-rc3 I copied all tplg files from es8336-topologies-2.tar archive to /usr/lib/firmware/intel/sof-tplg/ i tried different values in options snd-soc-sof-es8336 quirk= 0x10, 0x20, 0x21.0x22.0x30.0x31.0x32 i copied sof-dyndbg.conf.txt like /etc/modprobe.d/sof-dyndbg.conf and reboot No sound((

Or will I have to put some kind of custom kernel?

yangxiaohua2009 commented 2 years ago

For alsamixer, just turn every

@darrell-k I don't know what happens here. it looks like the right GPIO is found.

@yangxiaohua2009 @hli25 any idea how the volume can be controlled through alsamixer?

Also, some value in the alsamixer can not be changed because they are controled by the driver. The volume register has already been set to max by default.

yangxiaohua2009 commented 2 years ago

Should we expect that the problem of the lack of sound will be solved in the new kernel version 5.18? Now I have the mainline kernel version: 5.17-rc3 I copied all tplg files from es8336-topologies-2.tar archive to /usr/lib/firmware/intel/sof-tplg/ i tried different values in options snd-soc-sof-es8336 quirk= 0x10, 0x20, 0x21.0x22.0x30.0x31.0x32 i copied sof-dyndbg.conf.txt like /etc/modprobe.d/sof-dyndbg.conf and reboot No sound((

Or will I have to put some kind of custom kernel?

We recommand you use code in #3338 or the custom kernel built from it [here].(https://github.com/yangxiaohua2009/custom-kernel) Please provide alsainfo so we can know what's going on. @fcsm1922

fcsm1922 commented 2 years ago

Стоит ли ожидать, что проблема отсутствия звука будет решена в новой версии ядра 5.18? Теперь у меня основная версия ядра: 5.17-rc3 Я скопировал все файлы tplg из архива es8336-topologies-2.tar в /usr/lib/firmware/intel/sof-tplg/ я пробовал разные значения в опциях snd-soc-sof -es8336 quirk= 0x10, 0x20, 0x21.0x22.0x30.0x31.0x32 я скопировал sof-dyndbg.conf.txt как /etc/modprobe.d/sof-dyndbg.conf и перезагрузился Нет звука(( Или придется ставить какое-то кастомное ядро?

Мы рекомендуем использовать код #3338 или собственное ядро, построенное на его основе [здесь].( https://github.com/yangxiaohua2009/custom-kernel ) Пожалуйста, предоставьте alsainfo, чтобы мы могли знать, что происходит. @fcsm1922

I'll upload the log file tonight those. wait for official support that our sound card will be added to the new version of the kernel is not worth it?

darrell-k commented 2 years ago

@darrell-k I don't know what happens here. it looks like the right GPIO is found. @yangxiaohua2009 @hli25 any idea how the volume can be controlled through alsamixer?

The user have no sound from speaker because the GPIO is not found. For example, the dsdt dump_cml.zip is so complicated that the machine driver cannot find the GPIO using default approach. I recommand that the user use a custom dsdt table. First dump the dsdt table by sudo cat /sys/firmware/acpi/tables/DSDT > dsdt.dat iasl -d dsdt.dat Then edit the dsl by search the 'ESSX' device and add the following properity Name (_DSD, Package() { ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), Package () { Package (){"pa-enable-gpios",Package() {^ESSX, 0, 0, 0 }}//{ ref, index, pin, active_low} } }) Save the dsl and turn the dsdt.dsl into hex file by iasl -tc dsdt.dsl Then apply the new dsdt table. See this link for detail.

I tried this, got a load of warnings but no errors on the recompile.

I also changed the OEM version as per the Arch wiki

//DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x01072009)
DefinitionBlock ("", "DSDT", 2, "ALASKA", "A M I ", 0x01072010)

applying the new table using the Arch wiki method did not work:

dmesg | grep DSDT
ACPI: DSDT 0x000000009B1DE000 04210F (v02 ALASKA A M I    01072009 INTL 20190509)

but this way did (grub.cfg):

echo    'Loading initial ramdisk ...'
acpi    /boot/new_dsdt.aml
initrd  /boot/initrd.img-5.16.0-rc1-apl

ACPI: DSDT 0x000000009B1DE000 04210F (v02 ALASKA A M I 01072010 INTL 20190509)

However the only effect of this change was to kill the headset microphone. Any ideas?

Below is the output from "dmesg | grep sof" and "amixer":

[    0.421427] PCI-DMA: Using software bounce buffering for IO (SWIOTLB)
[    0.421429] software IO TLB: mapped [mem 0x000000008b49b000-0x000000008f49b000] (64MB)
[    4.147570] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if info 0x040380
[    4.147595] sof-audio-pci-intel-cnl 0000:00:1f.3: enabling device (0000 -> 0002)
[    4.147864] sof-audio-pci-intel-cnl 0000:00:1f.3: DSP detected with PCI class/subclass/prog-if 0x040380
[    4.147970] sof-audio-pci-intel-cnl 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[    4.156975] sof-audio-pci-intel-cnl 0000:00:1f.3: use msi interrupt mode
[    4.199830] sof-audio-pci-intel-cnl 0000:00:1f.3: NHLT_DEVICE_I2S detected, ssp_mask 0x1
[    4.199836] sof-audio-pci-intel-cnl 0000:00:1f.3: hda codecs found, mask 4
[    4.205314] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 1:7:0-47d07
[    4.205320] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:18:1 Kernel ABI 3:18:0
[    4.205328] sof-audio-pci-intel-cnl 0000:00:1f.3: unknown sof_ext_man header type 3 size 0x30
[    4.300783] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware info: version 1:7:0-47d07
[    4.300788] sof-audio-pci-intel-cnl 0000:00:1f.3: Firmware: ABI 3:18:1 Kernel ABI 3:18:0
[    4.310109] sof-essx8336 sof-essx8336: Overriding quirk 0x2 => 0x30
[    4.310112] sof-essx8336 sof-essx8336: quirk SSP0
[    4.310239] es8316 i2c-ESSX8336:00: sof_es8336_probe, could not get pa-enable: -2
[    4.310243] es8316 i2c-ESSX8336:00: sof_es8336_probe, could not get pa-enable by lookup table: -2
[    4.312134] sof-audio-pci-intel-cnl 0000:00:1f.3: Topology: ABI 3:18:1 Kernel ABI 3:18:0
[    4.312284] sof-essx8336 sof-essx8336: ASoC: Parent card not yet available, widget card binding deferred
[    5.043910] input: sof-essx8336 Headset as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input19
[    5.044021] input: sof-essx8336 HDMI/DP,pcm=5 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input20
[    5.044144] input: sof-essx8336 HDMI/DP,pcm=6 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input21
[    5.044265] input: sof-essx8336 HDMI/DP,pcm=7 as /devices/pci0000:00/0000:00:1f.3/sof-essx8336/sound/card0/input22
Simple mixer control 'Headphone',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Headphone Mixer',0
  Capabilities: volume
  Playback channels: Front Left - Front Right
  Capture channels: Front Left - Front Right
  Limits: 0 - 11
  Front Left: 11 [100%] [0.00dB]
  Front Right: 11 [100%] [0.00dB]
Simple mixer control 'Speaker',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'IEC958',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'IEC958',1
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'IEC958',2
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Playback Polarity',0
  Capabilities: enum
  Items: 'Normal' 'R Invert' 'L Invert' 'L + R Invert'
  Item0: 'Normal'
Simple mixer control 'Capture Polarity',0
  Capabilities: enum
  Items: 'Normal' 'Invert'
  Item0: 'Normal'
Simple mixer control 'ADC',0
  Capabilities: cvolume cvolume-joined
  Capture channels: Mono
  Limits: Capture 0 - 192
  Mono: Capture 192 [100%] [0.00dB]
Simple mixer control 'ADC Double Fs',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'ADC PGA Gain',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 10
  Mono: 6 [60%] [13.00dB]
Simple mixer control 'ADC Soft Ramp',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'ALC',0
  Capabilities: cswitch cswitch-joined
  Capture channels: Mono
  Mono: Capture [on]
Simple mixer control 'ALC Capture Attack Time',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 10
  Mono: 5 [50%]
Simple mixer control 'ALC Capture Decay Time',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 10
  Mono: 0 [0%]
Simple mixer control 'ALC Capture Hold Time',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 10
  Mono: 0 [0%]
Simple mixer control 'ALC Capture Max',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 28
  Mono: 13 [46%] [13.00dB]
Simple mixer control 'ALC Capture Min',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 28
  Mono: 8 [29%] [0.00dB]
Simple mixer control 'ALC Capture Noise Gate',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'ALC Capture Noise Gate Threshold',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 31
  Mono: 1 [3%]
Simple mixer control 'ALC Capture Noise Gate Type',0
  Capabilities: enum
  Items: 'Constant PGA Gain' 'Mute ADC Output'
  Item0: 'Mute ADC Output'
Simple mixer control 'ALC Capture Target',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 10
  Mono: 10 [100%] [-1.50dB]
Simple mixer control 'DAC Double Fs',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'DAC Mono Mix',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'DAC Notch Filter',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'DAC Soft Ramp',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'DAC Soft Ramp Rate',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 4
  Mono: 0 [0%]
Simple mixer control 'DAC Source Mux',0
  Capabilities: enum
  Items: 'LDATA TO LDAC, RDATA TO RDAC' 'LDATA TO LDAC, LDATA TO RDAC' 'RDATA TO LDAC, RDATA TO RDAC' 'RDATA TO LDAC, LDATA TO RDAC'
  Item0: 'LDATA TO LDAC, RDATA TO RDAC'
Simple mixer control 'DAC Stereo Enhancement',0
  Capabilities: volume volume-joined
  Playback channels: Mono
  Capture channels: Mono
  Limits: 0 - 7
  Mono: 0 [0%]
Simple mixer control 'Differential Mux',0
  Capabilities: enum
  Items: 'lin1-rin1' 'lin2-rin2' 'lin1-rin1 with 20db Boost' 'lin2-rin2 with 20db Boost'
  Item0: 'lin2-rin2 with 20db Boost'
Simple mixer control 'Digital Mic Mux',0
  Capabilities: enum
  Items: 'dmic disable' 'dmic data at high level' 'dmic data at low level'
  Item0: 'dmic disable'
Simple mixer control 'Headset Mic',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Internal Mic',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Left Headphone Mixer LLIN',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Left Headphone Mixer Left DAC',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Left Headphone Mux',0
  Capabilities: enum
  Items: 'lin1-rin1' 'lin2-rin2' 'lin-rin with Boost' 'lin-rin with Boost and PGA'
  Item0: 'lin1-rin1'
Simple mixer control 'PGA1.0 1 Master',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 32
  Mono:
  Front Left: Playback 32 [100%] [0.00dB]
  Front Right: Playback 32 [100%] [0.00dB]
Simple mixer control 'PGA2.0 2 PCM 0',0
  Capabilities: cvolume
  Capture channels: Front Left - Front Right
  Limits: Capture 0 - 40
  Front Left: Capture 32 [80%] [0.00dB]
  Front Right: Capture 32 [80%] [0.00dB]
Simple mixer control 'PGA5.0 5 Master',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 32
  Mono:
  Front Left: Playback 32 [100%] [0.00dB]
  Front Right: Playback 32 [100%] [0.00dB]
Simple mixer control 'PGA6.0 6 Master',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 32
  Mono:
  Front Left: Playback 32 [100%] [0.00dB]
  Front Right: Playback 32 [100%] [0.00dB]
Simple mixer control 'PGA7.0 7 Master',0
  Capabilities: pvolume
  Playback channels: Front Left - Front Right
  Limits: Playback 0 - 32
  Mono:
  Front Left: Playback 32 [100%] [0.00dB]
  Front Right: Playback 32 [100%] [0.00dB]
Simple mixer control 'Right Headphone Mixer RLIN',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [off]
Simple mixer control 'Right Headphone Mixer Right DAC',0
  Capabilities: pswitch pswitch-joined
  Playback channels: Mono
  Mono: Playback [on]
Simple mixer control 'Right Headphone Mux',0
  Capabilities: enum
  Items: 'lin1-rin1' 'lin2-rin2' 'lin-rin with Boost' 'lin-rin with Boost and PGA'
  Item0: 'lin1-rin1'
darrell-k commented 2 years ago

I should add that the system still thinks the headset is always plugged in, and that I am using the kernel in your "kernel.zip". The jack_normal and jack_inverted kernels do not change this, but both kill the headset microphone.

plbossart commented 2 years ago

The user have no sound from speaker because the GPIO is not found. For example, the dsdt dump_cml.zip is so complicated that the machine driver cannot find the GPIO using default approach. I recommand that the user use a custom dsdt table.

I am not following, sorry @yangxiaohua2009. The mappings done in the machine driver are totally equivalent to what you are doing with the _DSD properties, but most likely the values for index, pin, active low are incorrect.

The machine driver only supports this:

static const struct acpi_gpio_params pa_enable_gpio = { 0, 0, true };
static const struct acpi_gpio_mapping acpi_es8336_gpios[] = {
    { "pa-enable-gpios", &pa_enable_gpio, 1 },
    { }
};

static const struct acpi_gpio_params quirk_pa_enable_gpio = { 1, 0, true };
static const struct acpi_gpio_mapping quirk_acpi_es8336_gpios[] = {
    { "pa-enable-gpios", &quirk_pa_enable_gpio, 1 },
    { }
};

it looks like you are recommending another mapping that would be { 0, 0, false} ?

Package () { Package (){"pa-enable-gpios",Package() {^ESSX, 0, 0, 0 }}//{ ref, index, pin, active_low} } }) 
neuisenburger commented 2 years ago

Hi everybody, I had some partial success on the Huawei Matebook D14 with Intel core i5 10210u under Ubuntu 21.10: I followed the instructions to install the custom kernel by yangxiaohua2009. Now, if I do not attach a headphone, I do not get any sound output. If however, I attach a headphone, I do get sound output from the internal speakers! Just wanted to let you know.

plbossart commented 2 years ago

Thanks @neuisenburger we probably need a quirk then that will invert the jack detection.

I see in the es8136 driver that they already have a property:

    es8316->jd_inverted = device_property_read_bool(component->dev,
                            "everest,jack-detect-inverted");

and we can fairly easily test that property from the machine driver.

Actually we've done this in bytcht_es8316.c already so it's just a matter of adding this code to sof_es83316.c

    if (quirk & BYT_CHT_ES8316_JD_INVERTED)
        props[cnt++] = PROPERTY_ENTRY_BOOL("everest,jack-detect-inverted");

    if (cnt) {
        fwnode = fwnode_create_software_node(props, NULL);
        if (IS_ERR(fwnode)) {
            put_device(codec_dev);
            return PTR_ERR(fwnode);
        }

        ret = device_add_software_node(codec_dev, to_software_node(fwnode));

        fwnode_handle_put(fwnode);

        if (ret) {
            put_device(codec_dev);
            return ret;
        }
    }

@yangxiaohua2009 was your custom kernel based on PR #3338. If yes, I'll add the jack detection inversion with an added patch.

fcsm1922 commented 2 years ago

Стоит ли ожидать, что проблема отсутствия звука будет решена в новой версии ядра 5.18? Теперь у меня основная версия ядра: 5.17-rc3 Я скопировал все файлы tplg из архива es8336-topologies-2.tar в /usr/lib/firmware/intel/sof-tplg/ я пробовал разные значения в опциях snd-soc-sof -es8336 quirk= 0x10, 0x20, 0x21.0x22.0x30.0x31.0x32 я скопировал sof-dyndbg.conf.txt как /etc/modprobe.d/sof-dyndbg.conf и перезагрузился Нет звука(( Или придется ставить какое-то кастомное ядро?

Мы рекомендуем использовать код #3338 или собственное ядро, построенное на его основе [здесь].( https://github.com/yangxiaohua2009/custom-kernel ) Пожалуйста, предоставьте alsainfo, чтобы мы могли знать, что происходит. @fcsm1922

I'll upload the log file tonight those. wait for official support that our sound card will be added to the new version of the kernel is not worth it?

options snd-soc-sof-es8336 quirk=0x01

http://alsa-project.org/db/?f=1a4a1452dff7d5abfbd7b6fe49a82b095c4ca878

options snd-soc-sof-es8336 quirk=0x10

http://alsa-project.org/db/?f=e8732ca336ce7e7db822162b94b4708ee2bd12e2

options snd-soc-sof-es8336 quirk=0x20

http://alsa-project.org/db/?f=f237fac54b5e30fe54f8e295a98d4e37c2c3e96c

options snd-soc-sof-es8336 quirk=0x21

http://alsa-project.org/db/?f=ee83673a01f2d53b7b8ee2347193fbe3d16e6ca8

options snd-soc-sof-es8336 quirk=0x22

http://alsa-project.org/db/?f=c8e6ff4eeb79b79610cb9842707038735469441a

options snd-soc-sof-es8336 quirk=0x30

http://alsa-project.org/db/?f=5a20b9fc7c10132f272e14f9b438ce20e8d288e0

options snd-soc-sof-es8336 quirk=0x31

http://alsa-project.org/db/?f=e398db7f86c3cb30378b864e4e31c15d8b6d791c

options snd-soc-sof-es8336 quirk=0x32

http://alsa-project.org/db/?f=0dd4f5dbb21d54aac1795cf709a15bfded34b1f5

neuisenburger commented 2 years ago

Finally even more success: I now get the sound output from the speakers when no headphone is attached. All I had to do was to switch from quirk 0x30 to quirk 0x20.

Here is what I did: 1) Download the files from the custom kernel of yangxiaohua2009 . 2) Unzip the kernel.zip. 3) There should now be four .deb packages now. Install all of them by sudo dpkg -i *.deb 3) Unzip and untar es8336-topologies-2.tar.gz (not sure whether this is needed) 4) Copy sof-glk-es8336-ssp0.tplg to /lib/firmware/intel/sof-tplg/sof-cml-es8336.tplg. I think I used the one from the tplg directory. 5) Execute cp sof-dyndbg.conf.txt /etc/modprobe.d/sof-dyndbg.conf 6) Execute cp -r sof-essx8336 /usr/share/alsa/ucm2 7) Add the 0x20 quirk as described above. 8) Reboot and hopefully enjoy the sound from the internal speakers.

plbossart commented 2 years ago
  • Copy sof-glk-es8336-ssp0.tplg to /lib/firmware/intel/sof-tplg/sof-cml-es8336.tplg. I think I used the one from the tplg directory.

that sounds very strange. in the tar file I added sof-cml-es8336-ssp0.tplg. With the new kernel you shouldn't use sof-cml-es8336.tplg any longer. Do you mind checking your kernel dmesg to see what topology file is used. just grep for 'topology'

  • Execute cp sof-dyndbg.conf.txt /etc/modprobe.d/sof-dyndbg.conf

That's not bringing anything in terms of functionality, it just enables more verbose logs for SOF and codec modules.

neuisenburger commented 2 years ago

Here is an extract of my dmesg.

[ 3.054002] sof-essx8336 sof-essx8336: Overriding quirk 0x2 => 0x20 [ 3.054006] sof-essx8336 sof-essx8336: quirk SSP0 [ 3.054386] sof-audio-pci-intel-cnl 0000:00:1f.3: loading topology:intel/sof-tplg/sof-cml-es8336.tplg [ 3.055401] sof-audio-pci-intel-cnl 0000:00:1f.3: Topology: ABI 3:18:1 Kernel ABI 3:18:0 [ 3.055408] sof-audio-pci-intel-cnl 0000:00:1f.3: tplg: ready widget id 0 pipe 1 type 23 name : PCM0P stream Passthrough Playback 0 [ 3.055415] sof-audio-pci-intel-cnl 0000:00:1f.3: tplg: load control type 1 name : 1 Master Playback Volume

With the original sof-cml-es8336.tplg under /lib/firmware/intel/sof-tplg/ it didn't work, but after I substituted it by sof-glk-es8336-ssp0.tplg the sound now works. I already rebooted a couple of times and the sound still works.

plbossart commented 2 years ago

ok so I have no idea which kernel you are using @neuisenburger ... my latest code uses sof-cml-es8336-ssp0 precisely to avoid overridding installed files in /lib/firmware.

It makes even less sense to use a 'glk' topology on a 'cml' device.

neuisenburger commented 2 years ago

I am using the custom kernel from yangxiaohua2009 that is version 5.16.0-rc1-apl . The kernel is included in the four .deb packages, that I installed by sudo dpkg -i *.deb

_[ 0.000000] microcode: microcode updated early to revision 0xea, date = 2021-01-05 [ 0.000000] Linux version 5.16.0-rc1-apl (a@a-VirtualBox) (gcc (Ubuntu 7.5.0-3ubuntu1~18.04) 7.5.0, GNU ld (GNU Binutils for Ubuntu) 2.30) #8 SMP PREEMPT Wed Jan 12 11:03:08 CST 2022 [ 0.000000] Command line: BOOTIMAGE=/boot/vmlinuz-5.16.0-rc1-apl root=UUID=a864bd46-9504-4b44-b44e-d440a090be74 ro quiet splash vt.handoff=7 [ 0.000000] KERNEL supported cpus:

Don't ask me why glk topology works, it was just a lucky try.

darrell-k commented 2 years ago

@plbossart , From a (mostly) dumb user perspective, I'm getting confused, maybe because I've tried several fixes on top of each other, and who knows what exactly led to my current half working audio.

I've installed a fresh Debian Testing on a new partition, which should serve as a good base to start over again. I can either start with a @yangxiaohua2009 kernel from https://github.com/yangxiaohua2009/custom-kernel (there's 3 of them, zip names Kernel, Jack_normal and Jack_inverted, so tell me which one to start with), or I can try to compile a kernel from https://github.com/thesofproject/linux if someone can talk me through how to get the code down to my machine (when I tried earlier I got an authorisation error).

Then I can follow instructions on topologies, quirks etc from the experts, and report back, rather than randomly trying stuff. If you think this will be useful to the project.

plbossart commented 2 years ago

@darrell-k I could recommend you install your own kernel since you seem to have an interesting device and we might ask you to add changes for debug purposes

For the code access, can you try with http access

git remote add sof https://github.com/thesofproject/linux.git git fetch sof pull/3338/head:pr3338 git checkout pr3338

or alternatively if you just want to code for this PR get a zip file from: https://github.com/plbossart/sound/archive/refs/heads/fix/sof-es8336-quirk.zip

@nklayman and I are preparing instructions for people like you who are eager to recompile but just don't know the steps. That should be ready tomorrow or by the end of the week.

darrell-k commented 2 years ago

@plbossart OK, fine. Thanks again.

yangxiaohua2009 commented 2 years ago

[ 4.310239] es8316 i2c-ESSX8336:00: sof_es8336_probe, could not get pa-enable: -2 [ 4.310243] es8316 i2c-ESSX8336:00: sof_es8336_probe, could not get pa-enable by lookup table: -2

The custom kernel is built when the fix of tplg is still not done. I will update the custom kernel after a quirk is added to invert the jack detection. Also, with the lastest codec in #3338 I see a crash everytime system shutdown. Please fix it. log.zip

yangxiaohua2009 commented 2 years ago

The user have no sound from speaker because the GPIO is not found. For example, the dsdt dump_cml.zip is so complicated that the machine driver cannot find the GPIO using default approach. I recommand that the user use a custom dsdt table.

I am not following, sorry @yangxiaohua2009. The mappings done in the machine driver are totally equivalent to what you are doing with the _DSD properties, but most likely the values for index, pin, active low are incorrect.

The machine driver only supports this:

static const struct acpi_gpio_params pa_enable_gpio = { 0, 0, true };
static const struct acpi_gpio_mapping acpi_es8336_gpios[] = {
  { "pa-enable-gpios", &pa_enable_gpio, 1 },
  { }
};

static const struct acpi_gpio_params quirk_pa_enable_gpio = { 1, 0, true };
static const struct acpi_gpio_mapping quirk_acpi_es8336_gpios[] = {
  { "pa-enable-gpios", &quirk_pa_enable_gpio, 1 },
  { }
};

it looks like you are recommending another mapping that would be { 0, 0, false} ?

Package () { Package (){"pa-enable-gpios",Package() {^ESSX, 0, 0, 0 }}//{ ref, index, pin, active_low} } }) 

Yes you are right, with the _dsd the GPIO still cannot be found. @darrell-k Can you provide the dsdt table of your device? You may need to change the dsdt table so that the machine driver can find the GPIO. The fix on #3338 is not related to your issue, it's appreciated if you can test the lastest code.

yangxiaohua2009 commented 2 years ago

Here are two dsdt table examples, GPIO can be found in one and cannot be found in the other. @plbossart @darrell-k dsdt.zip.

fcsm1922 commented 2 years ago

Стоит ли ожидать, что проблема отсутствия звука будет решена в новой версии ядра 5.18? Теперь у меня основная версия ядра: 5.17-rc3 Я скопировал все файлы tplg из архива es8336-topologies-2.tar в /usr/lib/firmware/intel/sof-tplg/ я пробовал разные значения в опциях snd-soc-sof -es8336 quirk= 0x10, 0x20, 0x21.0x22.0x30.0x31.0x32 я скопировал sof-dyndbg.conf.txt как /etc/modprobe.d/sof-dyndbg.conf и перезагрузился Нет звука(( Или придется ставить какое-то кастомное ядро?

Мы рекомендуем использовать код #3338 или собственное ядро, построенное на его основе [здесь].( https://github.com/yangxiaohua2009/custom-kernel ) Пожалуйста, предоставьте alsainfo, чтобы мы могли знать, что происходит. @fcsm1922

Я сегодня вечером загружу лог-файл т.е. ждать официальной поддержки что нашу звуковую карту добавят в новую версию ядра не стоит?

параметры snd-soc-sof-es8336 quirk=0x01

http://alsa-project.org/db/?f=1a4a1452dff7d5abfbd7b6fe49a82b095c4ca878

параметры snd-soc-sof-es8336 причуда = 0x10

http://alsa-project.org/db/?f=e8732ca336ce7e7db822162b94b4708ee2bd12e2

параметры snd-soc-sof-es8336 причуда = 0x20

http://alsa-project.org/db/?f=f237fac54b5e30fe54f8e295a98d4e37c2c3e96c

параметры snd-soc-sof-es8336 причуда = 0x21

http://alsa-project.org/db/?f=ee83673a01f2d53b7b8ee2347193fbe3d16e6ca8

параметры snd-soc-sof-es8336 причуда = 0x22

http://alsa-project.org/db/?f=c8e6ff4eeb79b79610cb9842707038735469441a

параметры snd-soc-sof-es8336 причуда = 0x30

http://alsa-project.org/db/?f=5a20b9fc7c10132f272e14f9b438ce20e8d288e0

параметры snd-soc-sof-es8336 причуда = 0x31

http://alsa-project.org/db/?f=e398db7f86c3cb30378b864e4e31c15d8b6d791c

параметры snd-soc-sof-es8336 причуда = 0x32

http://alsa-project.org/db/?f=0dd4f5dbb21d54aac1795cf709a15bfded34b1f5

can you tell me something about my logs? @yangxiaohua2009 @plbossart

yangxiaohua2009 commented 2 years ago

Стоит ли ожидать, что проблема отсутствия звука будет решена в новой версии ядра 5.18? Теперь у меня основная версия ядра: 5.17-rc3 Я скопировал все файлы tplg из архива es8336-topologies-2.tar в /usr/lib/firmware/intel/sof-tplg/ я пробовал разные значения в опциях snd-soc-sof -es8336 quirk= 0x10, 0x20, 0x21.0x22.0x30.0x31.0x32 я скопировал sof-dyndbg.conf.txt как /etc/modprobe.d/sof-dyndbg.conf и перезагрузился Нет звука(( Или придется ставить какое-то кастомное ядро?

Мы рекомендуем использовать код #3338 или собственное ядро, построенное на его основе [здесь].( https://github.com/yangxiaohua2009/custom-kernel ) Пожалуйста, предоставьте alsainfo, чтобы мы могли знать, что происходит. @fcsm1922

Я сегодня вечером загружу лог-файл т.е. ждать официальной поддержки что нашу звуковую карту добавят в новую версию ядра не стоит?

параметры snd-soc-sof-es8336 quirk=0x01 http://alsa-project.org/db/?f=1a4a1452dff7d5abfbd7b6fe49a82b095c4ca878 параметры snd-soc-sof-es8336 причуда = 0x10 http://alsa-project.org/db/?f=e8732ca336ce7e7db822162b94b4708ee2bd12e2 параметры snd-soc-sof-es8336 причуда = 0x20 http://alsa-project.org/db/?f=f237fac54b5e30fe54f8e295a98d4e37c2c3e96c параметры snd-soc-sof-es8336 причуда = 0x21 http://alsa-project.org/db/?f=ee83673a01f2d53b7b8ee2347193fbe3d16e6ca8 параметры snd-soc-sof-es8336 причуда = 0x22 http://alsa-project.org/db/?f=c8e6ff4eeb79b79610cb9842707038735469441a параметры snd-soc-sof-es8336 причуда = 0x30 http://alsa-project.org/db/?f=5a20b9fc7c10132f272e14f9b438ce20e8d288e0 параметры snd-soc-sof-es8336 причуда = 0x31 http://alsa-project.org/db/?f=e398db7f86c3cb30378b864e4e31c15d8b6d791c параметры snd-soc-sof-es8336 причуда = 0x32 http://alsa-project.org/db/?f=0dd4f5dbb21d54aac1795cf709a15bfded34b1f5

can you tell me something about my logs? @yangxiaohua2009 @plbossart

You are forcing the quirk so we don't know which ssp you are using. Set the quirk=0x10 is ok though. You can't see sound card because the wrong tplg is used. copy the tplg file "sof-tgl-es8336-dmic2ch-ssp0.tplg" in es8336-topologies-2 (1).tar.gz to /lib/firmware/intel/sof-tplg and rename it "sof-tgl-es8336.tplg" and you can move on.

sudo cp sof-tgl-es8336-dmic2ch-ssp0.tplg /lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplg

fcsm1922 commented 2 years ago

Стоит ли ожидать, что проблема отсутствия звука будет решена в новой версии ядра 5.18? Теперь у меня основная версия ядра: 5.17-rc3 Я скопировал все файлы tplg из архива es8336-topologies-2.tar в /usr/lib/firmware/intel/sof-tplg/ я пробовал разные значения в опциях snd-soc-sof -es8336 quirk= 0x10, 0x20, 0x21.0x22.0x30.0x31.0x32 я скопировал sof-dyndbg.conf.txt как /etc/modprobe.d/sof-dyndbg.conf и перезагрузился Нет звука(( Или придется ставить какое-то кастомное ядро?

Мы рекомендуем использовать код #3338 или собственное ядро, построенное на его основе [здесь].( https://github.com/yangxiaohua2009/custom-kernel ) Пожалуйста, предоставьте alsainfo, чтобы мы могли знать, что происходит. @fcsm1922

Я сегодня вечером загружу лог-файл т.е. ждать официальной поддержки что нашу звуковую карту добавят в новую версию ядра не стоит?

параметры snd-soc-sof-es8336 quirk=0x01 http://alsa-project.org/db/?f=1a4a1452dff7d5abfbd7b6fe49a82b095c4ca878 параметры snd-soc-sof-es8336 причуда = 0x10 http://alsa-project.org/db/?f=e8732ca336ce7e7db822162b94b4708ee2bd12e2 параметры snd-soc-sof-es8336 причуда = 0x20 http://alsa-project.org/db/?f=f237fac54b5e30fe54f8e295a98d4e37c2c3e96c параметры snd-soc-sof-es8336 причуда = 0x21 http://alsa-project.org/db/?f=ee83673a01f2d53b7b8ee2347193fbe3d16e6ca8 параметры snd-soc-sof-es8336 причуда = 0x22 http://alsa-project.org/db/?f=c8e6ff4eeb79b79610cb9842707038735469441a параметры snd-soc-sof-es8336 причуда = 0x30 http://alsa-project.org/db/?f=5a20b9fc7c10132f272e14f9b438ce20e8d288e0 параметры snd-soc-sof-es8336 причуда = 0x31 http://alsa-project.org/db/?f=e398db7f86c3cb30378b864e4e31c15d8b6d791c параметры snd-soc-sof-es8336 причуда = 0x32 http://alsa-project.org/db/?f=0dd4f5dbb21d54aac1795cf709a15bfded34b1f5

can you tell me something about my logs? @yangxiaohua2009 @plbossart

You are forcing the quirk so we don't know which ssp you are using. Set the quirk=0x10 is ok though. You can't see sound card because the wrong tplg is used. copy the tplg file "sof-tgl-es8336-dmic2ch-ssp0.tplg" in es8336-topologies-2 (1).tar.gz to /lib/firmware/intel/sof-tplg and rename it "sof-tgl-es8336.tplg" and you can move on.

sudo cp sof-tgl-es8336-dmic2ch-ssp0.tplg /lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplg sorry for the question, but should I unpack the contents of the archive to /lib/firmware/intel/sof-tplg? or just what you wrote to do: sudo cp sof-tgl-es8336-dmic2ch-ssp0.tplg /lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplg?

fcsm1922 commented 2 years ago

http://alsa-project.org/db/?f=b5f2a50cda47709045083827c306642018d9005c @angxiaohua2009

yangxiaohua2009 commented 2 years ago

Sorry, you need to sudo cp sof-tgl-es8336-ssp0.tplg /lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplg @fcsm1922 The default sof-tgl-es8336.tplg contains dmic infomation (the same as sof-tgl-es8336-dmic2ch-ssp0.tplg) in it which your machine driver don't have. sof-tgl-es8336-ssp0.tplg should contain no dmic infomation.

fcsm1922 commented 2 years ago

he volume is adjustable ... cheers !!! But there is no sound, neither through the speakers, nor through the headphones (( http://alsa-project.org/db/?f=0cbf4776eb32de2abe6f7817d4498782ef3af64e @yangxiaohua2009

fcsm1922 commented 2 years ago

the contents of the es8336-topologies-2(1).tar.gz archive had to be unpacked to /lib/firmware/intel/sof-tplg??? or just needed to do what you wrote without copying the whole archive: sudo cp soft-tgl-es8336-ssp0.tplg /lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplg? @yangxiaohua2009

darrell-k commented 2 years ago

Yes you are right, with the _dsd the GPIO still cannot be found. @darrell-k Can you provide the dsdt table of your device? You may need to change the dsdt table so that the machine driver can find the GPIO. The fix on #3338 is not related to your issue, it's appreciated if you can test the lastest code.

Decompiled DSDT attached. Also in the zip is a log of the decompiler messages - there are several warnings.

@yangxiaohua2009 what do you mean by the latest code? - there are several possibilities in your https://github.com/yangxiaohua2009/custom-kernel - judging by the dates the latest would be either the jack_normal or jack_inverted kernel together with es8336-topologies-2.tar.gz

dsdt.zip

darrell-k commented 2 years ago

@darrell-k I could recommend you install your own kernel since you seem to have an interesting device and we might ask you to add changes for debug purposes

For the code access, can you try with http access

git remote add sof https://github.com/thesofproject/linux.git git fetch sof pull/3338/head:pr3338 git checkout pr3338

or alternatively if you just want to code for this PR get a zip file from: https://github.com/plbossart/sound/archive/refs/heads/fix/sof-es8336-quirk.zip

@nklayman and I are preparing instructions for people like you who are eager to recompile but just don't know the steps. That should be ready tomorrow or by the end of the week.

@plbossart is this the correct config option for ES8336? Screenshot from 2022-02-10 13-50-09

plbossart commented 2 years ago

[ 4.310239] es8316 i2c-ESSX8336:00: sof_es8336_probe, could not get pa-enable: -2 [ 4.310243] es8316 i2c-ESSX8336:00: sof_es8336_probe, could not get pa-enable by lookup table: -2

The custom kernel is built when the fix of tplg is still not done. I will update the custom kernel after a quirk is added to invert the jack detection. Also, with the lastest codec in #3338 I see a crash everytime system shutdown. Please fix it. log.zip

Separate problem, please file a separate issue for this and copy @kv2019i

plbossart commented 2 years ago

@darrell-k I could recommend you install your own kernel since you seem to have an interesting device and we might ask you to add changes for debug purposes For the code access, can you try with http access git remote add sof https://github.com/thesofproject/linux.git git fetch sof pull/3338/head:pr3338 git checkout pr3338 or alternatively if you just want to code for this PR get a zip file from: https://github.com/plbossart/sound/archive/refs/heads/fix/sof-es8336-quirk.zip @nklayman and I are preparing instructions for people like you who are eager to recompile but just don't know the steps. That should be ready tomorrow or by the end of the week.

@plbossart is this the correct config option for ES8336? Screenshot from 2022-02-10 13-50-09

yes indeed.

darrell-k commented 2 years ago

Good. It's been compiling for a couple of hours now, laptop is getting quite warm! When it is done, would it be best to create .deb files for installation? Any guides out there for doing this?

plbossart commented 2 years ago

the contents of the es8336-topologies-2(1).tar.gz archive had to be unpacked to /lib/firmware/intel/sof-tplg??? or just needed to do what you wrote without copying the whole archive: sudo cp soft-tgl-es8336-ssp0.tplg /lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplg? @yangxiaohua2009

@yangxiaohua2009 this is not efficient if the instructions for your compiled kernel and PR #3338 are different. Please recompile your kernel so that both of us can provide the same instructions.

darrell-k commented 2 years ago

@plbossart the compile is finished, but now I find out I should have used "make deb-pkg" rather than just "make". Can I do that now to create the packages without the whole thing compiling again?

nklayman commented 2 years ago

@darrell-k make bindeb-pkg should build only the deb and skip the sources, but I'm not 100% sure it'll work. You're probably better off just running make deb-pkg. Even if it does rerun make it'll be much faster as it only has to verify everything instead of rebuilding. If you run make deb-pkg -j[n] where [n] is the number of threads you have it'll be much faster as well.

darrell-k commented 2 years ago

@nklayman Thanks - it did the build all over again, but c'est la vie!

@plbossart I've now built and installed the #3338 kernel, and dropped the contents of https://github.com/thesofproject/linux/pull/3338#issuecomment-1013246294 into the topology directory of a fresh linux-firmware install. I have not specified any quirks for snd-soc-sof-es8336 in modprobe.d.

Results:

Output of dmesg | grep sof: dmesg-sof.txt

Pavucontrol has an output control "sof-essx8336 Speaker + Headphones" with 2 port choices, "Speaker" and "Headphones (unplugged)". This does not change when headset is plugged in. There is an input control of "sof-essx8336 Headphones Stereo Microphone" with a single port choice "Headphones Stereo Microphone".

There is no sound from the internal speakers or a headset. There is no input detected from the headset mic.

Alsamixer looks like this: Screenshot from 2022-02-10 22-08-14

What further information do you need? And what should I do next?

plbossart commented 2 years ago

@darrell-k thanks for this test. the logs look pretty good to me, your kernel seems to have pick a quirk automagically

loading topology:intel/sof-tplg/sof-cml-es8336-dmic2ch-ssp0.tplg

@darrell-k PulseAudio/Pipewire will do nothing for now because we are missing a UCM file required for configuration. If I had hardware I could have created on a long time ago but that's clearly a miss.

For now I recommend that you test at the hw level with e.g. aplay -Dhw:0,0 and arecord -Dhw:0,0

You can check if the headphone is detected with amixer. Usually you will see the list of controls with 'amixer -Dhw:0 controls' and there should be one numid with the name 'Jack', let;s say 42 because the answer is always 42. You can see if the jack works with amixer -Dhw:0 cget numid=42 if it toggles between on and off the jack detection works.

if you need more help please provide the result of 'amixer -Dhw:0 controls' and also attach the result of 'alsa-info'

If it looks like a mess it's because it is one. These platforms were shipped without anyone caring about Linux support and without realizing that using an I2C/I2S codec does require support since there is no platform discovery. It's not really complicated but since we have no description of those platforms and no hardware the test and integration is essentially crowd-sourced to the community. Thanks for your understanding.

darrell-k commented 2 years ago

@plbossart No problem at all, I'm happy to help if I can. I'll have a go with your suggestions in the morning and report back.

yangxiaohua2009 commented 2 years ago

the contents of the es8336-topologies-2(1).tar.gz archive had to be unpacked to /lib/firmware/intel/sof-tplg??? or just needed to do what you wrote without copying the whole archive: sudo cp soft-tgl-es8336-ssp0.tplg /lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplg? @yangxiaohua2009

You may copy everything, but only the file /lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplg is used

fcsm1922 commented 2 years ago

содержимое архива es8336-topologies-2(1).tar.gz пришлось распаковать в /lib/firmware/intel/sof-tplg??? или просто нужно было сделать то, что вы написали, не копируя весь архив: sudo cp soft-tgl-es8336-ssp0.tplg /lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplg? @yangxiaohua2009

Вы можете копировать все, но только файл /lib/firmware/intel/sof-tplg/sof-tgl-es8336.tplgиспользуется

I figured this out, thanks. BUT I have no sound .. from the speakers and headphones ... at the same time, I see how the indicator (plasma widget) fluctuates from the music being played. what to do next? @yangxiaohua2009