ALSA: hda/realtek - Fix inverted bass GPIO pin on Acer 8951G
authorTakashi Iwai <tiwai@suse.de>
Thu, 28 Nov 2019 20:26:30 +0000 (21:26 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 28 Nov 2019 20:27:00 +0000 (21:27 +0100)
We've added the bass speaker support on Acer 8951G by the commit
00066e9733f6 ("Add Acer Aspire Ethos 8951G model quirk"), but it seems
that the GPIO pin was wrongly set: while the commit turns off the bit
to power up the amp, the actual hardware reacts other way round,
i.e. GPIO bit on = amp on.

So this patch fixes the bug, turning on the GPIO bit 0x02 as default.
Since turning on the GPIO bit can be more easily managed with
alc_setup_gpio() call, we simplify the quirk code by integrating the
GPIO setup into the existing alc662_fixup_aspire_ethos_hp() and
dropping the whole ALC669_FIXUP_ACER_ASPIRE_ETHOS_SUBWOOFER quirk.

Fixes: 00066e9733f6 ("Add Acer Aspire Ethos 8951G model quirk")
Reported-and-tested-by: Sergey 'Jin' Bostandzhyan <jin@mediatomb.cc>
Cc: <stable@vger.kernel.org>
Link: https://lore.kernel.org/r/20191128202630.6626-1-tiwai@suse.de
Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_realtek.c

index 9f355b2..c7a232f 100644 (file)
@@ -8427,6 +8427,8 @@ static void alc662_fixup_aspire_ethos_hp(struct hda_codec *codec,
        case HDA_FIXUP_ACT_PRE_PROBE:
                snd_hda_jack_detect_enable_callback(codec, 0x1b,
                                alc662_aspire_ethos_mute_speakers);
+               /* subwoofer needs an extra GPIO setting to become audible */
+               alc_setup_gpio(codec, 0x02);
                break;
        case HDA_FIXUP_ACT_INIT:
                /* Make sure to start in a correct state, i.e. if
@@ -8509,7 +8511,6 @@ enum {
        ALC662_FIXUP_USI_HEADSET_MODE,
        ALC662_FIXUP_LENOVO_MULTI_CODECS,
        ALC669_FIXUP_ACER_ASPIRE_ETHOS,
-       ALC669_FIXUP_ACER_ASPIRE_ETHOS_SUBWOOFER,
        ALC669_FIXUP_ACER_ASPIRE_ETHOS_HEADSET,
 };
 
@@ -8841,18 +8842,6 @@ static const struct hda_fixup alc662_fixups[] = {
                .type = HDA_FIXUP_FUNC,
                .v.func = alc662_fixup_aspire_ethos_hp,
        },
-       [ALC669_FIXUP_ACER_ASPIRE_ETHOS_SUBWOOFER] = {
-               .type = HDA_FIXUP_VERBS,
-               /* subwoofer needs an extra GPIO setting to become audible */
-               .v.verbs = (const struct hda_verb[]) {
-                       {0x01, AC_VERB_SET_GPIO_MASK, 0x02},
-                       {0x01, AC_VERB_SET_GPIO_DIRECTION, 0x02},
-                       {0x01, AC_VERB_SET_GPIO_DATA, 0x00},
-                       { }
-               },
-               .chained = true,
-               .chain_id = ALC669_FIXUP_ACER_ASPIRE_ETHOS_HEADSET
-       },
        [ALC669_FIXUP_ACER_ASPIRE_ETHOS] = {
                .type = HDA_FIXUP_PINS,
                .v.pins = (const struct hda_pintbl[]) {
@@ -8862,7 +8851,7 @@ static const struct hda_fixup alc662_fixups[] = {
                        { }
                },
                .chained = true,
-               .chain_id = ALC669_FIXUP_ACER_ASPIRE_ETHOS_SUBWOOFER
+               .chain_id = ALC669_FIXUP_ACER_ASPIRE_ETHOS_HEADSET
        },
 };