Alsa-Devel Archive on lore.kernel.org
 help / color / mirror / Atom feed
From: GitHub issues - opened <github@alsa-project.org>
To: alsa-devel@alsa-project.org
Subject: [ALSA/usb-audio] Weltrend/XiiSound Headset (040b:0897) splits channels into independent 'PCM'/'PCM 1' mixer elements and suffers from severe dB volume curve mismatch
Date: Thu, 14 May 2026 17:40:04 +0200 (CEST)	[thread overview]
Message-ID: <18af78cd46db6000-webhooks-bot@alsa-project.org> (raw)
In-Reply-To: <18af78cd46d0be00-webhooks-bot@alsa-project.org>

alsa-project/alsa-ucm-conf issue #760 was opened from skye6034:

### Description of the Bug
The Weltrend Semiconductor / XiiSound wireless headset dongle (USB ID 040b:0897) is incorrectly handled by the `snd-usb-audio` driver. Instead of presenting a single unified stereo hardware volume control interface, the driver registers two completely separate hardware playback controls simultaneously:
1. `PCM` (Controls overall initial gain / Left physical channel)
2. `PCM 1` (Controls the hardware amplification exclusively for the physical Right ear channel)

Because of this firmware descriptor misinterpretation, standard desktop environments (like GNOME/KDE) parse the device into separate, conflicting "Analog Output" and "Digital Output (S/PDIF)" hardware profiles simultaneously. 

When a user adjusts the system volume slider, the audio engine modulates the primary `PCM` element but leaves `PCM 1` un-synchronized at 0%. This instantly kills the physical Left audio channel entirely, leaving sound playing exclusively out of the Right side.

Furthermore, the hardware volume scaling curve is completely non-linear and broken. Small adjustments to the user-space volume slider result in massive, disproportionate drops in the hardware mixer levels. For example, lowering the desktop system volume slider slightly from 100% down to 98% causes the ALSA hardware `PCM` channel level to violently plummet down to approximately 33%.

The hardware functions perfectly as a standard, unified single stereo device on Windows and macOS.

### Steps to Reproduce
1. Connect the wireless USB dongle.
2. See two "Analog Output" and "Digital Output (S/PDIF)" profiles on the desktop (GNOME/KDE)
3. Audio won't play until you set "Analog" to 100%, and then, it would only play on the Right Channel
4. Open `alsamixer` and select the `H878 Wireless headset` sound card.
5. Observe two independent, unlinked channel elements: `PCM` and `PCM 1`.
6. Set `PCM 1` to 100. The physical left speaker starts outputting audio.
7. Attempting to lower system volume via desktop controls drops the main `PCM` element while leaving the channels permanently split and mismatched.
8. Drop the system volume slider slightly from 100% to 98% and observe the hardware `PCM` slider collapse immediately to ~33% gain.### 

Current User Workaround:
To achieve functional stereo, a user must manually force both `PCM` and `PCM 1` to exactly 100% in `alsamixer` to force open both physical speaker channels, and then instruct their user-space audio server (PipeWire/PulseAudio) to utilize software-side attenuation rather than mapping to the hardware mixer paths.

### Hardware Details (`lsusb -v`):
Bus 005 Device 003: ID 040b:0897 Weltrend Semiconductor H878 Wireless headset
Device Descriptor:
  bLength                18
  bDescriptorType         1
  bcdUSB               1.10
  bDeviceClass            0 [unknown]
  bDeviceSubClass         0 [unknown]
  bDeviceProtocol         0 
  bMaxPacketSize0        64
  idVendor           0x040b Weltrend Semiconductor
  idProduct          0x0897 H878 Wireless headset
  bcdDevice            0.31
  iManufacturer           1 XiiSound Technology Corporation
  iProduct                2 H878 Wireless headset
  bNumConfigurations      1

### Alsamixer Controls Detected:
- Card: H878 Wireless headset
- Chip: USB Mixer
- Item: PCM [dB gain: 0.39, 0.39] -> Controls Left channel pathing
- Item: PCM 1 [Volume: 0] -> Hard-muted by default, controls Right hardware amp pathing

### Suggested Fix / Quirk Needed
This chip requires a custom driver mapping entry added to the Linux kernel (`sound/usb/quirks.c` or `sound/usb/mixer.c`). The driver needs a mixer quirk targeting USB ID `040b:0897` to:
1. Alias or hard-link `PCM 1` to the master `PCM` control for unified, locked stereo tracking.
2. Implement a custom volume map (`dB_map`) to override the broken firmware descriptors, preventing the hardware volume level from collapsing to 33% when a minor user-space attenuation (98%) is requested.

Issue URL     : https://github.com/alsa-project/alsa-ucm-conf/issues/760
Repository URL: https://github.com/alsa-project/alsa-ucm-conf

       reply	other threads:[~2026-05-14 15:40 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
     [not found] <18af78cd46d0be00-webhooks-bot@alsa-project.org>
2026-05-14 15:40 ` GitHub issues - opened [this message]
     [not found] <18af78d3948a4100-webhooks-bot@alsa-project.org>
2026-05-14 15:40 ` [ALSA/usb-audio] Weltrend/XiiSound Headset (040b:0897) splits channels into independent 'PCM'/'PCM 1' mixer elements and suffers from severe dB volume curve mismatch GitHub issues - edited
     [not found] <18af78d74ec85800-webhooks-bot@alsa-project.org>
2026-05-14 15:40 ` GitHub issues - edited

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=18af78cd46db6000-webhooks-bot@alsa-project.org \
    --to=github@alsa-project.org \
    --cc=alsa-devel@alsa-project.org \
    /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