|
|
@@ -515,6 +515,15 @@ static void alc_auto_init_amp(struct hda_codec *codec, int type)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+/* get a primary headphone pin if available */
|
|
|
+static hda_nid_t alc_get_hp_pin(struct alc_spec *spec)
|
|
|
+{
|
|
|
+ if (spec->gen.autocfg.hp_pins[0])
|
|
|
+ return spec->gen.autocfg.hp_pins[0];
|
|
|
+ if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
+ return spec->gen.autocfg.line_out_pins[0];
|
|
|
+ return 0;
|
|
|
+}
|
|
|
|
|
|
/*
|
|
|
* Realtek SSID verification
|
|
|
@@ -725,9 +734,7 @@ do_sku:
|
|
|
* 15 : 1 --> enable the function "Mute internal speaker
|
|
|
* when the external headphone out jack is plugged"
|
|
|
*/
|
|
|
- if (!spec->gen.autocfg.hp_pins[0] &&
|
|
|
- !(spec->gen.autocfg.line_out_pins[0] &&
|
|
|
- spec->gen.autocfg.line_out_type == AUTO_PIN_HP_OUT)) {
|
|
|
+ if (!alc_get_hp_pin(spec)) {
|
|
|
hda_nid_t nid;
|
|
|
tmp = (ass >> 11) & 0x3; /* HP to chassis */
|
|
|
nid = ports[tmp];
|
|
|
@@ -2959,15 +2966,10 @@ static void alc282_restore_default_value(struct hda_codec *codec)
|
|
|
static void alc282_init(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
bool hp_pin_sense;
|
|
|
int coef78;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs && spec->gen.suppress_auto_mute) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
alc282_restore_default_value(codec);
|
|
|
|
|
|
if (!hp_pin)
|
|
|
@@ -3001,15 +3003,10 @@ static void alc282_init(struct hda_codec *codec)
|
|
|
static void alc282_shutup(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
bool hp_pin_sense;
|
|
|
int coef78;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs && spec->gen.suppress_auto_mute) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
if (!hp_pin) {
|
|
|
alc269_shutup(codec);
|
|
|
return;
|
|
|
@@ -3084,14 +3081,9 @@ static void alc283_restore_default_value(struct hda_codec *codec)
|
|
|
static void alc283_init(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
bool hp_pin_sense;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
alc283_restore_default_value(codec);
|
|
|
|
|
|
if (!hp_pin)
|
|
|
@@ -3125,14 +3117,9 @@ static void alc283_init(struct hda_codec *codec)
|
|
|
static void alc283_shutup(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
bool hp_pin_sense;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
if (!hp_pin) {
|
|
|
alc269_shutup(codec);
|
|
|
return;
|
|
|
@@ -3166,14 +3153,9 @@ static void alc283_shutup(struct hda_codec *codec)
|
|
|
static void alc256_init(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
bool hp_pin_sense;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs && spec->gen.suppress_auto_mute) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
if (!hp_pin)
|
|
|
return;
|
|
|
|
|
|
@@ -3207,14 +3189,9 @@ static void alc256_init(struct hda_codec *codec)
|
|
|
static void alc256_shutup(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
bool hp_pin_sense;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs && spec->gen.suppress_auto_mute) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
if (!hp_pin) {
|
|
|
alc269_shutup(codec);
|
|
|
return;
|
|
|
@@ -3248,14 +3225,9 @@ static void alc256_shutup(struct hda_codec *codec)
|
|
|
static void alc225_init(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
bool hp1_pin_sense, hp2_pin_sense;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs && spec->gen.suppress_auto_mute) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
if (!hp_pin)
|
|
|
return;
|
|
|
|
|
|
@@ -3296,14 +3268,9 @@ static void alc225_init(struct hda_codec *codec)
|
|
|
static void alc225_shutup(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
bool hp1_pin_sense, hp2_pin_sense;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs && spec->gen.suppress_auto_mute) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
if (!hp_pin) {
|
|
|
alc269_shutup(codec);
|
|
|
return;
|
|
|
@@ -3345,14 +3312,9 @@ static void alc225_shutup(struct hda_codec *codec)
|
|
|
static void alc_default_init(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
bool hp_pin_sense;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs && spec->gen.suppress_auto_mute) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
if (!hp_pin)
|
|
|
return;
|
|
|
|
|
|
@@ -3379,14 +3341,9 @@ static void alc_default_init(struct hda_codec *codec)
|
|
|
static void alc_default_shutup(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
bool hp_pin_sense;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs && spec->gen.suppress_auto_mute) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
if (!hp_pin) {
|
|
|
alc269_shutup(codec);
|
|
|
return;
|
|
|
@@ -3416,14 +3373,9 @@ static void alc_default_shutup(struct hda_codec *codec)
|
|
|
static void alc294_hp_init(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
int i, val;
|
|
|
|
|
|
- if (!spec->gen.autocfg.hp_outs && spec->gen.suppress_auto_mute) {
|
|
|
- if (spec->gen.autocfg.line_out_type == AC_JACK_HP_OUT)
|
|
|
- hp_pin = spec->gen.autocfg.line_out_pins[0];
|
|
|
- }
|
|
|
-
|
|
|
if (!hp_pin)
|
|
|
return;
|
|
|
|
|
|
@@ -4825,7 +4777,7 @@ static void alc_update_headset_mode(struct hda_codec *codec)
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
|
|
|
hda_nid_t mux_pin = spec->gen.imux_pins[spec->gen.cur_mux[0]];
|
|
|
- hda_nid_t hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ hda_nid_t hp_pin = alc_get_hp_pin(spec);
|
|
|
|
|
|
int new_headset_mode;
|
|
|
|
|
|
@@ -5104,7 +5056,7 @@ static void alc_fixup_tpt470_dock(struct hda_codec *codec,
|
|
|
static void alc_shutup_dell_xps13(struct hda_codec *codec)
|
|
|
{
|
|
|
struct alc_spec *spec = codec->spec;
|
|
|
- int hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ int hp_pin = alc_get_hp_pin(spec);
|
|
|
|
|
|
/* Prevent pop noises when headphones are plugged in */
|
|
|
snd_hda_codec_write(codec, hp_pin, 0,
|
|
|
@@ -5197,7 +5149,7 @@ static void alc271_hp_gate_mic_jack(struct hda_codec *codec,
|
|
|
|
|
|
if (action == HDA_FIXUP_ACT_PROBE) {
|
|
|
int mic_pin = find_ext_mic_pin(codec);
|
|
|
- int hp_pin = spec->gen.autocfg.hp_pins[0];
|
|
|
+ int hp_pin = alc_get_hp_pin(spec);
|
|
|
|
|
|
if (snd_BUG_ON(!mic_pin || !hp_pin))
|
|
|
return;
|