ALSA: hda/realtek - Add GPIO data update helper
authorTakashi Iwai <tiwai@suse.de>
Tue, 19 Jun 2018 20:28:22 +0000 (22:28 +0200)
committerTakashi Iwai <tiwai@suse.de>
Mon, 25 Jun 2018 08:04:22 +0000 (10:04 +0200)
For updating GPIO bits dynamically, provide a new helper, and use it
from the alc260 automute hook.  This helper will be used by other
places in future, too.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
sound/pci/hda/patch_realtek.c

index 489075b..bd54d9e 100644 (file)
@@ -241,6 +241,20 @@ static void alc_write_gpio_data(struct hda_codec *codec)
                            spec->gpio_data);
 }
 
+static void alc_update_gpio_data(struct hda_codec *codec, unsigned int mask,
+                                bool on)
+{
+       struct alc_spec *spec = codec->spec;
+       unsigned int oldval = spec->gpio_data;
+
+       if (on)
+               spec->gpio_data |= mask;
+       else
+               spec->gpio_data &= ~mask;
+       if (oldval != spec->gpio_data)
+               alc_write_gpio_data(codec);
+}
+
 static void alc_write_gpio(struct hda_codec *codec)
 {
        struct alc_spec *spec = codec->spec;
@@ -1577,8 +1591,8 @@ enum {
 static void alc260_gpio1_automute(struct hda_codec *codec)
 {
        struct alc_spec *spec = codec->spec;
-       snd_hda_codec_write(codec, 0x01, 0, AC_VERB_SET_GPIO_DATA,
-                           spec->gen.hp_jack_present);
+
+       alc_update_gpio_data(codec, 0x01, spec->gen.hp_jack_present);
 }
 
 static void alc260_fixup_gpio1_toggle(struct hda_codec *codec,