ALSA: HDA: Add a new model "asus" for Conexant 5066/205xx
BugLink: http://bugs.launchpad.net/bugs/701271 This new model, named "asus", is identical to the "hp_laptop" model, except for the location of the internal mic, which is at pin 0x1a. It is used for Asus K52JU and Lenovo G560. Signed-off-by: David Henningsson <david.henningsson@canonical.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
committed by
Takashi Iwai
parent
02b6b5b640
commit
a1d6906e2d
@@ -296,6 +296,7 @@ Conexant 5066
|
|||||||
=============
|
=============
|
||||||
laptop Basic Laptop config (default)
|
laptop Basic Laptop config (default)
|
||||||
hp-laptop HP laptops, e g G60
|
hp-laptop HP laptops, e g G60
|
||||||
|
asus Asus K52JU, Lenovo G560
|
||||||
dell-laptop Dell laptops
|
dell-laptop Dell laptops
|
||||||
dell-vostro Dell Vostro
|
dell-vostro Dell Vostro
|
||||||
olpc-xo-1_5 OLPC XO 1.5
|
olpc-xo-1_5 OLPC XO 1.5
|
||||||
|
@@ -127,6 +127,7 @@ struct conexant_spec {
|
|||||||
unsigned int ideapad:1;
|
unsigned int ideapad:1;
|
||||||
unsigned int thinkpad:1;
|
unsigned int thinkpad:1;
|
||||||
unsigned int hp_laptop:1;
|
unsigned int hp_laptop:1;
|
||||||
|
unsigned int asus:1;
|
||||||
|
|
||||||
unsigned int ext_mic_present;
|
unsigned int ext_mic_present;
|
||||||
unsigned int recording;
|
unsigned int recording;
|
||||||
@@ -2312,6 +2313,19 @@ static void cxt5066_ideapad_automic(struct hda_codec *codec)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* toggle input of built-in digital mic and mic jack appropriately */
|
||||||
|
static void cxt5066_asus_automic(struct hda_codec *codec)
|
||||||
|
{
|
||||||
|
unsigned int present;
|
||||||
|
|
||||||
|
present = snd_hda_jack_detect(codec, 0x1b);
|
||||||
|
snd_printdd("CXT5066: external microphone present=%d\n", present);
|
||||||
|
snd_hda_codec_write(codec, 0x17, 0, AC_VERB_SET_CONNECT_SEL,
|
||||||
|
present ? 1 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/* toggle input of built-in digital mic and mic jack appropriately */
|
/* toggle input of built-in digital mic and mic jack appropriately */
|
||||||
static void cxt5066_hp_laptop_automic(struct hda_codec *codec)
|
static void cxt5066_hp_laptop_automic(struct hda_codec *codec)
|
||||||
{
|
{
|
||||||
@@ -2400,6 +2414,8 @@ static void cxt5066_automic(struct hda_codec *codec)
|
|||||||
cxt5066_thinkpad_automic(codec);
|
cxt5066_thinkpad_automic(codec);
|
||||||
else if (spec->hp_laptop)
|
else if (spec->hp_laptop)
|
||||||
cxt5066_hp_laptop_automic(codec);
|
cxt5066_hp_laptop_automic(codec);
|
||||||
|
else if (spec->asus)
|
||||||
|
cxt5066_asus_automic(codec);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* unsolicited event for jack sensing */
|
/* unsolicited event for jack sensing */
|
||||||
@@ -3045,6 +3061,7 @@ enum {
|
|||||||
CXT5066_DELL_VOSTRO, /* Dell Vostro 1015i */
|
CXT5066_DELL_VOSTRO, /* Dell Vostro 1015i */
|
||||||
CXT5066_IDEAPAD, /* Lenovo IdeaPad U150 */
|
CXT5066_IDEAPAD, /* Lenovo IdeaPad U150 */
|
||||||
CXT5066_THINKPAD, /* Lenovo ThinkPad T410s, others? */
|
CXT5066_THINKPAD, /* Lenovo ThinkPad T410s, others? */
|
||||||
|
CXT5066_ASUS, /* Asus K52JU, Lenovo G560 - Int mic at 0x1a and Ext mic at 0x1b */
|
||||||
CXT5066_HP_LAPTOP, /* HP Laptop */
|
CXT5066_HP_LAPTOP, /* HP Laptop */
|
||||||
CXT5066_MODELS
|
CXT5066_MODELS
|
||||||
};
|
};
|
||||||
@@ -3056,6 +3073,7 @@ static const char * const cxt5066_models[CXT5066_MODELS] = {
|
|||||||
[CXT5066_DELL_VOSTRO] = "dell-vostro",
|
[CXT5066_DELL_VOSTRO] = "dell-vostro",
|
||||||
[CXT5066_IDEAPAD] = "ideapad",
|
[CXT5066_IDEAPAD] = "ideapad",
|
||||||
[CXT5066_THINKPAD] = "thinkpad",
|
[CXT5066_THINKPAD] = "thinkpad",
|
||||||
|
[CXT5066_ASUS] = "asus",
|
||||||
[CXT5066_HP_LAPTOP] = "hp-laptop",
|
[CXT5066_HP_LAPTOP] = "hp-laptop",
|
||||||
};
|
};
|
||||||
|
|
||||||
@@ -3068,6 +3086,7 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
|
|||||||
SND_PCI_QUIRK(0x1028, 0x0408, "Dell Inspiron One 19T", CXT5066_IDEAPAD),
|
SND_PCI_QUIRK(0x1028, 0x0408, "Dell Inspiron One 19T", CXT5066_IDEAPAD),
|
||||||
SND_PCI_QUIRK(0x103c, 0x360b, "HP G60", CXT5066_HP_LAPTOP),
|
SND_PCI_QUIRK(0x103c, 0x360b, "HP G60", CXT5066_HP_LAPTOP),
|
||||||
SND_PCI_QUIRK(0x1043, 0x13f3, "Asus A52J", CXT5066_HP_LAPTOP),
|
SND_PCI_QUIRK(0x1043, 0x13f3, "Asus A52J", CXT5066_HP_LAPTOP),
|
||||||
|
SND_PCI_QUIRK(0x1043, 0x1643, "Asus K52JU", CXT5066_ASUS),
|
||||||
SND_PCI_QUIRK(0x1179, 0xff1e, "Toshiba Satellite C650D", CXT5066_IDEAPAD),
|
SND_PCI_QUIRK(0x1179, 0xff1e, "Toshiba Satellite C650D", CXT5066_IDEAPAD),
|
||||||
SND_PCI_QUIRK(0x1179, 0xff50, "Toshiba Satellite P500-PSPGSC-01800T", CXT5066_OLPC_XO_1_5),
|
SND_PCI_QUIRK(0x1179, 0xff50, "Toshiba Satellite P500-PSPGSC-01800T", CXT5066_OLPC_XO_1_5),
|
||||||
SND_PCI_QUIRK(0x1179, 0xffe0, "Toshiba Satellite Pro T130-15F", CXT5066_OLPC_XO_1_5),
|
SND_PCI_QUIRK(0x1179, 0xffe0, "Toshiba Satellite Pro T130-15F", CXT5066_OLPC_XO_1_5),
|
||||||
@@ -3077,6 +3096,7 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
|
|||||||
SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400s", CXT5066_THINKPAD),
|
SND_PCI_QUIRK(0x17aa, 0x20f2, "Lenovo T400s", CXT5066_THINKPAD),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x21c5, "Thinkpad Edge 13", CXT5066_THINKPAD),
|
SND_PCI_QUIRK(0x17aa, 0x21c5, "Thinkpad Edge 13", CXT5066_THINKPAD),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo Thinkpad", CXT5066_THINKPAD),
|
SND_PCI_QUIRK(0x17aa, 0x215e, "Lenovo Thinkpad", CXT5066_THINKPAD),
|
||||||
|
SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo G560", CXT5066_ASUS),
|
||||||
SND_PCI_QUIRK_VENDOR(0x17aa, "Lenovo", CXT5066_IDEAPAD), /* Fallback for Lenovos without dock mic */
|
SND_PCI_QUIRK_VENDOR(0x17aa, "Lenovo", CXT5066_IDEAPAD), /* Fallback for Lenovos without dock mic */
|
||||||
{}
|
{}
|
||||||
};
|
};
|
||||||
@@ -3132,13 +3152,15 @@ static int patch_cxt5066(struct hda_codec *codec)
|
|||||||
spec->num_init_verbs++;
|
spec->num_init_verbs++;
|
||||||
spec->dell_automute = 1;
|
spec->dell_automute = 1;
|
||||||
break;
|
break;
|
||||||
|
case CXT5066_ASUS:
|
||||||
case CXT5066_HP_LAPTOP:
|
case CXT5066_HP_LAPTOP:
|
||||||
codec->patch_ops.init = cxt5066_init;
|
codec->patch_ops.init = cxt5066_init;
|
||||||
codec->patch_ops.unsol_event = cxt5066_unsol_event;
|
codec->patch_ops.unsol_event = cxt5066_unsol_event;
|
||||||
spec->init_verbs[spec->num_init_verbs] =
|
spec->init_verbs[spec->num_init_verbs] =
|
||||||
cxt5066_init_verbs_hp_laptop;
|
cxt5066_init_verbs_hp_laptop;
|
||||||
spec->num_init_verbs++;
|
spec->num_init_verbs++;
|
||||||
spec->hp_laptop = 1;
|
spec->hp_laptop = board_config == CXT5066_HP_LAPTOP;
|
||||||
|
spec->asus = board_config == CXT5066_ASUS;
|
||||||
spec->mixers[spec->num_mixers++] = cxt5066_mixer_master;
|
spec->mixers[spec->num_mixers++] = cxt5066_mixer_master;
|
||||||
spec->mixers[spec->num_mixers++] = cxt5066_mixers;
|
spec->mixers[spec->num_mixers++] = cxt5066_mixers;
|
||||||
/* no S/PDIF out */
|
/* no S/PDIF out */
|
||||||
|
Reference in New Issue
Block a user