1b2441318SGreg Kroah-Hartman // SPDX-License-Identifier: GPL-2.0
2b317b032STakashi Iwai /* Helper functions for Thinkpad LED control;
3b317b032STakashi Iwai * to be included from codec driver
4b317b032STakashi Iwai */
5b317b032STakashi Iwai
68d3d1eceSTakashi Iwai #if IS_ENABLED(CONFIG_THINKPAD_ACPI)
7b317b032STakashi Iwai
8b317b032STakashi Iwai #include <linux/acpi.h>
9b3802783STakashi Iwai #include <linux/leds.h>
10b317b032STakashi Iwai
is_thinkpad(struct hda_codec * codec)11b317b032STakashi Iwai static bool is_thinkpad(struct hda_codec *codec)
12b317b032STakashi Iwai {
13c3a90058SLukas Wunner return (codec->core.subsystem_id >> 16 == 0x17aa) &&
142ecb704aSHui Wang (acpi_dev_found("LEN0068") || acpi_dev_found("LEN0268") ||
152ecb704aSHui Wang acpi_dev_found("IBM0068"));
16b317b032STakashi Iwai }
17b317b032STakashi Iwai
hda_fixup_thinkpad_acpi(struct hda_codec * codec,const struct hda_fixup * fix,int action)18b317b032STakashi Iwai static void hda_fixup_thinkpad_acpi(struct hda_codec *codec,
19b317b032STakashi Iwai const struct hda_fixup *fix, int action)
20b317b032STakashi Iwai {
21*e65bf997SJaroslav Kysela if (action == HDA_FIXUP_ACT_PRE_PROBE) {
22b317b032STakashi Iwai if (!is_thinkpad(codec))
23b317b032STakashi Iwai return;
248d3d1eceSTakashi Iwai snd_hda_gen_add_mute_led_cdev(codec, NULL);
258a503555STakashi Iwai snd_hda_gen_add_micmute_led_cdev(codec, NULL);
26b317b032STakashi Iwai }
27b317b032STakashi Iwai }
28b317b032STakashi Iwai
29b317b032STakashi Iwai #else /* CONFIG_THINKPAD_ACPI */
30b317b032STakashi Iwai
hda_fixup_thinkpad_acpi(struct hda_codec * codec,const struct hda_fixup * fix,int action)31b317b032STakashi Iwai static void hda_fixup_thinkpad_acpi(struct hda_codec *codec,
32b317b032STakashi Iwai const struct hda_fixup *fix, int action)
33b317b032STakashi Iwai {
34b317b032STakashi Iwai }
35b317b032STakashi Iwai
36b317b032STakashi Iwai #endif /* CONFIG_THINKPAD_ACPI */
37