lkml.org 
[lkml]   [2019]   [Sep]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.2 063/143] ALSA: hda - Fixes inverted Conexant GPIO mic mute led
    Date
    From: Jeronimo Borque <jeronimo@borque.com.ar>

    commit f9ef724d4896763479f3921afd1ee61552fc9836 upstream.

    "enabled" parameter historically referred to the device input or
    output, not to the led indicator. After the changes added with the led
    helper functions the mic mute led logic refers to the led and not to
    the mic input which caused led indicator to be negated.
    Fixing logic in cxt_update_gpio_led and updated
    cxt_fixup_gpio_mute_hook
    Also updated debug messages to ease further debugging if necessary.

    Fixes: 184e302b46c9 ("ALSA: hda/conexant - Use the mic-mute LED helper")
    Suggested-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Jeronimo Borque <jeronimo@borque.com.ar>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: Takashi Iwai <tiwai@suse.de>
    Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

    ---
    sound/pci/hda/patch_conexant.c | 17 +++++++++--------
    1 file changed, 9 insertions(+), 8 deletions(-)

    --- a/sound/pci/hda/patch_conexant.c
    +++ b/sound/pci/hda/patch_conexant.c
    @@ -611,18 +611,20 @@ static void cxt_fixup_hp_gate_mic_jack(s

    /* update LED status via GPIO */
    static void cxt_update_gpio_led(struct hda_codec *codec, unsigned int mask,
    - bool enabled)
    + bool led_on)
    {
    struct conexant_spec *spec = codec->spec;
    unsigned int oldval = spec->gpio_led;

    if (spec->mute_led_polarity)
    - enabled = !enabled;
    + led_on = !led_on;

    - if (enabled)
    - spec->gpio_led &= ~mask;
    - else
    + if (led_on)
    spec->gpio_led |= mask;
    + else
    + spec->gpio_led &= ~mask;
    + codec_dbg(codec, "mask:%d enabled:%d gpio_led:%d\n",
    + mask, led_on, spec->gpio_led);
    if (spec->gpio_led != oldval)
    snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,
    spec->gpio_led);
    @@ -633,8 +635,8 @@ static void cxt_fixup_gpio_mute_hook(voi
    {
    struct hda_codec *codec = private_data;
    struct conexant_spec *spec = codec->spec;
    -
    - cxt_update_gpio_led(codec, spec->gpio_mute_led_mask, enabled);
    + /* muted -> LED on */
    + cxt_update_gpio_led(codec, spec->gpio_mute_led_mask, !enabled);
    }

    /* turn on/off mic-mute LED via GPIO per capture hook */
    @@ -656,7 +658,6 @@ static void cxt_fixup_mute_led_gpio(stru
    { 0x01, AC_VERB_SET_GPIO_DIRECTION, 0x03 },
    {}
    };
    - codec_info(codec, "action: %d gpio_led: %d\n", action, spec->gpio_led);

    if (action == HDA_FIXUP_ACT_PRE_PROBE) {
    spec->gen.vmaster_mute.hook = cxt_fixup_gpio_mute_hook;

    \
     
     \ /
      Last update: 2019-09-04 20:17    [W:2.455 / U:0.176 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site