tags 658728 + patch moreinfo quit Takashi Iwai wrote:
> I fixed the upstream code no to create the superfluous Auto-Mute > control. But the change is a bit intrusive so it's targeted only for > 3.4 kernel, as you can work around it easily by turning off Auto-Mute > even in the current tree. Thanks. A. Costa, could you try the attached patches, against 3.2.y? It works like this: 0. Prerequisites: apt-get install git build-essential 1. Get linux 3.2.y: git clone -o stable \ git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git cd linux Or, if you already have a checkout of the kernel: cd linux git remote add -f stable \ git://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git 2. Configure, build, and test: git checkout stable/linux-3.2.y cp /boot/config-$(uname -r) .config; # current configuration make localmodconfig; # optional: minimize configuration make deb-pkg; # optionally with -j<num> for parallel build dpkg -i ../<name of package> reboot Hopefully it reproduces the bug: the Auto-Mute control is present and enabling it turns off sound. 3. Apply patches and see if they work. git apply --index patch1 git apply --index patch2 make deb-pkg; # maybe with -j4 dpkg -i ../<name of package> reboot
From: Takashi Iwai <ti...@suse.de> Date: Mon, 13 Feb 2012 11:55:02 +0100 Subject: [PATCH 1/2] ALSA: hda - Add codec->no_jack_detect flag commit 71b1e9e43d5199f57c109e20c0f4dffc5c048130 upstream. Add a new flag to indicate that the codec has no jack-detection cap. This flag should be set for hardwares that have no jack-detect implementation although the codec chip itself supports it. Signed-off-by: Takashi Iwai <ti...@suse.de> Signed-off-by: Jonathan Nieder <jrnie...@gmail.com> --- sound/pci/hda/hda_codec.h | 1 + sound/pci/hda/hda_local.h | 2 ++ 2 files changed, 3 insertions(+), 0 deletions(-) diff --git a/sound/pci/hda/hda_codec.h b/sound/pci/hda/hda_codec.h index 564471169cae..f4e3fbff6f94 100644 --- a/sound/pci/hda/hda_codec.h +++ b/sound/pci/hda/hda_codec.h @@ -855,6 +855,7 @@ struct hda_codec { unsigned int pins_shutup:1; /* pins are shut up */ unsigned int no_trigger_sense:1; /* don't trigger at pin-sensing */ unsigned int ignore_misc_bit:1; /* ignore MISC_NO_PRESENCE bit */ + unsigned int no_jack_detect:1; /* Machine has no jack-detection */ #ifdef CONFIG_SND_HDA_POWER_SAVE unsigned int power_on :1; /* current (global) power-state */ unsigned int power_transition :1; /* power-state in transition */ diff --git a/sound/pci/hda/hda_local.h b/sound/pci/hda/hda_local.h index 368f0c513819..c78b753e0fc0 100644 --- a/sound/pci/hda/hda_local.h +++ b/sound/pci/hda/hda_local.h @@ -515,6 +515,8 @@ int snd_hda_jack_detect(struct hda_codec *codec, hda_nid_t nid); static inline bool is_jack_detectable(struct hda_codec *codec, hda_nid_t nid) { + if (codec->no_jack_detect) + return false; if (!(snd_hda_query_pin_caps(codec, nid) & AC_PINCAP_PRES_DETECT)) return false; if (!codec->ignore_misc_bit && -- 1.7.9
From: Takashi Iwai <ti...@suse.de> Date: Mon, 13 Feb 2012 11:56:25 +0100 Subject: [PATCH 2/2] ALSA: hda - Suppress auto-mute feature on some machines with ALC861 commit e652f4c861fb7f1f59ff0828db0d85578471932d upstream. A few machines with ALC861 & co are reported not to work properly with the auto-mute feature in software. The auto-mute feature is implemented in the hardware level, and the jack-detection never works with them. Also, rename the fixup index as ALC861_FIXUP_* to follow the standard. [jn: the original rationalized the name of the fixup index, but for 3.2.y let's not] Signed-off-by: Takashi Iwai <ti...@suse.de> Signed-off-by: Jonathan Nieder <jrnie...@gmail.com> --- sound/pci/hda/patch_realtek.c | 22 ++++++++++++++++++++++ 1 files changed, 22 insertions(+), 0 deletions(-) diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index 34e5fcc3abd6..4f1f52798e61 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c @@ -5235,6 +5235,8 @@ static const struct hda_amp_list alc861_loopbacks[] = { enum { PINFIX_FSC_AMILO_PI1505, PINFIX_ASUS_A6RP, + ALC861_FIXUP_NO_JACK_DETECT, + ALC861_FIXUP_ASUS_A6RP, }; /* On some laptops, VREF of pin 0x0f is abused for controlling the main amp */ @@ -5256,6 +5258,14 @@ static void alc861_fixup_asus_amp_vref_0f(struct hda_codec *codec, spec->keep_vref_in_automute = 1; } +/* suppress the jack-detection */ +static void alc_fixup_no_jack_detect(struct hda_codec *codec, + const struct alc_fixup *fix, int action) +{ + if (action == ALC_FIXUP_ACT_PRE_PROBE) + codec->no_jack_detect = 1; +} + static const struct alc_fixup alc861_fixups[] = { [PINFIX_FSC_AMILO_PI1505] = { .type = ALC_FIXUP_PINS, @@ -5269,10 +5279,22 @@ static const struct alc_fixup alc861_fixups[] = { .type = ALC_FIXUP_FUNC, .v.func = alc861_fixup_asus_amp_vref_0f, }, + [ALC861_FIXUP_NO_JACK_DETECT] = { + .type = ALC_FIXUP_FUNC, + .v.func = alc_fixup_no_jack_detect, + }, + [ALC861_FIXUP_ASUS_A6RP] = { + .type = ALC_FIXUP_FUNC, + .v.func = alc861_fixup_asus_amp_vref_0f, + .chained = true, + .chain_id = ALC861_FIXUP_NO_JACK_DETECT, + } }; static const struct snd_pci_quirk alc861_fixup_tbl[] = { + SND_PCI_QUIRK(0x1043, 0x1393, "ASUS A6Rp", ALC861_FIXUP_ASUS_A6RP), SND_PCI_QUIRK_VENDOR(0x1043, "ASUS laptop", PINFIX_ASUS_A6RP), + SND_PCI_QUIRK(0x1462, 0x7254, "HP DX2200", ALC861_FIXUP_NO_JACK_DETECT), SND_PCI_QUIRK(0x1584, 0x2b01, "Haier W18", PINFIX_ASUS_A6RP), SND_PCI_QUIRK(0x1734, 0x10c7, "FSC Amilo Pi1505", PINFIX_FSC_AMILO_PI1505), {} -- 1.7.9