summaryrefslogtreecommitdiffstats
path: root/sound/hda/codecs/helpers
diff options
context:
space:
mode:
Diffstat (limited to 'sound/hda/codecs/helpers')
-rw-r--r--sound/hda/codecs/helpers/hp_x360.c95
-rw-r--r--sound/hda/codecs/helpers/ideapad_hotkey_led.c36
-rw-r--r--sound/hda/codecs/helpers/ideapad_s740.c492
-rw-r--r--sound/hda/codecs/helpers/razer_blade16_2025.c820
-rw-r--r--sound/hda/codecs/helpers/thinkpad.c36
5 files changed, 1479 insertions, 0 deletions
diff --git a/sound/hda/codecs/helpers/hp_x360.c b/sound/hda/codecs/helpers/hp_x360.c
new file mode 100644
index 000000000..969542c57
--- /dev/null
+++ b/sound/hda/codecs/helpers/hp_x360.c
@@ -0,0 +1,95 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Fixes for HP X360 laptops with top B&O speakers
+ * to be included from codec driver
+ */
+
+static void alc295_fixup_hp_top_speakers(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+{
+ static const struct hda_pintbl pincfgs[] = {
+ { 0x17, 0x90170110 },
+ { }
+ };
+ static const struct coef_fw alc295_hp_speakers_coefs[] = {
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0000), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x003f), WRITE_COEF(0x28, 0x1000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0004), WRITE_COEF(0x28, 0x0600), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x006a), WRITE_COEF(0x28, 0x0006), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x006c), WRITE_COEF(0x28, 0xc0c0), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0008), WRITE_COEF(0x28, 0xb000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x002e), WRITE_COEF(0x28, 0x0800), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x006a), WRITE_COEF(0x28, 0x00c1), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x006c), WRITE_COEF(0x28, 0x0320), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0039), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x003b), WRITE_COEF(0x28, 0xffff), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x003c), WRITE_COEF(0x28, 0xffd0), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x003a), WRITE_COEF(0x28, 0x1dfe), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0080), WRITE_COEF(0x28, 0x0880), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x003a), WRITE_COEF(0x28, 0x0dfe), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0018), WRITE_COEF(0x28, 0x0219), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x006a), WRITE_COEF(0x28, 0x005d), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x006c), WRITE_COEF(0x28, 0x9142), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00c0), WRITE_COEF(0x28, 0x01ce), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00c1), WRITE_COEF(0x28, 0xed0c), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00c2), WRITE_COEF(0x28, 0x1c00), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00c3), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00c4), WRITE_COEF(0x28, 0x0200), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00c5), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00c6), WRITE_COEF(0x28, 0x0399), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00c7), WRITE_COEF(0x28, 0x2330), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00c8), WRITE_COEF(0x28, 0x1e5d), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00c9), WRITE_COEF(0x28, 0x6eff), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00ca), WRITE_COEF(0x28, 0x01c0), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00cb), WRITE_COEF(0x28, 0xed0c), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00cc), WRITE_COEF(0x28, 0x1c00), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00cd), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00ce), WRITE_COEF(0x28, 0x0200), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00cf), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00d0), WRITE_COEF(0x28, 0x0399), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00d1), WRITE_COEF(0x28, 0x2330), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00d2), WRITE_COEF(0x28, 0x1e5d), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x00d3), WRITE_COEF(0x28, 0x6eff), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0062), WRITE_COEF(0x28, 0x8000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0063), WRITE_COEF(0x28, 0x5f5f), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0064), WRITE_COEF(0x28, 0x1000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0065), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0066), WRITE_COEF(0x28, 0x4004), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0067), WRITE_COEF(0x28, 0x0802), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0068), WRITE_COEF(0x28, 0x890f), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0069), WRITE_COEF(0x28, 0xe021), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0070), WRITE_COEF(0x28, 0x8012), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0071), WRITE_COEF(0x28, 0x3450), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0072), WRITE_COEF(0x28, 0x0123), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0073), WRITE_COEF(0x28, 0x4543), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0074), WRITE_COEF(0x28, 0x2100), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0075), WRITE_COEF(0x28, 0x4321), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0076), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0050), WRITE_COEF(0x28, 0x8200), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x003a), WRITE_COEF(0x28, 0x1dfe), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0051), WRITE_COEF(0x28, 0x0707), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0052), WRITE_COEF(0x28, 0x4090), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x006a), WRITE_COEF(0x28, 0x0090), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x006c), WRITE_COEF(0x28, 0x721f), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0012), WRITE_COEF(0x28, 0xebeb), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x009e), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0060), WRITE_COEF(0x28, 0x2213), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x006a), WRITE_COEF(0x28, 0x0006), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x006c), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x003f), WRITE_COEF(0x28, 0x3000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0004), WRITE_COEF(0x28, 0x0500), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0040), WRITE_COEF(0x28, 0x800c), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0046), WRITE_COEF(0x28, 0xc22e), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x004b), WRITE_COEF(0x28, 0x0000), WRITE_COEF(0x29, 0xb024),
+ WRITE_COEF(0x24, 0x0012), WRITE_COEF(0x26, 0x0050), WRITE_COEF(0x28, 0x82ec), WRITE_COEF(0x29, 0xb024),
+ };
+
+ switch (action) {
+ case HDA_FIXUP_ACT_PRE_PROBE:
+ snd_hda_apply_pincfgs(codec, pincfgs);
+ alc295_fixup_disable_dac3(codec, fix, action);
+ break;
+ case HDA_FIXUP_ACT_INIT:
+ alc_process_coef_fw(codec, alc295_hp_speakers_coefs);
+ break;
+ }
+}
diff --git a/sound/hda/codecs/helpers/ideapad_hotkey_led.c b/sound/hda/codecs/helpers/ideapad_hotkey_led.c
new file mode 100644
index 000000000..c10d97964
--- /dev/null
+++ b/sound/hda/codecs/helpers/ideapad_hotkey_led.c
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Ideapad helper functions for Lenovo Ideapad LED control,
+ * It should be included from codec driver.
+ */
+
+#if IS_ENABLED(CONFIG_IDEAPAD_LAPTOP)
+
+#include <linux/acpi.h>
+#include <linux/leds.h>
+
+static bool is_ideapad(struct hda_codec *codec)
+{
+ return (codec->core.subsystem_id >> 16 == 0x17aa) &&
+ (acpi_dev_found("LHK2019") || acpi_dev_found("VPC2004"));
+}
+
+static void hda_fixup_ideapad_acpi(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+{
+ if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+ if (!is_ideapad(codec))
+ return;
+ snd_hda_gen_add_mute_led_cdev(codec, NULL);
+ snd_hda_gen_add_micmute_led_cdev(codec, NULL);
+ }
+}
+
+#else /* CONFIG_IDEAPAD_LAPTOP */
+
+static void hda_fixup_ideapad_acpi(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+{
+}
+
+#endif /* CONFIG_IDEAPAD_LAPTOP */
diff --git a/sound/hda/codecs/helpers/ideapad_s740.c b/sound/hda/codecs/helpers/ideapad_s740.c
new file mode 100644
index 000000000..564b9086e
--- /dev/null
+++ b/sound/hda/codecs/helpers/ideapad_s740.c
@@ -0,0 +1,492 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Fixes for Lenovo Ideapad S740, to be included from codec driver */
+
+static const struct hda_verb alc285_ideapad_s740_coefs[] = {
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x10 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0320 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0041 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0041 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x007f },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x007f },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x003c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0011 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x003c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0011 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x000c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x000c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x000f },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0042 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x000f },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0042 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0003 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0009 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0003 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0009 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x004c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x004c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001d },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x004e },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001d },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x004e },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001b },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001b },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0019 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0025 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0019 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0025 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0018 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0037 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0018 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0037 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0016 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0076 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0016 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0076 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0017 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0017 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0007 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0086 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0007 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0086 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0042 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x24 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0042 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x007f },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x007f },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x003c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0011 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x003c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0011 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x000c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x002a },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x000c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x002a },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x000f },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0046 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x000f },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0046 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0044 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0044 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0003 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0009 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0003 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0009 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x004c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x004c },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001b },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001b },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0019 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0025 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0019 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0025 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0018 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0037 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0018 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0037 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x001a },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0040 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0016 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0076 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0016 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0076 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0017 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0017 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0010 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0015 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0007 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0086 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0007 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0086 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0001 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x29 },
+{ 0x20, AC_VERB_SET_COEF_INDEX, 0x26 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0002 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0x0000 },
+{ 0x20, AC_VERB_SET_PROC_COEF, 0xb020 },
+{}
+};
+
+static void alc285_fixup_ideapad_s740_coef(struct hda_codec *codec,
+ const struct hda_fixup *fix,
+ int action)
+{
+ switch (action) {
+ case HDA_FIXUP_ACT_PRE_PROBE:
+ snd_hda_add_verbs(codec, alc285_ideapad_s740_coefs);
+ break;
+ }
+}
diff --git a/sound/hda/codecs/helpers/razer_blade16_2025.c b/sound/hda/codecs/helpers/razer_blade16_2025.c
new file mode 100644
index 000000000..1f2e06d8f
--- /dev/null
+++ b/sound/hda/codecs/helpers/razer_blade16_2025.c
@@ -0,0 +1,820 @@
+// SPDX-License-Identifier: GPL-2.0-or-later
+/*
+ * Razer Blade 16 (2025) external smart-amplifier programming and fixup,
+ * to be included from the codec driver.
+ *
+ * The internal speakers are driven by an external smart amplifier whose
+ * crossover, voicing and protection live in a DSP reached over a vendor
+ * coef mailbox on NID 0x20. These tables hold the programming captured
+ * from the Windows driver, reduced to the NID-0x20 traffic this machine
+ * needs (everything else the HDA parser rebuilds).
+ *
+ * Each entry is either a plain codec coef write or a mailbox write:
+ * strobe == 0: coef[addr] = lo
+ * strobe != 0: amp[addr] = (hi << 16) | lo, with the bank selected on
+ * port 0x89 and the write committed by the strobe opcode.
+ */
+
+struct alc298_razer_blade16_2025_op {
+ u16 bank; /* mailbox bank (port 0x89); unused for a plain coef */
+ u16 addr; /* mailbox register, or plain coef index */
+ u16 hi; /* mailbox high word; unused for a plain coef */
+ u16 lo; /* mailbox low word, or plain coef value */
+ u16 strobe; /* mailbox commit opcode; 0 marks a plain coef write */
+};
+
+/* program the external DSP at init; the amp is woken/parked separately */
+static const struct alc298_razer_blade16_2025_op alc298_razer_blade16_2025_amp_init[] = {
+ { 0x0000, 0xf102, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xf103, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xc000, 0x0000, 0x0001, 0xb031 },
+ { 0x0000, 0xea00, 0x0000, 0x0047, 0xb031 },
+ { 0x0000, 0xf20d, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xf212, 0x0000, 0x003e, 0xb031 },
+ { 0x0000, 0xc001, 0x0000, 0x0002, 0xb031 },
+ { 0x0000, 0xc003, 0x0000, 0x0022, 0xb031 },
+ { 0x0000, 0xc004, 0x0000, 0x0044, 0xb031 },
+ { 0x0000, 0xc005, 0x0000, 0x0044, 0xb031 },
+ { 0x0000, 0xc007, 0x0000, 0x0064, 0xb031 },
+ { 0x0000, 0xc00e, 0x0000, 0x00e7, 0xb031 },
+ { 0x0000, 0xf223, 0x0000, 0x007f, 0xb031 },
+ { 0x0000, 0xf224, 0x0000, 0x00db, 0xb031 },
+ { 0x0000, 0xf225, 0x0000, 0x00ee, 0xb031 },
+ { 0x0000, 0xf226, 0x0000, 0x003f, 0xb031 },
+ { 0x0000, 0xf227, 0x0000, 0x000f, 0xb031 },
+ { 0x0000, 0xf21a, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xf242, 0x0000, 0x003c, 0xb031 },
+ { 0x0000, 0xc120, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xc125, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xc321, 0x0000, 0x000b, 0xb031 },
+ { 0x0000, 0xc200, 0x0000, 0x00d8, 0xb031 },
+ { 0x0000, 0xc201, 0x0000, 0x0027, 0xb031 },
+ { 0x0000, 0xc202, 0x0000, 0x000f, 0xb031 },
+ { 0x0000, 0xc400, 0x0000, 0x000e, 0xb031 },
+ { 0x0000, 0xc401, 0x0000, 0x0043, 0xb031 },
+ { 0x0000, 0xc402, 0x0000, 0x00e0, 0xb031 },
+ { 0x0000, 0xc403, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xc404, 0x0000, 0x004c, 0xb031 },
+ { 0x0000, 0xc406, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xc407, 0x0000, 0x0002, 0xb031 },
+ { 0x0000, 0xc408, 0x0000, 0x003f, 0xb031 },
+ { 0x0000, 0xc300, 0x0000, 0x0001, 0xb031 },
+ { 0x0000, 0xc125, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xdf00, 0x0000, 0x0010, 0xb031 },
+ { 0x0000, 0xdf5f, 0x0000, 0x0001, 0xb031 },
+ { 0x0000, 0xdf60, 0x0000, 0x00a7, 0xb031 },
+ { 0x0000, 0xc203, 0x0000, 0x0084, 0xb031 },
+ { 0x0000, 0xc206, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xf10a, 0x0000, 0x000b, 0xb031 },
+ { 0x0000, 0xf10b, 0x0000, 0x004c, 0xb031 },
+ { 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
+ { 0x0000, 0xf105, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xf109, 0x0000, 0x00e0, 0xb031 },
+ { 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+ { 0x0000, 0xf104, 0x0000, 0x00f4, 0xb031 },
+ { 0x0000, 0xf105, 0x0000, 0x0004, 0xb031 },
+ { 0x0000, 0xf109, 0x0000, 0x0065, 0xb031 },
+ { 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+ { 0x0000, 0xf104, 0x0000, 0x00f7, 0xb031 },
+ { 0x0000, 0xf105, 0x0000, 0x0030, 0xb031 },
+ { 0x0000, 0xf109, 0x0000, 0x0006, 0xb031 },
+ { 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+ { 0x0000, 0xf104, 0x0000, 0x00f7, 0xb031 },
+ { 0x0000, 0xf105, 0x0000, 0x0031, 0xb031 },
+ { 0x0000, 0xf109, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xf10b, 0x0000, 0x005c, 0xb031 },
+ { 0x0000, 0xe706, 0x0000, 0x000f, 0xb031 },
+ { 0x0000, 0xe707, 0x0000, 0x0030, 0xb031 },
+ { 0x0000, 0xe806, 0x0000, 0x000f, 0xb031 },
+ { 0x0000, 0xe807, 0x0000, 0x0030, 0xb031 },
+ { 0x0000, 0xce04, 0x0000, 0x0002, 0xb031 },
+ { 0x0000, 0xce05, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xce06, 0x0000, 0x0031, 0xb031 },
+ { 0x0000, 0xce07, 0x0000, 0x00b4, 0xb031 },
+ { 0x0000, 0xcf04, 0x0000, 0x0002, 0xb031 },
+ { 0x0000, 0xcf05, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xcf06, 0x0000, 0x0031, 0xb031 },
+ { 0x0000, 0xcf07, 0x0000, 0x00b4, 0xb031 },
+ { 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+ { 0x0000, 0xc130, 0x0000, 0x0051, 0xb031 },
+ { 0x0000, 0xe000, 0x0000, 0x00a8, 0xb031 },
+ { 0x4100, 0x1888, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xc121, 0x0000, 0x000b, 0xb031 },
+ { 0x0000, 0xea00, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
+ { 0x0000, 0xca00, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xca02, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xca12, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xed00, 0x0000, 0x0090, 0xb031 },
+ { 0x0000, 0xcc2c, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcc2d, 0x0000, 0x000e, 0xb031 },
+ { 0x0000, 0xcc2e, 0x0000, 0x0076, 0xb031 },
+ { 0x0000, 0xcc2f, 0x0000, 0x0043, 0xb031 },
+ { 0x0000, 0xcd2c, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcd2d, 0x0000, 0x000e, 0xb031 },
+ { 0x0000, 0xcd2e, 0x0000, 0x0076, 0xb031 },
+ { 0x0000, 0xcd2f, 0x0000, 0x0043, 0xb031 },
+ { 0x0000, 0xcc24, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcc25, 0x0000, 0x0051, 0xb031 },
+ { 0x0000, 0xcc26, 0x0000, 0x00eb, 0xb031 },
+ { 0x0000, 0xcc27, 0x0000, 0x0085, 0xb031 },
+ { 0x0000, 0xcd24, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcd25, 0x0000, 0x0051, 0xb031 },
+ { 0x0000, 0xcd26, 0x0000, 0x00eb, 0xb031 },
+ { 0x0000, 0xcd27, 0x0000, 0x0085, 0xb031 },
+ { 0x0000, 0xcc20, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcc21, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcc22, 0x0000, 0x0043, 0xb031 },
+ { 0x0000, 0xcd20, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcd21, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcd22, 0x0000, 0x0043, 0xb031 },
+ { 0x0000, 0xcc16, 0x0000, 0x000f, 0xb031 },
+ { 0x0000, 0xcc17, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcd16, 0x0000, 0x000f, 0xb031 },
+ { 0x0000, 0xcd17, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcc29, 0x0000, 0x005d, 0xb031 },
+ { 0x0000, 0xcc2a, 0x0000, 0x00c0, 0xb031 },
+ { 0x0000, 0xcd29, 0x0000, 0x005d, 0xb031 },
+ { 0x0000, 0xcd2a, 0x0000, 0x00c0, 0xb031 },
+ { 0x0000, 0xcc31, 0x0000, 0x0020, 0xb031 },
+ { 0x0000, 0xcc32, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcc33, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcc34, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcd31, 0x0000, 0x0020, 0xb031 },
+ { 0x0000, 0xcd32, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcd33, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcd34, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcc36, 0x0000, 0x0079, 0xb031 },
+ { 0x0000, 0xcc37, 0x0000, 0x0099, 0xb031 },
+ { 0x0000, 0xcc38, 0x0000, 0x0099, 0xb031 },
+ { 0x0000, 0xcc39, 0x0000, 0x0099, 0xb031 },
+ { 0x0000, 0xcd36, 0x0000, 0x0079, 0xb031 },
+ { 0x0000, 0xcd37, 0x0000, 0x0099, 0xb031 },
+ { 0x0000, 0xcd38, 0x0000, 0x0099, 0xb031 },
+ { 0x0000, 0xcd39, 0x0000, 0x0099, 0xb031 },
+ { 0x0000, 0xcc09, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcc0a, 0x0000, 0x000a, 0xb031 },
+ { 0x0000, 0xcc0b, 0x0000, 0x007c, 0xb031 },
+ { 0x0000, 0xcc0c, 0x0000, 0x005b, 0xb031 },
+ { 0x0000, 0xcd09, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcd0a, 0x0000, 0x000a, 0xb031 },
+ { 0x0000, 0xcd0b, 0x0000, 0x007c, 0xb031 },
+ { 0x0000, 0xcd0c, 0x0000, 0x005b, 0xb031 },
+ { 0x0000, 0xcc0e, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcc0f, 0x0000, 0x0005, 0xb031 },
+ { 0x0000, 0xcc10, 0x0000, 0x003e, 0xb031 },
+ { 0x0000, 0xcc11, 0x0000, 0x002d, 0xb031 },
+ { 0x0000, 0xcd0e, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcd0f, 0x0000, 0x0005, 0xb031 },
+ { 0x0000, 0xcd10, 0x0000, 0x003e, 0xb031 },
+ { 0x0000, 0xcd11, 0x0000, 0x002d, 0xb031 },
+ { 0x0000, 0xccd6, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xccd7, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xcdd6, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcdd7, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xccd8, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xccd9, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xcdd8, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcdd9, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xccda, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xccdb, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xcdda, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xcddb, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xc320, 0x0000, 0x0020, 0xb031 },
+ { 0x0000, 0xc321, 0x0000, 0x000a, 0xb031 },
+ { 0x0000, 0xe604, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xdb00, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xdd00, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xdc19, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xdc1a, 0x0000, 0x006a, 0xb031 },
+ { 0x0000, 0xdc1b, 0x0000, 0x00aa, 0xb031 },
+ { 0x0000, 0xdc1c, 0x0000, 0x00ab, 0xb031 },
+ { 0x0000, 0xdc1d, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xdc1e, 0x0000, 0x0027, 0xb031 },
+ { 0x0000, 0xdc1f, 0x0000, 0x0062, 0xb031 },
+ { 0x0000, 0xdc20, 0x0000, 0x0076, 0xb031 },
+ { 0x0000, 0xde19, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xde1a, 0x0000, 0x006a, 0xb031 },
+ { 0x0000, 0xde1b, 0x0000, 0x00aa, 0xb031 },
+ { 0x0000, 0xde1c, 0x0000, 0x00ab, 0xb031 },
+ { 0x0000, 0xde1d, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xde1e, 0x0000, 0x0027, 0xb031 },
+ { 0x0000, 0xde1f, 0x0000, 0x0062, 0xb031 },
+ { 0x0000, 0xde20, 0x0000, 0x0076, 0xb031 },
+ { 0x0000, 0xdb32, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xdd32, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xdb33, 0x0000, 0x000a, 0xb031 },
+ { 0x0000, 0xdd33, 0x0000, 0x000a, 0xb031 },
+ { 0x0000, 0xdb34, 0x0000, 0x001a, 0xb031 },
+ { 0x0000, 0xdd34, 0x0000, 0x001a, 0xb031 },
+ { 0x0000, 0xdb15, 0x0000, 0x00ef, 0xb031 },
+ { 0x0000, 0xdd15, 0x0000, 0x00ef, 0xb031 },
+ { 0x0000, 0xdb17, 0x0000, 0x003f, 0xb031 },
+ { 0x0000, 0xdd17, 0x0000, 0x003f, 0xb031 },
+ { 0x0000, 0xdb94, 0x0000, 0x0070, 0xb031 },
+ { 0x0000, 0xdd94, 0x0000, 0x0070, 0xb031 },
+ { 0x0000, 0xdb19, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xdd19, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xc203, 0x0000, 0x001c, 0xb031 },
+ { 0x0000, 0xdb00, 0x0000, 0x004c, 0xb031 },
+ { 0x0000, 0xdb04, 0x0000, 0x0005, 0xb031 },
+ { 0x0000, 0xdb05, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xdd04, 0x0000, 0x0005, 0xb031 },
+ { 0x0000, 0xdd05, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xdbbb, 0x0000, 0x0009, 0xb031 },
+ { 0x0000, 0xdbbc, 0x0000, 0x004c, 0xb031 },
+ { 0x0000, 0xdbbd, 0x0000, 0x00f3, 0xb031 },
+ { 0x0000, 0xdbbe, 0x0000, 0x00cf, 0xb031 },
+ { 0x0000, 0xddbb, 0x0000, 0x0009, 0xb031 },
+ { 0x0000, 0xddbc, 0x0000, 0x004c, 0xb031 },
+ { 0x0000, 0xddbd, 0x0000, 0x00f3, 0xb031 },
+ { 0x0000, 0xddbe, 0x0000, 0x00cf, 0xb031 },
+ { 0x0000, 0xdb01, 0x0000, 0x0079, 0xb031 },
+ { 0x0000, 0xdd01, 0x0000, 0x0079, 0xb031 },
+ { 0x0000, 0xdb08, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xdd08, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xdc52, 0x0000, 0x00ef, 0xb031 },
+ { 0x0000, 0xde52, 0x0000, 0x00ef, 0xb031 },
+ { 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+ { 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+ { 0x0000, 0xdf0a, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xdf0b, 0x0000, 0x007f, 0xb031 },
+ { 0x0000, 0xc851, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xc951, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xdf01, 0x0000, 0x0073, 0xb031 },
+ { 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+ { 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
+ { 0x0000, 0xebcb, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xeb10, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xeb11, 0x0000, 0x00bb, 0xb031 },
+ { 0x0000, 0xeb12, 0x0000, 0x00ab, 0xb031 },
+ { 0x0000, 0xeb13, 0x0000, 0x0030, 0xb031 },
+ { 0x0000, 0xeb14, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xeb15, 0x0000, 0x004c, 0xb031 },
+ { 0x0000, 0xeb16, 0x0000, 0x0069, 0xb031 },
+ { 0x0000, 0xeb21, 0x0000, 0x0011, 0xb031 },
+ { 0x0000, 0xeb22, 0x0000, 0x00c2, 0xb031 },
+ { 0x0000, 0xeb23, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xeb24, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xeb25, 0x0000, 0x00bd, 0xb031 },
+ { 0x0000, 0xeb26, 0x0000, 0x0055, 0xb031 },
+ { 0x0000, 0xeb27, 0x0000, 0x00d0, 0xb031 },
+ { 0x0000, 0xeb28, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xeb29, 0x0000, 0x003c, 0xb031 },
+ { 0x0000, 0xeb2a, 0x0000, 0x0051, 0xb031 },
+ { 0x0000, 0xeb2b, 0x0000, 0x0018, 0xb031 },
+ { 0x0000, 0xeb30, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xeb31, 0x0000, 0x004f, 0xb031 },
+ { 0x0000, 0xeb32, 0x0000, 0x004a, 0xb031 },
+ { 0x0000, 0xeb33, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xeb34, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xeb35, 0x0000, 0x00bb, 0xb031 },
+ { 0x0000, 0xeb36, 0x0000, 0x0024, 0xb031 },
+ { 0x0000, 0xeb37, 0x0000, 0x0068, 0xb031 },
+ { 0x0000, 0xeb40, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xeb41, 0x0000, 0x00f5, 0xb031 },
+ { 0x0000, 0xeb42, 0x0000, 0x00f1, 0xb031 },
+ { 0x0000, 0xeb43, 0x0000, 0x00e8, 0xb031 },
+ { 0x0000, 0xeb44, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xeb45, 0x0000, 0x004f, 0xb031 },
+ { 0x0000, 0xeb46, 0x0000, 0x004a, 0xb031 },
+ { 0x0000, 0xeb47, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xeb48, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xeb49, 0x0000, 0x00c5, 0xb031 },
+ { 0x0000, 0xeb4a, 0x0000, 0x0032, 0xb031 },
+ { 0x0000, 0xeb4b, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xeb50, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xeb51, 0x0000, 0x008a, 0xb031 },
+ { 0x0000, 0xeb52, 0x0000, 0x00b4, 0xb031 },
+ { 0x0000, 0xeb53, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xeb54, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xeb55, 0x0000, 0x007d, 0xb031 },
+ { 0x0000, 0xeb56, 0x0000, 0x00d9, 0xb031 },
+ { 0x0000, 0xeb57, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xeb60, 0x0000, 0x0002, 0xb031 },
+ { 0x0000, 0xeb61, 0x0000, 0x00e7, 0xb031 },
+ { 0x0000, 0xeb62, 0x0000, 0x00b5, 0xb031 },
+ { 0x0000, 0xeb63, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xeb64, 0x0000, 0x00fa, 0xb031 },
+ { 0x0000, 0xeb65, 0x0000, 0x0086, 0xb031 },
+ { 0x0000, 0xeb66, 0x0000, 0x00a8, 0xb031 },
+ { 0x0000, 0xeb67, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xeb68, 0x0000, 0x0002, 0xb031 },
+ { 0x0000, 0xeb69, 0x0000, 0x009a, 0xb031 },
+ { 0x0000, 0xeb6a, 0x0000, 0x002f, 0xb031 },
+ { 0x0000, 0xeb6b, 0x0000, 0x0018, 0xb031 },
+ { 0x0000, 0xebb6, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xeb70, 0x0000, 0x00f5, 0xb031 },
+ { 0x0000, 0xeb71, 0x0000, 0x00e1, 0xb031 },
+ { 0x0000, 0xeb72, 0x0000, 0x0009, 0xb031 },
+ { 0x0000, 0xeb73, 0x0000, 0x00d0, 0xb031 },
+ { 0x0000, 0xeb74, 0x0000, 0x0006, 0xb031 },
+ { 0x0000, 0xeb75, 0x0000, 0x0050, 0xb031 },
+ { 0x0000, 0xeb76, 0x0000, 0x002c, 0xb031 },
+ { 0x0000, 0xeb77, 0x0000, 0x0050, 0xb031 },
+ { 0x0000, 0xeb80, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xeb81, 0x0000, 0x0028, 0xb031 },
+ { 0x0000, 0xeb82, 0x0000, 0x0016, 0xb031 },
+ { 0x0000, 0xeb83, 0x0000, 0x0028, 0xb031 },
+ { 0x0000, 0xeb84, 0x0000, 0x00f5, 0xb031 },
+ { 0x0000, 0xeb85, 0x0000, 0x00e1, 0xb031 },
+ { 0x0000, 0xeb86, 0x0000, 0x0009, 0xb031 },
+ { 0x0000, 0xeb87, 0x0000, 0x00d0, 0xb031 },
+ { 0x0000, 0xeb88, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xeb89, 0x0000, 0x0028, 0xb031 },
+ { 0x0000, 0xeb8a, 0x0000, 0x0016, 0xb031 },
+ { 0x0000, 0xeb8b, 0x0000, 0x0028, 0xb031 },
+ { 0x0000, 0xebb8, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xeb90, 0x0000, 0x00fc, 0xb031 },
+ { 0x0000, 0xeb91, 0x0000, 0x008b, 0xb031 },
+ { 0x0000, 0xeb92, 0x0000, 0x00bd, 0xb031 },
+ { 0x0000, 0xeb93, 0x0000, 0x0064, 0xb031 },
+ { 0x0000, 0xeb94, 0x0000, 0x0001, 0xb031 },
+ { 0x0000, 0xeb95, 0x0000, 0x0099, 0xb031 },
+ { 0x0000, 0xeb96, 0x0000, 0x00e7, 0xb031 },
+ { 0x0000, 0xeb97, 0x0000, 0x0094, 0xb031 },
+ { 0x0000, 0xeba0, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xeba1, 0x0000, 0x0091, 0xb031 },
+ { 0x0000, 0xeba2, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xeba3, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xeba4, 0x0000, 0x00f6, 0xb031 },
+ { 0x0000, 0xeba5, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xeba6, 0x0000, 0x0093, 0xb031 },
+ { 0x0000, 0xeba7, 0x0000, 0x0010, 0xb031 },
+ { 0x0000, 0xeba8, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xeba9, 0x0000, 0x0087, 0xb031 },
+ { 0x0000, 0xebaa, 0x0000, 0x0099, 0xb031 },
+ { 0x0000, 0xebab, 0x0000, 0x006c, 0xb031 },
+ { 0x0000, 0xebc3, 0x0000, 0x00ff, 0xb031 },
+ { 0x0000, 0xebc4, 0x0000, 0x00fc, 0xb031 },
+ { 0x0000, 0xeb00, 0x0000, 0x0005, 0xb031 },
+ { 0x0000, 0xeb01, 0x0000, 0x00a9, 0xb031 },
+ { 0x0000, 0xeb02, 0x0000, 0x00df, 0xb031 },
+ { 0x0000, 0xeb03, 0x0000, 0x007b, 0xb031 },
+ { 0x0000, 0xeb05, 0x0000, 0x0079, 0xb031 },
+ { 0x0000, 0xeb06, 0x0000, 0x005a, 0xb031 },
+ { 0x0000, 0xeb07, 0x0000, 0x0004, 0xb031 },
+ { 0x0000, 0xebc0, 0x0000, 0x00e3, 0xb031 },
+ { 0x0000, 0xd0cb, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xd0b0, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xd010, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd011, 0x0000, 0x0009, 0xb031 },
+ { 0x0000, 0xd012, 0x0000, 0x0092, 0xb031 },
+ { 0x0000, 0xd013, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd014, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xd015, 0x0000, 0x00f6, 0xb031 },
+ { 0x0000, 0xd016, 0x0000, 0x0072, 0xb031 },
+ { 0x0000, 0xd017, 0x0000, 0x00b0, 0xb031 },
+ { 0x0000, 0xd020, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xd021, 0x0000, 0x00fb, 0xb031 },
+ { 0x0000, 0xd022, 0x0000, 0x0037, 0xb031 },
+ { 0x0000, 0xd023, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd024, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd025, 0x0000, 0x0009, 0xb031 },
+ { 0x0000, 0xd026, 0x0000, 0x0090, 0xb031 },
+ { 0x0000, 0xd027, 0x0000, 0x0020, 0xb031 },
+ { 0x0000, 0xd028, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xd029, 0x0000, 0x00fb, 0xb031 },
+ { 0x0000, 0xd02a, 0x0000, 0x0037, 0xb031 },
+ { 0x0000, 0xd02b, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd0c3, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd0c4, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xd0c0, 0x0000, 0x00e3, 0xb031 },
+ { 0x0000, 0xce6a, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xce63, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xce64, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+ { 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+ { 0x0000, 0xdb04, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xdb05, 0x0000, 0x0006, 0xb031 },
+ { 0x0000, 0xcc00, 0x0000, 0x00c1, 0xb031 },
+ { 0x0000, 0xca02, 0x0000, 0x000f, 0xb031 },
+ { 0x0000, 0xca00, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xca62, 0x0000, 0x0077, 0xb031 },
+ { 0x0000, 0xca65, 0x0000, 0x0082, 0xb031 },
+ { 0x0000, 0xca68, 0x0000, 0x00c2, 0xb031 },
+ { 0x0000, 0xca75, 0x0000, 0x003a, 0xb031 },
+ { 0x0000, 0xca7b, 0x0000, 0x006f, 0xb031 },
+ { 0x0000, 0xca00, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xca02, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xc860, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xc861, 0x0000, 0x00e5, 0xb031 },
+ { 0x0000, 0xc862, 0x0000, 0x00eb, 0xb031 },
+ { 0x0000, 0xc863, 0x0000, 0x00c6, 0xb031 },
+ { 0x0000, 0xc864, 0x0000, 0x00ba, 0xb031 },
+ { 0x0000, 0xc865, 0x0000, 0x0061, 0xb031 },
+ { 0x0000, 0xc867, 0x0000, 0x0017, 0xb031 },
+ { 0x0000, 0xc868, 0x0000, 0x00ed, 0xb031 },
+ { 0x0000, 0xc869, 0x0000, 0x003c, 0xb031 },
+ { 0x0000, 0xc86a, 0x0000, 0x008a, 0xb031 },
+ { 0x0000, 0xc86b, 0x0000, 0x00e2, 0xb031 },
+ { 0x0000, 0xc875, 0x0000, 0x003a, 0xb031 },
+ { 0x0000, 0xc87b, 0x0000, 0x006f, 0xb031 },
+ { 0x0000, 0xc836, 0x0000, 0x00f9, 0xb031 },
+ { 0x0000, 0xc8a0, 0x0000, 0x00f1, 0xb031 },
+ { 0x0000, 0xc833, 0x0000, 0x000b, 0xb031 },
+ { 0x0000, 0xc834, 0x0000, 0x0002, 0xb031 },
+ { 0x0000, 0xc83f, 0x0000, 0x0014, 0xb031 },
+ { 0x0000, 0xc83e, 0x0000, 0x0094, 0xb031 },
+ { 0x0000, 0xc83a, 0x0000, 0x0076, 0xb031 },
+ { 0x0000, 0xc83b, 0x0000, 0x0089, 0xb031 },
+ { 0x0000, 0xc830, 0x0000, 0x0013, 0xb031 },
+ { 0x0000, 0xc826, 0x0000, 0x00d1, 0xb031 },
+ { 0x0000, 0xc890, 0x0000, 0x00f1, 0xb031 },
+ { 0x0000, 0xc823, 0x0000, 0x0010, 0xb031 },
+ { 0x0000, 0xc824, 0x0000, 0x0004, 0xb031 },
+ { 0x0000, 0xc82f, 0x0000, 0x0018, 0xb031 },
+ { 0x0000, 0xc82e, 0x0000, 0x0094, 0xb031 },
+ { 0x0000, 0xc820, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xc816, 0x0000, 0x00f9, 0xb031 },
+ { 0x0000, 0xc880, 0x0000, 0x00e1, 0xb031 },
+ { 0x0000, 0xc813, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xc814, 0x0000, 0x0001, 0xb031 },
+ { 0x0000, 0xc81f, 0x0000, 0x0014, 0xb031 },
+ { 0x0000, 0xc81e, 0x0000, 0x0094, 0xb031 },
+ { 0x0000, 0xc81a, 0x0000, 0x0066, 0xb031 },
+ { 0x0000, 0xc81b, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xc810, 0x0000, 0x000d, 0xb031 },
+ { 0x0000, 0xc846, 0x0000, 0x00f9, 0xb031 },
+ { 0x0000, 0xc8d0, 0x0000, 0x00f1, 0xb031 },
+ { 0x0000, 0xc844, 0x0000, 0x0001, 0xb031 },
+ { 0x0000, 0xc84f, 0x0000, 0x0014, 0xb031 },
+ { 0x0000, 0xc84e, 0x0000, 0x0094, 0xb031 },
+ { 0x0000, 0xc84a, 0x0000, 0x0026, 0xb031 },
+ { 0x0000, 0xc84b, 0x0000, 0x0056, 0xb031 },
+ { 0x0000, 0xc800, 0x0000, 0x00b0, 0xb031 },
+ { 0x0000, 0xc851, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xc500, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xc501, 0x0000, 0x0026, 0xb031 },
+ { 0x0000, 0xc502, 0x0000, 0x004a, 0xb031 },
+ { 0x0000, 0xc503, 0x0000, 0x0010, 0xb031 },
+ { 0x0000, 0xc504, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xc505, 0x0000, 0x00da, 0xb031 },
+ { 0x0000, 0xc506, 0x0000, 0x000e, 0xb031 },
+ { 0x0000, 0xc507, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xc510, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xc511, 0x0000, 0x00da, 0xb031 },
+ { 0x0000, 0xc512, 0x0000, 0x000e, 0xb031 },
+ { 0x0000, 0xc513, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xc514, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xc515, 0x0000, 0x0026, 0xb031 },
+ { 0x0000, 0xc516, 0x0000, 0x004a, 0xb031 },
+ { 0x0000, 0xc517, 0x0000, 0x0010, 0xb031 },
+ { 0x0000, 0xc518, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xc541, 0x0000, 0x0030, 0xb031 },
+ { 0x0000, 0xd250, 0x0000, 0x0087, 0xb031 },
+ { 0x0000, 0xd251, 0x0000, 0x0030, 0xb031 },
+ { 0x0000, 0xd264, 0x0000, 0x00c0, 0xb031 },
+ { 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+ { 0x0000, 0xf800, 0x0000, 0x0020, 0xb031 },
+ { 0x0000, 0xecb0, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xec10, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xec11, 0x0000, 0x00bb, 0xb031 },
+ { 0x0000, 0xec12, 0x0000, 0x00ab, 0xb031 },
+ { 0x0000, 0xec13, 0x0000, 0x0030, 0xb031 },
+ { 0x0000, 0xec14, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xec15, 0x0000, 0x004c, 0xb031 },
+ { 0x0000, 0xec16, 0x0000, 0x0069, 0xb031 },
+ { 0x0000, 0xec21, 0x0000, 0x0011, 0xb031 },
+ { 0x0000, 0xec22, 0x0000, 0x00c2, 0xb031 },
+ { 0x0000, 0xec23, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xec24, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xec25, 0x0000, 0x00bd, 0xb031 },
+ { 0x0000, 0xec26, 0x0000, 0x0055, 0xb031 },
+ { 0x0000, 0xec27, 0x0000, 0x00d0, 0xb031 },
+ { 0x0000, 0xec28, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xec29, 0x0000, 0x003c, 0xb031 },
+ { 0x0000, 0xec2a, 0x0000, 0x0051, 0xb031 },
+ { 0x0000, 0xec2b, 0x0000, 0x0018, 0xb031 },
+ { 0x0000, 0xecb2, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xec30, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xec31, 0x0000, 0x004f, 0xb031 },
+ { 0x0000, 0xec32, 0x0000, 0x004a, 0xb031 },
+ { 0x0000, 0xec33, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xec34, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xec35, 0x0000, 0x00bb, 0xb031 },
+ { 0x0000, 0xec36, 0x0000, 0x0024, 0xb031 },
+ { 0x0000, 0xec37, 0x0000, 0x0068, 0xb031 },
+ { 0x0000, 0xec40, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xec41, 0x0000, 0x00f5, 0xb031 },
+ { 0x0000, 0xec42, 0x0000, 0x00f1, 0xb031 },
+ { 0x0000, 0xec43, 0x0000, 0x00e8, 0xb031 },
+ { 0x0000, 0xec44, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xec45, 0x0000, 0x004f, 0xb031 },
+ { 0x0000, 0xec46, 0x0000, 0x004a, 0xb031 },
+ { 0x0000, 0xec47, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xec48, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xec49, 0x0000, 0x00c5, 0xb031 },
+ { 0x0000, 0xec4a, 0x0000, 0x0032, 0xb031 },
+ { 0x0000, 0xec4b, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xecb4, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xec50, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xec51, 0x0000, 0x008a, 0xb031 },
+ { 0x0000, 0xec52, 0x0000, 0x00b4, 0xb031 },
+ { 0x0000, 0xec53, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xec54, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xec55, 0x0000, 0x007d, 0xb031 },
+ { 0x0000, 0xec56, 0x0000, 0x00d9, 0xb031 },
+ { 0x0000, 0xec57, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xec60, 0x0000, 0x0002, 0xb031 },
+ { 0x0000, 0xec61, 0x0000, 0x00e7, 0xb031 },
+ { 0x0000, 0xec62, 0x0000, 0x00b5, 0xb031 },
+ { 0x0000, 0xec63, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xec64, 0x0000, 0x00fa, 0xb031 },
+ { 0x0000, 0xec65, 0x0000, 0x0086, 0xb031 },
+ { 0x0000, 0xec66, 0x0000, 0x00a8, 0xb031 },
+ { 0x0000, 0xec67, 0x0000, 0x0040, 0xb031 },
+ { 0x0000, 0xec68, 0x0000, 0x0002, 0xb031 },
+ { 0x0000, 0xec69, 0x0000, 0x009a, 0xb031 },
+ { 0x0000, 0xec6a, 0x0000, 0x002f, 0xb031 },
+ { 0x0000, 0xec6b, 0x0000, 0x0018, 0xb031 },
+ { 0x0000, 0xecb6, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xec70, 0x0000, 0x00f5, 0xb031 },
+ { 0x0000, 0xec71, 0x0000, 0x00e1, 0xb031 },
+ { 0x0000, 0xec72, 0x0000, 0x0009, 0xb031 },
+ { 0x0000, 0xec73, 0x0000, 0x00d0, 0xb031 },
+ { 0x0000, 0xec74, 0x0000, 0x0006, 0xb031 },
+ { 0x0000, 0xec75, 0x0000, 0x0050, 0xb031 },
+ { 0x0000, 0xec76, 0x0000, 0x002c, 0xb031 },
+ { 0x0000, 0xec77, 0x0000, 0x0050, 0xb031 },
+ { 0x0000, 0xec80, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xec81, 0x0000, 0x0028, 0xb031 },
+ { 0x0000, 0xec82, 0x0000, 0x0016, 0xb031 },
+ { 0x0000, 0xec83, 0x0000, 0x0028, 0xb031 },
+ { 0x0000, 0xec84, 0x0000, 0x00f5, 0xb031 },
+ { 0x0000, 0xec85, 0x0000, 0x00e1, 0xb031 },
+ { 0x0000, 0xec86, 0x0000, 0x0009, 0xb031 },
+ { 0x0000, 0xec87, 0x0000, 0x00d0, 0xb031 },
+ { 0x0000, 0xec88, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xec89, 0x0000, 0x0028, 0xb031 },
+ { 0x0000, 0xec8a, 0x0000, 0x0016, 0xb031 },
+ { 0x0000, 0xec8b, 0x0000, 0x0028, 0xb031 },
+ { 0x0000, 0xecb8, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xec90, 0x0000, 0x00fc, 0xb031 },
+ { 0x0000, 0xec91, 0x0000, 0x008b, 0xb031 },
+ { 0x0000, 0xec92, 0x0000, 0x00bd, 0xb031 },
+ { 0x0000, 0xec93, 0x0000, 0x0064, 0xb031 },
+ { 0x0000, 0xec94, 0x0000, 0x0001, 0xb031 },
+ { 0x0000, 0xec95, 0x0000, 0x0099, 0xb031 },
+ { 0x0000, 0xec96, 0x0000, 0x00e7, 0xb031 },
+ { 0x0000, 0xec97, 0x0000, 0x0094, 0xb031 },
+ { 0x0000, 0xeca0, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xeca1, 0x0000, 0x0091, 0xb031 },
+ { 0x0000, 0xeca2, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xeca3, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xeca4, 0x0000, 0x00f6, 0xb031 },
+ { 0x0000, 0xeca5, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xeca6, 0x0000, 0x0093, 0xb031 },
+ { 0x0000, 0xeca7, 0x0000, 0x0010, 0xb031 },
+ { 0x0000, 0xeca8, 0x0000, 0x0003, 0xb031 },
+ { 0x0000, 0xeca9, 0x0000, 0x0087, 0xb031 },
+ { 0x0000, 0xecaa, 0x0000, 0x0099, 0xb031 },
+ { 0x0000, 0xecab, 0x0000, 0x006c, 0xb031 },
+ { 0x0000, 0xebc3, 0x0000, 0x00ff, 0xb031 },
+ { 0x0000, 0xebc4, 0x0000, 0x00fc, 0xb031 },
+ { 0x0000, 0xec00, 0x0000, 0x0005, 0xb031 },
+ { 0x0000, 0xec01, 0x0000, 0x00a9, 0xb031 },
+ { 0x0000, 0xec02, 0x0000, 0x00df, 0xb031 },
+ { 0x0000, 0xec03, 0x0000, 0x007b, 0xb031 },
+ { 0x0000, 0xec05, 0x0000, 0x0079, 0xb031 },
+ { 0x0000, 0xec06, 0x0000, 0x005a, 0xb031 },
+ { 0x0000, 0xec07, 0x0000, 0x0004, 0xb031 },
+ { 0x0000, 0xebc0, 0x0000, 0x00e3, 0xb031 },
+ { 0x0000, 0xd1b0, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xd110, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd111, 0x0000, 0x0009, 0xb031 },
+ { 0x0000, 0xd112, 0x0000, 0x0092, 0xb031 },
+ { 0x0000, 0xd113, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd114, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xd115, 0x0000, 0x00f6, 0xb031 },
+ { 0x0000, 0xd116, 0x0000, 0x0072, 0xb031 },
+ { 0x0000, 0xd117, 0x0000, 0x00b0, 0xb031 },
+ { 0x0000, 0xd120, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xd121, 0x0000, 0x00fb, 0xb031 },
+ { 0x0000, 0xd122, 0x0000, 0x0037, 0xb031 },
+ { 0x0000, 0xd123, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd124, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd125, 0x0000, 0x0009, 0xb031 },
+ { 0x0000, 0xd126, 0x0000, 0x0090, 0xb031 },
+ { 0x0000, 0xd127, 0x0000, 0x0020, 0xb031 },
+ { 0x0000, 0xd128, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xd129, 0x0000, 0x00fb, 0xb031 },
+ { 0x0000, 0xd12a, 0x0000, 0x0037, 0xb031 },
+ { 0x0000, 0xd12b, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd0c3, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd0c4, 0x0000, 0x000c, 0xb031 },
+ { 0x0000, 0xd0c0, 0x0000, 0x00e3, 0xb031 },
+ { 0x0000, 0xce63, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xce64, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+ { 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+ { 0x0000, 0xdd04, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xdd05, 0x0000, 0x0006, 0xb031 },
+ { 0x0000, 0xca12, 0x0000, 0x000f, 0xb031 },
+ { 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xca82, 0x0000, 0x0077, 0xb031 },
+ { 0x0000, 0xca85, 0x0000, 0x0082, 0xb031 },
+ { 0x0000, 0xca88, 0x0000, 0x00c2, 0xb031 },
+ { 0x0000, 0xca95, 0x0000, 0x003a, 0xb031 },
+ { 0x0000, 0xca9b, 0x0000, 0x006f, 0xb031 },
+ { 0x0000, 0xca10, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xca12, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xc960, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xc961, 0x0000, 0x00e5, 0xb031 },
+ { 0x0000, 0xc962, 0x0000, 0x00eb, 0xb031 },
+ { 0x0000, 0xc963, 0x0000, 0x00c6, 0xb031 },
+ { 0x0000, 0xc964, 0x0000, 0x00ba, 0xb031 },
+ { 0x0000, 0xc965, 0x0000, 0x0061, 0xb031 },
+ { 0x0000, 0xc967, 0x0000, 0x0017, 0xb031 },
+ { 0x0000, 0xc968, 0x0000, 0x00ed, 0xb031 },
+ { 0x0000, 0xc969, 0x0000, 0x003c, 0xb031 },
+ { 0x0000, 0xc96a, 0x0000, 0x008a, 0xb031 },
+ { 0x0000, 0xc96b, 0x0000, 0x00e2, 0xb031 },
+ { 0x0000, 0xc975, 0x0000, 0x003a, 0xb031 },
+ { 0x0000, 0xc97b, 0x0000, 0x006f, 0xb031 },
+ { 0x0000, 0xc936, 0x0000, 0x00f9, 0xb031 },
+ { 0x0000, 0xc9a0, 0x0000, 0x00f1, 0xb031 },
+ { 0x0000, 0xc933, 0x0000, 0x000b, 0xb031 },
+ { 0x0000, 0xc934, 0x0000, 0x0002, 0xb031 },
+ { 0x0000, 0xc93f, 0x0000, 0x0014, 0xb031 },
+ { 0x0000, 0xc93e, 0x0000, 0x0094, 0xb031 },
+ { 0x0000, 0xc93a, 0x0000, 0x0076, 0xb031 },
+ { 0x0000, 0xc93b, 0x0000, 0x0089, 0xb031 },
+ { 0x0000, 0xc930, 0x0000, 0x0013, 0xb031 },
+ { 0x0000, 0xc926, 0x0000, 0x00d1, 0xb031 },
+ { 0x0000, 0xc990, 0x0000, 0x00f1, 0xb031 },
+ { 0x0000, 0xc923, 0x0000, 0x0010, 0xb031 },
+ { 0x0000, 0xc924, 0x0000, 0x0004, 0xb031 },
+ { 0x0000, 0xc92f, 0x0000, 0x0018, 0xb031 },
+ { 0x0000, 0xc92e, 0x0000, 0x0094, 0xb031 },
+ { 0x0000, 0xc920, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xc916, 0x0000, 0x00f9, 0xb031 },
+ { 0x0000, 0xc980, 0x0000, 0x00e1, 0xb031 },
+ { 0x0000, 0xc913, 0x0000, 0x0000, 0xb031 },
+ { 0x0000, 0xc914, 0x0000, 0x0001, 0xb031 },
+ { 0x0000, 0xc91f, 0x0000, 0x0014, 0xb031 },
+ { 0x0000, 0xc91e, 0x0000, 0x0094, 0xb031 },
+ { 0x0000, 0xc91a, 0x0000, 0x0066, 0xb031 },
+ { 0x0000, 0xc91b, 0x0000, 0x0078, 0xb031 },
+ { 0x0000, 0xc910, 0x0000, 0x000d, 0xb031 },
+ { 0x0000, 0xc946, 0x0000, 0x00f9, 0xb031 },
+ { 0x0000, 0xc9d0, 0x0000, 0x00f1, 0xb031 },
+ { 0x0000, 0xc944, 0x0000, 0x0001, 0xb031 },
+ { 0x0000, 0xc94f, 0x0000, 0x0014, 0xb031 },
+ { 0x0000, 0xc94e, 0x0000, 0x0094, 0xb031 },
+ { 0x0000, 0xc94a, 0x0000, 0x0026, 0xb031 },
+ { 0x0000, 0xc94b, 0x0000, 0x0056, 0xb031 },
+ { 0x0000, 0xc951, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xc600, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xc601, 0x0000, 0x0026, 0xb031 },
+ { 0x0000, 0xc602, 0x0000, 0x004a, 0xb031 },
+ { 0x0000, 0xc603, 0x0000, 0x0010, 0xb031 },
+ { 0x0000, 0xc604, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xc605, 0x0000, 0x00da, 0xb031 },
+ { 0x0000, 0xc606, 0x0000, 0x000e, 0xb031 },
+ { 0x0000, 0xc607, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xc610, 0x0000, 0x0007, 0xb031 },
+ { 0x0000, 0xc611, 0x0000, 0x00da, 0xb031 },
+ { 0x0000, 0xc612, 0x0000, 0x000e, 0xb031 },
+ { 0x0000, 0xc613, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xc614, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xc615, 0x0000, 0x0026, 0xb031 },
+ { 0x0000, 0xc616, 0x0000, 0x004a, 0xb031 },
+ { 0x0000, 0xc617, 0x0000, 0x0010, 0xb031 },
+ { 0x0000, 0xc618, 0x0000, 0x0008, 0xb031 },
+ { 0x0000, 0xc541, 0x0000, 0x0030, 0xb031 },
+ { 0x0000, 0xc802, 0x0000, 0x00d2, 0xb031 },
+ { 0x0000, 0xc902, 0x0000, 0x00d2, 0xb031 },
+ { 0x0000, 0xc800, 0x0000, 0x00f0, 0xb031 },
+ { 0x0000, 0xd250, 0x0000, 0x0087, 0xb031 },
+ { 0x0000, 0xd252, 0x0000, 0x0030, 0xb031 },
+ { 0x0000, 0xd264, 0x0000, 0x00c0, 0xb031 },
+ { 0x0000, 0xce60, 0x0000, 0x00e3, 0xb031 },
+ { 0x0000, 0xdf00, 0x0000, 0x0010, 0xb031 },
+ { 0x0000, 0xdbb5, 0x0041, 0xd27f, 0xb037 },
+ { 0x0000, 0xddb5, 0x0040, 0x6e3b, 0xb037 },
+ { 0x0000, 0xdb93, 0x0000, 0x009e, 0xb033 },
+ { 0x0000, 0xdd93, 0x0000, 0x009e, 0xb033 },
+ { 0x0000, 0xdb12, 0x0000, 0x00c0, 0xb031 },
+ { 0x0000, 0xdd12, 0x0000, 0x00c0, 0xb031 },
+ { 0x0000, 0xdb08, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xdd08, 0x0000, 0x0080, 0xb031 },
+ { 0x0000, 0xdb00, 0x0000, 0x00cc, 0xb031 },
+ { 0x0000, 0xc203, 0x0000, 0x009c, 0xb031 },
+ { 0x0000, 0x0010, 0x0000, 0x0f21, 0x0000 },
+};
+
+/* wake the amp (ea00=0x43, c121=0x0b, f109=0xe0) */
+static const struct alc298_razer_blade16_2025_op alc298_razer_blade16_2025_amp_wake[] = {
+ { 0x0000, 0xea00, 0x0000, 0x0043, 0xb031 },
+ { 0x0000, 0xc121, 0x0000, 0x000b, 0xb031 },
+ { 0x0000, 0xf109, 0x0000, 0x00e0, 0xb031 },
+};
+
+/* park the amp (ea00=0x47, c121=0x0a, f109=0xa0) */
+static const struct alc298_razer_blade16_2025_op alc298_razer_blade16_2025_amp_sleep[] = {
+ { 0x0000, 0xea00, 0x0000, 0x0047, 0xb031 },
+ { 0x0000, 0xc121, 0x0000, 0x000a, 0xb031 },
+ { 0x0000, 0xf109, 0x0000, 0x00a0, 0xb031 },
+};
+
+/*
+ * Razer Blade 16 (2025): Realtek ALC298 driving an external smart amp.
+ * Crossover, voicing and speaker protection live in an external DSP
+ * reached over a vendor-coef mailbox on NID 0x20; the captured DSP
+ * programming is in the tables above. NID 0x14, the BIOS-disabled
+ * tweeter pin, is re-exposed via a pin-config override so the parser
+ * drives it as a normal internal speaker (shared volume/mute, auto-mute
+ * on headphone insertion).
+ *
+ * alc298_razer_blade16_2025_apply() runs one op-table: a plain coef write
+ * (strobe == 0) goes through alc_write_coef_idx(), while a mailbox op
+ * selects a bank and streams four PROC_COEF words (addr/hi/lo/commit)
+ * into a single coef index (0x23) on NID 0x20 to reach the external DSP
+ * -- that one-index/many-words form is why it cannot be expressed as an
+ * alc_process_coef_fw() table (one value per index).
+ */
+static void alc298_razer_blade16_2025_apply(struct hda_codec *codec,
+ const struct alc298_razer_blade16_2025_op *seq,
+ int num)
+{
+ int i;
+
+ for (i = 0; i < num; i++) {
+ if (!seq[i].strobe) {
+ alc_write_coef_idx(codec, seq[i].addr, seq[i].lo);
+ continue;
+ }
+ alc_write_coef_idx(codec, 0x89, seq[i].bank);
+ snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_COEF_INDEX, 0x23);
+ snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].addr);
+ snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].hi);
+ snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].lo);
+ snd_hda_codec_write(codec, 0x20, 0, AC_VERB_SET_PROC_COEF, seq[i].strobe);
+ }
+}
+
+static void alc298_razer_blade16_2025_pcm_hook(struct hda_pcm_stream *hinfo,
+ struct hda_codec *codec,
+ struct snd_pcm_substream *substream,
+ int action)
+{
+ /* power the external amp only while a stream is running */
+ switch (action) {
+ case HDA_GEN_PCM_ACT_PREPARE:
+ alc298_razer_blade16_2025_apply(codec, alc298_razer_blade16_2025_amp_wake,
+ ARRAY_SIZE(alc298_razer_blade16_2025_amp_wake));
+ break;
+ case HDA_GEN_PCM_ACT_CLEANUP:
+ alc298_razer_blade16_2025_apply(codec, alc298_razer_blade16_2025_amp_sleep,
+ ARRAY_SIZE(alc298_razer_blade16_2025_amp_sleep));
+ break;
+ }
+}
+
+static void alc298_fixup_razer_blade16_2025(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+{
+ /*
+ * Pin every output to a fixed converter so the routing does not
+ * rely on the generic parser's DAC-allocation heuristics: without
+ * a fixed assignment the parser brings up only one speaker pin and
+ * leaves the other silent, and the allocation could change between
+ * kernel versions. Both speaker pins share DAC 0x03 through mixer
+ * 0x0d: that is the only converter that drives the woofer (NID
+ * 0x17) on this machine -- feeding it from DAC 0x02 or the digital
+ * converter 0x06 leaves the woofer silent. Both pins carry the
+ * same stereo stream and the external amp does the crossover.
+ * Headphone NID 0x21 keeps DAC 0x02.
+ */
+ static const hda_nid_t preferred_pairs[] = {
+ 0x21, 0x02,
+ 0x14, 0x03,
+ 0x17, 0x03,
+ 0
+ };
+ struct alc_spec *spec = codec->spec;
+
+ switch (action) {
+ case HDA_FIXUP_ACT_PRE_PROBE:
+ spec->gen.preferred_dacs = preferred_pairs;
+ break;
+ case HDA_FIXUP_ACT_PROBE:
+ spec->gen.pcm_playback_hook = alc298_razer_blade16_2025_pcm_hook;
+ break;
+ case HDA_FIXUP_ACT_INIT:
+ /*
+ * Wake the amp, program its DSP at boot and on resume, then
+ * park it. It is woken again for playback and parked
+ * afterwards from the pcm_playback_hook.
+ */
+ alc298_razer_blade16_2025_apply(codec, alc298_razer_blade16_2025_amp_wake,
+ ARRAY_SIZE(alc298_razer_blade16_2025_amp_wake));
+ alc298_razer_blade16_2025_apply(codec, alc298_razer_blade16_2025_amp_init,
+ ARRAY_SIZE(alc298_razer_blade16_2025_amp_init));
+ alc298_razer_blade16_2025_apply(codec, alc298_razer_blade16_2025_amp_sleep,
+ ARRAY_SIZE(alc298_razer_blade16_2025_amp_sleep));
+ break;
+ }
+}
diff --git a/sound/hda/codecs/helpers/thinkpad.c b/sound/hda/codecs/helpers/thinkpad.c
new file mode 100644
index 000000000..de4d8deed
--- /dev/null
+++ b/sound/hda/codecs/helpers/thinkpad.c
@@ -0,0 +1,36 @@
+// SPDX-License-Identifier: GPL-2.0
+/* Helper functions for Thinkpad LED control;
+ * to be included from codec driver
+ */
+
+#if IS_ENABLED(CONFIG_THINKPAD_ACPI)
+
+#include <linux/acpi.h>
+#include <linux/leds.h>
+
+static bool is_thinkpad(struct hda_codec *codec)
+{
+ return (codec->core.subsystem_id >> 16 == 0x17aa) &&
+ (acpi_dev_found("LEN0068") || acpi_dev_found("LEN0268") ||
+ acpi_dev_found("IBM0068"));
+}
+
+static void hda_fixup_thinkpad_acpi(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+{
+ if (action == HDA_FIXUP_ACT_PRE_PROBE) {
+ if (!is_thinkpad(codec))
+ return;
+ snd_hda_gen_add_mute_led_cdev(codec, NULL);
+ snd_hda_gen_add_micmute_led_cdev(codec, NULL);
+ }
+}
+
+#else /* CONFIG_THINKPAD_ACPI */
+
+static void hda_fixup_thinkpad_acpi(struct hda_codec *codec,
+ const struct hda_fixup *fix, int action)
+{
+}
+
+#endif /* CONFIG_THINKPAD_ACPI */