|
@@ -903,7 +903,7 @@ static int alc_codec_rename(struct hda_codec *codec, const char *name)
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * Rename codecs appropriately from COEF value
|
|
|
+ * Rename codecs appropriately from COEF value or subvendor id
|
|
|
*/
|
|
|
struct alc_codec_rename_table {
|
|
|
unsigned int vendor_id;
|
|
@@ -912,6 +912,13 @@ struct alc_codec_rename_table {
|
|
|
const char *name;
|
|
|
};
|
|
|
|
|
|
+struct alc_codec_rename_pci_table {
|
|
|
+ unsigned int codec_vendor_id;
|
|
|
+ unsigned short pci_subvendor;
|
|
|
+ unsigned short pci_subdevice;
|
|
|
+ const char *name;
|
|
|
+};
|
|
|
+
|
|
|
static struct alc_codec_rename_table rename_tbl[] = {
|
|
|
{ 0x10ec0269, 0xfff0, 0x3010, "ALC277" },
|
|
|
{ 0x10ec0269, 0xf0f0, 0x2010, "ALC259" },
|
|
@@ -931,9 +938,20 @@ static struct alc_codec_rename_table rename_tbl[] = {
|
|
|
{ } /* terminator */
|
|
|
};
|
|
|
|
|
|
+static struct alc_codec_rename_pci_table rename_pci_tbl[] = {
|
|
|
+ { 0x10ec0280, 0x1028, 0, "ALC3220" },
|
|
|
+ { 0x10ec0282, 0x1028, 0, "ALC3221" },
|
|
|
+ { 0x10ec0283, 0x1028, 0, "ALC3223" },
|
|
|
+ { 0x10ec0292, 0x1028, 0, "ALC3226" },
|
|
|
+ { 0x10ec0255, 0x1028, 0, "ALC3234" },
|
|
|
+ { 0x10ec0668, 0x1028, 0, "ALC3661" },
|
|
|
+ { } /* terminator */
|
|
|
+};
|
|
|
+
|
|
|
static int alc_codec_rename_from_preset(struct hda_codec *codec)
|
|
|
{
|
|
|
const struct alc_codec_rename_table *p;
|
|
|
+ const struct alc_codec_rename_pci_table *q;
|
|
|
|
|
|
for (p = rename_tbl; p->vendor_id; p++) {
|
|
|
if (p->vendor_id != codec->vendor_id)
|
|
@@ -941,6 +959,17 @@ static int alc_codec_rename_from_preset(struct hda_codec *codec)
|
|
|
if ((alc_get_coef0(codec) & p->coef_mask) == p->coef_bits)
|
|
|
return alc_codec_rename(codec, p->name);
|
|
|
}
|
|
|
+
|
|
|
+ for (q = rename_pci_tbl; q->codec_vendor_id; q++) {
|
|
|
+ if (q->codec_vendor_id != codec->vendor_id)
|
|
|
+ continue;
|
|
|
+ if (q->pci_subvendor != codec->bus->pci->subsystem_vendor)
|
|
|
+ continue;
|
|
|
+ if (!q->pci_subdevice ||
|
|
|
+ q->pci_subdevice == codec->bus->pci->subsystem_device)
|
|
|
+ return alc_codec_rename(codec, q->name);
|
|
|
+ }
|
|
|
+
|
|
|
return 0;
|
|
|
}
|
|
|
|