Skip to content

Speaker misconfigured on Spectre x360 (Tiger Lake) #2631

@kyonifer

Description

@kyonifer

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:

  1. Passing patch=... to snd-hda-intel. This is what hdajackretask does, which seems to not take effect when using sof (i.e. when snd-intel-dspcfg dsp_driver=1 is not set)
  2. 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 to hwC0D0/reconfig and 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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions