forked from Minki/linux
ALSA: hda - Add ALC670 codec support
- Fixed alc_subsystem_id( ) typo and add new function. - !(ass & 0x100000)) ==> Delete this check. It is unnecessary check. - Add porti - ALC670 support Signed-off-by: Kailang Yang <kailang@realtek.com> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
dd2b4a7abf
commit
6227cdced0
@ -1254,7 +1254,7 @@ static void alc_init_auto_mic(struct hda_codec *codec)
|
|||||||
*/
|
*/
|
||||||
static int alc_subsystem_id(struct hda_codec *codec,
|
static int alc_subsystem_id(struct hda_codec *codec,
|
||||||
hda_nid_t porta, hda_nid_t porte,
|
hda_nid_t porta, hda_nid_t porte,
|
||||||
hda_nid_t portd)
|
hda_nid_t portd, hda_nid_t porti)
|
||||||
{
|
{
|
||||||
unsigned int ass, tmp, i;
|
unsigned int ass, tmp, i;
|
||||||
unsigned nid;
|
unsigned nid;
|
||||||
@ -1280,7 +1280,7 @@ static int alc_subsystem_id(struct hda_codec *codec,
|
|||||||
snd_printd("realtek: No valid SSID, "
|
snd_printd("realtek: No valid SSID, "
|
||||||
"checking pincfg 0x%08x for NID 0x%x\n",
|
"checking pincfg 0x%08x for NID 0x%x\n",
|
||||||
ass, nid);
|
ass, nid);
|
||||||
if (!(ass & 1) && !(ass & 0x100000))
|
if (!(ass & 1))
|
||||||
return 0;
|
return 0;
|
||||||
if ((ass >> 30) != 1) /* no physical connection */
|
if ((ass >> 30) != 1) /* no physical connection */
|
||||||
return 0;
|
return 0;
|
||||||
@ -1340,6 +1340,8 @@ do_sku:
|
|||||||
nid = porte;
|
nid = porte;
|
||||||
else if (tmp == 2)
|
else if (tmp == 2)
|
||||||
nid = portd;
|
nid = portd;
|
||||||
|
else if (tmp == 3)
|
||||||
|
nid = porti;
|
||||||
else
|
else
|
||||||
return 1;
|
return 1;
|
||||||
for (i = 0; i < spec->autocfg.line_outs; i++)
|
for (i = 0; i < spec->autocfg.line_outs; i++)
|
||||||
@ -1354,9 +1356,10 @@ do_sku:
|
|||||||
}
|
}
|
||||||
|
|
||||||
static void alc_ssid_check(struct hda_codec *codec,
|
static void alc_ssid_check(struct hda_codec *codec,
|
||||||
hda_nid_t porta, hda_nid_t porte, hda_nid_t portd)
|
hda_nid_t porta, hda_nid_t porte,
|
||||||
|
hda_nid_t portd, hda_nid_t porti)
|
||||||
{
|
{
|
||||||
if (!alc_subsystem_id(codec, porta, porte, portd)) {
|
if (!alc_subsystem_id(codec, porta, porte, portd, porti)) {
|
||||||
struct alc_spec *spec = codec->spec;
|
struct alc_spec *spec = codec->spec;
|
||||||
snd_printd("realtek: "
|
snd_printd("realtek: "
|
||||||
"Enable default setup for auto mode as fallback\n");
|
"Enable default setup for auto mode as fallback\n");
|
||||||
@ -4859,7 +4862,7 @@ static int alc880_parse_auto_config(struct hda_codec *codec)
|
|||||||
spec->num_mux_defs = 1;
|
spec->num_mux_defs = 1;
|
||||||
spec->input_mux = &spec->private_imux[0];
|
spec->input_mux = &spec->private_imux[0];
|
||||||
|
|
||||||
alc_ssid_check(codec, 0x15, 0x1b, 0x14);
|
alc_ssid_check(codec, 0x15, 0x1b, 0x14, 0);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -6393,7 +6396,7 @@ static int alc260_parse_auto_config(struct hda_codec *codec)
|
|||||||
spec->num_mux_defs = 1;
|
spec->num_mux_defs = 1;
|
||||||
spec->input_mux = &spec->private_imux[0];
|
spec->input_mux = &spec->private_imux[0];
|
||||||
|
|
||||||
alc_ssid_check(codec, 0x10, 0x15, 0x0f);
|
alc_ssid_check(codec, 0x10, 0x15, 0x0f, 0);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -10224,7 +10227,7 @@ static int alc882_parse_auto_config(struct hda_codec *codec)
|
|||||||
spec->num_mux_defs = 1;
|
spec->num_mux_defs = 1;
|
||||||
spec->input_mux = &spec->private_imux[0];
|
spec->input_mux = &spec->private_imux[0];
|
||||||
|
|
||||||
alc_ssid_check(codec, 0x15, 0x1b, 0x14);
|
alc_ssid_check(codec, 0x15, 0x1b, 0x14, 0);
|
||||||
|
|
||||||
err = alc_auto_add_mic_boost(codec);
|
err = alc_auto_add_mic_boost(codec);
|
||||||
if (err < 0)
|
if (err < 0)
|
||||||
@ -11782,7 +11785,7 @@ static int alc262_parse_auto_config(struct hda_codec *codec)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
alc_ssid_check(codec, 0x15, 0x14, 0x1b);
|
alc_ssid_check(codec, 0x15, 0x1b, 0x14, 0);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -12733,7 +12736,6 @@ static int alc268_new_analog_output(struct alc_spec *spec, hda_nid_t nid,
|
|||||||
dac = 0x02;
|
dac = 0x02;
|
||||||
break;
|
break;
|
||||||
case 0x15:
|
case 0x15:
|
||||||
case 0x21:
|
|
||||||
dac = 0x03;
|
dac = 0x03;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
@ -12954,7 +12956,7 @@ static int alc268_parse_auto_config(struct hda_codec *codec)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
alc_ssid_check(codec, 0x15, 0x1b, 0x14);
|
alc_ssid_check(codec, 0x15, 0x1b, 0x14, 0);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -13845,11 +13847,11 @@ static int alc269_parse_auto_config(struct hda_codec *codec)
|
|||||||
if ((alc_read_coef_idx(codec, 0) & 0x00f0) == 0x0010) {
|
if ((alc_read_coef_idx(codec, 0) & 0x00f0) == 0x0010) {
|
||||||
add_verb(spec, alc269vb_init_verbs);
|
add_verb(spec, alc269vb_init_verbs);
|
||||||
real_capsrc_nids = alc269vb_capsrc_nids[0];
|
real_capsrc_nids = alc269vb_capsrc_nids[0];
|
||||||
alc_ssid_check(codec, 0x21, 0x1b, 0x14);
|
alc_ssid_check(codec, 0, 0x1b, 0x14, 0x21);
|
||||||
} else {
|
} else {
|
||||||
add_verb(spec, alc269_init_verbs);
|
add_verb(spec, alc269_init_verbs);
|
||||||
real_capsrc_nids = alc269_capsrc_nids[0];
|
real_capsrc_nids = alc269_capsrc_nids[0];
|
||||||
alc_ssid_check(codec, 0x15, 0x1b, 0x14);
|
alc_ssid_check(codec, 0x15, 0x1b, 0x14, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
spec->num_mux_defs = 1;
|
spec->num_mux_defs = 1;
|
||||||
@ -15013,7 +15015,7 @@ static int alc861_parse_auto_config(struct hda_codec *codec)
|
|||||||
spec->num_adc_nids = ARRAY_SIZE(alc861_adc_nids);
|
spec->num_adc_nids = ARRAY_SIZE(alc861_adc_nids);
|
||||||
set_capture_mixer(codec);
|
set_capture_mixer(codec);
|
||||||
|
|
||||||
alc_ssid_check(codec, 0x0e, 0x0f, 0x0b);
|
alc_ssid_check(codec, 0x0e, 0x0f, 0x0b, 0);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -15904,7 +15906,7 @@ static struct alc_config_preset alc861vd_presets[] = {
|
|||||||
static int alc861vd_auto_create_input_ctls(struct hda_codec *codec,
|
static int alc861vd_auto_create_input_ctls(struct hda_codec *codec,
|
||||||
const struct auto_pin_cfg *cfg)
|
const struct auto_pin_cfg *cfg)
|
||||||
{
|
{
|
||||||
return alc_auto_create_input_ctls(codec, cfg, 0x15, 0x22, 0);
|
return alc_auto_create_input_ctls(codec, cfg, 0x15, 0x09, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -16140,7 +16142,7 @@ static int alc861vd_parse_auto_config(struct hda_codec *codec)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
alc_ssid_check(codec, 0x15, 0x1b, 0x14);
|
alc_ssid_check(codec, 0x15, 0x1b, 0x14, 0);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -17627,6 +17629,7 @@ static struct snd_pci_quirk alc662_cfg_tbl[] = {
|
|||||||
SND_PCI_QUIRK(0x144d, 0xca00, "Samsung NC10", ALC272_SAMSUNG_NC10),
|
SND_PCI_QUIRK(0x144d, 0xca00, "Samsung NC10", ALC272_SAMSUNG_NC10),
|
||||||
SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte 945GCM-S2L",
|
SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte 945GCM-S2L",
|
||||||
ALC662_3ST_6ch_DIG),
|
ALC662_3ST_6ch_DIG),
|
||||||
|
SND_PCI_QUIRK(0x152d, 0x2304, "Quanta WH1", ALC663_ASUS_H13),
|
||||||
SND_PCI_QUIRK(0x1565, 0x820f, "Biostar TA780G M2+", ALC662_3ST_6ch_DIG),
|
SND_PCI_QUIRK(0x1565, 0x820f, "Biostar TA780G M2+", ALC662_3ST_6ch_DIG),
|
||||||
SND_PCI_QUIRK(0x1631, 0xc10c, "PB RS65", ALC663_ASUS_M51VA),
|
SND_PCI_QUIRK(0x1631, 0xc10c, "PB RS65", ALC663_ASUS_M51VA),
|
||||||
SND_PCI_QUIRK(0x17aa, 0x101e, "Lenovo", ALC662_LENOVO_101E),
|
SND_PCI_QUIRK(0x17aa, 0x101e, "Lenovo", ALC662_LENOVO_101E),
|
||||||
@ -18257,7 +18260,11 @@ static int alc662_parse_auto_config(struct hda_codec *codec)
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
return err;
|
return err;
|
||||||
|
|
||||||
alc_ssid_check(codec, 0x15, 0x1b, 0x14);
|
if (codec->vendor_id == 0x10ec0272 || codec->vendor_id == 0x10ec0663 ||
|
||||||
|
codec->vendor_id == 0x10ec0665 || codec->vendor_id == 0x10ec0670)
|
||||||
|
alc_ssid_check(codec, 0x15, 0x1b, 0x14, 0x21);
|
||||||
|
else
|
||||||
|
alc_ssid_check(codec, 0x15, 0x1b, 0x14, 0);
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -18407,6 +18414,7 @@ static struct hda_codec_preset snd_hda_preset_realtek[] = {
|
|||||||
.patch = patch_alc662 },
|
.patch = patch_alc662 },
|
||||||
{ .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 },
|
{ .id = 0x10ec0663, .name = "ALC663", .patch = patch_alc662 },
|
||||||
{ .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 },
|
{ .id = 0x10ec0665, .name = "ALC665", .patch = patch_alc662 },
|
||||||
|
{ .id = 0x10ec0670, .name = "ALC670", .patch = patch_alc662 },
|
||||||
{ .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 },
|
{ .id = 0x10ec0880, .name = "ALC880", .patch = patch_alc880 },
|
||||||
{ .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 },
|
{ .id = 0x10ec0882, .name = "ALC882", .patch = patch_alc882 },
|
||||||
{ .id = 0x10ec0883, .name = "ALC883", .patch = patch_alc882 },
|
{ .id = 0x10ec0883, .name = "ALC883", .patch = patch_alc882 },
|
||||||
|
Loading…
Reference in New Issue
Block a user