From: Takashi Iwai <tiwai@suse.de>
To: Sean Rhodes <sean@starlabs.systems>
Cc: linux-kernel@vger.kernel.org, Jaroslav Kysela <perex@perex.cz>,
Takashi Iwai <tiwai@suse.com>,
Chris Chiu <chris.chiu@canonical.com>,
Kailang Yang <kailang@realtek.com>,
Stefan Binding <sbinding@opensource.cirrus.com>,
Edip Hazuri <edip@medip.dev>, Zhang Heng <zhangheng@kylinos.cn>,
linux-sound@vger.kernel.org
Subject: Re: [PATCH v3] ALSA: hda/realtek: Sequence GPIO2 on Star Labs StarFighter
Date: Sun, 15 Mar 2026 10:27:18 +0100 [thread overview]
Message-ID: <87ms09a1e1.wl-tiwai@suse.de> (raw)
In-Reply-To: <20260314193434.8237-1-sean@starlabs.systems>
On Sat, 14 Mar 2026 20:34:34 +0100,
Sean Rhodes wrote:
>
> The initial StarFighter quirk fixed the runtime suspend pop by muting
> speakers in the shutup callback before power-down. Further hardware
> validation showed that the speaker path is controlled directly by LINE2
> EAPD on NID 0x1b together with GPIO2 for the external amplifier.
>
> Replace the shutup-delay workaround with explicit sequencing of those
> controls at playback start and stop:
> - assert LINE2 EAPD and drive GPIO2 high on PREPARE
> - deassert LINE2 EAPD and drive GPIO2 low on CLEANUP
>
> This avoids the runtime suspend pop without a sleep, and also fixes pops
> around G3 entry and display-manager start that the original workaround
> did not cover.
>
> Fixes: 1cb3c20688fc ("ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter")
> Cc: Jaroslav Kysela <perex@perex.cz>
> Cc: Takashi Iwai <tiwai@suse.com>
> Cc: Stefan Binding <sbinding@opensource.cirrus.com>
> Cc: Kailang Yang <kailang@realtek.com>
> Cc: Chris Chiu <chris.chiu@canonical.com>
> Cc: Edip Hazuri <edip@medip.dev>
> Cc: linux-sound@vger.kernel.org
> Cc: linux-kernel@vger.kernel.org
> Tested-by: Sean Rhodes <sean@starlabs.systems>
> Signed-off-by: Sean Rhodes <sean@starlabs.systems>
Thanks, it's better than the previous patchset, but...
> ---
> sound/hda/codecs/realtek/alc269.c | 64 ++++++++++++++++++++++---------
> 1 file changed, 45 insertions(+), 19 deletions(-)
>
> diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
> index 4c49f1195e1b..901314a7af51 100644
> --- a/sound/hda/codecs/realtek/alc269.c
> +++ b/sound/hda/codecs/realtek/alc269.c
> @@ -1017,24 +1017,6 @@ static int alc269_resume(struct hda_codec *codec)
> return 0;
> }
>
> -#define STARLABS_STARFIGHTER_SHUTUP_DELAY_MS 30
> -
> -static void starlabs_starfighter_shutup(struct hda_codec *codec)
> -{
> - if (snd_hda_gen_shutup_speakers(codec))
> - msleep(STARLABS_STARFIGHTER_SHUTUP_DELAY_MS);
> -}
> -
> -static void alc233_fixup_starlabs_starfighter(struct hda_codec *codec,
> - const struct hda_fixup *fix,
> - int action)
> -{
> - struct alc_spec *spec = codec->spec;
> -
> - if (action == HDA_FIXUP_ACT_PRE_PROBE)
> - spec->shutup = starlabs_starfighter_shutup;
> -}
> -
> static void alc269_fixup_pincfg_no_hp_to_lineout(struct hda_codec *codec,
> const struct hda_fixup *fix, int action)
> {
> @@ -1454,6 +1436,32 @@ static void alc274_hp_envy_pcm_hook(struct hda_pcm_stream *hinfo,
> }
> }
>
> +#define ALC233_STARFIGHTER_SPK_PIN 0x1b
> +#define ALC233_STARFIGHTER_GPIO2 0x04
> +
> +static void alc233_starfighter_update_amp(struct hda_codec *codec, bool on)
> +{
> + snd_hda_codec_write(codec, ALC233_STARFIGHTER_SPK_PIN, 0,
> + AC_VERB_SET_EAPD_BTLENABLE,
> + on ? AC_EAPDBTL_EAPD : 0);
> + alc_update_gpio_data(codec, ALC233_STARFIGHTER_GPIO2, on);
> +}
> +
> +static void alc233_starfighter_pcm_hook(struct hda_pcm_stream *hinfo,
> + struct hda_codec *codec,
> + struct snd_pcm_substream *substream,
> + int action)
> +{
> + switch (action) {
> + case HDA_GEN_PCM_ACT_PREPARE:
> + alc233_starfighter_update_amp(codec, true);
> + break;
> + case HDA_GEN_PCM_ACT_CLEANUP:
> + alc233_starfighter_update_amp(codec, false);
> + break;
> + }
> +}
> +
> static void alc274_fixup_hp_envy_gpio(struct hda_codec *codec,
> const struct hda_fixup *fix,
> int action)
> @@ -1467,6 +1475,24 @@ static void alc274_fixup_hp_envy_gpio(struct hda_codec *codec,
> }
> }
>
> +static void alc233_fixup_starlabs_starfighter(struct hda_codec *codec,
> + const struct hda_fixup *fix,
> + int action)
> +{
> + struct alc_spec *spec = codec->spec;
> +
> + switch (action) {
> + case HDA_FIXUP_ACT_PRE_PROBE:
> + spec->gpio_mask |= ALC233_STARFIGHTER_GPIO2;
> + spec->gpio_dir |= ALC233_STARFIGHTER_GPIO2;
> + spec->gpio_data &= ~ALC233_STARFIGHTER_GPIO2;
> + break;
> + case HDA_FIXUP_ACT_PROBE:
> + spec->gen.pcm_playback_hook = alc233_starfighter_pcm_hook;
> + break;
> + }
> +}
... it'd be even better not to move the place of the function but
keeps at the same position.
> static void alc_update_coef_led(struct hda_codec *codec,
> struct alc_coef_led *led,
> bool polarity, bool on)
> @@ -4058,7 +4084,6 @@ enum {
> ALC245_FIXUP_CLEVO_NOISY_MIC,
> ALC269_FIXUP_VAIO_VJFH52_MIC_NO_PRESENCE,
> ALC233_FIXUP_MEDION_MTL_SPK,
> - ALC233_FIXUP_STARLABS_STARFIGHTER,
> ALC294_FIXUP_BASS_SPEAKER_15,
> ALC283_FIXUP_DELL_HP_RESUME,
> ALC294_FIXUP_ASUS_CS35L41_SPI_2,
> @@ -4074,6 +4099,7 @@ enum {
> ALC288_FIXUP_SURFACE_SWAP_DACS,
> ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO,
> ALC233_FIXUP_LENOVO_GPIO2_MIC_HOTKEY,
> + ALC233_FIXUP_STARLABS_STARFIGHTER,
> ALC245_FIXUP_BASS_HP_DAC,
> ALC245_FIXUP_ACER_MICMUTE_LED,
Ditto, there is no need for move the position.
By keeping the positions, we can concentrate only on what's really
changed.
Please resubmit with those corrections.
thanks,
Takashi
next prev parent reply other threads:[~2026-03-15 9:27 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-02-19 20:14 [PATCH v6] ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter Sean Rhodes
2026-02-23 8:51 ` Takashi Iwai
2026-03-14 19:34 ` [PATCH v3] ALSA: hda/realtek: Sequence GPIO2 " Sean Rhodes
2026-03-15 9:27 ` Takashi Iwai [this message]
2026-03-15 20:11 ` [PATCH v4] " Sean Rhodes
2026-03-16 17:05 ` Takashi Iwai
2026-03-16 18:36 ` Sean Rhodes
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=87ms09a1e1.wl-tiwai@suse.de \
--to=tiwai@suse.de \
--cc=chris.chiu@canonical.com \
--cc=edip@medip.dev \
--cc=kailang@realtek.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-sound@vger.kernel.org \
--cc=perex@perex.cz \
--cc=sbinding@opensource.cirrus.com \
--cc=sean@starlabs.systems \
--cc=tiwai@suse.com \
--cc=zhangheng@kylinos.cn \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox