summaryrefslogtreecommitdiff
path: root/kernel/drv/oss_hdaudio/hdaudio_codecids.h
diff options
context:
space:
mode:
authorIgor Pashev <pashev.igor@gmail.com>2013-05-03 21:08:42 +0400
committerIgor Pashev <pashev.igor@gmail.com>2013-05-03 21:08:42 +0400
commit1058def8e7827e56ce4a70afb4aeacb5dc44148f (patch)
tree4495d23e7b54ab5700e3839081e797c1eafe0db9 /kernel/drv/oss_hdaudio/hdaudio_codecids.h
downloadoss4-upstream/4.2-build2006.tar.gz
Imported Upstream version 4.2-build2006upstream/4.2-build2006upstream
Diffstat (limited to 'kernel/drv/oss_hdaudio/hdaudio_codecids.h')
-rw-r--r--kernel/drv/oss_hdaudio/hdaudio_codecids.h1154
1 files changed, 1154 insertions, 0 deletions
diff --git a/kernel/drv/oss_hdaudio/hdaudio_codecids.h b/kernel/drv/oss_hdaudio/hdaudio_codecids.h
new file mode 100644
index 0000000..22e6c70
--- /dev/null
+++ b/kernel/drv/oss_hdaudio/hdaudio_codecids.h
@@ -0,0 +1,1154 @@
+/*
+ * Purpose: Definitions for HDaudio codec chips known by OSS.
+ */
+/*
+ *
+ * This file is part of Open Sound System.
+ *
+ * Copyright (C) 4Front Technologies 1996-2008.
+ *
+ * This this source file is released under GPL v2 license (no other versions).
+ * See the COPYING file included in the main directory of this source
+ * distribution for the license terms and conditions.
+ *
+ */
+
+/*
+ * NULL mixer init function. Used to disable mixer creation for given codec.
+ */
+static int NULL_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group) { return 0;}
+
+struct codec_desc
+{
+ unsigned int id; /* Codec id (however subdevice ID in the subdevices[] table) */
+ char *name;
+ unsigned long flags;
+#define VF_NONE 0x00000000
+#define VF_ALC88X_HACK 0x00000001 /* ALC88x requires special handling for
+S/PDIF */
+#define VF_VAIO_HACK 0x00000002 /* VAIO STAC9872 requires special
+handling for headphone DAC */
+#define VF_SI3055_HACK 0x00000004 /* Si3055 modem requires manual endpoint
+setuping and rate and ioctl hacks. */
+ char **remap;
+
+ /*
+ * Order of the output converter (DAC) widgets in multi channel mode.
+ * If left to 0 then 0x76543210 (sequential order) is assumed. Some
+ * motherboards are known to use their own channel ordering which can be
+ * fixed using this approach.
+ */
+ unsigned int multich_map;
+ hda_mixer_init_func mixer_init;
+ unsigned int main_id; /* In the subdevices[] table this is used for the codec ID */
+ unsigned int pci_subdevice; /* PCI subdevice ID of the controller (subdevices[]) */
+};
+
+
+/*
+ * Meaningful widget naming schemes for some known codecs.
+ * The list is terminated by a NULL string. An empty string
+ * (EMPTY_STR) means that the automatically selected name will be used.
+ *
+ * Define EMPTY_STR as a pointer to a common "" variable to conserve space.
+ */
+
+static const char hda_empty_string[] = "";
+#define EMPTY_STR hda_empty_string
+
+static const char *alc880remap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 1 */
+ "front", /* 2 */
+ "rear", /* 3 */
+ "center/LFE", /* 4 */
+ "side", /* 5 */
+ "spdif-out", /* 6 */
+ "rec1", /* 7 */
+ "rec2", /* 8 */
+ "rec3", /* 9 */
+ "spdif-in", /* 10 */
+ "inputmix", /* 11 */
+ "front", /* 12 */
+ "rear", /* 13 */
+ "center/LFE", /* 14 */
+ "side", /* 15 */
+ "source-a", /* 16 */
+ "source-b", /* 17 */
+ "source-c", /* 18 */
+ "source-d", /* 19 */
+ EMPTY_STR, /* 20 */
+ EMPTY_STR, /* 21 */
+ EMPTY_STR, /* 22 */
+ EMPTY_STR, /* 23 */
+ EMPTY_STR, /* 24 */
+ EMPTY_STR, /* 25 */
+ EMPTY_STR, /* 26 */
+ EMPTY_STR, /* 27 */
+ EMPTY_STR, /* 28 */
+ EMPTY_STR, /* 29 */
+ EMPTY_STR, /* 30 */
+ EMPTY_STR, /* 31 */
+ EMPTY_STR, /* 32 */
+ EMPTY_STR, /* 33 */
+ EMPTY_STR, /* 34 */
+ EMPTY_STR, /* 35 */
+ EMPTY_STR, /* 36 */
+ "fp-front", /* 37 */
+ NULL
+};
+
+static const char *alc883remap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 1 */
+ "front", /* 2 */
+ "rear", /* 3 */
+ "center/LFE", /* 4 */
+ "side", /* 5 */
+ "spdif-out", /* 6 */
+ EMPTY_STR, /* 7 */
+ "rec1", /* 8 */
+ "rec2", /* 9 */
+ "spdif-in", /* a */
+ "input-mix", /* b */
+ "front", /* c */
+ "rear", /* d */
+ "center/LFE", /* e */
+ "side", /* f */
+ EMPTY_STR, /* 10 */
+ EMPTY_STR, /* 11 */
+ EMPTY_STR, /* 12 */
+ EMPTY_STR, /* 13 */
+ EMPTY_STR, /* 14 */
+ EMPTY_STR, /* 15 */
+ EMPTY_STR, /* 16 */
+ EMPTY_STR, /* 17 */
+ EMPTY_STR, /* 18 */
+ EMPTY_STR, /* 19 */
+ EMPTY_STR, /* 1a */
+ EMPTY_STR, /* 1b */
+ EMPTY_STR, /* 1c */
+ EMPTY_STR, /* 1d */
+ EMPTY_STR, /* 1e */
+ EMPTY_STR, /* 1f */
+ EMPTY_STR, /* 20 */
+ EMPTY_STR, /* 21 */
+ EMPTY_STR, /* 22 */
+ EMPTY_STR, /* 23 */
+ EMPTY_STR, /* 24 */
+ "pcm4", /* 25 */
+ "pcm4", /* 26 */
+ NULL
+};
+
+static const char *alc260remap[] = {
+ EMPTY_STR, /* 0x00 */
+ EMPTY_STR, /* 0x01 */
+ "front", /* 0x02 */
+ "spdif-out", /* 0x03 */
+ "rec1", /* 0x04 */
+ "rec2", /* 0x05 */
+ "spdif-in", /* 0x06 */
+ "inputmix", /* 0x07 */
+ "speaker-mix", /* 0x08 */
+ "headphone-mix", /* 0x09 */
+ "mono-mix", /* 0x0a */
+ EMPTY_STR, /* 0x0b */
+ EMPTY_STR, /* 0x0c */
+ EMPTY_STR, /* 0x0d */
+ EMPTY_STR, /* 0x0e */
+ "speaker", /* 0x0f */
+ "headphone", /* 0x10 */
+ "mono", /* 0x11 */
+ EMPTY_STR, /* 0x12 */
+ EMPTY_STR, /* 0x13 */
+ EMPTY_STR, /* 0x14 */
+ EMPTY_STR, /* 0x15 */
+ EMPTY_STR, /* 0x16 */
+ "beep", /* 0x17 */
+ "spdif-out", /* 0x18 */
+ "spdif-in", /* 0x19 */
+ NULL
+};
+
+static const char *alc262remap[] = {
+ EMPTY_STR, /* 0x00 */
+ EMPTY_STR, /* 0x01 */
+ "speaker", /* 0x02 */
+ "headphone", /* 0x03 */
+ EMPTY_STR, /* 0x04 */
+ EMPTY_STR, /* 0x05 */
+ "spdif-out", /* 0x06 */
+ "rec1", /* 0x07 */
+ "rec2", /* 0x08 */
+ "rec3", /* 0x09 */
+ "spdif-in", /* 0x0a */
+ "mix", /* 0x0b */
+ EMPTY_STR, /* 0x0c */
+ EMPTY_STR, /* 0x0d */
+ EMPTY_STR, /* 0x0e */
+ EMPTY_STR, /* 0x0f */
+ EMPTY_STR, /* 0x10 */
+ "mono", /* 0x11 */
+ "dmic", /* 0x12 */
+ EMPTY_STR, /* 0x13 */
+ "line-out", /* 0x14 */
+ "headphone", /* 0x15 */
+ "mono", /* 0x16 */
+ "beep", /* 0x17 */
+ EMPTY_STR, /* 0x18 */
+ EMPTY_STR, /* 0x19 */
+ EMPTY_STR, /* 0x1a */
+ EMPTY_STR, /* 0x1b */
+ EMPTY_STR, /* 0x1c */
+ "beep", /* 0x1d */
+ "spdif-out", /* 0x1e */
+ "spdif-in", /* 0x1f */
+ NULL
+};
+
+static const char *alc662remap[] = {
+ EMPTY_STR, /* 0x00 */
+ EMPTY_STR, /* 0x01 */
+ "front", /* 0x02 */
+ "rear", /* 0x03 */
+ "center/LFE", /* 0x04 */
+ EMPTY_STR, /* 0x05 */
+ "spdif-out", /* 0x06 */
+ "spdout", /* 0x07 */
+ "rec1", /* 0x08 */
+ "rec2", /* 0x09 */
+ EMPTY_STR, /* 0x0a */
+ "mix", /* 0x0b */
+ "front", /* 0x0c */
+ "rear", /* 0x0d */
+ "c/lfe", /* 0x0e */
+ EMPTY_STR, /* 0x0f */
+ EMPTY_STR, /* 0x10 */
+ EMPTY_STR, /* 0x11 */
+ EMPTY_STR, /* 0x12 */
+ EMPTY_STR, /* 0x13 */
+ EMPTY_STR, /* 0x14 */
+ EMPTY_STR, /* 0x15 */
+ EMPTY_STR, /* 0x16 */
+ EMPTY_STR, /* 0x17 */
+ EMPTY_STR, /* 0x18 */
+ EMPTY_STR, /* 0x19 */
+ EMPTY_STR, /* 0x1a */
+ EMPTY_STR, /* 0x1b */
+ EMPTY_STR, /* 0x1c */
+ EMPTY_STR, /* 0x1d */
+ EMPTY_STR, /* 0x1e */
+ EMPTY_STR, /* 0x1f */
+ EMPTY_STR, /* 0x20 */
+ EMPTY_STR, /* 0x21 */
+ EMPTY_STR, /* 0x22 */
+ EMPTY_STR, /* 0x23 */
+ NULL
+};
+
+static const char *alc861remap[] = {
+ EMPTY_STR, /* 0x00 */
+ EMPTY_STR, /* 0x01 */
+ EMPTY_STR, /* 0x02 */
+ "front", /* 0x03 */
+ "side", /* 0x04 */
+ "center/LFE", /* 0x05 */
+ "rear", /* 0x06 */
+ "spdout", /* 0x07 */
+ "rec", /* 0x08 */
+ EMPTY_STR, /* 0x09 */
+ EMPTY_STR, /* 0x0a */
+ EMPTY_STR, /* 0x0b */
+ EMPTY_STR, /* 0x0c */
+ EMPTY_STR, /* 0x0d */
+ EMPTY_STR, /* 0x0e */
+ EMPTY_STR, /* 0x0f */
+ EMPTY_STR, /* 0x10 */
+ EMPTY_STR, /* 0x11 */
+ EMPTY_STR, /* 0x12 */
+ EMPTY_STR, /* 0x13 */
+ "recmix", /* 0x14 */
+ "outmix", /* 0x15 */
+ "frontmix", /* 0x16 */
+ "sidemix", /* 0x17 */
+ "c/l-mix", /* 0x18 */
+ "rearmix", /* 0x19 */
+ "line2-mix", /* 0x1a */
+ "mic2mix", /* 0x1b */
+ "line1mix", /* 0x1c */
+ EMPTY_STR, /* 0x1d */
+ "vendor", /* 0x1e */
+ "center/LFE", /* 0x1f */
+ "side", /* 0x20 */
+ EMPTY_STR, /* 0x21 */
+ EMPTY_STR, /* 0x22 */
+ "beep", /* 0x23 */
+ NULL
+};
+
+static const char *cmi9880remap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 1 */
+ EMPTY_STR, /* 2 */
+ "front", /* 3 */
+ "rear", /* 4 */
+ "side", /* 5 */
+ "center/LFE", /* 6 */
+ "spdif-out", /* 7 */
+ EMPTY_STR, /* 8 */
+ EMPTY_STR, /* 9 */
+ EMPTY_STR, /* 10 */
+ EMPTY_STR, /* 11 */
+ EMPTY_STR, /* 12 */
+ EMPTY_STR, /* 13 */
+ EMPTY_STR, /* 14 */
+ EMPTY_STR, /* 15 */
+ EMPTY_STR, /* 16 */
+ EMPTY_STR, /* 17 */
+ EMPTY_STR, /* 18 */
+ EMPTY_STR, /* 19 */
+ EMPTY_STR, /* 20 */
+ EMPTY_STR, /* 21 */
+ EMPTY_STR, /* 22 */
+ "pcbeep", /* 23 */
+ EMPTY_STR, /* 24 */
+ EMPTY_STR, /* 25 */
+ EMPTY_STR, /* 26 */
+ EMPTY_STR, /* 27 */
+ EMPTY_STR, /* 28 */
+ EMPTY_STR, /* 29 */
+ EMPTY_STR, /* 30 */
+ EMPTY_STR, /* 31 */
+ NULL
+};
+
+static const char *ad1981remap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 1 */
+ "spdif", /* 2 */
+ "play", /* 3 */
+ "rec", /* 4 */
+ EMPTY_STR, /* 5 */
+ EMPTY_STR, /* 6 */
+ EMPTY_STR, /* 7 */
+ EMPTY_STR, /* 8 */
+ EMPTY_STR, /* 9 */
+ "spdif-out", /* a */
+ "mono-sel", /* b */
+ "mic-mix", /* c */
+ "pcbeep-sel", /* d */
+ "rec-mix", /* e */
+ "mono-mix", /* f */
+ "digital-beep", /* 10 */
+ "frontmix-amp", /* 11 */
+ "mic-mixamp", /* 12 */
+ "linein-mixamp", /* 13 */
+ "powerdown", /* 14 */
+ "rec-sel", /* 15 */
+ EMPTY_STR, /* 16 */
+ EMPTY_STR, /* 17 */
+ EMPTY_STR, /* 18 */
+ EMPTY_STR, /* 19 */
+ "lineout-mixamp", /* 1a */
+ "aux-mixamp", /* 1b */
+ "mic-mixamp", /* 1c */
+ "CD-mixamp", /* 1d */
+ "fp-mic-mute", /* 1e */
+ "mic-mute", /* 1f */
+ NULL
+};
+
+static const char *ad1983remap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 1 */
+ "spdif", /* 2 */
+ "play", /* 3 */
+ "rec", /* 4 */
+ EMPTY_STR, /* 5 */
+ EMPTY_STR, /* 6 */
+ EMPTY_STR, /* 7 */
+ EMPTY_STR, /* 8 */
+ EMPTY_STR, /* 9 */
+ "spdif-out", /* a */
+ "mono-sel", /* b */
+ "mic-boost", /* c */
+ "linein-sel", /* d */
+ "rec-mix", /* e */
+ "mono-mix", /* f */
+ "digital-beep", /* 10 */
+ "frontmix-amp", /* 11 */
+ "mic-mixamp", /* 12 */
+ "linein-mixamp", /* 13 */
+ "rec-sel", /* 14 */
+ "powerdown", /* 15 */
+ NULL
+};
+
+static const char *ad1984remap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 1 */
+ "spdif", /* 2 */
+ "headphone", /* 3 */
+ "front", /* 4 */
+ "dig-mic1", /* 5 */
+ "dig-mic2", /* 6 */
+ "headphone-mix", /* 7 */
+ "rec1", /* 8 */
+ "rec2", /* 9 */
+ "lineout-mix", /* a */
+ "aux-mix", /* b */
+ "rec1-sel", /* c */
+ "rec2-sel", /* d */
+ "mono-sel", /* e */
+ "aux-sel", /* f */
+ "beep", /* 10 */
+ EMPTY_STR, /* 11 */
+ EMPTY_STR, /* 12 */
+ EMPTY_STR, /* 13 */
+ EMPTY_STR, /* 14 */
+ EMPTY_STR, /* 15 */
+ EMPTY_STR, /* 16 */
+ EMPTY_STR, /* 17 */
+ EMPTY_STR, /* 18 */
+ "mixer-powerdown", /* 19 */
+ "beep", /* 1a */
+ "spdif-out", /* 1b */
+ EMPTY_STR, /* 1c */
+ EMPTY_STR, /* 1d */
+ "mono-mix", /* 1e */
+ "mono-downmix", /* 1f */
+ "input-mix", /* 20 */
+ "input-mixamp", /* 21 */
+ "headphone-sel", /* 22 */
+ "dock-sel", /* 23 */
+ "dock-mix", /* 24 */
+ "dock-micboost", /* 25 */
+ EMPTY_STR, /* 26 */
+ NULL
+};
+
+static const char *ad1986remap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 1 */
+ "spdif-out", /* 2 */
+ "front", /* 3 */
+ "rear", /* 4 */
+ "center/LFE", /* 5 */
+ "rec", /* 6 */
+ "recmon", /* 7 */
+ "mono-mix", /* 8 */
+ "stereo-downmix", /* 9 */
+ "headphone-sel", /* a */
+ "lineout-sel", /* b */
+ "rear-sel", /* c */
+ "center/LFE-sel", /* d */
+ "mono-sel", /* e */
+ "mic-sel", /* f */
+ "linein-sel", /* 10 */
+ "mic-src", /* 11 */
+ "rec-src" /* 12 */
+ "mic-mix", /* 13 */
+ "phone-mix", /* 14 */
+ "cd-mix", /* 15 */
+ "aux-mix", /* 16 */
+ "linein-mix", /* 17 */
+ "beep", /* 18 */
+ "digital-beep", /* 19 */
+ EMPTY_STR, /* 1a */
+ EMPTY_STR, /* 1b */
+ EMPTY_STR, /* 1c */
+ EMPTY_STR, /* 1d */
+ EMPTY_STR, /* 1e */
+ EMPTY_STR, /* 1f */
+ EMPTY_STR, /* 20 */
+ EMPTY_STR, /* 21 */
+ EMPTY_STR, /* 22 */
+ EMPTY_STR, /* 23 */
+ EMPTY_STR, /* 24 */
+ "spdif-out", /* 25 */
+ "analog-powerdown", /* 26 */
+ "mic-c/LFE-mix", /* 27 */
+ "mic-linein-mix", /* 28 */
+ "c/LFE-linein-mix", /* 29 */
+ "mic-linein-c/LFE-mix", /* 2a */
+ "mic-sel", /* 2b */
+ NULL
+};
+
+static const char *ad1988remap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 1 */ /* This is both audio-fgr and DAC???? */
+ "spdout", /* 2 */ /* Not used? */
+ "headphone", /* 3 */
+ "front", /* 4 */
+ "center/LFE", /* 5 */
+ "rear", /* 6 */
+ "spdin", /* 7 */
+ "rec1", /* 8 */
+ "rec2", /* 9 */
+ "side", /* a */
+ "spdin-src", /* b */
+ "rec1-src", /* c */
+ "rec2-src", /* d */
+ "rec3-src", /* e */
+ "rec3", /* f */
+ "pcbeep", /* 10 */
+ EMPTY_STR, /* 11 */
+ EMPTY_STR, /* 12 */
+ EMPTY_STR, /* 13 */
+ EMPTY_STR, /* 14 */
+ EMPTY_STR, /* 15 */
+ EMPTY_STR, /* 16 */
+ EMPTY_STR, /* 17 */
+ EMPTY_STR, /* 18 */
+ "power-down", /* 19 */
+ "beep", /* 1a */
+ "spdif-out", /* 1b */
+ "spdif-in", /* 1c */
+ "spdifout-mix", /* 1d */
+ "mono-mix", /* 1e */
+ "main-volume", /* 1f */
+ "analog-mix", /* 20 */
+ "outamp", /* 21 */
+ "headphon-mix", /* 22 */
+ "hp-powerdown", /* 23 */
+ EMPTY_STR, /* 24 */
+ EMPTY_STR, /* 25 */
+ "mic-mix", /* 26 */
+ "center/LFE-mix", /* 27 */
+ "side-mix", /* 28 */
+ "front-mix", /* 29 */
+ "rear-mix", /* 2a */
+ "fp-mic-mix", /* 2b */
+ "linein-mix", /* 2c */
+ "mono-mixdown", /* 2d */
+ EMPTY_STR, /* 2e */
+ "bias-pdown", /* 2f */
+ "fppink-outsel", /* 30 */
+ "blue-outsel", /* 31 */
+ "pink-outsel", /* 32 */
+ "blue-insel", /* 33 */
+ "pink-insel", /* 34 */
+ EMPTY_STR, /* 35 */
+ "mono-sel", /* 36 */
+ "fpgreen-outsel", /* 37 */
+ "fpgreen-micboost", /* 38 */
+ "fppink-micboost", /* 39 */
+ "blue-micboost", /* 3a */
+ "black-micboost", /* 3b */
+ "pink-micboost", /* 3c */
+ "green-micboost", /* 3d */
+ NULL
+};
+
+#if 0
+static const char *stac9200remap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 0x01 */
+ "play", /* 0x02 */
+ "rec", /* 0x03 */
+ "spdif-in", /* 0x04 */
+ "spdif-out", /* 0x05 */
+ EMPTY_STR, /* 0x06 */
+ "playmux", /* 0x07 */
+ EMPTY_STR, /* 0x08 */
+ EMPTY_STR, /* 0x09 */
+ "recmux", /* 0x0a */
+ "mainvol", /* 0x0b */
+ "inputmux", /* 0x0c */
+ EMPTY_STR, /* 0x0d */
+ EMPTY_STR, /* 0x0e */
+ EMPTY_STR, /* 0x0f */
+ EMPTY_STR, /* 0x10 */
+ EMPTY_STR, /* 0x11 */
+ EMPTY_STR, /* 0x12 */
+ "mono-mix", /* 0x13 */
+ "beep", /* 0x14 */
+ NULL
+};
+#endif
+
+static const char *stac920xremap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 0x01 */
+ EMPTY_STR, /* 0x02 */
+ EMPTY_STR, /* 0x03 */
+ EMPTY_STR, /* 0x04 */
+ EMPTY_STR, /* 0x05 */
+ EMPTY_STR, /* 0x06 */
+ EMPTY_STR, /* 0x07 */
+ EMPTY_STR, /* 0x08 */
+ EMPTY_STR, /* 0x09 */
+ EMPTY_STR, /* 0x0a */
+ EMPTY_STR, /* 0x0b */
+ EMPTY_STR, /* 0x0c */
+ EMPTY_STR, /* 0x0d */
+ EMPTY_STR, /* 0x0e */
+ EMPTY_STR, /* 0x0f */
+ "front", /* 0x10 */
+ "rear", /* 0x11 */
+ "rec1", /* 0x12 */
+ "rec2", /* 0x13 */
+ "mono-out", /* 0x14 */
+ "mono-mix", /* 0x15 */
+ "cd", /* 0x16 */
+ "dig-mic1", /* 0x17 */
+ "dig-mic2", /* 0x18 */
+ "input1-mux", /* 0x19 */
+ "input2-mux", /* 0x1a */
+ "rec1-vol", /* 0x1b */
+ "rec2-vol", /* 0x1c */
+ "rec1-mux", /* 0x1d */
+ "rec2-mux", /* 0x1e */
+ "spdif-out", /* 0x1f */
+ "spdif-in", /* 0x20 */
+ "digital-out", /* 0x21 */
+ "digital-in", /* 0x22 */
+ "beep", /* 0x23 */
+ "mastervol", /* 0x24 */
+ EMPTY_STR, /* 0x25 */
+ NULL
+};
+
+static const char *stac925xremap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 0x01 */
+ "play", /* 0x02 */
+ "rec", /* 0x03 */
+ "spdif-in", /* 0x04 */
+ "spdif-out", /* 0x05 */
+ "output-mux", /* 0x06 */
+ EMPTY_STR, /* 0x07 */
+ EMPTY_STR, /* 0x08 */
+ "rec-vol", /* 0x09 */
+ EMPTY_STR, /* 0x0a */
+ EMPTY_STR, /* 0x0b */
+ EMPTY_STR, /* 0x0c */
+ EMPTY_STR, /* 0x0d */
+ "vol", /* 0x0e */
+ "input-mux", /* 0x0f */
+ EMPTY_STR, /* 0x10 */
+ EMPTY_STR, /* 0x11 */
+ "mono-mix", /* 0x12 */
+ "beep", /* 0x13 */
+ "rec-mux", /* 0x14 */
+ EMPTY_STR, /* 0x15 */
+ NULL
+};
+
+static const char *stac922xremap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 0x01 */
+ "front", /* 0x02 */
+ "center/LFE", /* 0x03 */
+ "rear", /* 0x04 */
+ "side", /* 0x05 */
+ "rec1", /* 0x06 */
+ "rec2", /* 0x07 */
+ "spdif-out", /* 0x08 */
+ "spdif-in", /* 0x09 */
+ EMPTY_STR, /* 0x0a */
+ EMPTY_STR, /* 0x0b */
+ EMPTY_STR, /* 0x0c */
+ EMPTY_STR, /* 0x0d */
+ EMPTY_STR, /* 0x0e */
+ EMPTY_STR, /* 0x0f */
+ EMPTY_STR, /* 0x10 */
+ EMPTY_STR, /* 0x11 */
+ "rec1mux", /* 0x12 */
+ "rec2mux", /* 0x13 */
+ "pcbeep", /* 0x14 */
+ "cd", /* 0x15 */
+ "mainvol", /* 0x16 */
+ "rec1vol", /* 0x17 */
+ "rec2vol", /* 0x18 */
+ "adat", /* 0x19 */
+ "i2s-out", /* 0x1a */
+ "i2s-in", /* 0x1b */
+ NULL
+};
+
+static const char *stac923xremap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 0x01 */
+ "front", /* 0x02 */
+ "center/LFE", /* 0x03 */
+ "rear", /* 0x04 */
+ "side", /* 0x05 */
+ "headphone", /* 0x06 */
+ "rec1", /* 0x07 */
+ "rec2", /* 0x08 */
+ "rec3", /* 0x09 */
+ EMPTY_STR, /* 0x0a */
+ EMPTY_STR, /* 0x0b */
+ EMPTY_STR, /* 0x0c */
+ EMPTY_STR, /* 0x0d */
+ EMPTY_STR, /* 0x0e */
+ EMPTY_STR, /* 0x0f */
+ EMPTY_STR, /* 0x10 */
+ EMPTY_STR, /* 0x11 */
+ "cd", /* 0x12 */
+ "dig-mic1", /* 0x13 */
+ "dig-mic2", /* 0x14 */
+ "input1-mux", /* 0x15 */
+ "input2-mux", /* 0x16 */
+ "input3-mux", /* 0x17 */
+ "rec1vol", /* 0x18 */
+ "rec2vol", /* 0x19 */
+ "rec3vol", /* 0x1a */
+ "rec1-mux", /* 0x1b */
+ "rec2-mux", /* 0x1c */
+ "rec3-mux", /* 0x1d */
+ "spdif-out", /* 0x1e */
+ "adat", /* 0x1f */
+ NULL
+};
+
+
+static const char *conexant_modem_remap[] =
+{
+ EMPTY_STR, /* 0x00 */
+ EMPTY_STR, /* 0x01 */
+ EMPTY_STR, /* 0x02 */
+ EMPTY_STR, /* 0x03 */
+ EMPTY_STR, /* 0x04 */
+ EMPTY_STR, /* 0x05 */
+ EMPTY_STR, /* 0x06 */
+ EMPTY_STR, /* 0x07 */
+ EMPTY_STR, /* 0x08 */
+ EMPTY_STR, /* 0x09 */
+ EMPTY_STR, /* 0x0a */
+ EMPTY_STR, /* 0x0b */
+ EMPTY_STR, /* 0x0c */
+ EMPTY_STR, /* 0x0d */
+ EMPTY_STR, /* 0x0e */
+ EMPTY_STR, /* 0x0f */
+ EMPTY_STR, /* 0x10 */
+ EMPTY_STR, /* 0x11 */
+ EMPTY_STR, /* 0x12 */
+ EMPTY_STR, /* 0x13 */
+ EMPTY_STR, /* 0x14 */
+ EMPTY_STR, /* 0x15 */
+ EMPTY_STR, /* 0x16 */
+ EMPTY_STR, /* 0x17 */
+ EMPTY_STR, /* 0x18 */
+ EMPTY_STR, /* 0x19 */
+ EMPTY_STR, /* 0x1a */
+ EMPTY_STR, /* 0x1b */
+ EMPTY_STR, /* 0x1c */
+ EMPTY_STR, /* 0x1d */
+ EMPTY_STR, /* 0x1e */
+ EMPTY_STR, /* 0x1f */
+ EMPTY_STR, /* 0x20 */
+ EMPTY_STR, /* 0x21 */
+ EMPTY_STR, /* 0x22 */
+ EMPTY_STR, /* 0x23 */
+ EMPTY_STR, /* 0x24 */
+ EMPTY_STR, /* 0x25 */
+ EMPTY_STR, /* 0x26 */
+ EMPTY_STR, /* 0x27 */
+ EMPTY_STR, /* 0x28 */
+ EMPTY_STR, /* 0x29 */
+ EMPTY_STR, /* 0x2a */
+ EMPTY_STR, /* 0x2b */
+ EMPTY_STR, /* 0x2c */
+ EMPTY_STR, /* 0x2d */
+ EMPTY_STR, /* 0x2e */
+ EMPTY_STR, /* 0x2f */
+ EMPTY_STR, /* 0x30 */
+ EMPTY_STR, /* 0x31 */
+ EMPTY_STR, /* 0x32 */
+ EMPTY_STR, /* 0x33 */
+ EMPTY_STR, /* 0x34 */
+ EMPTY_STR, /* 0x35 */
+ EMPTY_STR, /* 0x36 */
+ EMPTY_STR, /* 0x37 */
+ EMPTY_STR, /* 0x38 */
+ EMPTY_STR, /* 0x39 */
+ EMPTY_STR, /* 0x3a */
+ EMPTY_STR, /* 0x3b */
+ EMPTY_STR, /* 0x3c */
+ EMPTY_STR, /* 0x3d */
+ EMPTY_STR, /* 0x3e */
+ EMPTY_STR, /* 0x3f */
+ EMPTY_STR, /* 0x40 */
+ EMPTY_STR, /* 0x41 */
+ EMPTY_STR, /* 0x42 */
+ EMPTY_STR, /* 0x43 */
+ EMPTY_STR, /* 0x44 */
+ EMPTY_STR, /* 0x45 */
+ EMPTY_STR, /* 0x46 */
+ EMPTY_STR, /* 0x47 */
+ EMPTY_STR, /* 0x48 */
+ EMPTY_STR, /* 0x49 */
+ EMPTY_STR, /* 0x4a */
+ EMPTY_STR, /* 0x4b */
+ EMPTY_STR, /* 0x4c */
+ EMPTY_STR, /* 0x4d */
+ EMPTY_STR, /* 0x4e */
+ EMPTY_STR, /* 0x4f */
+ EMPTY_STR, /* 0x50 */
+ EMPTY_STR, /* 0x51 */
+ EMPTY_STR, /* 0x52 */
+ EMPTY_STR, /* 0x53 */
+ EMPTY_STR, /* 0x54 */
+ EMPTY_STR, /* 0x55 */
+ EMPTY_STR, /* 0x56 */
+ EMPTY_STR, /* 0x57 */
+ EMPTY_STR, /* 0x58 */
+ EMPTY_STR, /* 0x59 */
+ EMPTY_STR, /* 0x5a */
+ EMPTY_STR, /* 0x5b */
+ EMPTY_STR, /* 0x5c */
+ EMPTY_STR, /* 0x5d */
+ EMPTY_STR, /* 0x5e */
+ EMPTY_STR, /* 0x5f */
+ EMPTY_STR, /* 0x60 */
+ EMPTY_STR, /* 0x61 */
+ EMPTY_STR, /* 0x62 */
+ EMPTY_STR, /* 0x63 */
+ EMPTY_STR, /* 0x64 */
+ EMPTY_STR, /* 0x65 */
+ EMPTY_STR, /* 0x66 */
+ EMPTY_STR, /* 0x67 */
+ EMPTY_STR, /* 0x68 */
+ EMPTY_STR, /* 0x69 */
+ EMPTY_STR, /* 0x6a */
+ EMPTY_STR, /* 0x6b */
+ EMPTY_STR, /* 0x6c */
+ EMPTY_STR, /* 0x6d */
+ EMPTY_STR, /* 0x6e */
+ EMPTY_STR, /* 0x6f */
+ "modem-control",/* 0x70 */ // Vendor defined widget
+ "modem-in", /* 0x71 */
+ "modem-out", /* 0x72 */
+ "modem-jack", /* 0x73 */
+ NULL
+};
+
+extern int hdaudio_GPIO_init_1 (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+
+static const codec_desc_t codecs[] = {
+ /* Realtek HDA codecs */
+ {0x10ec0260, "ALC260", VF_NONE, (char **) &alc260remap},
+ {0x10ec0262, "ALC262", VF_NONE, (char **) &alc262remap},
+ {0x10ec0268, "ALC268", VF_NONE, (char **) &alc262remap},
+ {0x10ec0662, "ALC662", VF_NONE, (char **) &alc662remap},
+ {0x10ec0663, "ALC663", VF_NONE, (char **) &alc662remap},
+ {0x10ec0861, "ALC861", VF_NONE, (char **) &alc861remap},
+ {0x10ec0862, "ALC862", VF_NONE, (char **) &alc861remap},
+ {0x10ec0880, "ALC880", VF_ALC88X_HACK, (char **) &alc880remap},
+ {0x10ec0882, "ALC882", VF_ALC88X_HACK, (char **) &alc880remap},
+ {0x10ec0883, "ALC883", VF_ALC88X_HACK, (char **) &alc883remap},
+ {0x10ec0885, "ALC885", VF_ALC88X_HACK, (char **) &alc883remap},
+ {0x10ec0887, "ALC887", VF_ALC88X_HACK, (char **) &alc883remap},
+ {0x10ec0888, "ALC888", VF_ALC88X_HACK, (char **) &alc883remap},
+ {0x10ec0889, "ALC889", VF_ALC88X_HACK, (char **) &alc883remap},
+ {0x10ec0892, "ALC892", VF_ALC88X_HACK, (char **) &alc883remap},
+
+ /* CMedia HDA codecs */
+ {0x13f69880, "CMI9880", VF_NONE, (char **) &cmi9880remap},
+ {0x434d4980, "CMI9880", VF_NONE, (char **) &cmi9880remap},
+
+ {0x111d7603, "92HD75B3X5", VF_NONE, NULL, 0, hdaudio_GPIO_init_1},
+ {0x111d7608, "92HD75B2X5", VF_NONE, NULL, 0, hdaudio_GPIO_init_1},
+ {0x111d76b0, "92HD71B8X", VF_NONE, NULL, 0, hdaudio_GPIO_init_1},
+ {0x111d76b1, "92HD71B8X", VF_NONE, NULL, 0, hdaudio_GPIO_init_1},
+ {0x111d76b2, "92HD71B7X", VF_NONE, NULL, 0, hdaudio_GPIO_init_1},
+ {0x111d76b3, "92HD71B7X", VF_NONE, NULL, 0, hdaudio_GPIO_init_1},
+ {0x111d76b4, "92HD71B6X", VF_NONE, NULL, 0, hdaudio_GPIO_init_1},
+ {0x111d76b5, "92HD71B6X", VF_NONE, NULL, 0, hdaudio_GPIO_init_1},
+ {0x111d76b6, "92HD71B5X", VF_NONE, NULL, 0, hdaudio_GPIO_init_1},
+ {0x111d76b7, "92HD71B5X", VF_NONE, NULL, 0, hdaudio_GPIO_init_1},
+
+ /* Analog Devices HDA codecs */
+ {0x11d41981, "AD1981", VF_NONE, (char **) &ad1981remap, 0x76543021},
+ {0x11d41983, "AD1983", VF_NONE, (char **) &ad1983remap, 0x76543021},
+ {0x11d41984, "AD1984", VF_NONE, (char **) &ad1984remap, 0x76543012},
+ {0x11d41986, "AD1986A", VF_NONE, (char **) &ad1986remap, 0x76540321},
+ {0x11d41988, "AD1988A", VF_NONE, (char **) &ad1988remap, 0x76015432},
+ {0x11d4198b, "AD1988B", VF_NONE, (char **) &ad1988remap, 0x76015432},
+
+ /* Sigmatel HDA codecs (some of them) */
+ {0x83847690, "STAC9200", VF_NONE, (char **) &stac920xremap },
+ {0x838476a0, "STAC9205", VF_NONE, (char **) &stac920xremap },
+ {0x838476a1, "STAC9205D", VF_NONE, (char **) &stac920xremap },
+ {0x838476a2, "STAC9204", VF_NONE, (char **) &stac920xremap },
+ {0x838476a3, "STAC9204D", VF_NONE, (char **) &stac920xremap },
+
+ /* Apple Macbook ids */
+ {0x83847880, "STAC9220 A1", VF_NONE, (char **) &stac922xremap },
+ {0x83847882, "STAC9220 A2", VF_NONE, (char **) &stac922xremap },
+ {0x83847680, "STAC9221 A1", VF_NONE, (char **) &stac922xremap },
+
+ {0x83847681, "STAC9220D", VF_NONE, (char **) &stac922xremap },
+ {0x83847682, "STAC9221", VF_NONE, (char **) &stac922xremap },
+ {0x83847683, "STAC9221D", VF_NONE, (char **) &stac922xremap },
+
+ {0x83847610, "STAC9230XN", VF_NONE, (char **) &stac923xremap },
+ {0x83847611, "STAC9230DN", VF_NONE, (char **) &stac923xremap },
+ {0x83847612, "STAC9230XT", VF_NONE, (char **) &stac923xremap },
+ {0x83847613, "STAC9230DT", VF_NONE, (char **) &stac923xremap },
+ {0x83847614, "STAC9229X", VF_NONE, (char **) &stac923xremap },
+ {0x83847615, "STAC9229D", VF_NONE, (char **) &stac923xremap },
+ {0x83847616, "STAC9228X", VF_NONE, (char **) &stac923xremap },
+ {0x83847617, "STAC9228D", VF_NONE, (char **) &stac923xremap },
+ {0x83847618, "STAC9227X", VF_NONE, (char **) &stac923xremap }, /* Intel D975XBX2 (at least) */
+ {0x83847619, "STAC9227D", VF_NONE, (char **) &stac923xremap },
+
+ {0x838476a4, "STAC9255", VF_NONE, (char **) &stac925xremap },
+ {0x838476a5, "STAC9255D", VF_NONE, (char **) &stac925xremap },
+ {0x838476a6, "STAC9254", VF_NONE, (char **) &stac925xremap },
+ {0x838476a7, "STAC9254D", VF_NONE, (char **) &stac925xremap },
+
+ {0x83847620, "STAC9274", VF_NONE, (char **) &stac923xremap },
+ {0x83847621, "STAC9274D", VF_NONE, (char **) &stac923xremap },
+ {0x83847622, "STAC9273X", VF_NONE, (char **) &stac923xremap },
+ {0x83847623, "STAC9273D", VF_NONE, (char **) &stac923xremap },
+ {0x83847624, "STAC9272X", VF_NONE, (char **) &stac923xremap },
+ {0x83847625, "STAC9272D", VF_NONE, (char **) &stac923xremap },
+ {0x83847626, "STAC9271X", VF_NONE, (char **) &stac923xremap },
+ {0x83847627, "STAC9271D", VF_NONE, (char **) &stac923xremap },
+
+ {0x83847628, "STAC9274X5NH", VF_NONE, (char **) &stac923xremap },
+ {0x83847629, "STAC9274D5NH", VF_NONE, (char **) &stac923xremap },
+ {0x83847661, "CXD9872RD", VF_NONE, NULL, 0x76543012},
+ {0x83847662, "STAC9872AK", VF_NONE, NULL, 0x76543012},
+ {0x83847664, "STAC9872K", VF_NONE, NULL, 0x76543210}, /* Vaio VGN-AR51J */
+
+ /* Conexant */
+ {0x14f15045, "CX20548", VF_NONE, NULL, 0x76543201},
+ {0x14f15047, "CX20551", VF_NONE, NULL, 0x76543201},
+ {0x14f15051, "CX20561", VF_NONE, NULL, 0x76543210},
+ {0x14f12c06, "Conexant2c06", VF_NONE, (char **) &conexant_modem_remap, 0, NULL_mixer_init}, /* Modem codec (Vaio) */
+ {0x14f12bfa, "Conexant2bfa", VF_NONE, (char **) &conexant_modem_remap, 0, NULL_mixer_init}, /* Modem codec (Acer Ferrari 5k) */
+
+ /* Si3055 and compatible modems */
+ {0x163c3055, "Si3055", VF_SI3055_HACK, NULL, 0, NULL_mixer_init },
+ {0x163c3155, "Si3155", VF_SI3055_HACK, NULL, 0, NULL_mixer_init },
+ {0x11c13026, "Agere3026", VF_SI3055_HACK, NULL, 0, NULL_mixer_init },
+ {0x11c13055, "Agere3055", VF_SI3055_HACK, NULL, 0, NULL_mixer_init },
+ {0x11c13155, "Agere3155", VF_SI3055_HACK, NULL, 0, NULL_mixer_init },
+ {0x10573055, "Motorola3055", VF_SI3055_HACK, NULL, 0, NULL_mixer_init },
+ {0x10573057, "Motorola3057", VF_SI3055_HACK, NULL, 0, NULL_mixer_init },
+ {0x10573155, "Motorola3155", VF_SI3055_HACK, NULL, 0, NULL_mixer_init },
+
+ /* Creative Labs */
+ {0x1102000a, "Createive XFi XTreme", VF_NONE, NULL, 0x76543210},
+
+ {0x11c11040, "Agere HDA Modem", VF_NONE, NULL, 0, NULL_mixer_init},
+
+ /* Unknown */
+ {0, "Unknown"}
+};
+
+static const char *abit_AA8_remap[] = {
+ EMPTY_STR, /* 0 */
+ EMPTY_STR, /* 1 */
+ "front", /* 2 */
+ "rear", /* 3 */
+ "center/LFE", /* 4 */
+ "side", /* 5 */
+ "spdif-out", /* 6 */
+ "rec1", /* 7 */
+ "rec2", /* 8 */
+ "rec3", /* 9 */
+ "spdif-in", /* 10 */
+ "inputmix", /* 11 */
+ "front", /* 12 */
+ "rear", /* 13 */
+ "center/LFE", /* 14 */
+ "side", /* 15 */
+ "out-source", /* 16 */
+ "out-source", /* 17 */
+ "out-source", /* 18 */
+ "out-source", /* 19 */
+ "green1", /* 20 */
+ "black1", /* 21 */
+ "C-L", /* 22 */
+ "surr", /* 23 */
+ "pink1", /* 24 */
+ "pink2", /* 25 */
+ "blue1", /* 26 */
+ "blue2", /* 27 */
+ "cd", /* 28 */
+ "beep", /* 29 */
+ "spdout", /* 30 */
+ "spdin", /* 31 */
+ "vendor", /* 32 */
+ "vol", /* 33 */
+ NULL
+};
+
+static const char *vaio_remap[] = {
+ EMPTY_STR, /* 0x00 */
+ EMPTY_STR, /* 0x01 */
+ "headphone", /* 0x02 */
+ "pcm", /* 0x03 */ // Unused
+ "pcm", /* 0x04 */ // Unused
+ "speaker", /* 0x05 */
+ "rec1", /* 0x06 */
+ "rec1-vol", /* 0x07 */
+ "rec", /* 0x08 */
+ "rec-vol", /* 0x09 */
+ "headphone", /* 0x0a */
+ EMPTY_STR, /* 0x0b */ // Unused
+ EMPTY_STR, /* 0x0c */ // Unused
+ "mic", /* 0x0d */
+ EMPTY_STR, /* 0x0e */
+ "int-speaker", /* 0x0f */
+ "spdifout1", /* 0x10 */
+ "int-digout1", /* 0x11 */
+ "spdifin", /* 0x12 */
+ "int-digout", /* 0x13 */
+ "int-mic", /* 0x14 */
+ "rec", /* 0x15 */
+ "beep", /* 0x16 */
+ "vol", /* 0x17 */
+ "spdifout", /* 0x18 */
+ NULL
+};
+
+static const char *alc262_vaio_remap[] =
+{
+ EMPTY_STR, /* 0x00 */
+ EMPTY_STR, /* 0x01 */
+ "speaker", /* 0x02 */
+ "headphone", /* 0x03 */
+ "vendor", /* 0x04 */
+ "vendor", /* 0x05 */
+ "hdmi-out", /* 0x06 */
+ "rec1", /* 0x07 */
+ "rec2", /* 0x08 */
+ "rec3", /* 0x09 */
+ "spdif-in", /* 0x0a */
+ "mix", /* 0x0b */
+ "mix", /* 0x0c */
+ "mix", /* 0x0d */
+ "mono", /* 0x0e */
+ "vendor", /* 0x0f */
+ "vendor", /* 0x10 */
+ "mono", /* 0x11 */
+ "dmic", /* 0x12 */
+ "vendor", /* 0x13 */
+ "line-out", /* 0x14 */
+ "headphone", /* 0x15 */
+ "mono", /* 0x16 */
+ "beep", /* 0x17 */
+ "speaker", /* 0x18 */
+ "speaker", /* 0x19 */
+ "speaker", /* 0x1a */
+ "speaker", /* 0x1b */
+ "speaker", /* 0x1c */
+ "beep", /* 0x1d */
+ "spdif-out", /* 0x1e */
+ "spdif-in", /* 0x1f */
+ "vendor", /* 0x20 */
+ "vol", /* 0x21 */
+ "rec3", /* 0x22 */
+ "rec2", /* 0x23 */
+ "rec1", /* 0x24 */
+ NULL
+};
+
+/*
+ * Table for subsystem ID's that require special handling
+ */
+
+extern int hdaudio_Asus_P4B_E_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+extern int hdaudio_scaleoP_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+extern int hdaudio_abit_AA8_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+extern int hdaudio_ferrari5k_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+extern int hdaudio_vaio_vgn_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+extern int hdaudio_thinkpad_r61_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+extern int hdaudio_mac_sigmatel_GPIO_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+extern int hdaudio_mac_realtek_GPIO_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+extern int hdaudio_eeepc_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+extern int hdaudio_asus_a7k_GPIO_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+extern int hdaudio_asus_m9_mixer_init (int dev, hdaudio_mixer_t * mixer, int cad, int top_group);
+
+static const codec_desc_t subdevices[] = {
+ {0x98801019, "ECS 915P-A", VF_NONE, NULL, 0x76541320},
+ {0x104381e1, "Asus P4B-E/AD1988A", VF_NONE, (char **) &ad1988remap, 0x76015432, hdaudio_Asus_P4B_E_mixer_init},
+ // {0x1043e601, "ScaleoP/ALC888", VF_ALC88X_HACK, (char **) &alc883remap, 0, hdaudio_scaleoP_mixer_init},
+
+ /* Abit AA8 (at least some revisions) have bogus codec config information,
+ * including the subvendor ID. 0x08800000 is used by many other motherboards
+ * too. Have to use the pci_subvendor field for alc880 based devices:
+ * 0x147b1039 = Abit AA8 motherboard.
+ * 0x15849077 = Rock Pegasus 665 laptop.
+ */
+ {0x08800000, "Abit AA8/ALC880", VF_ALC88X_HACK, (char **) &abit_AA8_remap, 0, hdaudio_abit_AA8_mixer_init, 0, 0x147b1039},
+
+ {0x10250000, "Ferrari5k/ALC883", VF_ALC88X_HACK, (char **) &alc883remap, 0, hdaudio_ferrari5k_mixer_init, 0x10ec0883, 0x1025010a},
+ {0x10250000, "Acer_aspire5052/ALC883", VF_ALC88X_HACK, (char **) &alc883remap, 0, hdaudio_ferrari5k_mixer_init, 0x10ec0883, 0x1025010f},
+ {0x1025160d, "Acer_travelmate4060/ALC260", VF_NONE, (char **) &alc260remap, 0, hdaudio_GPIO_init_1, 0x10ec0260, 0x1025008f},
+ {0x10431153, "Asus M9", VF_NONE, (char **) &ad1986remap, 0x76540321, hdaudio_asus_m9_mixer_init},
+
+ /*
+ **** Sony Vaio VGN-AR51 ***
+ * Has three codecs. Primary (Stac9872K), Modem (Conexant) and
+ * HDMI digital output (ALC262). Disable the mixer entries for codecs 2 and 3.
+ */
+ {0x104d2200, "Vaio/STAC9872K", VF_VAIO_HACK, (char**) &vaio_remap, 0x76540213, hdaudio_vaio_vgn_mixer_init, 0x83847664, 0x104d9016},
+ /* 2nd codec (#1) is "Conexant2c06" modem */
+ {0x104d2200, "Vaio/HDMI", VF_NONE, (char **) &alc262_vaio_remap, 0, NULL_mixer_init, 0x10ec0262, 0x104d9016},
+ /****/
+
+ /*
+ * Sony VAIO SZ2, SZ3, FE and FE31B
+ */
+ {0x104d0700, "Vaio/CXD9872RD", VF_VAIO_HACK, (char**) &vaio_remap, 0x76540213, hdaudio_vaio_vgn_mixer_init, 0x83847661, 0x104d81e6},
+ {0x104d1000, "Vaio/CXD9872RD", VF_VAIO_HACK, (char**) &vaio_remap, 0x76540213, hdaudio_vaio_vgn_mixer_init, 0x83847661, 0x104d81ef},
+ {0x104d0c00, "Vaio/CXD9872RD", VF_VAIO_HACK, (char**) &vaio_remap, 0x76540213, hdaudio_vaio_vgn_mixer_init, 0x83847661, 0x104d81ef},
+
+ /*
+ * Sony VAIO AR
+ */
+ {0x104d1300, "Vaio/CXD9872AKD", VF_VAIO_HACK, (char**) &vaio_remap, 0x76540213, hdaudio_vaio_vgn_mixer_init, 0x83847664, 0x104d81fd},
+
+ /*
+ * Sony Vaio SZ (SZ650) has two codecs, STAC9872AK and Conexant modem.
+ * Assume the audio codec is identical with Vaio AGN (above).
+ */
+ {0x104d1e00, "Vaio/STAC9872AK", VF_VAIO_HACK, (char**) &vaio_remap, 0x76540213, hdaudio_vaio_vgn_mixer_init, 0x83847662, 0x104d9008},
+ /* Vaio VGC-LA1 */
+ {0x104d1200, "Vaio/STAC9872AK", VF_VAIO_HACK, (char**) &vaio_remap, 0x76540213, hdaudio_vaio_vgn_mixer_init, 0x83847662, 0x104d8205},
+
+/*
+ * Thinkpad R61
+ */
+ {0x17aa20bb, "Thinkpad R61", VF_NONE, (char**) &ad1984remap, 0, hdaudio_thinkpad_r61_mixer_init},
+
+/*
+ * Asus Eee PC (model 900 at least)
+ */
+ {0x10438337, "Asus Eee PC", VF_NONE, NULL, 0, hdaudio_eeepc_mixer_init},
+
+ /*
+ * Asus A7K
+ */
+ {0x10431339, "Asus A7K", VF_ALC88X_HACK, (char **) &alc880remap, 0, hdaudio_asus_a7k_GPIO_init}, // ALC660
+
+/*
+ * Known Macintosh systems
+ */
+ {0x106b0800, "Intel Mac V1", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b0700, "Intel Mac V2", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b0600, "Intel Mac V2", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b0200, "Intel Mac V3", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b0e00, "Intel Mac V3", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b0f00, "Intel Mac V3", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b1600, "Intel Mac V3", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b1700, "Intel Mac V3", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b1e00, "Intel Mac V3", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b1a00, "Intel Mac V4", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ // {0x00000100, "Intel Mac V4", VF_NONE, (char **) &stac922xremap, ?, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b0a00, "Intel Mac V5", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b2200, "Intel Mac V5", VF_NONE, (char **) &stac922xremap, 0, hdaudio_mac_sigmatel_GPIO_init},
+ {0x106b3200, "Intel iMac", VF_ALC88X_HACK, (char **) &alc883remap, 0, hdaudio_mac_realtek_GPIO_init}, // ALC885
+
+ {0, "Unknown"}
+};
+