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