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
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
© 2016 - 2026 Red Hat, Inc.