lkml.org 
[lkml]   [2009]   [Jul]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 13/37] ALSA: hda - Fix mute control with some ALC262 models
    2.6.27-stable review patch.  If anyone has any objections, please let us know.

    ------------------

    From: Takashi Iwai <tiwai@suse.de>

    commit 8de56b7deb2534a586839eda52843c1dae680dc5 upstream.

    The master mute switch is wrongly implemented as checking the pointer
    instead of its value, thus it can be never muted. This patch fixes
    the issue.

    Reference: Novell bnc#404873
    https://bugzilla.novell.com/show_bug.cgi?id=404873

    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>

    ---
    sound/pci/hda/patch_realtek.c | 33 ++++++++++++++++-----------------
    1 file changed, 16 insertions(+), 17 deletions(-)

    --- a/sound/pci/hda/patch_realtek.c
    +++ b/sound/pci/hda/patch_realtek.c
    @@ -9214,6 +9214,18 @@ static void alc262_lenovo_3000_unsol_eve
    alc262_lenovo_3000_automute(codec, 1);
    }

    +static int amp_stereo_mute_update(struct hda_codec *codec, hda_nid_t nid,
    + int dir, int idx, long *valp)
    +{
    + int i, change = 0;
    +
    + for (i = 0; i < 2; i++, valp++)
    + change |= snd_hda_codec_amp_update(codec, nid, i, dir, idx,
    + HDA_AMP_MUTE,
    + *valp ? 0 : HDA_AMP_MUTE);
    + return change;
    +}
    +
    /* bind hp and internal speaker mute (with plug check) */
    static int alc262_fujitsu_master_sw_put(struct snd_kcontrol *kcontrol,
    struct snd_ctl_elem_value *ucontrol)
    @@ -9222,13 +9234,8 @@ static int alc262_fujitsu_master_sw_put(
    long *valp = ucontrol->value.integer.value;
    int change;

    - change = snd_hda_codec_amp_stereo(codec, 0x14, HDA_OUTPUT, 0,
    - HDA_AMP_MUTE,
    - valp ? 0 : HDA_AMP_MUTE);
    - change |= snd_hda_codec_amp_stereo(codec, 0x1b, HDA_OUTPUT, 0,
    - HDA_AMP_MUTE,
    - valp ? 0 : HDA_AMP_MUTE);
    -
    + change = amp_stereo_mute_update(codec, 0x14, HDA_OUTPUT, 0, valp);
    + change |= amp_stereo_mute_update(codec, 0x1b, HDA_OUTPUT, 0, valp);
    if (change)
    alc262_fujitsu_automute(codec, 0);
    return change;
    @@ -9265,10 +9272,7 @@ static int alc262_lenovo_3000_master_sw_
    long *valp = ucontrol->value.integer.value;
    int change;

    - change = snd_hda_codec_amp_stereo(codec, 0x1b, HDA_OUTPUT, 0,
    - HDA_AMP_MUTE,
    - valp ? 0 : HDA_AMP_MUTE);
    -
    + change = amp_stereo_mute_update(codec, 0x1b, HDA_OUTPUT, 0, valp);
    if (change)
    alc262_lenovo_3000_automute(codec, 0);
    return change;
    @@ -10280,12 +10284,7 @@ static int alc268_acer_master_sw_put(str
    long *valp = ucontrol->value.integer.value;
    int change;

    - change = snd_hda_codec_amp_update(codec, 0x14, 0, HDA_OUTPUT, 0,
    - HDA_AMP_MUTE,
    - valp[0] ? 0 : HDA_AMP_MUTE);
    - change |= snd_hda_codec_amp_update(codec, 0x14, 1, HDA_OUTPUT, 0,
    - HDA_AMP_MUTE,
    - valp[1] ? 0 : HDA_AMP_MUTE);
    + change = amp_stereo_mute_update(codec, 0x14, HDA_OUTPUT, 0, valp);
    if (change)
    alc268_acer_automute(codec, 0);
    return change;



    \
     
     \ /
      Last update: 2009-07-29 01:15    [W:0.025 / U:30.208 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site