* [PATCH v2 1/2] Revert "ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter"
@ 2026-03-12 12:20 Sean Rhodes
2026-03-12 12:20 ` [PATCH v2 2/2] ALSA: hda/realtek: Sequence GPIO2 on Star Labs StarFighter Sean Rhodes
2026-03-14 13:31 ` [PATCH v2 1/2] Revert "ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter" Takashi Iwai
0 siblings, 2 replies; 3+ messages in thread
From: Sean Rhodes @ 2026-03-12 12:20 UTC (permalink / raw)
To: linux-kernel
Cc: Jaroslav Kysela, Takashi Iwai, Stefan Binding, Kailang Yang,
Chris Chiu, Zhang Heng, Edip Hazuri, linux-sound
The shutup delay workaround fixes the runtime suspend pop, but further
hardware testing showed that the StarFighter speaker path can be
controlled more directly.
The ALC233 speaker path uses LINE2 EAPD on NID 0x1b together with GPIO2
for the external speaker amplifier, so a better fix is to sequence those
controls at playback start and stop instead of sleeping in the shutup
callback.
Revert the previous workaround before adding the runtime sequencing fix.
This reverts commit 1cb3c20688fc8380c9b365d03aea7e84faf6a9fd.
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
Signed-off-by: Sean Rhodes <sean@starlabs.systems>
---
sound/hda/codecs/realtek/alc269.c | 25 -------------------------
1 file changed, 25 deletions(-)
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index 4c49f1195e1b..f5719e630d28 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)
{
@@ -4058,7 +4040,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,
@@ -6519,10 +6500,6 @@ static const struct hda_fixup alc269_fixups[] = {
{ }
},
},
- [ALC233_FIXUP_STARLABS_STARFIGHTER] = {
- .type = HDA_FIXUP_FUNC,
- .v.func = alc233_fixup_starlabs_starfighter,
- },
[ALC294_FIXUP_BASS_SPEAKER_15] = {
.type = HDA_FIXUP_FUNC,
.v.func = alc294_fixup_bass_speaker_15,
@@ -7685,7 +7662,6 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x2782, 0x1705, "MEDION E15433", ALC269VC_FIXUP_INFINIX_Y4_MAX),
SND_PCI_QUIRK(0x2782, 0x1707, "Vaio VJFE-ADL", ALC298_FIXUP_SPK_VOLUME),
SND_PCI_QUIRK(0x2782, 0x4900, "MEDION E15443", ALC233_FIXUP_MEDION_MTL_SPK),
- SND_PCI_QUIRK(0x7017, 0x2014, "Star Labs StarFighter", ALC233_FIXUP_STARLABS_STARFIGHTER),
SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC),
SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED),
SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10),
@@ -7782,7 +7758,6 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
{.id = ALC298_FIXUP_TPT470_DOCK_FIX, .name = "tpt470-dock-fix"},
{.id = ALC298_FIXUP_TPT470_DOCK, .name = "tpt470-dock"},
{.id = ALC233_FIXUP_LENOVO_MULTI_CODECS, .name = "dual-codecs"},
- {.id = ALC233_FIXUP_STARLABS_STARFIGHTER, .name = "starlabs-starfighter"},
{.id = ALC700_FIXUP_INTEL_REFERENCE, .name = "alc700-ref"},
{.id = ALC269_FIXUP_SONY_VAIO, .name = "vaio"},
{.id = ALC269_FIXUP_DELL_M101Z, .name = "dell-m101z"},
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v2 2/2] ALSA: hda/realtek: Sequence GPIO2 on Star Labs StarFighter
2026-03-12 12:20 [PATCH v2 1/2] Revert "ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter" Sean Rhodes
@ 2026-03-12 12:20 ` Sean Rhodes
2026-03-14 13:31 ` [PATCH v2 1/2] Revert "ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter" Takashi Iwai
1 sibling, 0 replies; 3+ messages in thread
From: Sean Rhodes @ 2026-03-12 12:20 UTC (permalink / raw)
To: linux-kernel
Cc: Jaroslav Kysela, Takashi Iwai, Stefan Binding, Kailang Yang,
Chris Chiu, Zhang Heng, Edip Hazuri, linux-sound
Realtek advised that all ALC233 codecs should gate sound output with
GPIO2, pulling it low when idle, and high when active.
They provided zero documentation to support this, so this patch
applies this flow specifically to the Star Labs StarFighter:
- assert LINE2 EAPD and drive GPIO2 high on PREPARE
- deassert LINE2 EAPD and drive GPIO2 low on CLEANUP
This solution requires no delay, and also solves the pops in gdm3, and
entering G3 that the previous approach did not solve.
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>
---
sound/hda/codecs/realtek/alc269.c | 51 +++++++++++++++++++++++++++++++
1 file changed, 51 insertions(+)
diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c
index f5719e630d28..901314a7af51 100644
--- a/sound/hda/codecs/realtek/alc269.c
+++ b/sound/hda/codecs/realtek/alc269.c
@@ -1436,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)
@@ -1449,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;
+ }
+}
+
static void alc_update_coef_led(struct hda_codec *codec,
struct alc_coef_led *led,
bool polarity, bool on)
@@ -4055,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,
};
@@ -6500,6 +6545,10 @@ static const struct hda_fixup alc269_fixups[] = {
{ }
},
},
+ [ALC233_FIXUP_STARLABS_STARFIGHTER] = {
+ .type = HDA_FIXUP_FUNC,
+ .v.func = alc233_fixup_starlabs_starfighter,
+ },
[ALC294_FIXUP_BASS_SPEAKER_15] = {
.type = HDA_FIXUP_FUNC,
.v.func = alc294_fixup_bass_speaker_15,
@@ -7662,6 +7711,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = {
SND_PCI_QUIRK(0x2782, 0x1705, "MEDION E15433", ALC269VC_FIXUP_INFINIX_Y4_MAX),
SND_PCI_QUIRK(0x2782, 0x1707, "Vaio VJFE-ADL", ALC298_FIXUP_SPK_VOLUME),
SND_PCI_QUIRK(0x2782, 0x4900, "MEDION E15443", ALC233_FIXUP_MEDION_MTL_SPK),
+ SND_PCI_QUIRK(0x7017, 0x2014, "Star Labs StarFighter", ALC233_FIXUP_STARLABS_STARFIGHTER),
SND_PCI_QUIRK(0x8086, 0x2074, "Intel NUC 8", ALC233_FIXUP_INTEL_NUC8_DMIC),
SND_PCI_QUIRK(0x8086, 0x2080, "Intel NUC 8 Rugged", ALC256_FIXUP_INTEL_NUC8_RUGGED),
SND_PCI_QUIRK(0x8086, 0x2081, "Intel NUC 10", ALC256_FIXUP_INTEL_NUC10),
@@ -7758,6 +7808,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = {
{.id = ALC298_FIXUP_TPT470_DOCK_FIX, .name = "tpt470-dock-fix"},
{.id = ALC298_FIXUP_TPT470_DOCK, .name = "tpt470-dock"},
{.id = ALC233_FIXUP_LENOVO_MULTI_CODECS, .name = "dual-codecs"},
+ {.id = ALC233_FIXUP_STARLABS_STARFIGHTER, .name = "starlabs-starfighter"},
{.id = ALC700_FIXUP_INTEL_REFERENCE, .name = "alc700-ref"},
{.id = ALC269_FIXUP_SONY_VAIO, .name = "vaio"},
{.id = ALC269_FIXUP_DELL_M101Z, .name = "dell-m101z"},
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2 1/2] Revert "ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter"
2026-03-12 12:20 [PATCH v2 1/2] Revert "ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter" Sean Rhodes
2026-03-12 12:20 ` [PATCH v2 2/2] ALSA: hda/realtek: Sequence GPIO2 on Star Labs StarFighter Sean Rhodes
@ 2026-03-14 13:31 ` Takashi Iwai
1 sibling, 0 replies; 3+ messages in thread
From: Takashi Iwai @ 2026-03-14 13:31 UTC (permalink / raw)
To: Sean Rhodes
Cc: linux-kernel, Jaroslav Kysela, Takashi Iwai, Stefan Binding,
Kailang Yang, Chris Chiu, Zhang Heng, Edip Hazuri, linux-sound
On Thu, 12 Mar 2026 13:20:20 +0100,
Sean Rhodes wrote:
>
> The shutup delay workaround fixes the runtime suspend pop, but further
> hardware testing showed that the StarFighter speaker path can be
> controlled more directly.
>
> The ALC233 speaker path uses LINE2 EAPD on NID 0x1b together with GPIO2
> for the external speaker amplifier, so a better fix is to sequence those
> controls at playback start and stop instead of sleeping in the shutup
> callback.
>
> Revert the previous workaround before adding the runtime sequencing fix.
>
> This reverts commit 1cb3c20688fc8380c9b365d03aea7e84faf6a9fd.
>
> 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
> Signed-off-by: Sean Rhodes <sean@starlabs.systems>
I don't think we need two steps, but rather fold your update into a
single patch (but give Fixes tag). It's a change only for a single
device and model, after all.
thanks,
Takashi
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2026-03-14 13:31 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-03-12 12:20 [PATCH v2 1/2] Revert "ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter" Sean Rhodes
2026-03-12 12:20 ` [PATCH v2 2/2] ALSA: hda/realtek: Sequence GPIO2 on Star Labs StarFighter Sean Rhodes
2026-03-14 13:31 ` [PATCH v2 1/2] Revert "ALSA: hda/realtek: Fix speaker pop on Star Labs StarFighter" Takashi Iwai
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox