alsa-project/alsa-ucm-conf

Audio only working after stopping PulseAudio and setting the UCM - kblda7219max on the ChromeOS Kernel, 5.10.70

MilkyDeveloper opened this issue · 5 comments

On my kblda7219max Chromebook (baseboard: NAMI), internal audio works properly when the following conditions are met:

  • Kernel 5.10.70 (ChromeOS fork) is used (the latest ChromeOS kernel has some kind of topology-related kernel bug)
  • FW is copied from the ChromeOS rootfs to Linux
  • UCM is converted to UCM2
  • Only ALSA is used

However, whenever I start PulseAudio (pulseaudio -vvvv), audio is disabled, going to a dummy output.

PulseAudio passes through probing for the UCM files but errors out in this particular spot:

I: [pulseaudio] (alsa-lib)pcm_hw.c: SNDRV_PCM_IOCTL_PREPARE failed (-22)
I: [pulseaudio] alsa-util.c: snd_pcm_hw_params failed: Invalid argument
D: [pulseaudio] alsa-util.c: Trying hw:kblda7219max,0 without SND_PCM_NO_AUTO_FORMAT ...
D: [pulseaudio] alsa-util.c: Managed to open hw:kblda7219max,0
D: [pulseaudio] alsa-util.c: Maximum hw buffer size is 21845 ms
I: [pulseaudio] (alsa-lib)pcm_hw.c: SNDRV_PCM_IOCTL_PREPARE failed (-22)
I: [pulseaudio] (alsa-lib)pcm_hw.c: SNDRV_PCM_IOCTL_PREPARE failed (-22)
I: [pulseaudio] (alsa-lib)pcm_hw.c: SNDRV_PCM_IOCTL_PREPARE failed (-22)
I: [pulseaudio] (alsa-lib)pcm_hw.c: SNDRV_PCM_IOCTL_PREPARE failed (-22)

which causes it to say:

E: [pulseaudio] module-alsa-card.c: Failed to find a working profile.
E: [pulseaudio] module.c: Failed to load module "module-alsa-card" (argument: "device_id="0" name="platform-kbl_da7219_mx98357a" card_name="alsa_card.platform-kbl_da7219_mx98357a" namereg_fail=false tsched=yes fixed_latency_range=no ignore_dB=no deferred_volume=yes use_ucm=yes avoid_resampling=no card_properties="module-udev-detect.discovered=1""): initialization failed.

My dmesg gets filled with:

Kbl Audio Port: ASoC: no backend DAIs enabled for Kbl Audio Port
Kbl Audio Port: ASoC: dpcm_fe_dai_prepare() failed (-22)

However, once I kill PulseAudio and run alsaucm -c kblda7219max set _verb HiFi set _enadev Speaker, audio begins working again (but this is in pure ALSA and PA apps are not compatible) and the no backend DAIs enabled for Kbl Audio Port is no longer logged to dmesg.

I think this is a UCM issue because the audio is working fine kernel-level and with ALSA, but PulseAudio seems to mess something up with the UCM and the UCM needs to be set again.

Huge thanks for any help!
alsa-info.txt
(My PulseAudio log is slightly different from the time I ran PulseAudio and got the PCM_IOCTL_PREPARE error)
pulseaudio-log.txt
HiFi.conf.txt
kblda7219max.conf.txt

I ended up removing the Front Mic, Rear Mic, and Mic, all of which were connects to PCM3. PulseAudio worked, but I ended up frying (you could smell something burning) my speaker, even at minimum volume :). I've seen others document this. ALSA exhibits no such behavior (it worked with apulse for months), but PulseAudio is able to burn your speaker. It suprises me because PA operates only in the userspace.

On further inspection directly from ChromeOS, audio is working but it appears that PA blew my left speaker’s membrane. Is there any way to sense these issues ahead of time?

Strangely, OEM didn't integrate the hardware-level protection from such things.

Google can’t integrate hardware level protection from very loud noises. They probably put in protection from over-voltage.

Stale. Re-open, if UCM configuration can be improved for this device.