Lenovo Y430 Решение проблемы с «mute»
Форум — Linux-hardware
Так как предыдущая тема закрыта, открываю новую. Уж очень хочется поделиться с сообществом решением этой проблемы. Надо сказать, что я очень долго искал, но везде были лишь вопросы, ответов не было. Наброски патча, я нашёл на багтрекере алсы, до ума пришлось доводить самому.
--- alsa-driver-1.0.20.orig/alsa-kernel/pci/hda/patch_conexant.c 2009-06-28 04:49:31.000000000 +0400
+++ alsa-driver-1.0.20/alsa-kernel/pci/hda/patch_conexant.c 2009-06-28 05:31:31.000000000 +0400
@@ -1588,6 +1588,14 @@
pinctl);
}
+static void cxt5051_update_subwoofer(struct hda_codec *codec)
+{
+ struct conexant_spec *spec = codec->spec;
+ unsigned int pinctl;
+ pinctl = (!spec->hp_present && spec->cur_eapd) ? PIN_OUT : 0;
+ snd_hda_codec_write(codec, 0x1b, 0, AC_VERB_SET_PIN_WIDGET_CONTROL, pinctl);
+}
+
/* turn on/off EAPD (+ mute HP) as a master switch */
static int cxt5051_hp_master_sw_put(struct snd_kcontrol *kcontrol,
struct snd_ctl_elem_value *ucontrol)
@@ -1597,6 +1605,7 @@
if (!cxt_eapd_put(kcontrol, ucontrol))
return 0;
cxt5051_update_speaker(codec);
+ cxt5051_update_subwoofer(codec);
return 1;
}
@@ -1652,6 +1661,7 @@
AC_VERB_GET_PIN_SENSE, 0) &
AC_PINSENSE_PRESENCE;
cxt5051_update_speaker(codec);
+ cxt5051_update_subwoofer(codec);
}
/* unsolicited event for HP jack sensing */