[alsa-devel] [PATCH] ALSA: hda - Enable mute/mic-mute LEDs for more Thinkpads with Realtek codec

David Henningsson david.henningsson at canonical.com
Tue Nov 19 11:09:19 CET 2013


On 11/18/2013 01:09 PM, Takashi Iwai wrote:
> At Mon, 18 Nov 2013 11:51:47 +0100,
> David Henningsson wrote:
>>
>> We're using the ACPI interface to detect whether we're dealing with a Thinkpad
>> or not. This way we're not loading the thinkpad_acpi module when we're not on
>> a Thinkpad, but at the same time, we give the opportunity to check for, and
>> potentially enable, both present and future Thinkpad with mute/micmute LEDs.
>>
>> At least those running the ALC269 family (269 to 299) of Realtek codecs.
>>
>> Cc: Alex Hung <alex.hung at canonical.com>
>> Tested-by: Hui Wang <hui.wang at canonical.com>
>> Signed-off-by: David Henningsson <david.henningsson at canonical.com>
>> ---
>>  sound/pci/hda/patch_realtek.c |   29 ++++++++++++++++++++++++++---
>>  1 file changed, 26 insertions(+), 3 deletions(-)
>>
>> Hi Takashi,
>>
>> Sorry I'm late with this one. I'm hoping that you can still merge it for 3.13,
>> but if you can't, we'll just backport it into the Ubuntu 3.13 kernel instead,
>> so not the end of the world I guess.
> 
> OK, I merged it now, as it's not too intrusive, 

Ok, thanks a lot!

> and the build test
> without CONFIG_ACPI passed.

Yeah, I don't think thinkpad_acpi will stop depend on acpi anytime
soon... :-)

Anyway, I'm attaching two more patches - one for enabling thinkpad_acpi
on the lenovo_dock fixup (I must have missed this in the previous
patch), and one for hda-emu.

> 
> 
> thanks,
> 
> Takashi
> 
> 
>>
>> diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c
>> index 04d1e6b..05987ff 100644
>> --- a/sound/pci/hda/patch_realtek.c
>> +++ b/sound/pci/hda/patch_realtek.c
>> @@ -3652,9 +3652,29 @@ static void alc290_fixup_mono_speakers(struct hda_codec *codec,
>>  #if IS_ENABLED(CONFIG_THINKPAD_ACPI)
>>  
>>  #include <linux/thinkpad_acpi.h>
>> +#include <acpi/acpi.h>
>>  
>>  static int (*led_set_func)(int, bool);
>>  
>> +static acpi_status acpi_check_cb(acpi_handle handle, u32 lvl, void *context,
>> +				 void **rv)
>> +{
>> +	bool *found = context;
>> +	*found = true;
>> +	return AE_OK;
>> +}
>> +
>> +static bool is_thinkpad(struct hda_codec *codec)
>> +{
>> +	bool found = false;
>> +	if (codec->subsystem_id >> 16 != 0x17aa)
>> +		return false;
>> +	if (ACPI_SUCCESS(acpi_get_devices("LEN0068", acpi_check_cb, &found, NULL)) && found)
>> +		return true;
>> +	found = false;
>> +	return ACPI_SUCCESS(acpi_get_devices("IBM0068", acpi_check_cb, &found, NULL)) && found;
>> +}
>> +
>>  static void update_tpacpi_mute_led(void *private_data, int enabled)
>>  {
>>  	if (led_set_func)
>> @@ -3680,6 +3700,8 @@ static void alc_fixup_thinkpad_acpi(struct hda_codec *codec,
>>  	bool removefunc = false;
>>  
>>  	if (action == HDA_FIXUP_ACT_PROBE) {
>> +		if (!is_thinkpad(codec))
>> +			return;
>>  		if (!led_set_func)
>>  			led_set_func = symbol_request(tpacpi_led_set);
>>  		if (!led_set_func) {
>> @@ -4027,6 +4049,8 @@ static const struct hda_fixup alc269_fixups[] = {
>>  	[ALC269_FIXUP_LIMIT_INT_MIC_BOOST] = {
>>  		.type = HDA_FIXUP_FUNC,
>>  		.v.func = alc269_fixup_limit_int_mic_boost,
>> +		.chained = true,
>> +		.chain_id = ALC269_FIXUP_THINKPAD_ACPI,
>>  	},
>>  	[ALC269_FIXUP_LIMIT_INT_MIC_BOOST_MUTE_LED] = {
>>  		.type = HDA_FIXUP_FUNC,
>> @@ -4070,8 +4094,6 @@ static const struct hda_fixup alc269_fixups[] = {
>>  	[ALC269_FIXUP_THINKPAD_ACPI] = {
>>  		.type = HDA_FIXUP_FUNC,
>>  		.v.func = alc_fixup_thinkpad_acpi,
>> -		.chained = true,
>> -		.chain_id = ALC269_FIXUP_LIMIT_INT_MIC_BOOST
>>  	},
>>  	[ALC255_FIXUP_DELL1_MIC_NO_PRESENCE] = {
>>  		.type = HDA_FIXUP_PINS,
>> @@ -4173,7 +4195,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
>>  	SND_PCI_QUIRK(0x17aa, 0x2208, "Thinkpad T431s", ALC269_FIXUP_LENOVO_DOCK),
>>  	SND_PCI_QUIRK(0x17aa, 0x220c, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
>>  	SND_PCI_QUIRK(0x17aa, 0x2212, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
>> -	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_THINKPAD_ACPI),
>> +	SND_PCI_QUIRK(0x17aa, 0x2214, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
>>  	SND_PCI_QUIRK(0x17aa, 0x2215, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
>>  	SND_PCI_QUIRK(0x17aa, 0x5013, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
>>  	SND_PCI_QUIRK(0x17aa, 0x501a, "Thinkpad", ALC283_FIXUP_INT_MIC),
>> @@ -4181,6 +4203,7 @@ static const struct snd_pci_quirk alc269_fixup_tbl[] = {
>>  	SND_PCI_QUIRK(0x17aa, 0x5109, "Thinkpad", ALC269_FIXUP_LIMIT_INT_MIC_BOOST),
>>  	SND_PCI_QUIRK(0x17aa, 0x3bf8, "Quanta FL1", ALC269_FIXUP_PCM_44K),
>>  	SND_PCI_QUIRK(0x17aa, 0x9e54, "LENOVO NB", ALC269_FIXUP_LENOVO_EAPD),
>> +	SND_PCI_QUIRK_VENDOR(0x17aa, "Thinkpad", ALC269_FIXUP_THINKPAD_ACPI),
>>  	SND_PCI_QUIRK(0x1b7d, 0xa831, "Ordissimo EVE2 ", ALC269VB_FIXUP_ORDISSIMO_EVE2), /* Also known as Malata PC-B1303 */
>>  
>>  #if 0
>> -- 
>> 1.7.9.5
>>
> 



-- 
David Henningsson, Canonical Ltd.
https://launchpad.net/~diwic
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-hda-emu-Add-acpi.h-header.patch
Type: text/x-patch
Size: 1660 bytes
Desc: not available
URL: <http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20131119/b8435227/attachment.bin>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: 0001-ALSA-hda-Also-enable-mute-micmute-LED-control-for-Le.patch
Type: text/x-patch
Size: 1045 bytes
Desc: not available
URL: <http://mailman.alsa-project.org/pipermail/alsa-devel/attachments/20131119/b8435227/attachment-0001.bin>


More information about the Alsa-devel mailing list