Lenovo Legion/Yoga Slim 7 speaker output
Cameron Berkenpas
cam at neo-zeon.de
Wed Jun 23 04:00:43 CEST 2021
Updated the patch to use the automute_hook and it works:
https://bugzilla.kernel.org/attachment.cgi?id=297569&action=diff
I suspect this is the right way to do things. Hopefully someone can confirm.
The automute hooks are called indirectly by call_update_outputs(), which
means likely the automute hooks are called both when headphones are
plugged in as well as when they're removed. When I get around to it,
I'll add a check such that the verbs are only sent on removal. Sending
the verbs when the headphones are inserted don't appear to harm
anything, but... There's not reason to.
Thanks!
On 6/22/21 12:17 PM, Cameron Berkenpas wrote:
> Hello,
>
> I'm working on a patch to get audio output working on the speakers of
> the Lenovo Legion/Yoga Slim 7 laptops:
> https://bugzilla.kernel.org/attachment.cgi?id=297559&action=diff
>
> Please let me know if this isn't the right place for these types of
> questions.
>
> Both of these laptops have ALC287's that both seem to need some codec
> initialization to get the speakers working. For both laptops, the
> specs report ALC3306, but Linux on both systems reports that it's an
> ALC287, and looking at the PCI ID's on Windows agrees that it's an
> ALC287.
>
> This is my first time working on such a patch, and I'm having a
> headphone related problem:
>
> 1. When plugging headphones into the audio jack, I get sound on the
> headphones as expected. I see that the speakers are muted and the
> headphones are unmuted as expected in alsamixer.
>
> 2. When I unplug the headphones, I can no longer get speaker output.
> Monitoring alsamixer, I observe that unplugging the headphones
> results in the speakers being unmuted and the headphones are muted as
> expected. However, I am unable to get speaker output in this case.
>
> 3. If I plug in the headphones, don't play any sound, and then unplug
> the headphones, I see the same behavior in alsamixer, BUT speaker
> output still works.
>
> 4. If I apply the initialization verbs via hda-verb (the same verbs
> that I'm using in my patch), speaker output works again.
>
> 5. If speaker output is no longer working (due to #2), putting the
> laptop to sleep and resuming fixes the speakers. The code in the
> kernel seems to call the sound card's init again so this makes sense.
>
>
> In short, it seems I need to re-initialize the speakers when the
> headphones are unplugged. Studying sound/pci/hda/patch_realtek.c,
> there's alc_headset_mode_unplugged(), but as there's currently no case
> for 0x10ec0287 at all. I'm not sure adding in a case that
> re-initializes makes sense if the vast majority of ALC287's don't need
> to when headphones are unplugged. It seems none of the other cards, at
> least as far as I can tell, do a re-init when headphones are unplugged
> either. They just seem to setup some pins and coefficients for the
> most part if anything at all.
>
> How can I re-init the speakers when headphones are unplugged
> specifically for these specific models? The initial-initialization is
> only done for these laptops, I'm just unclear what, if any, mechanism
> there is for initialization on headphone unplugs?
>
> Thanks!
>
> -Cameron
More information about the Alsa-devel
mailing list