xref: /OK3568_Linux_fs/kernel/sound/pci/hda/thinkpad_helper.c (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun // SPDX-License-Identifier: GPL-2.0
2*4882a593Smuzhiyun /* Helper functions for Thinkpad LED control;
3*4882a593Smuzhiyun  * to be included from codec driver
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #if IS_ENABLED(CONFIG_THINKPAD_ACPI)
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <linux/acpi.h>
9*4882a593Smuzhiyun #include <linux/leds.h>
10*4882a593Smuzhiyun 
is_thinkpad(struct hda_codec * codec)11*4882a593Smuzhiyun static bool is_thinkpad(struct hda_codec *codec)
12*4882a593Smuzhiyun {
13*4882a593Smuzhiyun 	return (codec->core.subsystem_id >> 16 == 0x17aa) &&
14*4882a593Smuzhiyun 	       (acpi_dev_found("LEN0068") || acpi_dev_found("LEN0268") ||
15*4882a593Smuzhiyun 		acpi_dev_found("IBM0068"));
16*4882a593Smuzhiyun }
17*4882a593Smuzhiyun 
hda_fixup_thinkpad_acpi(struct hda_codec * codec,const struct hda_fixup * fix,int action)18*4882a593Smuzhiyun static void hda_fixup_thinkpad_acpi(struct hda_codec *codec,
19*4882a593Smuzhiyun 				    const struct hda_fixup *fix, int action)
20*4882a593Smuzhiyun {
21*4882a593Smuzhiyun 	if (action == HDA_FIXUP_ACT_PROBE) {
22*4882a593Smuzhiyun 		if (!is_thinkpad(codec))
23*4882a593Smuzhiyun 			return;
24*4882a593Smuzhiyun 		snd_hda_gen_add_mute_led_cdev(codec, NULL);
25*4882a593Smuzhiyun 		snd_hda_gen_add_micmute_led_cdev(codec, NULL);
26*4882a593Smuzhiyun 	}
27*4882a593Smuzhiyun }
28*4882a593Smuzhiyun 
29*4882a593Smuzhiyun #else /* CONFIG_THINKPAD_ACPI */
30*4882a593Smuzhiyun 
hda_fixup_thinkpad_acpi(struct hda_codec * codec,const struct hda_fixup * fix,int action)31*4882a593Smuzhiyun static void hda_fixup_thinkpad_acpi(struct hda_codec *codec,
32*4882a593Smuzhiyun 				    const struct hda_fixup *fix, int action)
33*4882a593Smuzhiyun {
34*4882a593Smuzhiyun }
35*4882a593Smuzhiyun 
36*4882a593Smuzhiyun #endif /* CONFIG_THINKPAD_ACPI */
37