ALSA: hda: Add a simple GPIO setup helper function

Introduce a common GPIO setup helper function, so that we can clean up
the open code found in many codec drivers later.

Signed-off-by: Takashi Iwai <tiwai@suse.de>
Link: https://patch.msgid.link/20260409093826.1317626-3-tiwai@suse.de
This commit is contained in:
Takashi Iwai 2026-04-09 11:38:15 +02:00
parent b0762dd2fc
commit cd8fd5a056
2 changed files with 33 additions and 0 deletions

View File

@ -481,6 +481,10 @@ void snd_hda_unlock_devices(struct hda_bus *bus);
void snd_hda_bus_reset(struct hda_bus *bus);
void snd_hda_bus_reset_codecs(struct hda_bus *bus);
void snd_hda_codec_set_gpio(struct hda_codec *codec, unsigned int mask,
unsigned int dir, unsigned int data,
unsigned int delay);
int snd_hda_codec_set_name(struct hda_codec *codec, const char *name);
/*

View File

@ -4052,6 +4052,35 @@ void snd_hda_bus_reset_codecs(struct hda_bus *bus)
}
}
/**
* snd_hda_codec_set_gpio - Set up GPIO bits for AFG
* @codec: the HDA codec
* @mask: GPIO bitmask
* @dir: GPIO direction bits
* @data: GPIO data bits
* @delay: the delay in msec before writing GPIO data bits
*/
void snd_hda_codec_set_gpio(struct hda_codec *codec, unsigned int mask,
unsigned int dir, unsigned int data,
unsigned int delay)
{
snd_hda_codec_write(codec, codec->core.afg, 0,
AC_VERB_SET_GPIO_MASK, mask);
if (delay) {
snd_hda_codec_write_sync(codec, codec->core.afg, 0,
AC_VERB_SET_GPIO_DIRECTION, dir);
msleep(delay);
snd_hda_codec_write_sync(codec, codec->core.afg, 0,
AC_VERB_SET_GPIO_DATA, data);
} else {
snd_hda_codec_write(codec, codec->core.afg, 0,
AC_VERB_SET_GPIO_DIRECTION, dir);
snd_hda_codec_write(codec, codec->core.afg, 0,
AC_VERB_SET_GPIO_DATA, data);
}
}
EXPORT_SYMBOL_GPL(snd_hda_codec_set_gpio);
/**
* snd_print_pcm_bits - Print the supported PCM fmt bits to the string buffer
* @pcm: PCM caps bits