-
Notifications
You must be signed in to change notification settings - Fork 142
Description
Apologies in advance if this is the wrong tracker to open this ticket in, I wasn't sure which subsystem was ultimately responsible.
I'm running Fedora 33 on a Spectre x360 (full alsa-info system description here). From the log we see it configures by default to:
[ 17.339080] snd_hda_codec_realtek ehdaudio0D0: autoconfig for ALC285: line_outs=1 (0x17/0x0/0x0/0x0/0x0) type:speaker
[ 17.339082] snd_hda_codec_realtek ehdaudio0D0: speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[ 17.339083] snd_hda_codec_realtek ehdaudio0D0: hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[ 17.339084] snd_hda_codec_realtek ehdaudio0D0: mono: mono_out=0x0
[ 17.339084] snd_hda_codec_realtek ehdaudio0D0: inputs:
[ 17.339085] snd_hda_codec_realtek ehdaudio0D0: Mic=0x19
Speaker and microphone both show up as devices in pulse and microphone works fine, however no audio is heard on the built-in speakers. Suspecting a misconfigured pin, I reverted to legacy mode by passing snd-intel-dspcfg dsp_driver=1 and then used hdajackretask to guess and check. Setting pin 0x17 to unmapped and pin 0x14 to speaker successfully enables the speaker and sound is produced. Therefore, I believe the issue is the bios reporting the wrong pin for the system's connected speakers (should be 0x14 instead of 0x17). In this configuration with the speaker working, dmesg reports
[ 11.978717] snd_hda_intel 0000:00:1f.3: bound 0000:00:02.0 (ops i915_audio_component_bind_ops [i915])
[ 12.044472] snd_hda_codec_realtek hdaudioC0D0: autoconfig for ALC285: line_outs=1 (0x14/0x0/0x0/0x0/0x0) type:speaker
[ 12.044474] snd_hda_codec_realtek hdaudioC0D0: speaker_outs=0 (0x0/0x0/0x0/0x0/0x0)
[ 12.044475] snd_hda_codec_realtek hdaudioC0D0: hp_outs=1 (0x21/0x0/0x0/0x0/0x0)
[ 12.044476] snd_hda_codec_realtek hdaudioC0D0: mono: mono_out=0x0
[ 12.044476] snd_hda_codec_realtek hdaudioC0D0: inputs:
[ 12.044477] snd_hda_codec_realtek hdaudioC0D0: Mic=0x19
This would be a viable workaround, except that the microphone is a dmic and therefore doesn't work when the dsp is disabled (i.e. when snd-intel-dspcfg dsp_driver=1 is set). If I remove the snd-intel-dspcfg dsp_driver=1 option, then the pin override from hdajackretask no longer works and the speaker doesn't work. Things I've tried:
- Passing
patch=...tosnd-hda-intel. This is whathdajackretaskdoes, which seems to not take effect when using sof (i.e. whensnd-intel-dspcfg dsp_driver=1is not set) - Override the pin configs in
/sys/class/sound/hwC0D0. After shutting down pulse and alsactl (the only two things listening), the process hangs on the write tohwC0D0/reconfigand no pins are reconfigured.
Is there a way to override the pin configuration when SOF is enabled similar to the patch= parameter to snd-hda-intel? Alternatively, is this the correct place to file a ticket to upstream a long-term fix for this model?