Lenovo Legion/Yoga Slim 7 speaker output
Cameron Berkenpas
cam at neo-zeon.de
Wed Jun 23 04:07:52 CEST 2021
Whoops, he's the correct patch:
https://bugzilla.kernel.org/attachment.cgi?id=297571&action=diff
On 6/22/21 7:00 PM, Cameron Berkenpas wrote:
> 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