* [PATCH 0/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE @ 2026-02-01 23:12 Samuel Dionne-Riel 2026-02-01 23:12 ` [PATCH 1/2] ALSA: hda/realtek: Add generic quirk for Bass speaker DAC avoidance Samuel Dionne-Riel 2026-02-01 23:12 ` [PATCH 2/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE Samuel Dionne-Riel 0 siblings, 2 replies; 5+ messages in thread From: Samuel Dionne-Riel @ 2026-02-01 23:12 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai Cc: Samuel Dionne-Riel, linux-sound, linux-kernel Hi! These changes fix audio for the Minisforum V3 SE. While I didn't tag as RFC, as it might be just fine the way it is, I am open to suggestions regarding how I implemented the first commit. The main goal being it uses and exposes a generic name for this specific fixup, while keeping to a minimal change. As mentioned in the commentary for that patch, there are a couple other fixup functions that may aim at applying the same fix, but it's hard to be sure without testing with the original hardware this fixed. There are more details about each change in their respective email, in the commentary past the commit message. Thank you for your time! Samuel Dionne-Riel (2): ALSA: hda/realtek: Add generic quirk for Bass speaker DAC avoidance ALSA: hda/realtek: Add quirk for Minisforum V3 SE sound/hda/codecs/realtek/alc269.c | 8 ++++++++ 1 file changed, 8 insertions(+) base-commit: 63804fed149a6750ffd28610c5c1c98cce6bd377 -- 2.51.0 ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] ALSA: hda/realtek: Add generic quirk for Bass speaker DAC avoidance 2026-02-01 23:12 [PATCH 0/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE Samuel Dionne-Riel @ 2026-02-01 23:12 ` Samuel Dionne-Riel 2026-02-02 10:03 ` Takashi Iwai 2026-02-01 23:12 ` [PATCH 2/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE Samuel Dionne-Riel 1 sibling, 1 reply; 5+ messages in thread From: Samuel Dionne-Riel @ 2026-02-01 23:12 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai Cc: Samuel Dionne-Riel, linux-sound, linux-kernel This change is for the follow-up commit, where the match on the specific device (Minisforum V3 SE) is added. This pattern (re-routing the bass speakers off of a DAC without volume control) seems common enough that having a "model" to match against and quickly use to verify may be worthwhile. The alc285_fixup_thinkpad_x1_gen7 routing was selected, amongst the different options, as it should allow tuning the ratio between both speaker set. The routing was verified using `hda-verb`, and picking either 0x00 or 0x01. Either routin made the volume of the bass speakers controllable. hda-verb /dev/snd/hwC1D0 0x17 SET_CONNECT_SEL 0x01 Signed-off-by: Samuel Dionne-Riel <samuel@dionne-riel.com> --- It may be worthwhile to clean-up behind and make the other fixups re-routing `0x17` from `0x06` to either `0x02` or `0x03` also use the same routing. It's a bit confusing, determining which routing to choose when adding one for a device. - alc289_fixup_asus_ga401 - alc295_fixup_disable_dac3 Might need to be checked (and re-used within a chain): - alc287_fixup_yoga9_14iap7_bass_spk_pin - alc245_fixup_hp_spectre_x360_eu0xxx - alc245_fixup_hp_spectre_x360_16_aa0xxx I might be missing some, if for example they are handled through pin fixups, or other fixup mechanisms. I don't have the experience needed to know for sure if the cleanup would be appropriate. So please excuse the lack of follow-up on that. Signed-off-by: Samuel Dionne-Riel <samuel@dionne-riel.com> --- sound/hda/codecs/realtek/alc269.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c index cafa48b5aceb5..5d38e371a6836 100644 --- a/sound/hda/codecs/realtek/alc269.c +++ b/sound/hda/codecs/realtek/alc269.c @@ -3805,6 +3805,7 @@ enum { ALC245_FIXUP_HP_TAS2781_I2C_MUTE_LED, ALC288_FIXUP_SURFACE_SWAP_DACS, ALC236_FIXUP_HP_MUTE_LED_MICMUTE_GPIO, + ALC245_FIXUP_BASS_HP_DAC, }; /* A special fixup for Lenovo C940 and Yoga Duet 7; @@ -6295,6 +6296,11 @@ static const struct hda_fixup alc269_fixups[] = { .type = HDA_FIXUP_FUNC, .v.func = alc288_fixup_surface_swap_dacs, }, + [ALC245_FIXUP_BASS_HP_DAC] = { + .type = HDA_FIXUP_FUNC, + /* Borrow the DAC routing selected for those Thinkpads */ + .v.func = alc285_fixup_thinkpad_x1_gen7, + }, }; static const struct hda_quirk alc269_fixup_tbl[] = { @@ -7558,6 +7564,7 @@ static const struct hda_model_fixup alc269_fixup_models[] = { {.id = ALC285_FIXUP_HP_GPIO_AMP_INIT, .name = "alc285-hp-amp-init"}, {.id = ALC236_FIXUP_LENOVO_INV_DMIC, .name = "alc236-fixup-lenovo-inv-mic"}, {.id = ALC2XX_FIXUP_HEADSET_MIC, .name = "alc2xx-fixup-headset-mic"}, + {.id = ALC245_FIXUP_BASS_HP_DAC, .name = "alc245-fixup-bass-hp-dac"}, {} }; #define ALC225_STANDARD_PINS \ -- 2.51.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] ALSA: hda/realtek: Add generic quirk for Bass speaker DAC avoidance 2026-02-01 23:12 ` [PATCH 1/2] ALSA: hda/realtek: Add generic quirk for Bass speaker DAC avoidance Samuel Dionne-Riel @ 2026-02-02 10:03 ` Takashi Iwai 0 siblings, 0 replies; 5+ messages in thread From: Takashi Iwai @ 2026-02-02 10:03 UTC (permalink / raw) To: Samuel Dionne-Riel Cc: Jaroslav Kysela, Takashi Iwai, linux-sound, linux-kernel On Mon, 02 Feb 2026 00:12:14 +0100, Samuel Dionne-Riel wrote: > > This change is for the follow-up commit, where the match on the specific > device (Minisforum V3 SE) is added. > > This pattern (re-routing the bass speakers off of a DAC without volume > control) seems common enough that having a "model" to match against and > quickly use to verify may be worthwhile. > > The alc285_fixup_thinkpad_x1_gen7 routing was selected, amongst the > different options, as it should allow tuning the ratio between both > speaker set. > > The routing was verified using `hda-verb`, and picking either 0x00 or > 0x01. Either routin made the volume of the bass speakers controllable. > > hda-verb /dev/snd/hwC1D0 0x17 SET_CONNECT_SEL 0x01 > > Signed-off-by: Samuel Dionne-Riel <samuel@dionne-riel.com> > > --- > > It may be worthwhile to clean-up behind and make the other fixups > re-routing `0x17` from `0x06` to either `0x02` or `0x03` also use the > same routing. It's a bit confusing, determining which routing to choose > when adding one for a device. > > - alc289_fixup_asus_ga401 > - alc295_fixup_disable_dac3 > > Might need to be checked (and re-used within a chain): > > - alc287_fixup_yoga9_14iap7_bass_spk_pin > - alc245_fixup_hp_spectre_x360_eu0xxx > - alc245_fixup_hp_spectre_x360_16_aa0xxx > > I might be missing some, if for example they are handled through pin > fixups, or other fixup mechanisms. > > I don't have the experience needed to know for sure if the cleanup would > be appropriate. So please excuse the lack of follow-up on that. > > Signed-off-by: Samuel Dionne-Riel <samuel@dionne-riel.com> Indeed it looks like that we can cleanup a lot regarding this DAC routing fix-ups. Though, *_thinkpad_x1_gen7() has more workarounds about the control element renames -- which needs to be verified whether the very same workaround is applicable to other cases. IIUC, this kcontrol names (DAC1/DAC2) match with your device configuration? Could you give alsa-info.sh output? In anyway, I don't think it's needed to split to two individual commits. You can fold into one patch. thanks, Takashi ^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 2/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE 2026-02-01 23:12 [PATCH 0/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE Samuel Dionne-Riel 2026-02-01 23:12 ` [PATCH 1/2] ALSA: hda/realtek: Add generic quirk for Bass speaker DAC avoidance Samuel Dionne-Riel @ 2026-02-01 23:12 ` Samuel Dionne-Riel 2026-02-02 10:00 ` Takashi Iwai 1 sibling, 1 reply; 5+ messages in thread From: Samuel Dionne-Riel @ 2026-02-01 23:12 UTC (permalink / raw) To: Jaroslav Kysela, Takashi Iwai Cc: Samuel Dionne-Riel, linux-sound, linux-kernel This likely will apply for the Minisforum V3, though there isn't a lot of information to confirm whether or not the identifiers are the same. The Minisforum V3 is likely to benefit from the same fix, as it exhibits similar symptoms. Though users reportedly work around it by forcing the software mixer. This was verified on the Minisforum V3 SE, and the root cause (the bass speakers routing) was found out by using pink noise, and playing with the mixers. Signed-off-by: Samuel Dionne-Riel <samuel@dionne-riel.com> --- For posterity, and hoping it helps someone else in the future, here's the breadcrumbs I followed to get to this fix. (Stopping other software, like Wireplumber, is needed here.) The following command was used for the pink noise: speaker-test -Dhw:1,0 -c2 By using `alsamixer -c1`, muting either of the "Speaker" or "Bass Speaker" channels showed that the speakers were indeed separate. On the side of the device, there are two speaker grills next to each other, and by moving an obstacle in front clearly shows the channels are independent. This differs from the “well-known” wisdom, where it is assumed the speaker can't be controlled with the mixer. To be fair, software like Wireplumber will mute the Bass Speaker in sync with the main Speaker, which makes it seem like there is no control at all. Knowing this fact, finding plausible fixes in the sound stack pointed at the kernel driver being responsible for tying controls to the outputs. And after fighting with some of the tooling, finding out that the necessary knowledge is found in /proc/asound/card1/codec#0 in a quite usable format unblocked me. As a final hint, selecting an output using `hda-verb` uses the following form: hda-verb /dev/snd/hwC1D0 $NODE SET_CONNECT_SEL $INDEX Where `$NODE` is the node identifier found under `/proc/asound/card1/codec#0`, and `$INDEX` is the index of the desired DAC connection under `Connection:` in the same `/proc` file. For my particular system, the `$NODE` is `0x17`, and the DAC can be either `0` or `1`, as `0x06` is the DAC without volume control, and `0x08` is an input. ~ $ cat /proc/asound/card1/codec#0 | grep -A15 '^Node 0x17' Node 0x17 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out Control: name="Bass Speaker Playback Switch", index=0, device=0 ControlAmp: chs=3, dir=Out, idx=0, ofs=0 Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 Amp-Out vals: [0x80 0x80] Pincap 0x0000001c: OUT HP Detect Pin Default 0x90170120: [Fixed] Speaker at Int N/A Conn = Analog, Color = Unknown DefAssociation = 0x2, Sequence = 0x0 Misc = NO_PRESENCE Pin-ctls: 0x40: OUT Unsolicited: tag=00, enabled=0 Power states: D0 D1 D2 D3 EPSS Power: setting=D0, actual=D0 Connection: 4 0x02 0x03 0x06* 0x08 ~ $ cat /proc/asound/card1/codec#0 | grep '^Node 0x0[2368]' Node 0x02 [Audio Output] wcaps 0x41d: Stereo Amp-Out Node 0x03 [Audio Output] wcaps 0x41d: Stereo Amp-Out Node 0x06 [Audio Output] wcaps 0x411: Stereo Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In Signed-off-by: Samuel Dionne-Riel <samuel@dionne-riel.com> --- sound/hda/codecs/realtek/alc269.c | 1 + 1 file changed, 1 insertion(+) diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c index 5d38e371a6836..bcac3e9f106ca 100644 --- a/sound/hda/codecs/realtek/alc269.c +++ b/sound/hda/codecs/realtek/alc269.c @@ -7370,6 +7370,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = { SND_PCI_QUIRK(0xf111, 0x0009, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE), SND_PCI_QUIRK(0xf111, 0x000b, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE), SND_PCI_QUIRK(0xf111, 0x000c, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE), + SND_PCI_QUIRK(0x1f4c, 0xe001, "Minisforum V3 (SE)", ALC245_FIXUP_BASS_HP_DAC), #if 0 /* Below is a quirk table taken from the old code. -- 2.51.0 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE 2026-02-01 23:12 ` [PATCH 2/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE Samuel Dionne-Riel @ 2026-02-02 10:00 ` Takashi Iwai 0 siblings, 0 replies; 5+ messages in thread From: Takashi Iwai @ 2026-02-02 10:00 UTC (permalink / raw) To: Samuel Dionne-Riel Cc: Jaroslav Kysela, Takashi Iwai, linux-sound, linux-kernel On Mon, 02 Feb 2026 00:12:15 +0100, Samuel Dionne-Riel wrote: > > This likely will apply for the Minisforum V3, though there isn't a lot > of information to confirm whether or not the identifiers are the same. > > The Minisforum V3 is likely to benefit from the same fix, as it exhibits > similar symptoms. Though users reportedly work around it by forcing the > software mixer. > > This was verified on the Minisforum V3 SE, and the root cause (the bass > speakers routing) was found out by using pink noise, and playing with > the mixers. > > Signed-off-by: Samuel Dionne-Riel <samuel@dionne-riel.com> > > --- > > For posterity, and hoping it helps someone else in the future, here's > the breadcrumbs I followed to get to this fix. > > (Stopping other software, like Wireplumber, is needed here.) > > The following command was used for the pink noise: > > speaker-test -Dhw:1,0 -c2 > > By using `alsamixer -c1`, muting either of the "Speaker" or "Bass > Speaker" channels showed that the speakers were indeed separate. On the > side of the device, there are two speaker grills next to each other, and > by moving an obstacle in front clearly shows the channels are > independent. > > This differs from the “well-known” wisdom, where it is assumed the > speaker can't be controlled with the mixer. To be fair, software like > Wireplumber will mute the Bass Speaker in sync with the main Speaker, > which makes it seem like there is no control at all. > > Knowing this fact, finding plausible fixes in the sound stack pointed at > the kernel driver being responsible for tying controls to the outputs. > And after fighting with some of the tooling, finding out that the > necessary knowledge is found in /proc/asound/card1/codec#0 in a quite > usable format unblocked me. > > As a final hint, selecting an output using `hda-verb` uses the following > form: > > hda-verb /dev/snd/hwC1D0 $NODE SET_CONNECT_SEL $INDEX > > Where `$NODE` is the node identifier found under > `/proc/asound/card1/codec#0`, and `$INDEX` is the index of the desired > DAC connection under `Connection:` in the same `/proc` file. > > For my particular system, the `$NODE` is `0x17`, and the DAC can be > either `0` or `1`, as `0x06` is the DAC without volume control, and > `0x08` is an input. > > ~ $ cat /proc/asound/card1/codec#0 | grep -A15 '^Node 0x17' > Node 0x17 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out > Control: name="Bass Speaker Playback Switch", index=0, device=0 > ControlAmp: chs=3, dir=Out, idx=0, ofs=0 > Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1 > Amp-Out vals: [0x80 0x80] > Pincap 0x0000001c: OUT HP Detect > Pin Default 0x90170120: [Fixed] Speaker at Int N/A > Conn = Analog, Color = Unknown > DefAssociation = 0x2, Sequence = 0x0 > Misc = NO_PRESENCE > Pin-ctls: 0x40: OUT > Unsolicited: tag=00, enabled=0 > Power states: D0 D1 D2 D3 EPSS > Power: setting=D0, actual=D0 > Connection: 4 > 0x02 0x03 0x06* 0x08 > > ~ $ cat /proc/asound/card1/codec#0 | grep '^Node 0x0[2368]' > Node 0x02 [Audio Output] wcaps 0x41d: Stereo Amp-Out > Node 0x03 [Audio Output] wcaps 0x41d: Stereo Amp-Out > Node 0x06 [Audio Output] wcaps 0x411: Stereo > Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In > > Signed-off-by: Samuel Dionne-Riel <samuel@dionne-riel.com> > --- > sound/hda/codecs/realtek/alc269.c | 1 + > 1 file changed, 1 insertion(+) > > diff --git a/sound/hda/codecs/realtek/alc269.c b/sound/hda/codecs/realtek/alc269.c > index 5d38e371a6836..bcac3e9f106ca 100644 > --- a/sound/hda/codecs/realtek/alc269.c > +++ b/sound/hda/codecs/realtek/alc269.c > @@ -7370,6 +7370,7 @@ static const struct hda_quirk alc269_fixup_tbl[] = { > SND_PCI_QUIRK(0xf111, 0x0009, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE), > SND_PCI_QUIRK(0xf111, 0x000b, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE), > SND_PCI_QUIRK(0xf111, 0x000c, "Framework Laptop", ALC295_FIXUP_FRAMEWORK_LAPTOP_MIC_NO_PRESENCE), > + SND_PCI_QUIRK(0x1f4c, 0xe001, "Minisforum V3 (SE)", ALC245_FIXUP_BASS_HP_DAC), The table is sorted in PCI SSID order. Please put at the appropriate position. thanks, Takashi ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-02-02 10:03 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-02-01 23:12 [PATCH 0/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE Samuel Dionne-Riel 2026-02-01 23:12 ` [PATCH 1/2] ALSA: hda/realtek: Add generic quirk for Bass speaker DAC avoidance Samuel Dionne-Riel 2026-02-02 10:03 ` Takashi Iwai 2026-02-01 23:12 ` [PATCH 2/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE Samuel Dionne-Riel 2026-02-02 10:00 ` Takashi Iwai
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox