lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <20260201231216.1655154-3-samuel@dionne-riel.com>
Date: Sun,  1 Feb 2026 18:12:15 -0500
From: Samuel Dionne-Riel <samuel@...nne-riel.com>
To: Jaroslav Kysela <perex@...ex.cz>,
	Takashi Iwai <tiwai@...e.com>
Cc: Samuel Dionne-Riel <samuel@...nne-riel.com>,
	linux-sound@...r.kernel.org,
	linux-kernel@...r.kernel.org
Subject: [PATCH 2/2] ALSA: hda/realtek: Add quirk for Minisforum V3 SE

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@...nne-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@...nne-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


Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ