* Re: [GIT PULL] ASoC fixes for v7.2-merge-window
From: Takashi Iwai @ 2026-06-26 11:03 UTC (permalink / raw)
To: Mark Brown; +Cc: Liam Girdwood, linux-sound, alsa-devel
In-Reply-To: <8d888870bec370f9abaad606055cdb75@kernel.org>
On Thu, 25 Jun 2026 19:01:19 +0200,
Mark Brown wrote:
>
> The following changes since commit 4346d91cfa47b0d9303533edde8acd33e4b9ca40:
>
> ASoC: dt-bindings: Fix RT5677 "realtek,gpio-config" type (2026-06-14 01:03:38 +0100)
>
> are available in the Git repository at:
>
> https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git tags/asoc-fix-v7.2-merge-window
>
> for you to fetch changes up to cf6f56990ea21172e085f0588e5bbf2089ce8f58:
>
> ASoC: fsl_asrc_dma: fix eDMA maxburst misalignment with channel count (2026-06-25 14:56:27 +0100)
>
> ----------------------------------------------------------------
> ASoC: Fixes for v7.2
>
> We've got a good collection of device specific fix here, plus a couple
> of stand out things:
>
> - Richard fixed some special cases with the new device_link creation
> by more gracefully handling any errors during creation.
> - Charles did some light refactoring of the SoundWire interfaces to
> fix some persistent randconfig issues that people kept running into.
Thanks, pulled now.
Takashi
^ permalink raw reply
* ucm2: MediaTek: mt8391-evk: Fix channels and add volume controls
From: GitHub pull_request - opened @ 2026-06-26 9:31 UTC (permalink / raw)
To: alsa-devel
In-Reply-To: <alsa-project/alsa-ucm-conf/pr/797@alsa-project.org>
alsa-project/alsa-ucm-conf pull request #797 was opened from zoran055:
Set Speaker to stereo and add PlaybackVolume/CaptureVolume controls for Speaker, Headphones, Headset and Mic1.
Request URL : https://github.com/alsa-project/alsa-ucm-conf/pull/797
Patch URL : https://github.com/alsa-project/alsa-ucm-conf/pull/797.patch
Repository URL: https://github.com/alsa-project/alsa-ucm-conf
^ permalink raw reply
* USB-Audio: Add M-Audio M-Track Solo
From: GitHub pull_request - edited @ 2026-06-26 2:10 UTC (permalink / raw)
To: alsa-devel
In-Reply-To: <alsa-project/alsa-ucm-conf/pr/796@alsa-project.org>
alsa-project/alsa-ucm-conf pull request #796 was edited from busybox11:
The M-Audio M-Track Solo (`08bb:29c0`) is a USB audio interface based on the TI PCM2900C codec.
The chip has a stereo ADC with two physical inputs: Input 1 (XLR/TS combo, channel 0) and Input 2 (TS instrument jack, channel 1), each with its own gain control.
However, the default stereo capture node mixes both into a single stereo stream.
This PR adds a new profile via `M-Audio/M-Track-Solo.conf` and `M-Audio/M-Track-Solo-HiFi.conf` to define the device with two distinct mono capture inputs using SplitPCM, while also providing the proper device name in the labels, instead of the generic `PCM2900C Audio CODEC` prefix.
## Hardware
- Device: M-Audio M-Track Solo
- USB: `08bb:29c0` (Texas Instruments PCM2900C)
- Kernel: `snd-usb-audio`
- Mixer: `PCM Playback Volume/Switch` (stereo output), no capture controls
## UCM configuration
- `Speaker`: stereo output (`hw:${CardId},0`)
- `Mic1`: mono input from channel 0 (XLR/TS combo preamp)
- `Line2`: mono input from channel 1 (TS instrument jack)
## Verification
Before: both physical inputs are mixed into a single stereo capture node.
<img width="3440" height="1440" alt="image" src="https://github.com/user-attachments/assets/e461bc4d-dfe0-4569-848b-2e7bd1328f52" />
<img width="3440" height="1440" alt="image" src="https://github.com/user-attachments/assets/e604a8b7-3fad-424d-92d6-a4d87caccbf8" />
After: two independent mono input nodes (`M-Track SOLO Input 1 (Mic)`, `M-Track SOLO Input 2 (Line)`), each selectable individually in PipeWire/PulseAudio.
<img width="3440" height="1440" alt="image" src="https://github.com/user-attachments/assets/08c019ea-164c-4cd1-8301-f1c3ee46d5e4" />
<img width="3440" height="1440" alt="image" src="https://github.com/user-attachments/assets/1ae5e2df-f337-42cd-9e3b-52a1f402032c" />
## Testing
Quick overview of my snapshotted audio hardware:
- NVIDIA 1660 Super (DP audio)
- Motherboard onboard audio
- Random USB C dongle (input profile disabled in screenshots for my convenience, but hardware is expected to be detected)
- M-AUDIO M-TRACK SOLO
<details>
<summary>`alsa-input.sh` output</summary>
```
upload=true&script=true&cardinfo=
!!################################
!!ALSA Information Script v 0.5.4
!!################################
!!Script ran on: Fri Jun 26 01:21:00 UTC 2026
!!Linux Distribution
!!------------------
DISTRIB_ID="Arch" DISTRIB_DESCRIPTION="Arch Linux" NAME="Arch Linux" PRETTY_NAME="Arch Linux" ID=arch HOME_URL="https://archlinux.org/" DOCUMENTATION_URL="https://wiki.archlinux.org/" SUPPORT_URL="https://bbs.archlinux.org/" BUG_REPORT_URL="https://gitlab.archlinux.org/groups/archlinux/-/issues" PRIVACY_POLICY_URL="https://terms.archlinux.org/docs/privacy-policy/" LOGO=archlinux-logo
!!DMI Information
!!---------------
Manufacturer: Gigabyte Technology Co., Ltd.
Product Name: B450 AORUS ELITE
Product Version: Default string
Firmware Version: F66
System SKU: Default string
Board Vendor: Gigabyte Technology Co., Ltd.
Board Name: B450 AORUS ELITE
!!ACPI Device Status Information
!!---------------
/sys/bus/acpi/devices/AMDI0030:00/status 15
/sys/bus/acpi/devices/AMDIF030:00/status 15
/sys/bus/acpi/devices/LNXTHERM:00/status 11
/sys/bus/acpi/devices/MSFT0101:00/status 15
/sys/bus/acpi/devices/PNP0103:00/status 15
/sys/bus/acpi/devices/PNP0501:00/status 15
/sys/bus/acpi/devices/PNP0A08:00/status 15
/sys/bus/acpi/devices/PNP0C01:00/status 15
/sys/bus/acpi/devices/PNP0C02:01/status 15
/sys/bus/acpi/devices/PNP0C02:03/status 15
/sys/bus/acpi/devices/PNP0C0C:00/status 11
/sys/bus/acpi/devices/PNP0C0F:00/status 11
/sys/bus/acpi/devices/PNP0C0F:01/status 11
/sys/bus/acpi/devices/PNP0C0F:02/status 11
/sys/bus/acpi/devices/PNP0C0F:03/status 11
/sys/bus/acpi/devices/PNP0C0F:04/status 11
/sys/bus/acpi/devices/PNP0C0F:05/status 11
/sys/bus/acpi/devices/PNP0C0F:06/status 11
/sys/bus/acpi/devices/PNP0C0F:07/status 11
/sys/bus/acpi/devices/PNP0C14:00/status 11
!!ACPI SoundWire Device Status Information
!!---------------
!!Kernel Information
!!------------------
Kernel release: #1 ZEN SMP PREEMPT_DYNAMIC Tue, 23 Jun 2026 11:14:06 +0000
Operating System: GNU/Linux
Architecture: x86_64
Processor: unknown
SMP Enabled: Yes
!!ALSA Version
!!------------
Driver version: k7.0.13-zen1-1-zen
Library version: 1.2.16.1
Utilities version: 1.2.16
!!Loaded ALSA modules
!!-------------------
snd_usb_audio (card 0)
snd_hda_intel (card 1)
snd_hda_intel (card 2)
snd_usb_audio (card 3)
!!Sound Servers on this system
!!----------------------------
PipeWire:
Installed - Yes (/usr/bin/pipewire)
Running - Yes
Jack:
Installed - Yes (/usr/bin/jackd)
Running - No
!!Soundcards recognised by ALSA
!!-----------------------------
0 [CODEC ]: USB-Audio - USB AUDIO CODEC
BurrBrown from Texas Instruments USB AUDIO CODEC at usb-0000:09:00.3-1, full s
1 [NVidia ]: HDA-Intel - HDA NVidia
HDA NVidia at 0xfc080000 irq 94
2 [Generic ]: HDA-Intel - HD-Audio Generic
HD-Audio Generic at 0xfc400000 irq 96
3 [USBAudio10 ]: USB-Audio - USB-Audio-1.0
Yichip USB-Audio-1.0 at usb-0000:02:00.0-6.3.1, full speed
!!PCI Soundcards installed in the system
!!--------------------------------------
07:00.1 Audio device [0403]: NVIDIA Corporation TU116 High Definition Audio Controller [10de:1aeb] (rev a1) (prog-if 00 [HDA compatible])
Subsystem: Micro-Star International Co., Ltd. [MSI] Device [1462:c758]
09:00.4 Audio device [0403]: Advanced Micro Devices, Inc. [AMD] Starship/Matisse HD Audio Controller [1022:1487] (prog-if 00 [HDA compatible])
Subsystem: Gigabyte Technology Co., Ltd Device [1458:a182]
!!Loaded sound module options
!!---------------------------
!!Module: snd_usb_audio
autoclock : Y
delayed_register : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
device_setup : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
ignore_ctl_error : N
implicit_fb : N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N
index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
lowlatency : Y
midi2_enable : Y
midi2_ump_probe : Y
pid : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
quirk_alias : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
quirk_flags : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
skip_validation : N
use_vmalloc : Y
vid : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
!!Module: snd_hda_intel
align_buffer_size : -1
bdl_pos_adj : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
beep_mode : N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N
ctl_dev_id : N
dmic_detect : Y
enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
enable_msi : -1
id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
jackpoll_ms : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
model : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
patch : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
pm_blacklist : -1
position_fix : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
power_save : 10
power_save_controller : Y
probe_mask : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
probe_only : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
single_cmd : -1
snoop : -1
!!Module: snd_hda_intel
align_buffer_size : -1
bdl_pos_adj : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
beep_mode : N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N
ctl_dev_id : N
dmic_detect : Y
enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
enable_msi : -1
id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
jackpoll_ms : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
model : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
patch : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
pm_blacklist : -1
position_fix : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
power_save : 10
power_save_controller : Y
probe_mask : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
probe_only : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
single_cmd : -1
snoop : -1
!!Module: snd_usb_audio
autoclock : Y
delayed_register : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
device_setup : 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0
enable : Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y,Y
id : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
ignore_ctl_error : N
implicit_fb : N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N,N
index : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
lowlatency : Y
midi2_enable : Y
midi2_ump_probe : Y
pid : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
quirk_alias : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
quirk_flags : (null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null),(null)
skip_validation : N
use_vmalloc : Y
vid : -1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1
!!Sysfs card info
!!---------------
!!Card: /sys/class/sound/card0
Driver: /sys/bus/usb/drivers/snd-usb-audio
Tree:
/sys/class/sound/card0
|-- controlC0
| |-- dev
| |-- device -> ../../card0
| |-- power
| |-- subsystem -> ../../../../../../../../../../class/sound
| `-- uevent
|-- device -> ../../../5-1:1.0
|-- id
|-- number
|-- pcmC0D0c
| |-- dev
| |-- device -> ../../card0
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../../../../class/sound
| `-- uevent
|-- pcmC0D0p
| |-- dev
| |-- device -> ../../card0
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../../../../class/sound
| `-- uevent
|-- power
| |-- autosuspend_delay_ms
| |-- control
| |-- runtime_active_time
| |-- runtime_status
| `-- runtime_suspended_time
|-- subsystem -> ../../../../../../../../../class/sound
`-- uevent
!!Card: /sys/class/sound/card1
Driver: /sys/bus/pci/drivers/snd_hda_intel
Tree:
/sys/class/sound/card1
|-- controlC1
| |-- dev
| |-- device -> ../../card1
| |-- power
| |-- subsystem -> ../../../../../../../class/sound
| `-- uevent
|-- device -> ../../../0000:07:00.1
|-- hwC1D0
| |-- afg
| |-- chip_name
| |-- clear
| |-- dev
| |-- device -> ../../card1
| |-- driver_pin_configs
| |-- hints
| |-- init_pin_configs
| |-- init_verbs
| |-- mfg
| |-- modelname
| |-- power
| |-- power_off_acct
| |-- power_on_acct
| |-- reconfig
| |-- revision_id
| |-- subsystem -> ../../../../../../../class/sound
| |-- subsystem_id
| |-- uevent
| |-- user_pin_configs
| |-- vendor_id
| `-- vendor_name
|-- id
|-- input13
| |-- capabilities
| |-- device -> ../../card1
| |-- event11
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- input14
| |-- capabilities
| |-- device -> ../../card1
| |-- event12
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- input15
| |-- capabilities
| |-- device -> ../../card1
| |-- event13
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- input16
| |-- capabilities
| |-- device -> ../../card1
| |-- event14
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- number
|-- pcmC1D3p
| |-- dev
| |-- device -> ../../card1
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../class/sound
| `-- uevent
|-- pcmC1D7p
| |-- dev
| |-- device -> ../../card1
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../class/sound
| `-- uevent
|-- pcmC1D8p
| |-- dev
| |-- device -> ../../card1
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../class/sound
| `-- uevent
|-- pcmC1D9p
| |-- dev
| |-- device -> ../../card1
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../class/sound
| `-- uevent
|-- power
| |-- autosuspend_delay_ms
| |-- control
| |-- runtime_active_time
| |-- runtime_status
| `-- runtime_suspended_time
|-- subsystem -> ../../../../../../class/sound
`-- uevent
!!Card: /sys/class/sound/card2
Driver: /sys/bus/pci/drivers/snd_hda_intel
Tree:
/sys/class/sound/card2
|-- controlC2
| |-- dev
| |-- device -> ../../card2
| |-- power
| |-- subsystem -> ../../../../../../../class/sound
| `-- uevent
|-- device -> ../../../0000:09:00.4
|-- hwC2D0
| |-- afg
| |-- chip_name
| |-- clear
| |-- dev
| |-- device -> ../../card2
| |-- driver_pin_configs
| |-- hints
| |-- init_pin_configs
| |-- init_verbs
| |-- mfg
| |-- modelname
| |-- power
| |-- power_off_acct
| |-- power_on_acct
| |-- reconfig
| |-- revision_id
| |-- subsystem -> ../../../../../../../class/sound
| |-- subsystem_id
| |-- uevent
| |-- user_pin_configs
| |-- vendor_id
| `-- vendor_name
|-- id
|-- input17
| |-- capabilities
| |-- device -> ../../card2
| |-- event15
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- input18
| |-- capabilities
| |-- device -> ../../card2
| |-- event16
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- input19
| |-- capabilities
| |-- device -> ../../card2
| |-- event17
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- input20
| |-- capabilities
| |-- device -> ../../card2
| |-- event18
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- input21
| |-- capabilities
| |-- device -> ../../card2
| |-- event19
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- input22
| |-- capabilities
| |-- device -> ../../card2
| |-- event20
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- input23
| |-- capabilities
| |-- device -> ../../card2
| |-- event21
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- input24
| |-- capabilities
| |-- device -> ../../card2
| |-- event22
| |-- id
| |-- inhibited
| |-- modalias
| |-- name
| |-- phys
| |-- power
| |-- properties
| |-- subsystem -> ../../../../../../../class/input
| |-- uevent
| `-- uniq
|-- number
|-- pcmC2D0c
| |-- dev
| |-- device -> ../../card2
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../class/sound
| `-- uevent
|-- pcmC2D0p
| |-- dev
| |-- device -> ../../card2
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../class/sound
| `-- uevent
|-- pcmC2D1p
| |-- dev
| |-- device -> ../../card2
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../class/sound
| `-- uevent
|-- pcmC2D2c
| |-- dev
| |-- device -> ../../card2
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../class/sound
| `-- uevent
|-- power
| |-- autosuspend_delay_ms
| |-- control
| |-- runtime_active_time
| |-- runtime_status
| `-- runtime_suspended_time
|-- subsystem -> ../../../../../../class/sound
`-- uevent
!!Card: /sys/class/sound/card3
Driver: /sys/bus/usb/drivers/snd-usb-audio
Tree:
/sys/class/sound/card3
|-- controlC3
| |-- dev
| |-- device -> ../../card3
| |-- power
| |-- subsystem -> ../../../../../../../../../../../../class/sound
| `-- uevent
|-- device -> ../../../1-6.3.1:1.0
|-- id
|-- number
|-- pcmC3D0c
| |-- dev
| |-- device -> ../../card3
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../../../../../../class/sound
| `-- uevent
|-- pcmC3D0p
| |-- dev
| |-- device -> ../../card3
| |-- pcm_class
| |-- power
| |-- subsystem -> ../../../../../../../../../../../../class/sound
| `-- uevent
|-- power
| |-- autosuspend_delay_ms
| |-- control
| |-- runtime_active_time
| |-- runtime_status
| `-- runtime_suspended_time
|-- subsystem -> ../../../../../../../../../../../class/sound
`-- uevent
!!HDA-Intel Codec information
!!---------------------------
--startcollapse--
Codec: Nvidia GPU 99 HDMI/DP
Address: 0
AFG Function Id: 0x1 (unsol 0)
Vendor Id: 0x10de0099
Subsystem Id: 0x1462c758
Revision Id: 0x100100
No Modem Function Group found
Default PCM:
rates [0x0]:
bits [0x0]:
formats [0x0]:
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
State of AFG node 0x01:
Power states: D0 D1 D2 D3 CLKSTOP EPSS
Power: setting=D0, actual=D0
GPIO: io=0, o=0, i=0, unsolicited=0, wake=0
Node 0x04 [Pin Complex] wcaps 0x407381: 8-Channels Digital CP
Pincap 0x09000094: OUT Detect HBR HDMI DP
Pin Default 0x185600f0: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=01, enabled=1
Devices: 4
*Dev 00: PD = 1, ELDV = 1, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Dev 01: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Dev 02: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Dev 03: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Connection: 4
0x08* 0x09 0x0a 0x0b
Node 0x05 [Pin Complex] wcaps 0x407381: 8-Channels Digital CP
Pincap 0x09000094: OUT Detect HBR HDMI DP
Pin Default 0x185600f0: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=05, enabled=1
Devices: 4
Dev 00: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Dev 01: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Dev 02: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
*Dev 03: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Connection: 4
0x08* 0x09 0x0a 0x0b
Node 0x06 [Pin Complex] wcaps 0x407381: 8-Channels Digital CP
Pincap 0x09000094: OUT Detect HBR HDMI DP
Pin Default 0x185600f0: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=09, enabled=1
Devices: 4
Dev 00: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Dev 01: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Dev 02: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
*Dev 03: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Connection: 4
0x08* 0x09 0x0a 0x0b
Node 0x07 [Pin Complex] wcaps 0x407381: 8-Channels Digital CP
Pincap 0x09000094: OUT Detect HBR HDMI DP
Pin Default 0x185600f0: [Jack] Digital Out at Int HDMI
Conn = Digital, Color = Unknown
DefAssociation = 0xf, Sequence = 0x0
Pin-ctls: 0x00:
Unsolicited: tag=0d, enabled=1
Devices: 4
Dev 00: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Dev 01: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Dev 02: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
*Dev 03: PD = 0, ELDV = 0, IA = 0, Connections [ 0x08* 0x09 0x0a 0x0b ]
Connection: 4
0x08* 0x09 0x0a 0x0b
Node 0x08 [Audio Output] wcaps 0x62b1: 8-Channels Digital Stripe
Converter: stream=0, channel=0
Digital: Enabled
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0xe]: 16 20 24
formats [0x5]: PCM AC3
Unsolicited: tag=00, enabled=0
Node 0x09 [Audio Output] wcaps 0x62b1: 8-Channels Digital Stripe
Converter: stream=0, channel=0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0xe]: 16 20 24
formats [0x5]: PCM AC3
Unsolicited: tag=00, enabled=0
Node 0x0a [Audio Output] wcaps 0x62b1: 8-Channels Digital Stripe
Converter: stream=0, channel=0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0xe]: 16 20 24
formats [0x5]: PCM AC3
Unsolicited: tag=00, enabled=0
Node 0x0b [Audio Output] wcaps 0x62b1: 8-Channels Digital Stripe
Converter: stream=0, channel=0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x7f0]: 32000 44100 48000 88200 96000 176400 192000
bits [0xe]: 16 20 24
formats [0x5]: PCM AC3
Unsolicited: tag=00, enabled=0
Codec: Realtek ALC892
Address: 0
AFG Function Id: 0x1 (unsol 1)
Vendor Id: 0x10ec0892
Subsystem Id: 0x1458a182
Revision Id: 0x100302
No Modem Function Group found
Default PCM:
rates [0x5f0]: 32000 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
State of AFG node 0x01:
Power states: D0 D1 D2 D3 CLKSTOP EPSS
Power: setting=D0, actual=D0
GPIO: io=2, o=0, i=0, unsolicited=1, wake=0
IO[0]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
IO[1]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
Node 0x02 [Audio Output] wcaps 0x41d: Stereo Amp-Out
Control: name="Front Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Device: name="ALC892 Analog", type="Audio", device=0
Amp-Out caps: ofs=0x40, nsteps=0x40, stepsize=0x03, mute=0
Amp-Out vals: [0x29 0x29]
Converter: stream=0, channel=0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x03 [Audio Output] wcaps 0x41d: Stereo Amp-Out
Control: name="Surround Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x40, nsteps=0x40, stepsize=0x03, mute=0
Amp-Out vals: [0x00 0x00]
Converter: stream=0, channel=0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x04 [Audio Output] wcaps 0x41d: Stereo Amp-Out
Control: name="Center Playback Volume", index=0, device=0
ControlAmp: chs=1, dir=Out, idx=0, ofs=0
Control: name="LFE Playback Volume", index=0, device=0
ControlAmp: chs=2, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x40, nsteps=0x40, stepsize=0x03, mute=0
Amp-Out vals: [0x00 0x00]
Converter: stream=0, channel=0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x05 [Audio Output] wcaps 0x41d: Stereo Amp-Out
Control: name="Side Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x40, nsteps=0x40, stepsize=0x03, mute=0
Amp-Out vals: [0x00 0x00]
Converter: stream=0, channel=0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x06 [Audio Output] wcaps 0x611: Stereo Digital
Converter: stream=0, channel=0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x5f0]: 32000 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x07 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In
Control: name="Capture Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Capture Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Device: name="ALC892 Analog", type="Audio", device=0
Amp-In caps: ofs=0x10, nsteps=0x2e, stepsize=0x03, mute=1
Amp-In vals: [0x2e 0x2e]
Converter: stream=0, channel=0
SDI-Select: 0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x23
Node 0x09 [Audio Input] wcaps 0x10051b: Stereo Amp-In
Control: name="Capture Volume", index=1, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Capture Switch", index=1, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Device: name="ALC892 Alt Analog", type="Audio", device=2
Amp-In caps: ofs=0x10, nsteps=0x2e, stepsize=0x03, mute=1
Amp-In vals: [0x80 0x80]
Converter: stream=0, channel=0
SDI-Select: 0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x22
Node 0x0a [Audio Input] wcaps 0x100711: Stereo Digital
Converter: stream=0, channel=0
SDI-Select: 0
Digital:
Digital category: 0x0
IEC Coding Type: 0x0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x1f
Node 0x0b [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Control: name="Rear Mic Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Rear Mic Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Front Mic Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=1, ofs=0
Control: name="Front Mic Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=1, ofs=0
Control: name="Line Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=2, ofs=0
Control: name="Line Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=2, ofs=0
Amp-In caps: ofs=0x17, nsteps=0x1f, stepsize=0x05, mute=1
Amp-In vals: [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
Connection: 10
0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x14 0x15 0x16 0x17
Node 0x0c [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x80 0x80]
Connection: 2
0x02 0x0b
Node 0x0d [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x80 0x80]
Connection: 2
0x03 0x0b
Node 0x0e [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x80 0x80]
Connection: 2
0x04 0x0b
Node 0x0f [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x80 0x80]
Connection: 2
0x05 0x0b
Node 0x10 [Audio Output] wcaps 0x611: Stereo Digital
Control: name="IEC958 Playback Con Mask", index=0, device=0
Control: name="IEC958 Playback Pro Mask", index=0, device=0
Control: name="IEC958 Playback Default", index=0, device=0
Control: name="IEC958 Playback Switch", index=0, device=0
Control: name="IEC958 Default PCM Playback Switch", index=0, device=0
Device: name="ALC892 Digital", type="SPDIF", device=1
Converter: stream=0, channel=0
Digital: Enabled GenLevel
Digital category: 0x2
IEC Coding Type: 0x0
PCM:
rates [0x5f0]: 32000 44100 48000 88200 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x11 [Pin Complex] wcaps 0x400781: Stereo Digital
Pincap 0x00000010: OUT
Pin Default 0x99430130: [Fixed] SPDIF Out at Int ATAPI
Conn = ATAPI, Color = Unknown
DefAssociation = 0x3, 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: 1
0x10
Node 0x12 [Pin Complex] wcaps 0x400401: Stereo
Pincap 0x00000020: IN
Pin Default 0x4037d540: [N/A] CD at Ext N/A
Conn = Analog, Color = UNKNOWN
DefAssociation = 0x4, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x00:
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x13 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x14 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Front 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 0x0001003e: IN OUT HP EAPD Detect Trigger
EAPD 0x2: EAPD
Pin Default 0x01014010: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Green
DefAssociation = 0x1, Sequence = 0x0
Pin-ctls: 0x40: OUT
Unsolicited: tag=05, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x0c
Node 0x15 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Surround 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 0x00000036: IN OUT Detect Trigger
Pin Default 0x01011012: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0x1, Sequence = 0x2
Pin-ctls: 0x40: OUT
Unsolicited: tag=06, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x0d
Node 0x16 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Center Playback Switch", index=0, device=0
ControlAmp: chs=1, dir=Out, idx=0, ofs=0
Control: name="LFE Playback Switch", index=0, device=0
ControlAmp: chs=2, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x00000036: IN OUT Detect Trigger
Pin Default 0x01016011: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Orange
DefAssociation = 0x1, Sequence = 0x1
Pin-ctls: 0x40: OUT
Unsolicited: tag=07, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x0e
Node 0x17 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Side 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 0x00000036: IN OUT Detect Trigger
Pin Default 0x01012014: [Jack] Line Out at Ext Rear
Conn = 1/8, Color = Grey
DefAssociation = 0x1, Sequence = 0x4
Pin-ctls: 0x40: OUT
Unsolicited: tag=08, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x0f
Node 0x18 [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Control: name="Rear Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x00003736: IN OUT Detect Trigger
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x01a19040: [Jack] Mic at Ext Rear
Conn = 1/8, Color = Pink
DefAssociation = 0x4, Sequence = 0x0
Pin-ctls: 0x21: IN VREF_50
Unsolicited: tag=02, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26
Node 0x19 [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Control: name="Front Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0000373e: IN OUT HP Detect Trigger
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x02a19050: [Jack] Mic at Ext Front
Conn = 1/8, Color = Pink
DefAssociation = 0x5, Sequence = 0x0
Pin-ctls: 0x24: IN VREF_80
Unsolicited: tag=03, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26
Node 0x1a [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Control: name="Line Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x00003736: IN OUT Detect Trigger
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x0181304f: [Jack] Line In at Ext Rear
Conn = 1/8, Color = Blue
DefAssociation = 0x4, Sequence = 0xf
Pin-ctls: 0x20: IN VREF_HIZ
Unsolicited: tag=04, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c* 0x0d 0x0e 0x0f 0x26
Node 0x1b [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Control: name="Headphone Playback Switch", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x00 0x00]
Pincap 0x0001373e: IN OUT HP EAPD Detect Trigger
Vref caps: HIZ 50 GRD 80 100
EAPD 0x2: EAPD
Pin Default 0x02214020: [Jack] HP Out at Ext Front
Conn = 1/8, Color = Green
DefAssociation = 0x2, Sequence = 0x0
Pin-ctls: 0xc0: OUT HP VREF_HIZ
Unsolicited: tag=01, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 5
0x0c 0x0d 0x0e 0x0f 0x26*
Node 0x1c [Pin Complex] wcaps 0x400481: Stereo
Pincap 0x00000024: IN Detect
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x1d [Pin Complex] wcaps 0x400400: Mono
Pincap 0x00000020: IN
Pin Default 0x4046e641: [N/A] SPDIF Out at Ext N/A
Conn = Digital, Color = White
DefAssociation = 0x4, Sequence = 0x1
Pin-ctls: 0x20: IN
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x1e [Pin Complex] wcaps 0x400781: Stereo Digital
Pincap 0x00000010: OUT
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, 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: 1
0x06
Node 0x1f [Pin Complex] wcaps 0x400681: Stereo Digital
Pincap 0x00000020: IN
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x20 [Vendor Defined Widget] wcaps 0xf00040: Mono
Processing caps: benign=0, ncoeff=24
Node 0x21 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x22 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
Connection: 12
0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x14 0x15 0x16 0x17 0x0b 0x12
Node 0x23 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x80 0x80] [0x00 0x00] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
Connection: 11
0x18 0x19 0x1a 0x1b 0x1c 0x1d 0x14 0x15 0x16 0x17 0x0b
Node 0x24 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x25 [Audio Output] wcaps 0x41d: Stereo Amp-Out
Control: name="Headphone Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x40, nsteps=0x40, stepsize=0x03, mute=0
Amp-Out vals: [0x29 0x29]
Converter: stream=0, channel=0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x26 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x00 0x00] [0x80 0x80]
Connection: 2
0x25 0x0b
--endcollapse--
!!USB Descriptors
!!---------------
--startcollapse--
Bus 005 Device 002: ID 08bb:29c0 Texas Instruments PCM2900C Audio CODEC
Negotiated speed: Full Speed (12Mbps)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00
bDeviceClass 0 [unknown]
bDeviceSubClass 0 [unknown]
bDeviceProtocol 0
bMaxPacketSize0 8
idVendor 0x08bb Texas Instruments
idProduct 0x29c0 PCM2900C Audio CODEC
bcdDevice 1.00
iManufacturer 1 BurrBrown from Texas Instruments
iProduct 2 USB AUDIO CODEC
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x0445
bNumInterfaces 4
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 0
iInterface 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 0x003e
bInCollection 2
baInterfaceNr(0) 1
baInterfaceNr(1) 2
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 1
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 2
wTerminalType 0x0301 Speaker
bAssocTerminal 0
bSourceID 3
iTerminal 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 3
bSourceID 1
bControlSize 1
bmaControls(0) 0x01
Mute Control
bmaControls(1) 0x02
Volume Control
bmaControls(2) 0x02
Volume Control
iFeature 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 4
wTerminalType 0x0603 Line Connector
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 5
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bSourceID 4
iTerminal 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 1
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 3 Discrete
tSamFreq[ 0] 32000
tSamFreq[ 1] 44100
tSamFreq[ 2] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x00c0 1x 192 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 2
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 1
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 2
bBitResolution 16
bSamFreqType 3 Discrete
tSamFreq[ 0] 32000
tSamFreq[ 1] 44100
tSamFreq[ 2] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x0060 1x 96 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 3
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 1
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 1
bBitResolution 8
bSamFreqType 3 Discrete
tSamFreq[ 0] 32000
tSamFreq[ 1] 44100
tSamFreq[ 2] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x0060 1x 96 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 4
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 1
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 17
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 1
bBitResolution 8
bSamFreqType 3 Discrete
tSamFreq[ 0] 32000
tSamFreq[ 1] 44100
tSamFreq[ 2] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x00c4 1x 196 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 2
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0062 1x 98 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 3
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 44100
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x00b4 1x 180 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 4
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 44100
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x005a 1x 90 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 5
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 32000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0084 1x 132 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 6
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 32000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0042 1x 66 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 7
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 22050
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x005c 1x 92 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 8
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 22050
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x002e 1x 46 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 9
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 16000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0044 1x 68 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 10
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 16000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0022 1x 34 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 11
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 1
bBitResolution 8
bSamFreqType 1 Discrete
tSamFreq[ 0] 16000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0022 1x 34 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 12
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 1
bBitResolution 8
bSamFreqType 1 Discrete
tSamFreq[ 0] 16000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0011 1x 17 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 13
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 1
bBitResolution 8
bSamFreqType 1 Discrete
tSamFreq[ 0] 8000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0012 1x 18 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 14
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 1
bBitResolution 8
bSamFreqType 1 Discrete
tSamFreq[ 0] 8000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0009 1x 9 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 15
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 11025
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 13
Transfer Type Isochronous
Synch Type Synchronous
Usage Type Data
wMaxPacketSize 0x0030 1x 48 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 16
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 11025
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 13
Transfer Type Isochronous
Synch Type Synchronous
Usage Type Data
wMaxPacketSize 0x0018 1x 24 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 17
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 1
bBitResolution 8
bSamFreqType 1 Discrete
tSamFreq[ 0] 11025
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 13
Transfer Type Isochronous
Synch Type Synchronous
Usage Type Data
wMaxPacketSize 0x0018 1x 24 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 18
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 5
bDelay 0 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 1
bBitResolution 8
bSamFreqType 1 Discrete
tSamFreq[ 0] 11025
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x84 EP 4 IN
bmAttributes 13
Transfer Type Isochronous
Synch Type Synchronous
Usage Type Data
wMaxPacketSize 0x000c 1x 12 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 3
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 [unknown]
bInterfaceProtocol 0
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 1.00
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 31
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x85 EP 5 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0001 1x 1 bytes
bInterval 10
Bus 001 Device 008: ID 12d1:3a06 Huawei Technologies Co., Ltd. USB-Audio-1.0
Negotiated speed: Full Speed (12Mbps)
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 1.10
bDeviceClass 0 [unknown]
bDeviceSubClass 0 [unknown]
bDeviceProtocol 1
bMaxPacketSize0 64
idVendor 0x12d1 Huawei Technologies Co., Ltd.
idProduct 0x3a06 USB-Audio-1.0
bcdDevice 1.00
iManufacturer 1 Yichip
iProduct 2 USB-Audio-1.0
iSerial 0
bNumConfigurations 1
Configuration Descriptor:
bLength 9
bDescriptorType 2
wTotalLength 0x00da
bNumInterfaces 4
bConfigurationValue 1
iConfiguration 0
bmAttributes 0x80
(Bus Powered)
MaxPower 100mA
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 0
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 1 Control Device
bInterfaceProtocol 0
iInterface 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 1 (HEADER)
bcdADC 1.00
wTotalLength 0x0047
bInCollection 2
baInterfaceNr(0) 1
baInterfaceNr(1) 2
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 1
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bNrChannels 2
wChannelConfig 0x0003
Left Front (L)
Right Front (R)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 10
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 9
bSourceID 1
bControlSize 1
bmaControls(0) 0x03
Mute Control
Volume Control
bmaControls(1) 0x00
bmaControls(2) 0x00
iFeature 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 3
wTerminalType 0x0301 Speaker
bAssocTerminal 0
bSourceID 9
iTerminal 0
AudioControl Interface Descriptor:
bLength 12
bDescriptorType 36
bDescriptorSubtype 2 (INPUT_TERMINAL)
bTerminalID 2
wTerminalType 0x0201 Microphone
bAssocTerminal 0
bNrChannels 1
wChannelConfig 0x0001
Left Front (L)
iChannelNames 0
iTerminal 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 6 (FEATURE_UNIT)
bUnitID 10
bSourceID 2
bControlSize 1
bmaControls(0) 0x03
Mute Control
Volume Control
bmaControls(1) 0x00
iFeature 0
AudioControl Interface Descriptor:
bLength 9
bDescriptorType 36
bDescriptorSubtype 3 (OUTPUT_TERMINAL)
bTerminalID 4
wTerminalType 0x0101 USB Streaming
bAssocTerminal 0
bSourceID 10
iTerminal 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 1
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 1
bDelay 1 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 2
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x02 EP 2 OUT
bmAttributes 9
Transfer Type Isochronous
Synch Type Adaptive
Usage Type Data
wMaxPacketSize 0x00c0 1x 192 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 0
bNumEndpoints 0
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 2
bAlternateSetting 1
bNumEndpoints 1
bInterfaceClass 1 Audio
bInterfaceSubClass 2 Streaming
bInterfaceProtocol 0
iInterface 0
AudioStreaming Interface Descriptor:
bLength 7
bDescriptorType 36
bDescriptorSubtype 1 (AS_GENERAL)
bTerminalLink 4
bDelay 1 frames
wFormatTag 0x0001 PCM
AudioStreaming Interface Descriptor:
bLength 11
bDescriptorType 36
bDescriptorSubtype 2 (FORMAT_TYPE)
bFormatType 1 (FORMAT_TYPE_I)
bNrChannels 1
bSubframeSize 2
bBitResolution 16
bSamFreqType 1 Discrete
tSamFreq[ 0] 48000
Endpoint Descriptor:
bLength 9
bDescriptorType 5
bEndpointAddress 0x82 EP 2 IN
bmAttributes 5
Transfer Type Isochronous
Synch Type Asynchronous
Usage Type Data
wMaxPacketSize 0x0060 1x 96 bytes
bInterval 1
bRefresh 0
bSynchAddress 0
AudioStreaming Endpoint Descriptor:
bLength 7
bDescriptorType 37
bDescriptorSubtype 1 (EP_GENERAL)
bmAttributes 0x00
bLockDelayUnits 0 Undefined
wLockDelay 0x0000
Interface Descriptor:
bLength 9
bDescriptorType 4
bInterfaceNumber 3
bAlternateSetting 0
bNumEndpoints 1
bInterfaceClass 3 Human Interface Device
bInterfaceSubClass 0 [unknown]
bInterfaceProtocol 0
iInterface 0
HID Device Descriptor:
bLength 9
bDescriptorType 33
bcdHID 2.01
bCountryCode 0 Not supported
bNumDescriptors 1
bDescriptorType 34 Report
wDescriptorLength 54
Report Descriptors:
** UNAVAILABLE **
Endpoint Descriptor:
bLength 7
bDescriptorType 5
bEndpointAddress 0x81 EP 1 IN
bmAttributes 3
Transfer Type Interrupt
Synch Type None
Usage Type Data
wMaxPacketSize 0x0008 1x 8 bytes
bInterval 1
--endcollapse--
!!USB Stream information
!!----------------------
--startcollapse--
BurrBrown from Texas Instruments USB AUDIO CODEC at usb-0000:09:00.3-1, full s : USB Audio
Playback:
Status: Stop
Interface 1
Altset 1
Format: S16_LE
Channels: 2
Endpoint: 0x02 (2 OUT) (ADAPTIVE)
Rates: 32000, 44100, 48000
Bits: 16
Channel map: FL FR
Interface 1
Altset 2
Format: S16_LE
Channels: 1
Endpoint: 0x02 (2 OUT) (ADAPTIVE)
Rates: 32000, 44100, 48000
Bits: 16
Channel map: MONO
Interface 1
Altset 3
Format: S8
Channels: 2
Endpoint: 0x02 (2 OUT) (ADAPTIVE)
Rates: 32000, 44100, 48000
Bits: 8
Channel map: FL FR
Interface 1
Altset 4
Format: S8
Channels: 1
Endpoint: 0x02 (2 OUT) (ADAPTIVE)
Rates: 32000, 44100, 48000
Bits: 8
Channel map: MONO
Capture:
Status: Running
Interface = 2
Altset = 1
Packet Size = 196
Momentary freq = 48000 Hz (0x30.0000)
Interface 2
Altset 1
Format: S16_LE
Channels: 2
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 48000
Bits: 16
Channel map: FL FR
Interface 2
Altset 2
Format: S16_LE
Channels: 1
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 48000
Bits: 16
Channel map: MONO
Interface 2
Altset 3
Format: S16_LE
Channels: 2
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 44100
Bits: 16
Channel map: FL FR
Interface 2
Altset 4
Format: S16_LE
Channels: 1
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 44100
Bits: 16
Channel map: MONO
Interface 2
Altset 5
Format: S16_LE
Channels: 2
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 32000
Bits: 16
Channel map: FL FR
Interface 2
Altset 6
Format: S16_LE
Channels: 1
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 32000
Bits: 16
Channel map: MONO
Interface 2
Altset 7
Format: S16_LE
Channels: 2
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 22050
Bits: 16
Channel map: FL FR
Interface 2
Altset 8
Format: S16_LE
Channels: 1
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 22050
Bits: 16
Channel map: MONO
Interface 2
Altset 9
Format: S16_LE
Channels: 2
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 16000
Bits: 16
Channel map: FL FR
Interface 2
Altset 10
Format: S16_LE
Channels: 1
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 16000
Bits: 16
Channel map: MONO
Interface 2
Altset 11
Format: S8
Channels: 2
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 16000
Bits: 8
Channel map: FL FR
Interface 2
Altset 12
Format: S8
Channels: 1
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 16000
Bits: 8
Channel map: MONO
Interface 2
Altset 13
Format: S8
Channels: 2
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 8000
Bits: 8
Channel map: FL FR
Interface 2
Altset 14
Format: S8
Channels: 1
Endpoint: 0x84 (4 IN) (ASYNC)
Rates: 8000
Bits: 8
Channel map: MONO
Interface 2
Altset 15
Format: S16_LE
Channels: 2
Endpoint: 0x84 (4 IN) (SYNC)
Rates: 11025
Bits: 16
Channel map: FL FR
Interface 2
Altset 16
Format: S16_LE
Channels: 1
Endpoint: 0x84 (4 IN) (SYNC)
Rates: 11025
Bits: 16
Channel map: MONO
Interface 2
Altset 17
Format: S8
Channels: 2
Endpoint: 0x84 (4 IN) (SYNC)
Rates: 11025
Bits: 8
Channel map: FL FR
Interface 2
Altset 18
Format: S8
Channels: 1
Endpoint: 0x84 (4 IN) (SYNC)
Rates: 11025
Bits: 8
Channel map: MONO
Yichip USB-Audio-1.0 at usb-0000:02:00.0-6.3.1, full speed : USB Audio
Playback:
Status: Running
Interface = 1
Altset = 1
Packet Size = 192
Momentary freq = 48000 Hz (0x30.0000)
Interface 1
Altset 1
Format: S16_LE
Channels: 2
Endpoint: 0x02 (2 OUT) (ADAPTIVE)
Rates: 48000
Bits: 16
Channel map: FL FR
Capture:
Status: Running
Interface = 2
Altset = 1
Packet Size = 96
Momentary freq = 48000 Hz (0x30.0000)
Interface 2
Altset 1
Format: S16_LE
Channels: 1
Endpoint: 0x82 (2 IN) (ASYNC)
Rates: 48000
Bits: 16
Channel map: MONO
--endcollapse--
!!USB Mixer information
!!---------------------
--startcollapse--
USB Mixer: usb_id=0x08bb29c0, ctrlif=0, ctlerr=0
Card: BurrBrown from Texas Instruments USB AUDIO CODEC at usb-0000:09:00.3-1, full s
Unit: 3
Control: name="PCM Playback Volume", index=0
Info: id=3, control=2, cmask=0x3, channels=2, type="S16"
Volume: min=-16384, max=0, dBmin=-6400, dBmax=0
Unit: 3
Control: name="PCM Playback Switch", index=0
Info: id=3, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
Volume: min=0, max=1, dBmin=0, dBmax=0
USB Mixer: usb_id=0x12d13a06, ctrlif=0, ctlerr=0
Card: Yichip USB-Audio-1.0 at usb-0000:02:00.0-6.3.1, full speed
Unit: 9
Control: name="PCM Playback Volume", index=0
Info: id=9, control=2, cmask=0x0, channels=1, type="S16"
Volume: min=-32768, max=-32513, dBmin=0, dBmax=0
Unit: 9
Control: name="PCM Playback Switch", index=0
Info: id=9, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
Volume: min=0, max=1, dBmin=0, dBmax=0
Unit: 10
Control: name="Mic Capture Volume", index=0
Info: id=10, control=2, cmask=0x0, channels=1, type="S16"
Volume: min=-32768, max=-32513, dBmin=0, dBmax=0
Unit: 10
Control: name="Mic Capture Switch", index=0
Info: id=10, control=1, cmask=0x0, channels=1, type="INV_BOOLEAN"
Volume: min=0, max=1, dBmin=0, dBmax=0
--endcollapse--
!!ALSA Device nodes
!!-----------------
crw-rw----+ 1 root audio 116, 16 Jun 26 02:41 /dev/snd/controlC0
crw-rw----+ 1 root audio 116, 7 Jun 26 02:41 /dev/snd/controlC1
crw-rw----+ 1 root audio 116, 13 Jun 26 02:41 /dev/snd/controlC2
crw-rw----+ 1 root audio 116, 19 Jun 26 02:41 /dev/snd/controlC3
crw-rw----+ 1 root audio 116, 6 Jun 26 02:41 /dev/snd/hwC1D0
crw-rw----+ 1 root audio 116, 12 Jun 26 02:41 /dev/snd/hwC2D0
crw-rw----+ 1 root audio 116, 15 Jun 26 03:16 /dev/snd/pcmC0D0c
crw-rw----+ 1 root audio 116, 14 Jun 26 03:16 /dev/snd/pcmC0D0p
crw-rw----+ 1 root audio 116, 2 Jun 26 03:16 /dev/snd/pcmC1D3p
crw-rw----+ 1 root audio 116, 3 Jun 26 03:16 /dev/snd/pcmC1D7p
crw-rw----+ 1 root audio 116, 4 Jun 26 03:16 /dev/snd/pcmC1D8p
crw-rw----+ 1 root audio 116, 5 Jun 26 03:16 /dev/snd/pcmC1D9p
crw-rw----+ 1 root audio 116, 9 Jun 26 03:16 /dev/snd/pcmC2D0c
crw-rw----+ 1 root audio 116, 8 Jun 26 03:16 /dev/snd/pcmC2D0p
crw-rw----+ 1 root audio 116, 10 Jun 26 03:16 /dev/snd/pcmC2D1p
crw-rw----+ 1 root audio 116, 11 Jun 26 03:16 /dev/snd/pcmC2D2c
crw-rw----+ 1 root audio 116, 18 Jun 26 03:16 /dev/snd/pcmC3D0c
crw-rw----+ 1 root audio 116, 17 Jun 26 03:17 /dev/snd/pcmC3D0p
crw-rw----+ 1 root audio 116, 1 Jun 26 02:41 /dev/snd/seq
crw-rw----+ 1 root audio 116, 33 Jun 26 02:41 /dev/snd/timer
/dev/snd/by-id:
total 0
drwxr-xr-x 2 root root 80 Jun 26 02:41 .
drwxr-xr-x 4 root root 480 Jun 26 02:41 ..
lrwxrwxrwx 1 root root 12 Jun 26 02:41 usb-BurrBrown_from_Texas_Instruments_USB_AUDIO_CODEC-00 -> ../controlC0
lrwxrwxrwx 1 root root 12 Jun 26 02:41 usb-Yichip_USB-Audio-1.0-00 -> ../controlC3
/dev/snd/by-path:
total 0
drwxr-xr-x 2 root root 160 Jun 26 02:41 .
drwxr-xr-x 4 root root 480 Jun 26 02:41 ..
lrwxrwxrwx 1 root root 12 Jun 26 02:41 pci-0000:02:00.0-usb-0:6.3.1:1.0 -> ../controlC3
lrwxrwxrwx 1 root root 12 Jun 26 02:41 pci-0000:02:00.0-usbv2-0:6.3.1:1.0 -> ../controlC3
lrwxrwxrwx 1 root root 12 Jun 26 02:41 pci-0000:07:00.1 -> ../controlC1
lrwxrwxrwx 1 root root 12 Jun 26 02:41 pci-0000:09:00.3-usb-0:1:1.0 -> ../controlC0
lrwxrwxrwx 1 root root 12 Jun 26 02:41 pci-0000:09:00.3-usbv2-0:1:1.0 -> ../controlC0
lrwxrwxrwx 1 root root 12 Jun 26 02:41 pci-0000:09:00.4 -> ../controlC2
!!Aplay/Arecord output
!!--------------------
APLAY
**** List of PLAYBACK Hardware Devices ****
card 0: CODEC [USB AUDIO CODEC], device 0: USB Audio [USB Audio]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 3: HDMI 0 [CU34G2XP]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 7: HDMI 1 [HDMI 1]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 8: HDMI 2 [HDMI 2]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 1: NVidia [HDA NVidia], device 9: HDMI 3 [HDMI 3]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Generic [HD-Audio Generic], device 0: ALC892 Analog [ALC892 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Generic [HD-Audio Generic], device 1: ALC892 Digital [ALC892 Digital]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 3: USBAudio10 [USB-Audio-1.0], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
ARECORD
**** List of CAPTURE Hardware Devices ****
card 0: CODEC [USB AUDIO CODEC], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
card 2: Generic [HD-Audio Generic], device 0: ALC892 Analog [ALC892 Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 2: Generic [HD-Audio Generic], device 2: ALC892 Alt Analog [ALC892 Alt Analog]
Subdevices: 1/1
Subdevice #0: subdevice #0
card 3: USBAudio10 [USB-Audio-1.0], device 0: USB Audio [USB Audio]
Subdevices: 0/1
Subdevice #0: subdevice #0
!!Amixer output
!!-------------
!!-------Mixer controls for card CODEC
Card sysdefault:0 'CODEC'/'BurrBrown from Texas Instruments USB AUDIO CODEC at usb-0000:09:00.3-1, full s'
Mixer name : 'USB Mixer'
Components : 'USB08bb:29c0'
Controls : 4
Simple ctrls : 1
Simple mixer control 'PCM',0
Capabilities: pvolume pswitch pswitch-joined
Playback channels: Front Left - Front Right
Limits: Playback 0 - 64
Mono:
Front Left: Playback 43 [67%] [-21.00dB] [on]
Front Right: Playback 43 [67%] [-21.00dB] [on]
!!-------Mixer controls for card NVidia
Card sysdefault:1 'NVidia'/'HDA NVidia at 0xfc080000 irq 94'
Mixer name : 'Nvidia GPU 99 HDMI/DP'
Components : 'HDA:10de0099,1462c758,00100100'
Controls : 28
Simple ctrls : 4
Simple mixer control 'IEC958',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958',1
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958',2
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958',3
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
!!-------Mixer controls for card Generic
Card sysdefault:2 'Generic'/'HD-Audio Generic at 0xfc400000 irq 96'
Mixer name : 'Realtek ALC892'
Components : 'HDA:10ec0892,1458a182,00100302'
Controls : 50
Simple ctrls : 22
Simple mixer control 'Master',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 64
Mono: Playback 41 [64%] [-23.00dB] [on]
Simple mixer control 'Headphone',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 64
Mono:
Front Left: Playback 64 [100%] [0.00dB] [on]
Front Right: Playback 64 [100%] [0.00dB] [on]
Simple mixer control 'PCM',0
Capabilities: pvolume
Playback channels: Front Left - Front Right
Limits: Playback 0 - 255
Mono:
Front Left: Playback 251 [98%] [-0.80dB]
Front Right: Playback 251 [98%] [-0.80dB]
Simple mixer control 'Front',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 64
Mono:
Front Left: Playback 64 [100%] [0.00dB] [off]
Front Right: Playback 64 [100%] [0.00dB] [off]
Simple mixer control 'Front Mic',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 0 [0%] [-34.50dB] [off]
Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'Front Mic Boost',0
Capabilities: volume
Playback channels: Front Left - Front Right
Capture channels: Front Left - Front Right
Limits: 0 - 3
Front Left: 0 [0%] [0.00dB]
Front Right: 0 [0%] [0.00dB]
Simple mixer control 'Surround',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 64
Mono:
Front Left: Playback 0 [0%] [-64.00dB] [off]
Front Right: Playback 0 [0%] [-64.00dB] [off]
Simple mixer control 'Center',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 64
Mono: Playback 0 [0%] [-64.00dB] [off]
Simple mixer control 'LFE',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 64
Mono: Playback 0 [0%] [-64.00dB] [off]
Simple mixer control 'Side',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 64
Mono:
Front Left: Playback 0 [0%] [-64.00dB] [off]
Front Right: Playback 0 [0%] [-64.00dB] [off]
Simple mixer control 'Line',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 0 [0%] [-34.50dB] [off]
Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'Line Boost',0
Capabilities: volume
Playback channels: Front Left - Front Right
Capture channels: Front Left - Front Right
Limits: 0 - 3
Front Left: 0 [0%] [0.00dB]
Front Right: 0 [0%] [0.00dB]
Simple mixer control 'IEC958',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'IEC958 Default PCM',0
Capabilities: pswitch pswitch-joined
Playback channels: Mono
Mono: Playback [on]
Simple mixer control 'Capture',0
Capabilities: cvolume cswitch
Capture channels: Front Left - Front Right
Limits: Capture 0 - 46
Front Left: Capture 46 [100%] [30.00dB] [on]
Front Right: Capture 46 [100%] [30.00dB] [on]
Simple mixer control 'Capture',1
Capabilities: cvolume cswitch
Capture channels: Front Left - Front Right
Limits: Capture 0 - 46
Front Left: Capture 0 [0%] [-16.00dB] [off]
Front Right: Capture 0 [0%] [-16.00dB] [off]
Simple mixer control 'Auto-Mute Mode',0
Capabilities: enum
Items: 'Disabled' 'Enabled'
Item0: 'Enabled'
Simple mixer control 'Input Source',0
Capabilities: cenum
Items: 'Rear Mic' 'Front Mic' 'Line'
Item0: 'Front Mic'
Simple mixer control 'Input Source',1
Capabilities: cenum
Items: 'Rear Mic' 'Front Mic' 'Line'
Item0: 'Rear Mic'
Simple mixer control 'Loopback Mixing',0
Capabilities: enum
Items: 'Disabled' 'Enabled'
Item0: 'Disabled'
Simple mixer control 'Rear Mic',0
Capabilities: pvolume pswitch
Playback channels: Front Left - Front Right
Limits: Playback 0 - 31
Mono:
Front Left: Playback 0 [0%] [-34.50dB] [off]
Front Right: Playback 0 [0%] [-34.50dB] [off]
Simple mixer control 'Rear Mic Boost',0
Capabilities: volume
Playback channels: Front Left - Front Right
Capture channels: Front Left - Front Right
Limits: 0 - 3
Front Left: 0 [0%] [0.00dB]
Front Right: 0 [0%] [0.00dB]
!!-------Mixer controls for card USBAudio10
Card sysdefault:3 'USBAudio10'/'Yichip USB-Audio-1.0 at usb-0000:02:00.0-6.3.1, full speed'
Mixer name : 'USB Mixer'
Components : 'USB12d1:3a06'
Controls : 6
Simple ctrls : 2
Simple mixer control 'PCM',0
Capabilities: pvolume pvolume-joined pswitch pswitch-joined
Playback channels: Mono
Limits: Playback 0 - 255
Mono: Playback 22 [9%] [on]
Simple mixer control 'Mic',0
Capabilities: cvolume cvolume-joined cswitch cswitch-joined
Capture channels: Mono
Limits: Capture 0 - 255
Mono: Capture 255 [100%] [on]
!!Alsactl output
!!--------------
--startcollapse--
state.CODEC {
control.1 {
iface PCM
name 'Playback Channel Map'
value.0 0
value.1 0
comment {
access 'read volatile'
type INTEGER
count 2
range '0 - 36'
}
}
control.2 {
iface PCM
name 'Capture Channel Map'
value.0 3
value.1 4
comment {
access 'read volatile'
type INTEGER
count 2
range '0 - 36'
}
}
control.3 {
iface MIXER
name 'PCM Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.4 {
iface MIXER
name 'PCM Playback Volume'
value.0 43
value.1 43
comment {
access 'read write'
type INTEGER
count 2
range '0 - 64'
dbmin -6400
dbmax 0
dbvalue.0 -2100
dbvalue.1 -2100
}
}
}
state.NVidia {
control.1 {
iface CARD
name 'HDMI/DP,pcm=3 Jack'
value true
comment {
access read
type BOOLEAN
count 1
}
}
control.2 {
iface MIXER
name 'IEC958 Playback Con Mask'
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.3 {
iface MIXER
name 'IEC958 Playback Pro Mask'
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.4 {
iface MIXER
name 'IEC958 Playback Default'
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.5 {
iface MIXER
name 'IEC958 Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.6 {
iface PCM
device 3
name ELD
value '1000070068140001000100000000000005e306b2435533344732585009070700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read volatile'
type BYTES
count 95
}
}
control.7 {
iface CARD
name 'HDMI/DP,pcm=7 Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.8 {
iface MIXER
name 'IEC958 Playback Con Mask'
index 1
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.9 {
iface MIXER
name 'IEC958 Playback Pro Mask'
index 1
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.10 {
iface MIXER
name 'IEC958 Playback Default'
index 1
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.11 {
iface MIXER
name 'IEC958 Playback Switch'
index 1
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.12 {
iface PCM
device 7
name ELD
value ''
comment {
access 'read volatile'
type BYTES
count 0
}
}
control.13 {
iface CARD
name 'HDMI/DP,pcm=8 Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.14 {
iface MIXER
name 'IEC958 Playback Con Mask'
index 2
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.15 {
iface MIXER
name 'IEC958 Playback Pro Mask'
index 2
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.16 {
iface MIXER
name 'IEC958 Playback Default'
index 2
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.17 {
iface MIXER
name 'IEC958 Playback Switch'
index 2
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.18 {
iface PCM
device 8
name ELD
value ''
comment {
access 'read volatile'
type BYTES
count 0
}
}
control.19 {
iface CARD
name 'HDMI/DP,pcm=9 Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.20 {
iface MIXER
name 'IEC958 Playback Con Mask'
index 3
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.21 {
iface MIXER
name 'IEC958 Playback Pro Mask'
index 3
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.22 {
iface MIXER
name 'IEC958 Playback Default'
index 3
value '0400000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.23 {
iface MIXER
name 'IEC958 Playback Switch'
index 3
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.24 {
iface PCM
device 9
name ELD
value ''
comment {
access 'read volatile'
type BYTES
count 0
}
}
control.25 {
iface PCM
device 3
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write volatile'
type INTEGER
count 8
range '0 - 36'
}
}
control.26 {
iface PCM
device 7
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write volatile'
type INTEGER
count 8
range '0 - 36'
}
}
control.27 {
iface PCM
device 8
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write volatile'
type INTEGER
count 8
range '0 - 36'
}
}
control.28 {
iface PCM
device 9
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read write volatile'
type INTEGER
count 8
range '0 - 36'
}
}
}
state.Generic {
control.1 {
iface MIXER
name 'Front Playback Volume'
value.0 64
value.1 64
comment {
access 'read write'
type INTEGER
count 2
range '0 - 64'
dbmin -6400
dbmax 0
dbvalue.0 0
dbvalue.1 0
}
}
control.2 {
iface MIXER
name 'Front Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.3 {
iface MIXER
name 'Surround Playback Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 64'
dbmin -6400
dbmax 0
dbvalue.0 -6400
dbvalue.1 -6400
}
}
control.4 {
iface MIXER
name 'Surround Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.5 {
iface MIXER
name 'Center Playback Volume'
value 0
comment {
access 'read write'
type INTEGER
count 1
range '0 - 64'
dbmin -6400
dbmax 0
dbvalue.0 -6400
}
}
control.6 {
iface MIXER
name 'LFE Playback Volume'
value 0
comment {
access 'read write'
type INTEGER
count 1
range '0 - 64'
dbmin -6400
dbmax 0
dbvalue.0 -6400
}
}
control.7 {
iface MIXER
name 'Center Playback Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.8 {
iface MIXER
name 'LFE Playback Switch'
value false
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.9 {
iface MIXER
name 'Side Playback Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 64'
dbmin -6400
dbmax 0
dbvalue.0 -6400
dbvalue.1 -6400
}
}
control.10 {
iface MIXER
name 'Side Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.11 {
iface MIXER
name 'Headphone Playback Volume'
value.0 64
value.1 64
comment {
access 'read write'
type INTEGER
count 2
range '0 - 64'
dbmin -6400
dbmax 0
dbvalue.0 0
dbvalue.1 0
}
}
control.12 {
iface MIXER
name 'Headphone Playback Switch'
value.0 true
value.1 true
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.13 {
iface MIXER
name 'Loopback Mixing'
value Disabled
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Disabled
item.1 Enabled
}
}
control.14 {
iface MIXER
name 'Rear Mic Playback Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 31'
dbmin -3450
dbmax 1200
dbvalue.0 -3450
dbvalue.1 -3450
}
}
control.15 {
iface MIXER
name 'Rear Mic Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.16 {
iface MIXER
name 'Front Mic Playback Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 31'
dbmin -3450
dbmax 1200
dbvalue.0 -3450
dbvalue.1 -3450
}
}
control.17 {
iface MIXER
name 'Front Mic Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.18 {
iface MIXER
name 'Line Playback Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 31'
dbmin -3450
dbmax 1200
dbvalue.0 -3450
dbvalue.1 -3450
}
}
control.19 {
iface MIXER
name 'Line Playback Switch'
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.20 {
iface MIXER
name 'Auto-Mute Mode'
value Enabled
comment {
access 'read write'
type ENUMERATED
count 1
item.0 Disabled
item.1 Enabled
}
}
control.21 {
iface MIXER
name 'Input Source'
value 'Front Mic'
comment {
access 'read write'
type ENUMERATED
count 1
item.0 'Rear Mic'
item.1 'Front Mic'
item.2 Line
}
}
control.22 {
iface MIXER
name 'Input Source'
index 1
value 'Rear Mic'
comment {
access 'read write'
type ENUMERATED
count 1
item.0 'Rear Mic'
item.1 'Front Mic'
item.2 Line
}
}
control.23 {
iface MIXER
name 'Capture Volume'
value.0 46
value.1 46
comment {
access 'read write'
type INTEGER
count 2
range '0 - 46'
dbmin -1600
dbmax 3000
dbvalue.0 3000
dbvalue.1 3000
}
}
control.24 {
iface MIXER
name 'Capture Switch'
value.0 true
value.1 true
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.25 {
iface MIXER
name 'Capture Volume'
index 1
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 46'
dbmin -1600
dbmax 3000
dbvalue.0 -1600
dbvalue.1 -1600
}
}
control.26 {
iface MIXER
name 'Capture Switch'
index 1
value.0 false
value.1 false
comment {
access 'read write'
type BOOLEAN
count 2
}
}
control.27 {
iface MIXER
name 'Rear Mic Boost Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 3'
dbmin 0
dbmax 3000
dbvalue.0 0
dbvalue.1 0
}
}
control.28 {
iface MIXER
name 'Front Mic Boost Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 3'
dbmin 0
dbmax 3000
dbvalue.0 0
dbvalue.1 0
}
}
control.29 {
iface MIXER
name 'Line Boost Volume'
value.0 0
value.1 0
comment {
access 'read write'
type INTEGER
count 2
range '0 - 3'
dbmin 0
dbmax 3000
dbvalue.0 0
dbvalue.1 0
}
}
control.30 {
iface MIXER
name 'IEC958 Playback Con Mask'
value '0fff000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.31 {
iface MIXER
name 'IEC958 Playback Pro Mask'
value '0f00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access read
type IEC958
count 1
}
}
control.32 {
iface MIXER
name 'IEC958 Playback Default'
value '0482000200000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000'
comment {
access 'read write'
type IEC958
count 1
}
}
control.33 {
iface MIXER
name 'IEC958 Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.34 {
iface MIXER
name 'IEC958 Default PCM Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.35 {
iface MIXER
name 'Master Playback Volume'
value 41
comment {
access 'read write'
type INTEGER
count 1
range '0 - 64'
dbmin -6400
dbmax 0
dbvalue.0 -2300
}
}
control.36 {
iface MIXER
name 'Master Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.37 {
iface CARD
name 'Rear Mic Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.38 {
iface CARD
name 'Front Mic Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.39 {
iface CARD
name 'Line Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.40 {
iface CARD
name 'Line Out Front Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.41 {
iface CARD
name 'Line Out Surround Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.42 {
iface CARD
name 'Line Out CLFE Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.43 {
iface CARD
name 'Line Out Side Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.44 {
iface CARD
name 'Front Headphone Jack'
value false
comment {
access read
type BOOLEAN
count 1
}
}
control.45 {
iface CARD
name 'SPDIF Phantom Jack'
value true
comment {
access read
type BOOLEAN
count 1
}
}
control.46 {
iface PCM
name 'Playback Channel Map'
value.0 0
value.1 0
value.2 0
value.3 0
value.4 0
value.5 0
value.6 0
value.7 0
comment {
access 'read volatile'
type INTEGER
count 8
range '0 - 36'
}
}
control.47 {
iface PCM
name 'Capture Channel Map'
value.0 0
value.1 0
comment {
access 'read volatile'
type INTEGER
count 2
range '0 - 36'
}
}
control.48 {
iface PCM
device 1
name 'Playback Channel Map'
value.0 0
value.1 0
comment {
access 'read volatile'
type INTEGER
count 2
range '0 - 36'
}
}
control.49 {
iface PCM
device 2
name 'Capture Channel Map'
value.0 0
value.1 0
comment {
access 'read volatile'
type INTEGER
count 2
range '0 - 36'
}
}
control.50 {
iface MIXER
name 'PCM Playback Volume'
value.0 251
value.1 251
comment {
access 'read write user'
type INTEGER
count 2
range '0 - 255'
tlv '0000000100000008ffffec1400000014'
dbmin -5100
dbmax 0
dbvalue.0 -80
dbvalue.1 -80
}
}
}
state.USBAudio10 {
control.1 {
iface PCM
name 'Playback Channel Map'
value.0 3
value.1 4
comment {
access 'read volatile'
type INTEGER
count 2
range '0 - 36'
}
}
control.2 {
iface PCM
name 'Capture Channel Map'
value 2
comment {
access 'read volatile'
type INTEGER
count 1
range '0 - 36'
}
}
control.3 {
iface MIXER
name 'PCM Playback Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.4 {
iface MIXER
name 'PCM Playback Volume'
value 22
comment {
access 'read write'
type INTEGER
count 1
range '0 - 255'
}
}
control.5 {
iface MIXER
name 'Mic Capture Switch'
value true
comment {
access 'read write'
type BOOLEAN
count 1
}
}
control.6 {
iface MIXER
name 'Mic Capture Volume'
value 255
comment {
access 'read write'
type INTEGER
count 1
range '0 - 255'
}
}
}
--endcollapse--
!!All Loaded Modules
!!------------------
842_compress
842_decompress
aesni_intel
amd_atl
ccp
crypto_user
drm_ttm_helper
fat
ghash_clmulni_intel
gigabyte_wmi
gpio_amdpt
gpio_generic
hkdf
hwmon_vid
i2c_dev
i2c_nvidia_gpu
i2c_piix4
i2c_smbus
intel_rapl_common
intel_rapl_msr
irqbypass
it87
joydev
k10temp
kvm
kvm_amd
libphy
lz4_compress
lz4hc_compress
mac_hid
mc
md_mod
mdio_bus
mdio_devres
mousedev
nf_conntrack
nf_defrag_ipv4
nf_defrag_ipv6
nf_nat
nf_tables
nfnetlink
nft_chain_nat
nft_compat
ntsync
nvidia
nvidia_drm
nvidia_modeset
nvidia_uvm
nvme
nvme_auth
nvme_core
nvme_keyring
pcspkr
r8169
rapl
realtek
rfkill
roles
snd
snd_hda_codec
snd_hda_codec_alc662
snd_hda_codec_generic
snd_hda_codec_hdmi
snd_hda_codec_nvhdmi
snd_hda_codec_realtek_lib
snd_hda_core
snd_hda_intel
snd_hrtimer
snd_hwdep
snd_intel_dspcfg
snd_intel_sdw_acpi
snd_pcm
snd_rawmidi
snd_seq
snd_seq_device
snd_seq_dummy
snd_timer
snd_ump
snd_usb_audio
snd_usbmidi_lib
soundcore
sp5100_tco
thunderbolt
ttm
tun
typec
typec_ucsi
uas
ucsi_ccg
uhid
uinput
usb_storage
vfat
video
wmi
wmi_bmof
x_tables
xfs
xt_MASQUERADE
xt_connmark
xt_conntrack
xt_mark
xt_tcpudp
zenergy
zram
!!Sysfs Files
!!-----------
/sys/class/sound/hwC1D0/init_pin_configs:
0x04 0x185600f0
0x05 0x185600f0
0x06 0x185600f0
0x07 0x185600f0
/sys/class/sound/hwC1D0/driver_pin_configs:
/sys/class/sound/hwC1D0/user_pin_configs:
/sys/class/sound/hwC1D0/init_verbs:
/sys/class/sound/hwC1D0/hints:
/sys/class/sound/hwC2D0/init_pin_configs:
0x11 0x99430130
0x12 0x4037d540
0x14 0x01014010
0x15 0x01011012
0x16 0x01016011
0x17 0x01012014
0x18 0x01a19040
0x19 0x02a19050
0x1a 0x0181304f
0x1b 0x02214020
0x1c 0x411111f0
0x1d 0x4046e641
0x1e 0x411111f0
0x1f 0x411111f0
/sys/class/sound/hwC2D0/driver_pin_configs:
/sys/class/sound/hwC2D0/user_pin_configs:
/sys/class/sound/hwC2D0/init_verbs:
/sys/class/sound/hwC2D0/hints:
!!ALSA/HDA dmesg
!!--------------
```
</details>
---
<small>Apologies for the messy PR, feel free to follow up or ask for clarifications if needed. I don't have much experience with the inner workings of alsa/wireplumber and whatnot, I'm trying my best!</small>
Request URL : https://github.com/alsa-project/alsa-ucm-conf/pull/796
Patch URL : https://github.com/alsa-project/alsa-ucm-conf/pull/796.patch
Repository URL: https://github.com/alsa-project/alsa-ucm-conf
^ permalink raw reply
* USB-Audio: Add M-Audio M-Track Solo
From: GitHub pull_request - opened @ 2026-06-26 1:46 UTC (permalink / raw)
To: alsa-devel
In-Reply-To: <alsa-project/alsa-ucm-conf/pr/796@alsa-project.org>
alsa-project/alsa-ucm-conf pull request #796 was opened from busybox11:
The M-Audio M-Track Solo (`08bb:29c0`) is a USB audio interface based on the TI PCM2900C codec.
The chip has a stereo ADC with two physical inputs: Input 1 (XLR/TS combo, channel 0) and Input 2 (TS instrument jack, channel 1), each with its own gain control.
However, the default stereo capture node mixes both into a single stereo stream.
This PR adds a new profile via `M-Audio/M-Track-Solo.conf` and `M-Audio/M-Track-Solo-HiFi.conf` to define the device with two distinct mono capture inputs using SplitPCM, while also providing the proper device name in the labels, instead of the generic `PCM2900C Audio CODEC` prefix.
## Hardware
- Device: M-Audio M-Track Solo
- USB: `08bb:29c0` (Texas Instruments PCM2900C)
- Kernel: `snd-usb-audio`
- Mixer: `PCM Playback Volume/Switch` (stereo output), no capture controls
## UCM configuration
- `Speaker`: stereo output (`hw:${CardId},0`)
- `Mic1`: mono input from channel 0 (XLR/TS combo preamp)
- `Line2`: mono input from channel 1 (TS instrument jack)
## Verification
Before: both physical inputs are mixed into a single stereo capture node.
<img width="3440" height="1440" alt="image" src="https://github.com/user-attachments/assets/e461bc4d-dfe0-4569-848b-2e7bd1328f52" />
<img width="3440" height="1440" alt="image" src="https://github.com/user-attachments/assets/e604a8b7-3fad-424d-92d6-a4d87caccbf8" />
After: two independent mono input nodes (`M-Track SOLO Input 1 (Mic)`, `M-Track SOLO Input 2 (Line)`), each selectable individually in PipeWire/PulseAudio.
<img width="3440" height="1440" alt="image" src="https://github.com/user-attachments/assets/08c019ea-164c-4cd1-8301-f1c3ee46d5e4" />
<img width="3440" height="1440" alt="image" src="https://github.com/user-attachments/assets/1ae5e2df-f337-42cd-9e3b-52a1f402032c" />
Request URL : https://github.com/alsa-project/alsa-ucm-conf/pull/796
Patch URL : https://github.com/alsa-project/alsa-ucm-conf/pull/796.patch
Repository URL: https://github.com/alsa-project/alsa-ucm-conf
^ permalink raw reply
* [GIT PULL] ASoC fixes for v7.2-merge-window
From: Mark Brown @ 2026-06-25 17:01 UTC (permalink / raw)
To: Takashi Iwai; +Cc: Liam Girdwood, linux-sound, alsa-devel, Mark Brown
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 4356 bytes --]
The following changes since commit 4346d91cfa47b0d9303533edde8acd33e4b9ca40:
ASoC: dt-bindings: Fix RT5677 "realtek,gpio-config" type (2026-06-14 01:03:38 +0100)
are available in the Git repository at:
https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git tags/asoc-fix-v7.2-merge-window
for you to fetch changes up to cf6f56990ea21172e085f0588e5bbf2089ce8f58:
ASoC: fsl_asrc_dma: fix eDMA maxburst misalignment with channel count (2026-06-25 14:56:27 +0100)
----------------------------------------------------------------
ASoC: Fixes for v7.2
We've got a good collection of device specific fix here, plus a couple
of stand out things:
- Richard fixed some special cases with the new device_link creation
by more gracefully handling any errors during creation.
- Charles did some light refactoring of the SoundWire interfaces to
fix some persistent randconfig issues that people kept running into.
----------------------------------------------------------------
Ahmad Fatoum (1):
ASoC: cs530x: Fix expected MCLK rates for CS5302/4/8
Alvin Šipraga (1):
ASoC: audio-graph-card2: Drop warning for manually selected DAI formats
Baojun Xu (1):
ASoC: tas2781: Update default register address to TAS2563
Bartosz Juraszewski (1):
ASoC: tas2783: Update loaded firmware names to linux-firmware 20260519
Charles Keepax (5):
soundwire: Move wait for initialisation helper to header
ASoC: es9356: Add back local call to sdw_show_ping_status()
ASoC: max98373: Add back local call to sdw_show_ping_status()
ASoC: ti: Add back local call to sdw_show_ping_status()
ASoC: realtek: Add back local call to sdw_show_ping_status()
Christian Hewitt (1):
ASoC: codecs: pcm512x: only print info once on no sclk
HyeongJun An (1):
ASoC: SDCA: Validate written enum value in ge_put_enum_double()
Mark Brown (1):
ASoC: Fix SoundWire randconfig issues
Nicolas Frattaroli (1):
ASoC: rockchip: Drop problematic guard() changes
Oder Chiou (1):
ASoC: rt5575: Use __le32 for SPI burst write address
Richard Fitzgerald (1):
ASoC: soc-core: Don't fail if device_link could not be created
Sen Wang (1):
ASoC: tlv320aic3x: restrict CLKDIV bypass Q values in dual-rate mode
Shengjiu Wang (1):
ASoC: fsl_asrc_dma: fix eDMA maxburst misalignment with channel count
Shuming Fan (1):
ASoC: rt5650: enhance spk protection function
Srinivas Kandagatla (1):
ASoC: qcom: q6apm: fix NULL pointer dereference in graph_callback
Uwe Kleine-König (The Capable Hub) (1):
ASoC: rockchip: rockchip_sai: #include <linux/platform_device.h> explicitly
drivers/soundwire/bus.c | 28 ----
include/linux/soundwire/sdw.h | 38 +++--
include/sound/soc-component.h | 4 +
include/sound/tas2781.h | 4 +-
sound/soc/codecs/cs530x.c | 29 +++-
sound/soc/codecs/cs530x.h | 6 -
sound/soc/codecs/es9356.c | 4 +-
sound/soc/codecs/max98373-sdw.c | 4 +-
sound/soc/codecs/pcm512x.c | 2 +-
sound/soc/codecs/rt1017-sdca-sdw.c | 4 +-
sound/soc/codecs/rt1308-sdw.c | 4 +-
sound/soc/codecs/rt1316-sdw.c | 4 +-
sound/soc/codecs/rt5575-spi.c | 2 +-
sound/soc/codecs/rt5645.c | 6 +-
sound/soc/codecs/rt5645.h | 1 +
sound/soc/codecs/rt5682-sdw.c | 4 +-
sound/soc/codecs/rt700-sdw.c | 4 +-
sound/soc/codecs/rt711-sdca-sdw.c | 4 +-
sound/soc/codecs/rt712-sdca-dmic.c | 4 +-
sound/soc/codecs/rt712-sdca-sdw.c | 4 +-
sound/soc/codecs/rt715-sdca-sdw.c | 4 +-
sound/soc/codecs/rt715-sdw.c | 4 +-
sound/soc/codecs/rt721-sdca-sdw.c | 4 +-
sound/soc/codecs/rt722-sdca-sdw.c | 4 +-
sound/soc/codecs/tac5xx2-sdw.c | 4 +-
sound/soc/codecs/tas2783-sdw.c | 77 ++++++----
sound/soc/codecs/tlv320aic3x.c | 25 +++-
sound/soc/fsl/fsl_asrc_dma.c | 20 +++
sound/soc/generic/audio-graph-card2.c | 12 --
sound/soc/qcom/qdsp6/q6apm.c | 8 ++
sound/soc/rockchip/rockchip_sai.c | 263 +++++++++++++++++-----------------
sound/soc/sdca/sdca_asoc.c | 3 +
sound/soc/soc-core.c | 35 ++---
33 files changed, 362 insertions(+), 261 deletions(-)
^ permalink raw reply
* Re: [PATCH RESEND v4 2/2] ALSA: control: add ioctl to retrieve full card components
From: Jaroslav Kysela @ 2026-06-25 12:40 UTC (permalink / raw)
To: Maciej Strozek, Takashi Iwai
Cc: linux-sound, linux-kernel, alsa-devel, patches
In-Reply-To: <20260625120741.3404473-2-mstrozek@opensource.cirrus.com>
On 6/25/26 14:07, Maciej Strozek wrote:
...
> +struct snd_ctl_card_bytes {
> + unsigned int type; /* SND_CTL_CARD_BTYPE_* */
> + unsigned int data_allocated; /* size of @data buffer in bytes */
> + unsigned int data_len; /* in/out: actual data length in bytes */
> + unsigned char *data; /* user buffer */
I know that I suggested to add code to the compat layer. But it seems that new
UAPIs are using just '__u64 data' here with padding to 8 bytes (I would add
new reserved field and perhaps we may use force `__u32' type for all other
fields). The code in kernel sound translate the u64 data to pointer using
u64_to_user_ptr() function.
So like:
struct snd_ctl_card_bytes {
__u32 type;
__u32 data_allocated;
__u32 data_len;
__u32 reserved; /* explicit pad */
__u64 data; /* pointer as __u64 */
};
> +static int snd_ctl_card_bytes(struct snd_card *card,
> + struct snd_ctl_card_bytes *info,
> + unsigned int __user *data_len_out)
> +{
> + unsigned int data_len;
> +
> + switch (info->type) {
> + case SND_CTL_CARD_BTYPE_COMPONENTS:
> + scoped_guard(rwsem_read, &snd_ioctl_rwsem) {
> + data_len = strlen(card->components) + 1;
The field card->components may be NULL here, also fix other uses like in
snd_ctl_card_info().
Thank you,
Jaroslav
--
Jaroslav Kysela <perex@perex.cz>
Linux Sound Maintainer; ALSA Project; Red Hat
^ permalink raw reply
* [PATCH RESEND v4 2/2] ALSA: control: add ioctl to retrieve full card components
From: Maciej Strozek @ 2026-06-25 12:07 UTC (permalink / raw)
To: Jaroslav Kysela, Takashi Iwai
Cc: linux-sound, linux-kernel, alsa-devel, patches, Maciej Strozek
In-Reply-To: <20260625120741.3404473-1-mstrozek@opensource.cirrus.com>
The fixed-size components field in SNDRV_CTL_IOCTL_CARD_INFO can be too
small on systems with many audio devices.
Keep the existing struct snd_ctl_card_info ABI intact and add a new
ioctl SNDRV_CTL_IOCTL_CARD_BYTES that carries a variable-length payload
selected by a type discriminator. The first defined type
SND_CTL_CARD_BTYPE_COMPONENTS returns the full components string. The
ioctl is designed to be reused for other variable-length card payloads
in the future.
The user-space caller may set data_allocated == 0 (or data == NULL) to
query the required length; otherwise the kernel copies the payload into
the user buffer and writes back the actual length in data_len.
When the legacy components field in struct snd_ctl_card_info is
truncated, '>' is written just before the NUL terminator to signal to
user-space that the full string is available via the new ioctl.
card->components is now dynamically allocated and grown in 32 byte
increments via krealloc(), capped at 512 bytes.
Link: https://github.com/alsa-project/alsa-lib/pull/494
Suggested-by: Jaroslav Kysela <perex@perex.cz>
Suggested-by: Takashi Iwai <tiwai@suse.com>
Signed-off-by: Maciej Strozek <mstrozek@opensource.cirrus.com>
---
Changes for v4:
- replaced snd_ctl_card_components with snd_ctl_card_bytes for possible
future extensions
- support query mode (data_allocated == 0 or data == NULL)
- added compat 32-bit
- renamed card->components_ptr / components_ptr_alloc_size to
card->components / components_alloc_size
Changes for v3:
- change components field to a dynamic array resizable in 32 byte
increments
- removed SNDRV_CTL_COMPONENTS_LEN define
- sanity check if 'components' requests more than 512 bytes
- added a commit to clean up trailing whitespaces
- alsa-utils link no longer needed
Changes for v2:
- do not modify existing card->components field
- add a new ioctl and struct to keep the full components string
- handle the split/trim in snd_ctl_card_info()
---
include/sound/core.h | 4 +--
include/uapi/sound/asound.h | 21 ++++++++++++++-
sound/core/control.c | 52 ++++++++++++++++++++++++++++++++++++-
sound/core/control_compat.c | 27 +++++++++++++++++++
sound/core/init.c | 34 ++++++++++++++++++++----
5 files changed, 129 insertions(+), 9 deletions(-)
diff --git a/include/sound/core.h b/include/sound/core.h
index 4093ec82a0a12..8a6a0e86da5e5 100644
--- a/include/sound/core.h
+++ b/include/sound/core.h
@@ -87,8 +87,8 @@ struct snd_card {
char longname[80]; /* name of this soundcard */
char irq_descr[32]; /* Interrupt description */
char mixername[80]; /* mixer name */
- char components[128]; /* card components delimited with
- space */
+ char *components; /* card components, space-delimited */
+ unsigned int components_alloc_size; /* current allocation size of components */
struct module *module; /* top-level module */
void *private_data; /* private data for soundcard */
diff --git a/include/uapi/sound/asound.h b/include/uapi/sound/asound.h
index d3ce75ba938a8..a6b695a798f07 100644
--- a/include/uapi/sound/asound.h
+++ b/include/uapi/sound/asound.h
@@ -1058,7 +1058,7 @@ struct snd_timer_tread {
* *
****************************************************************************/
-#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 9)
+#define SNDRV_CTL_VERSION SNDRV_PROTOCOL_VERSION(2, 0, 10)
struct snd_ctl_card_info {
int card; /* card number */
@@ -1072,6 +1072,24 @@ struct snd_ctl_card_info {
unsigned char components[128]; /* card components / fine identification, delimited with one space (AC97 etc..) */
};
+/*
+ * Card components can exceed the fixed 128 bytes in snd_ctl_card_info.
+ * Use SNDRV_CTL_IOCTL_CARD_BYTES with type SND_CTL_CARD_BTYPE_COMPONENTS
+ * to retrieve the full string.
+ */
+
+/* Type values for struct snd_ctl_card_bytes::type */
+enum {
+ SND_CTL_CARD_BTYPE_COMPONENTS = 1, /* full card components string */
+};
+
+struct snd_ctl_card_bytes {
+ unsigned int type; /* SND_CTL_CARD_BTYPE_* */
+ unsigned int data_allocated; /* size of @data buffer in bytes */
+ unsigned int data_len; /* in/out: actual data length in bytes */
+ unsigned char *data; /* user buffer */
+};
+
typedef int __bitwise snd_ctl_elem_type_t;
#define SNDRV_CTL_ELEM_TYPE_NONE ((__force snd_ctl_elem_type_t) 0) /* invalid */
#define SNDRV_CTL_ELEM_TYPE_BOOLEAN ((__force snd_ctl_elem_type_t) 1) /* boolean type */
@@ -1198,6 +1216,7 @@ struct snd_ctl_tlv {
#define SNDRV_CTL_IOCTL_PVERSION _IOR('U', 0x00, int)
#define SNDRV_CTL_IOCTL_CARD_INFO _IOR('U', 0x01, struct snd_ctl_card_info)
+#define SNDRV_CTL_IOCTL_CARD_BYTES _IOWR('U', 0x02, struct snd_ctl_card_bytes)
#define SNDRV_CTL_IOCTL_ELEM_LIST _IOWR('U', 0x10, struct snd_ctl_elem_list)
#define SNDRV_CTL_IOCTL_ELEM_INFO _IOWR('U', 0x11, struct snd_ctl_elem_info)
#define SNDRV_CTL_IOCTL_ELEM_READ _IOWR('U', 0x12, struct snd_ctl_elem_value)
diff --git a/sound/core/control.c b/sound/core/control.c
index 5e51857635e62..9a3772f1126d8 100644
--- a/sound/core/control.c
+++ b/sound/core/control.c
@@ -876,9 +876,13 @@ static int snd_ctl_card_info(struct snd_card *card, struct snd_ctl_file * ctl,
{
struct snd_ctl_card_info *info __free(kfree) =
kzalloc(sizeof(*info), GFP_KERNEL);
+ ssize_t n;
if (! info)
return -ENOMEM;
+
+ static_assert(sizeof(info->components) >= 2);
+
scoped_guard(rwsem_read, &snd_ioctl_rwsem) {
info->card = card->number;
strscpy(info->id, card->id, sizeof(info->id));
@@ -886,13 +890,57 @@ static int snd_ctl_card_info(struct snd_card *card, struct snd_ctl_file * ctl,
strscpy(info->name, card->shortname, sizeof(info->name));
strscpy(info->longname, card->longname, sizeof(info->longname));
strscpy(info->mixername, card->mixername, sizeof(info->mixername));
- strscpy(info->components, card->components, sizeof(info->components));
+ n = strscpy(info->components, card->components, sizeof(info->components));
+ if (n < 0) // mark the truncation with '>' before NULL terminator
+ info->components[sizeof(info->components) - 2] = '>';
}
if (copy_to_user(arg, info, sizeof(struct snd_ctl_card_info)))
return -EFAULT;
return 0;
}
+static int snd_ctl_card_bytes(struct snd_card *card,
+ struct snd_ctl_card_bytes *info,
+ unsigned int __user *data_len_out)
+{
+ unsigned int data_len;
+
+ switch (info->type) {
+ case SND_CTL_CARD_BTYPE_COMPONENTS:
+ scoped_guard(rwsem_read, &snd_ioctl_rwsem) {
+ data_len = strlen(card->components) + 1;
+
+ if (!info->data || info->data_allocated == 0)
+ break;
+
+ if (info->data_allocated < data_len)
+ return -ENOMEM;
+
+ if (copy_to_user(info->data, card->components, data_len))
+ return -EFAULT;
+ }
+ break;
+ default:
+ return -EINVAL;
+ }
+
+ if (put_user(data_len, data_len_out))
+ return -EFAULT;
+
+ return 0;
+}
+
+static int snd_ctl_card_bytes_user(struct snd_card *card,
+ struct snd_ctl_card_bytes __user *_info)
+{
+ struct snd_ctl_card_bytes info;
+
+ if (copy_from_user(&info, _info, sizeof(info)))
+ return -EFAULT;
+
+ return snd_ctl_card_bytes(card, &info, &_info->data_len);
+}
+
static int snd_ctl_elem_list(struct snd_card *card,
struct snd_ctl_elem_list *list)
{
@@ -1992,6 +2040,8 @@ static long snd_ctl_ioctl(struct file *file, unsigned int cmd, unsigned long arg
return put_user(SNDRV_CTL_VERSION, ip) ? -EFAULT : 0;
case SNDRV_CTL_IOCTL_CARD_INFO:
return snd_ctl_card_info(card, ctl, cmd, argp);
+ case SNDRV_CTL_IOCTL_CARD_BYTES:
+ return snd_ctl_card_bytes_user(card, argp);
case SNDRV_CTL_IOCTL_ELEM_LIST:
return snd_ctl_elem_list_user(card, argp);
case SNDRV_CTL_IOCTL_ELEM_INFO:
diff --git a/sound/core/control_compat.c b/sound/core/control_compat.c
index 4ad571087ff59..9077482d67440 100644
--- a/sound/core/control_compat.c
+++ b/sound/core/control_compat.c
@@ -19,6 +19,30 @@ struct snd_ctl_elem_list32 {
unsigned char reserved[50];
} /* don't set packed attribute here */;
+struct snd_ctl_card_bytes32 {
+ u32 type;
+ u32 data_allocated;
+ u32 data_len;
+ u32 data;
+};
+
+static int snd_ctl_card_bytes_compat(struct snd_card *card,
+ struct snd_ctl_card_bytes32 __user *data32)
+{
+ struct snd_ctl_card_bytes data = {};
+ compat_caddr_t ptr;
+
+ /* type, data_allocated, data_len */
+ if (copy_from_user(&data, data32, 3 * sizeof(u32)))
+ return -EFAULT;
+ /* data */
+ if (get_user(ptr, &data32->data))
+ return -EFAULT;
+ data.data = compat_ptr(ptr);
+
+ return snd_ctl_card_bytes(card, &data, &data32->data_len);
+}
+
static int snd_ctl_elem_list_compat(struct snd_card *card,
struct snd_ctl_elem_list32 __user *data32)
{
@@ -426,6 +450,7 @@ enum {
SNDRV_CTL_IOCTL_ELEM_WRITE32 = _IOWR('U', 0x13, struct snd_ctl_elem_value32),
SNDRV_CTL_IOCTL_ELEM_ADD32 = _IOWR('U', 0x17, struct snd_ctl_elem_info32),
SNDRV_CTL_IOCTL_ELEM_REPLACE32 = _IOWR('U', 0x18, struct snd_ctl_elem_info32),
+ SNDRV_CTL_IOCTL_CARD_BYTES32 = _IOWR('U', 0x02, struct snd_ctl_card_bytes32),
#ifdef CONFIG_X86_X32_ABI
SNDRV_CTL_IOCTL_ELEM_READ_X32 = _IOWR('U', 0x12, struct snd_ctl_elem_value_x32),
SNDRV_CTL_IOCTL_ELEM_WRITE_X32 = _IOWR('U', 0x13, struct snd_ctl_elem_value_x32),
@@ -456,6 +481,8 @@ static inline long snd_ctl_ioctl_compat(struct file *file, unsigned int cmd, uns
case SNDRV_CTL_IOCTL_TLV_WRITE:
case SNDRV_CTL_IOCTL_TLV_COMMAND:
return snd_ctl_ioctl(file, cmd, (unsigned long)argp);
+ case SNDRV_CTL_IOCTL_CARD_BYTES32:
+ return snd_ctl_card_bytes_compat(ctl->card, argp);
case SNDRV_CTL_IOCTL_ELEM_LIST32:
return snd_ctl_elem_list_compat(ctl->card, argp);
case SNDRV_CTL_IOCTL_ELEM_INFO32:
diff --git a/sound/core/init.c b/sound/core/init.c
index 593c05895e118..a683803bcf96a 100644
--- a/sound/core/init.c
+++ b/sound/core/init.c
@@ -590,6 +590,9 @@ static int snd_card_do_free(struct snd_card *card)
snd_mixer_oss_notify_callback(card, SND_MIXER_OSS_NOTIFY_FREE);
#endif
snd_device_free_all(card);
+ kfree(card->components);
+ card->components = NULL;
+ card->components_alloc_size = 0;
if (card->private_free)
card->private_free(card);
#ifdef CONFIG_SND_CTL_DEBUG
@@ -1036,16 +1039,37 @@ int snd_component_add(struct snd_card *card, const char *component)
{
char *ptr;
int len = strlen(component);
+ unsigned int cur_len, need_len;
- ptr = strstr(card->components, component);
- if (ptr != NULL) {
- if (ptr[len] == '\0' || ptr[len] == ' ') /* already there */
- return 1;
+ if (card->components) {
+ ptr = strstr(card->components, component);
+ if (ptr) {
+ if (ptr[len] == '\0' || ptr[len] == ' ') /* already there */
+ return 1;
+ }
+ cur_len = strlen(card->components) + 1;
+ } else {
+ cur_len = 0;
}
- if (strlen(card->components) + 1 + len + 1 > sizeof(card->components)) {
+
+ need_len = cur_len + len + 1;
+ if (need_len > 512) {
snd_BUG();
return -ENOMEM;
}
+
+ if (need_len > card->components_alloc_size) {
+ unsigned int new_alloc = roundup(need_len, 32);
+
+ ptr = krealloc(card->components, new_alloc, GFP_KERNEL);
+ if (!ptr)
+ return -ENOMEM;
+ if (!card->components)
+ ptr[0] = '\0';
+ card->components = ptr;
+ card->components_alloc_size = new_alloc;
+ }
+
if (card->components[0] != '\0')
strcat(card->components, " ");
strcat(card->components, component);
--
2.47.3
^ permalink raw reply related
* [PATCH RESEND v4 1/2] ALSA: control: tidy up whitespaces
From: Maciej Strozek @ 2026-06-25 12:07 UTC (permalink / raw)
To: Jaroslav Kysela, Takashi Iwai
Cc: linux-sound, linux-kernel, alsa-devel, patches, Maciej Strozek
Clean up trailing whitespace in preparation for the card components
changes.
Signed-off-by: Maciej Strozek <mstrozek@opensource.cirrus.com>
---
sound/core/control_compat.c | 2 +-
sound/core/init.c | 4 ++--
2 files changed, 3 insertions(+), 3 deletions(-)
diff --git a/sound/core/control_compat.c b/sound/core/control_compat.c
index 16bc80555f265..4ad571087ff59 100644
--- a/sound/core/control_compat.c
+++ b/sound/core/control_compat.c
@@ -417,7 +417,7 @@ static int snd_ctl_elem_add_compat(struct snd_ctl_file *file,
break;
}
return snd_ctl_elem_add(file, data, replace);
-}
+}
enum {
SNDRV_CTL_IOCTL_ELEM_LIST32 = _IOWR('U', 0x10, struct snd_ctl_elem_list32),
diff --git a/sound/core/init.c b/sound/core/init.c
index 0c316189e9476..593c05895e118 100644
--- a/sound/core/init.c
+++ b/sound/core/init.c
@@ -722,7 +722,7 @@ static void snd_card_set_id_no_lock(struct snd_card *card, const char *src,
int len, loops;
bool is_default = false;
char *id;
-
+
copy_valid_id_string(card, src, nid);
id = card->id;
@@ -1031,7 +1031,7 @@ int __init snd_card_info_init(void)
*
* Return: Zero otherwise a negative error code.
*/
-
+
int snd_component_add(struct snd_card *card, const char *component)
{
char *ptr;
--
2.47.3
^ permalink raw reply related
* Re: [PATCH v2] ASoC: soc-compress: fix UAF in soc_compr_trigger_fe()
From: Mark Brown @ 2026-06-23 13:52 UTC (permalink / raw)
To: Shinhyung Kang; +Cc: alsa-devel, tiwai
In-Reply-To: <086101dd0303$e6702f80$b3508e80$@samsung.com>
[-- Attachment #1: Type: text/plain, Size: 470 bytes --]
On Tue, Jun 23, 2026 at 08:31:57PM +0900, Shinhyung Kang wrote:
> ---
> Changes in v2:
> - Reworded commit message for clarity.
> - Resend due to mail client corruption in v1.
> - No functional changes.
This still doesn't apply against current code:
Applying: ASoC: soc-compress: fix UAF in soc_compr_trigger_fe()
Patch failed at 0001 ASoC: soc-compress: fix UAF in soc_compr_trigger_fe()
error: corrupt patch at line 19
error: could not build fake ancestor
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
^ permalink raw reply
* SSL2+ MKII shows [ALSA UCM Error] on Fedora 44 KDE
From: GitHub issues - opened @ 2026-06-23 12:11 UTC (permalink / raw)
To: alsa-devel
In-Reply-To: <18bbb49d24d3df00-webhooks-bot@alsa-project.org>
alsa-project/alsa-ucm-conf issue #795 was opened from a118n:
Wireplumber errors:
```
Jun 23 14:58:05 Obelisk wireplumber[2084]: spa.alsa: Error in ALSA UCM profile for _ucm0001.hw:II,0 (HiFi: Line2: sink): PlaybackChannels=4 < avail 6
Jun 23 14:58:05 Obelisk wireplumber[2084]: spa.alsa: Error in ALSA UCM profile for _ucm0001.hw:II,0 (HiFi: Mic2: source): CaptureChannels=4 < avail 8
```
Firmware version: 1.16
alsa info attached
[alsa-info.txt](https://github.com/user-attachments/files/29249939/alsa-info.txt)
Issue URL : https://github.com/alsa-project/alsa-ucm-conf/issues/795
Repository URL: https://github.com/alsa-project/alsa-ucm-conf
^ permalink raw reply
* [PATCH v2] ASoC: soc-compress: fix UAF in soc_compr_trigger_fe()
From: Shinhyung Kang @ 2026-06-23 11:31 UTC (permalink / raw)
To: alsa-devel, broonie, tiwai
In-Reply-To: <CGME20260623113157epcas2p24944f3b44efb5b5c771d502148ad8e23@epcas2p2.samsung.com>
The DPCM compress trigger path traverses the FE's BE client list in
dpcm_be_dai_trigger() without holding card->pcm_mutex, while
dpcm_be_disconnect() can concurrently remove and free entries from
that same list under pcm_mutex protection.
This causes a use-after-free when for_each_dpcm_be() advances to the
next list node after releasing a BE's stream lock between iterations,
and the snd_soc_dpcm entry has already been kfree()'d by a concurrent
dpcm_be_disconnect() call.
Crash signature observed:
Unable to handle kernel paging request at virtual address dead0000000000e8
Call trace:
dpcm_be_dai_trigger+0x90/0x3f0
soc_compr_trigger_fe+0xa8/0x144
snd_compr_ioctl+0xc98/0x2010
Race condition timeline:
Thread A(soc_compr_trigger_fe):
snd_soc_card_mutex_lock() <- holds card->mutex only
dpcm_be_dai_trigger()
for_each_dpcm_be(fe, stream, dpcm) {
snd_pcm_stream_lock_irqsave_nested(be_substream);
...
snd_pcm_stream_unlock_irqrestore(be_substream);
/* WINDOW: next iteration reads dpcm->list_be.next */
}
Thread B(snd_soc_dpcm_runtime_update via DAPM):
snd_soc_dpcm_mutex_lock() <- holds card->pcm_mutex
dpcm_be_disconnect()
snd_pcm_stream_lock_irq(fe_substream);
list_del(&dpcm->list_be); <- removes from list
snd_pcm_stream_unlock_irq();
kfree(dpcm); <- frees the struct
The PCM trigger path (dpcm_fe_dai_trigger) is protected against this
race by checking runtime_update and deferring to trigger_pending when
a concurrent update is in progress. The compress trigger path
(soc_compr_trigger_fe) lacks this deferred-trigger mechanism, so the
only correct fix is to hold pcm_mutex for the duration of the BE list
traversal, as is done in all other compress FE operations such as
soc_compr_open_fe() and soc_compr_set_params().
Signed-off-by: Shinhyung Kang <s47.kang@samsung.com>
---
Changes in v2:
- Reworded commit message for clarity.
- Resend due to mail client corruption in v1.
- No functional changes.
Link to v1:
https://lore.kernel.org/alsa-devel/000e01dcf3ef$15d69530$4183bf90$@samsung.c
om
---
sound/soc/soc-compress.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/sound/soc/soc-compress.c b/sound/soc/soc-compress.c
index b8402802ae78..615ce7a0e8d9 100644
--- a/sound/soc/soc-compress.c
+++ b/sound/soc/soc-compress.c
@@ -285,6 +285,7 @@ static int soc_compr_trigger_fe(struct snd_compr_stream
*cstream, int cmd)
return snd_soc_component_compr_trigger(cstream, cmd);
snd_soc_card_mutex_lock(fe->card);
+ snd_soc_dpcm_mutex_lock(fe);
ret = snd_soc_dai_compr_trigger(cpu_dai, cstream, cmd);
if (ret < 0)
@@ -315,6 +316,7 @@ static int soc_compr_trigger_fe(struct snd_compr_stream
*cstream, int cmd)
out:
fe->dpcm[stream].runtime_update = SND_SOC_DPCM_UPDATE_NO;
+ snd_soc_dpcm_mutex_unlock(fe);
snd_soc_card_mutex_unlock(fe->card);
return ret;
}
--
2.21.0
^ permalink raw reply related
* Re: [PATCH] ASoC: amd: acp: Fix linker error with SDCA quirks
From: Syed Saba Kareem @ 2026-06-22 9:01 UTC (permalink / raw)
To: Julian Braha, Mark Brown, alsa-devel
Cc: Vijendar Mukunda, Sunil-kumar Dommati, Arnd Bergmann,
Mario Limonciello, Venkata Prasad Potturu, Liam Girdwood,
Jaroslav Kysela, Takashi Iwai, Randy Dunlap, Simon Trimmer,
Mario Limonciello (AMD), Hasun Park, open list:AMD ASoC DRIVERS,
open list
In-Reply-To: <f092d0a0-3188-4fd0-8228-2b715c642a08@gmail.com>
On 6/19/26 18:38, Julian Braha wrote:
> [You don't often get email from julianbraha@gmail.com. Learn why this is important at https://aka.ms/LearnAboutSenderIdentification ]
>
> Hi Syed,
>
> On 6/19/26 13:43, Syed Saba Kareem wrote:
>
>> config SND_SOC_ACPI_AMD_SDCA_QUIRKS
>> - tristate
>> - depends on ACPI
>> + bool "AMD ACPI SDCA quirks"
>> + depends on SND_SOC_ACPI_AMD_MATCH
>> depends on SND_SOC_SDCA
>> + depends on SND_SOC_ACPI_AMD_MATCH = m || SND_SOC_SDCA = y
>> + default y
>> + help
>> + Enable SDCA quirk support for AMD ACPI match tables.
>> + This is compiled into the snd-soc-acpi-amd-match module.
> This Kconfig file uses tabs instead of spaces. Most of your Kconfig
> additions are formatted correctly, but one line uses spaces.
>
> - Julian Braha
Will share a updated V2 version patch.
^ permalink raw reply
* Re: [PATCH v4 2/2] ASoC: codecs: nau8360: Add support for NAU83G60 amplifier
From: YLCHANG2 @ 2026-06-22 6:12 UTC (permalink / raw)
To: Cezary Rojewski, Neo Chang
Cc: lgirdwood, perex, robh, krzk+dt, linux-sound, devicetree,
alsa-devel, kchsu0, sjlin0, Mark Brown
In-Reply-To: <329cf637-786d-4fee-9c63-b8e73827b330@intel.com>
On 6/9/26 17:49, Cezary Rojewski wrote:
> On 6/9/2026 4:41 AM, Neo Chang wrote:
>> Add support for the Nuvoton NAU83G60 audio codec. The NAU83G60 is a
>> stereo 30W+30W smart amplifier with an integrated low-latency
>> Advanced Audio DSP.
>
> Hi Neo,
>
> I've provided a number of possible improvements and nitpicks which
> scale for the entire file - not just the occurrences I've
> highlighted. In general, it's hard to follow the code. A lot of
> arithmetics bundled together with limited
> spacing/comments/self-explanatory names. Sheer number of
> if-statements and brackets does not help either.
>
> There seem to be quite a bit of defensive programming here too -
> checks just to print a message. I'd suggest to enlist event tracing
> and log the TX/RX communication unconditionally. Would eliminate the
> need for many of prints found here.
Hi Cezary,
Thank you for the detailed review and the valuable suggestions regarding
the code structure, readability, and coding style.
I will apply these suggestions in v5 to make the code easier to follow.
Regarding the defensive programming, I will drop those redundant print
checks.
If necessary, I will consider adding event tracing for TX/RX in a future
patch.
>
>> +static int nau8360_reply_from_dsp(struct snd_soc_component *component,
>> + const struct nau8360_cmd_info *cmd_info, int data_size,
>> + void *data, unsigned short dsp_addr)
>> +{
>> + struct nau8360 *nau8360 = snd_soc_component_get_drvdata(component);
>> + struct device *dev = component->dev;
>> + unsigned int payload, *data_buf;
>> + int i, j, ret, frag_len, frag_payload_len, len_pos, pad_len,
>> pad_len_exp;
>> + int data_count = 0;
>
> 13 local variables. Does not look good. I'd try to refactor this
> one. Ask yourself - what's the (one) goal this function shall
> achieve. It's clear that currently it does more than one thing e.g.:
> performs validation of the payload. The validation could be moved
> into a separate function.
I will refactor this function and extract the logic into a separate
helper function to simplify this and reduce the number of local
variables in v5.
>
>> +
>> + if (!cmd_info->reply_data) {
>> + dsp_dbg(dev, "The cmd without reply data!!");
>> + ret = nau8360_dsp_replied(nau8360, &frag_len, dsp_addr);
>> + if (ret)
>> + goto err;
>> + else if (!frag_len)
>> + goto done;
>
> No need for 'else if', 'if' suffices.
I will change this to a simple 'if' in v5.
>
>> + }
>> +
>> + if (!data) {
>> + ret = -EINVAL;
>> + goto err;
>> + }
>> + data_buf = (unsigned int *)data;
>> +
>> + ret = nau8360_dsp_replied(nau8360, &frag_len, dsp_addr);
>> + if (ret)
>> + goto err;
>> + else if (!frag_len)
>> + goto done;
>
> Ditto.
Ditto, will update to a simple 'if' in v5.
>
>> +
>> + frag_payload_len = frag_len - 1;
>> + if (cmd_info->msg_param)
>> + data_count = data_size;
>> + for (i = 0; i < frag_payload_len; i++) {
>> + ret = regmap_read(nau8360->regmap, dsp_addr, &payload);
>> + if (ret) {
>> + dev_err(dev, "failed to read payload of dsp");
>> + goto err;
>> + }
>> + if (cmd_info->msg_param) {
>> + if (data_count >= NAU8360_DSP_DATA_BYTE) {
>> + *data_buf++ = payload;
>> + data_count -= NAU8360_DSP_DATA_BYTE;
>> + payload_read(dev, payload);
>> + } else {
>> + for (j = 0; j < NAU8360_DSP_DATA_BYTE; j++) {
>> + if (data_count <= 0)
>> + break;
>> +
>> + ((u8 *)data_buf)[j] = (payload >> (j * 8)) & 0xff;
>> + data_count--;
>> + }
>> + payload_read(dev, payload);
>> + break;
>> + }
>> + } else {
>> + *data_buf = payload;
>> + payload_read(dev, payload);
>> + }
>> + }
>> +
>> + /* check the reply length same as request */
>> + if (data_count && (cmd_info->cmd_id ==
>> NAU8360_DSP_CMD_GET_KCS_RSLTS ||
>> + cmd_info->cmd_id == NAU8360_DSP_CMD_GET_KCS_SETUP)) {
>> + dev_warn(dev, "payload_len %d, expected %d",
>> + data_size - data_count, data_size);
>> + }
>> + dsp_dbg(dev, "reading trailing fragment");
>> + ret = regmap_read(nau8360->regmap, dsp_addr, &payload);
>> + if (ret) {
>> + dev_err(dev, "failed to read trailing fragment");
>> + goto err;
>> + }
>> +
>> + len_pos = payload & 0xff;
>> + len_pos |= ((payload >> 8) & 0xc0) << 2;
>> + if (len_pos != frag_len) {
>> + dev_err(dev, "LEN_POST %02X, expect %02X", len_pos, frag_len);
>> + ret = -EPROTO;
>> + goto err;
>> + }
>> +
>> + pad_len = ((payload >> 8) & 0x30) >> 4;
>> + if (cmd_info->msg_param)
>> + pad_len_exp = frag_payload_len * NAU8360_DSP_DATA_BYTE -
>> + (data_size - data_count);
>> + else
>> + pad_len_exp = 0;
>> + if (pad_len != pad_len_exp) {
>> + dev_err(dev, "PAD_LEN %02X, expect %02X", pad_len,
>> pad_len_exp);
>> + ret = -EPROTO;
>> + goto err;
>> + }
>> + dsp_dbg(dev, "LEN_POST 0x%x, PAD_LEN 0x%x", len_pos, pad_len);
>> + payload_read(dev, payload);
>> +done:
>> + return 0;
>> +err:
>> + dev_err(dev, "DSP reply error %d !!!", ret);
>> + return ret;
>> +}
>
> ...
>
>> +int nau8360_dsp_init(struct snd_soc_component *component)
>> +{
>> + dev_info(component->dev, "DSP initializing...");
>> + return nau8360_dsp_set_kcs_setup(component);
>> +}
>
> Do we need a function that just inlines to nau8360_dsp_set_kcs_setup()
> except for a single print? Doubt so.
I will repurpose this function in v5. nau8360_dsp_init() will now handle
the core DSP initialization logic and
wait for the firmware loading to complete.
>
> ...
>
>> +static int nau8360_adacl_event(struct snd_soc_dapm_widget *w,
>> + struct snd_kcontrol *kcontrol, int event)
>> +{
>> + struct snd_soc_component *component =
>> snd_soc_dapm_to_component(w->dapm);
>> +
>> + if (SND_SOC_DAPM_EVENT_ON(event))
>> + snd_soc_component_update_bits(component, NAU8360_R6E_DAC_CFG0,
>> + NAU8360_PD_DACL_DIS, 0);
>> +
>> + return 0;
>> +}
>> +
>> +static int nau8360_adacr_event(struct snd_soc_dapm_widget *w,
>> + struct snd_kcontrol *kcontrol, int event)
>> +{
>> + struct snd_soc_component *component =
>> snd_soc_dapm_to_component(w->dapm);
>> +
>> + if (SND_SOC_DAPM_EVENT_ON(event))
>> + snd_soc_component_update_bits(component, NAU8360_R6E_DAC_CFG0,
>> + NAU8360_PD_DACR_DIS, 0);
>> +
>> + return 0;
>> +}
>> +
>> +static int nau8360_dacl_event(struct snd_soc_dapm_widget *w,
>> + struct snd_kcontrol *kcontrol, int event)
>> +{
>> + struct snd_soc_component *component =
>> snd_soc_dapm_to_component(w->dapm);
>> +
>> + if (SND_SOC_DAPM_EVENT_OFF(event))
>> + snd_soc_component_update_bits(component, NAU8360_R6E_DAC_CFG0,
>> + NAU8360_PD_DACL_DIS, NAU8360_PD_DACL_DIS);
>> +
>> + return 0;
>> +}
>> +
>> +static int nau8360_dacr_event(struct snd_soc_dapm_widget *w,
>> + struct snd_kcontrol *kcontrol, int event)
>> +{
>> + struct snd_soc_component *component =
>> snd_soc_dapm_to_component(w->dapm);
>> +
>> + if (SND_SOC_DAPM_EVENT_OFF(event))
>> + snd_soc_component_update_bits(component, NAU8360_R6E_DAC_CFG0,
>> + NAU8360_PD_DACR_DIS, NAU8360_PD_DACR_DIS);
>> +
>> + return 0;
>> +}
>
> Refactor the above four functions - you could create a wrapper to
> lower LOCs without huring the readability. If you prefer, instead of
> a one-for-four, you could have one "positive" wrapper (handles
> EVENT_ON cases) and a "negative" one (handles EVENT_OFF cases).
I will refactor these into a common function to reduce LOC in v5.
>
> ...
>
>> +static int nau8360_codec_probe(struct snd_soc_component *component)
>> +{
>> + struct snd_soc_dapm_context *dapm =
>> snd_soc_component_to_dapm(component);
>> + struct nau8360 *nau8360 = snd_soc_component_get_drvdata(component);
>> + struct regmap *regmap = nau8360->regmap;
>> + struct device *dev = nau8360->dev;
>> + int ret, vbat, vsaw_level, vsaw_slope;
>> +
>> + nau8360->dapm = dapm;
>> + nau8360_coeff_set_def(nau8360);
>> + ret = nau8360_dsp_setup(component);
>> + if (ret)
>> + goto err;
>> +
>> + ret = nau8360_dsp_setup_controls(component);
>> + if (ret) {
>> + nau8360_dsp_enable(regmap, false);
>> + dev_err(dev, "DSP setup controls failed(%d)", ret);
>> + goto err;
>> + }
>> +
>> + /* default disable Sense signal after booting */
>> + snd_soc_dapm_disable_pin(nau8360->dapm, "Sense");
>> + snd_soc_dapm_sync(nau8360->dapm);
>> +
>> + /* VBAT is sensed by chip. */
>> + ret = nau8360_vbat_level(regmap, &vbat);
>> + if (ret) {
>> + dev_err(dev, "Failed to get valid VBAT level: %d\n", ret);
>> + goto err;
>> + }
>> + dev_dbg(dev, "VBAT %dV for nau8360", vbat);
>> +
>> + /* Config sawtooth clock according to VBAT. Class D modulator
>> input short setting
>> + * for mute and de-pop purpose. Restore normal after initiation.
>> + */
>> + ret = nau8360_sawtooth_params(vbat, &vsaw_level, &vsaw_slope);
>> + if (ret) {
>> + dev_err(dev, "can't get sawtooth clock parameters (%d)", ret);
>> + goto err;
>> + }
>> + regmap_update_bits(regmap, NAU8360_RA5_ANA_REG_1,
>> NAU8360_VSAW_LV_MASK |
>> + NAU8360_KVCO_SAW_MASK, (vsaw_level << NAU8360_VSAW_LV_SFT) |
>> + (vsaw_slope << NAU8360_KVCO_SAW_SFT));
>> +
>> + return 0;
>> +err:
>> + return ret;
>
> Why are we using the goto here if there is no unwinding found within
> the error path? Either you've forgotten to add the unwinding or the
> goto is redundant.
>
> Repeat for all the functions with similar behavior found in this file.
I will drop the redundant 'goto err' and return the error code directly
across the entire file in v5.
>
>> +}
>> +
>> +static int __maybe_unused nau8360_suspend(struct snd_soc_component
>> *component)
>> +{
>> + struct nau8360 *nau8360 = snd_soc_component_get_drvdata(component);
>> +
>> + regmap_update_bits(nau8360->regmap, NAU8360_R90_HW2_CTL0,
>> NAU8360_HW2_STALL,
>> + NAU8360_HW2_STALL);
>> + nau8360_dsp_enable(nau8360->regmap, false);
>> + regcache_cache_only(nau8360->regmap, true);
>> + regcache_mark_dirty(nau8360->regmap);
>> +
>> + return 0;
>> +}
>> +
>> +static int __maybe_unused nau8360_resume(struct snd_soc_component
>> *component)
>> +{
>> + struct nau8360 *nau8360 = snd_soc_component_get_drvdata(component);
>> + struct regmap *regmap = nau8360->regmap;
>> + int ret;
>> +
>> + regcache_cache_only(regmap, false);
>> + nau8360_peq_mem_enable(regmap, true);
>> + regcache_sync(regmap);
>> + nau8360_peq_mem_enable(regmap, false);
>> +
>> + /* disable Sense at standby */
>> + snd_soc_dapm_disable_pin(nau8360->dapm, "Sense");
>> + snd_soc_dapm_sync(nau8360->dapm);
>> +
>> + ret = nau8360_dsp_setup(component);
>> + if (ret)
>> + goto err;
>
> Drop the goto, no error handling here.
I will drop the redundant goto here in v5.
>
>> +
>> + return 0;
>> +err:
>> + return ret;
>> +}
>
> ...
>
>> +static int nau8360_reg_write(void *context, unsigned int reg,
>> unsigned int value)
>> +{
>> + struct i2c_client *client = context;
>> + int ret, count = 0;
>> + u8 buf[6];
>> +
>> + buf[count++] = reg >> 8;
>> + buf[count++] = reg & 0xff;
>> + if (reg != NAU8360_RF000_DSP_COMM && reg !=
>> NAU8360_RF002_DSP_COMM) {
>
> Refactor to positive a check. Positive checks are easier to follow
> and as long as there is no major impact on complexity of the code that
> follows, there is no reason to hurt readability.
I will refactor this to a positive check for better readability in v5.
>
>> + /* format for Codec, 2 bytes value and endian big */
>> + buf[count++] = value >> 8;
>> + buf[count++] = value & 0xff;
>> + dev_dbg(&client->dev, " %x <= %x", reg, value);
>> + } else {
>> + /* format for DSP, 4 bytes value and native */
>> + buf[count++] = value & 0xff;
>> + buf[count++] = (value >> 8) & 0xff;
>> + buf[count++] = (value >> 16) & 0xff;
>> + buf[count++] = (value >> 24) & 0xff;
>> + }
>> +
>> + ret = i2c_master_send(client, buf, count);
>> + if (ret == count)
>> + return 0;
>> + else if (ret < 0)
>> + return ret;
>> + else
>> + return -EIO;
>
> No need for 'else if', 'if' suffices. And the 'else' can be dropped.
I will change 'else if' to 'if' and drop the 'else' branches in v5.
>
>> +}
>
> ...
>
>> +static struct reg_default *nau8360_alloc_defaults(struct device
>> *dev, int *total_regs)
>> +{
>> + struct reg_default *dyn_defaults;
>> + int reg_num = ARRAY_SIZE(nau8360_reg_defaults);
>> + int total = reg_num + (2 * NAU8360_TOT_BAND_PER_CH *
>> NAU8360_TOT_BAND_COE);
>> + int i, j, idx;
>> +
>> + dyn_defaults = devm_kzalloc(dev, total * sizeof(*dyn_defaults),
>> GFP_KERNEL);
>> + if (!dyn_defaults)
>> + return NULL;
>> +
>> + memcpy(dyn_defaults, nau8360_reg_defaults, sizeof(*dyn_defaults)
>> * reg_num);
>> + idx = reg_num;
>> +
>> + for (i = 0; i < NAU8360_TOT_BAND_PER_CH; i++) {
>> + unsigned int l_base = NAU8360_R100_LEFT_BIQ0_COE +
>> + (i * NAU8360_TOT_BAND_COE_RANGE);
>> + unsigned int r_base = NAU8360_R200_RIGHT_BIQ0_COE +
>> + (i * NAU8360_TOT_BAND_COE_RANGE);
>
> Just add a local:
> unsigned int range = i * NAU8360_TOT_BAND_COE_RANGE;
> to simplify the code.
I will add this local variable to simplify duplicated arithmetic in v5.
>
>> +
>> + for (j = 0; j < NAU8360_TOT_BAND_COE; j++) {
>> + dyn_defaults[idx++].reg = l_base + j;
>> + dyn_defaults[idx++].reg = r_base + j;
>> + }
>> + }
>> +
>> + *total_regs = total;
>> +
>> + return dyn_defaults;
>> +}
>> +
>> +static int nau8360_i2c_probe(struct i2c_client *i2c)
>> +{
>> + struct device *dev = &i2c->dev;
>> + struct nau8360 *nau8360 = dev_get_platdata(dev);
>> + struct regmap_config regmap_cfg = nau8360_regmap_config;
>> + struct reg_default *dyn_defaults;
>> + int num_total_regs;
>> + int i, ret, value;
>> +
>> + if (!nau8360) {
>
> What? This seems redundant.
I will drop the dev_get_platdata() check in v5.
>
>> + nau8360 = devm_kzalloc(dev, sizeof(*nau8360), GFP_KERNEL);
>> + if (!nau8360)
>> + return -ENOMEM;
>> + }
>> + i2c_set_clientdata(i2c, nau8360);
>> + mutex_init(&nau8360->lock);
>> +
>> + dyn_defaults = nau8360_alloc_defaults(dev, &num_total_regs);
>> + if (!dyn_defaults)
>> + return -ENOMEM;
>> +
>> + regmap_cfg.reg_defaults = dyn_defaults;
>> + regmap_cfg.num_reg_defaults = num_total_regs;
>> +
>> + nau8360->regmap = devm_regmap_init(dev, NULL, i2c, ®map_cfg);
>> + if (IS_ERR(nau8360->regmap))
>> + return PTR_ERR(nau8360->regmap);
>> + nau8360->dev = dev;
>> +
>> + nau8360_reset_chip(nau8360->regmap);
>> + ret = regmap_read(nau8360->regmap, NAU8360_R46_I2C_DEVICE_ID,
>> &value);
>> + if (ret) {
>> + dev_err(dev, "Failed to read NAU83G60 device id %d",
>> + ret);
>
> No need for a new line here, you won't exceed the recommended char limit.
I will format this into a single line in v5.
>
>> + return ret;
>> + }
>> +
>> + for (i = 0; i < NAU8360_TDM_TXN; i++)
>> + nau8360->tdm_tx_func_slot[i] = TDM_SLOT_NONE;
>> + for (i = 0; i < NAU8360_TDM_RXN; i++)
>> + nau8360->tdm_rx_func_slot[i] = TDM_SLOT_NONE;
>> + nau8360->tdm_chan_len = 32;
>
> Either use constant or comment any use of hardcodes.
I will define a macro constant for this value in v5.
>
>> + ret = nau8360_read_device_properties(nau8360);
>> + if (ret)
>> + return ret;
>> +
>> + nau8360_print_device_properties(nau8360);
>> + nau8360_init_regs(nau8360);
>> +
>> + return devm_snd_soc_register_component(dev,
>> &soc_comp_dev_nau8360, &nau8360_dai, 1);
>> +}
>> +
>> +static const struct i2c_device_id nau8360_i2c_ids[] = {
>> + { "nau8360", 0 },
>> + { }
>
> Please match the style of existing entires. Checkout Mark's for-next
> to be up-to-date with recommended style or see commit 910714d4e79b
> ("ASoC: Use named initializers for arrays of i2c_device_data").
>
> [1]:
> https://patch.msgid.link/ae2ff4898eb340bd8bcafb7b75443eb4a0ce3e76.1778692164.git.u.kleine-koenig@b
> aylibre.com
I will update the array to use named initializers to match the current
standard in v5.
>
>> +};
>> +MODULE_DEVICE_TABLE(i2c, nau8360_i2c_ids);
>> +
>> +#ifdef CONFIG_OF
>> +static const struct of_device_id nau8360_of_ids[] = {
>> + { .compatible = "nuvoton,nau8360", },
>> + {}
>
> Ditto. Sidenote: you've used a different style then for the i2c table.
I will fix the style to be consistent in v5.
>
>> +};
>> +MODULE_DEVICE_TABLE(of, nau8360_of_ids);
>> +#endif
>> +
>> +#ifdef CONFIG_ACPI
>> +static const struct acpi_device_id nau8360_acpi_match[] = {
>
> struct acpi_device_id is available even if CONFIG_ACPI is disabled.
> Not sure if we even need preproc #ifdef here. Remove it and do some
> compilation checks.
I will remove the #ifdef wrapper and verify the build works with and
without CONFIG_ACPI in v5.
>
>> + {"NVTN2002", 0,},
>> + {},
>
> Ditto. Sidenote: you've used a different style then for the i2c and
> the of table.
I will fix the style to be consistent in v5.
>
>> +};
>> +MODULE_DEVICE_TABLE(acpi, nau8360_acpi_match);
>> +#endif
>> +
>> +static struct i2c_driver nau8360_i2c_driver = {
>> + .driver = {
>> + .name = "nau8360",
>> + .of_match_table = of_match_ptr(nau8360_of_ids),
>> + .acpi_match_table = ACPI_PTR(nau8360_acpi_match),
>
> Does this compile if I disable e.g.: CONFIG_ACPI ?
I will confirm the build works successfully with CONFIG_ACPI disabled in v5.
>
>> + },
>> + .probe = nau8360_i2c_probe,
>> + .id_table = nau8360_i2c_ids,
>> +};
>> +module_i2c_driver(nau8360_i2c_driver);
^ permalink raw reply
* Re: [PATCH v4 1/2] ASoC: dt-bindings: nuvoton,nau8360: Add NAU83G60
From: YLCHANG2 @ 2026-06-22 6:10 UTC (permalink / raw)
To: Krzysztof Kozlowski, Neo Chang
Cc: broonie, lgirdwood, perex, robh, krzk+dt, linux-sound, devicetree,
alsa-devel, kchsu0, sjlin0
In-Reply-To: <20260609-hysterical-rhino-of-resistance-d7e1da@quoll>
On 6/9/26 15:04, Krzysztof Kozlowski wrote:
> On Tue, Jun 09, 2026 at 10:41:27AM +0800, Neo Chang wrote:
>> Add device tree bindings documentation for the Nuvoton NAU83G60
>> audio amplifier.
>>
>> Signed-off-by: Neo Chang <YLCHANG2@nuvoton.com>
>> ---
>> Changes in v4:
>> - Refine the `firmware-name` description to clarify the loading order
>> (Left then Right) and the PBTL mode behavior.
>> - Remove the "dsp bypass" option description.
>> - Update the example node to follow devicetree coding styles.
>>
>> Changes in v3:
>> - Remove colon to resolve YAML build warnings.
>> - Fix 'firmware-name' property definition to comply with binding schemas
>>
>> Changes in v2:
>> - Dropped the word "driver" from the description.
>> - Removed runtime/software configuration properties:
>> nuvoton,low-latency, nuvoton,anc-enable, nuvoton,aec-enable,
>> nuvoton,vbat-microvolt, and nuvoton,tdm-channel-length.
>> - Added missing "nuvoton,dac-cur-enable" property for static speaker impedance matching.
>> - Removed unnecessary '|' formatting from single-line descriptions.
>> - Fixed typo in firmware-name property.
>> ---
>> .../bindings/sound/nuvoton,nau8360.yaml | 83 +++++++++++++++++++
>> 1 file changed, 83 insertions(+)
>> create mode 100644 Documentation/devicetree/bindings/sound/nuvoton,nau8360.yaml
>>
>> diff --git a/Documentation/devicetree/bindings/sound/nuvoton,nau8360.yaml b/Documentation/devicetree/bindings/sound/nuvoton,nau8360.yaml
>> new file mode 100644
>> index 000000000000..2d19aedf1419
>> --- /dev/null
>> +++ b/Documentation/devicetree/bindings/sound/nuvoton,nau8360.yaml
>> @@ -0,0 +1,83 @@
>> +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
>> +%YAML 1.2
>> +---
>> +$id: http://devicetree.org/schemas/sound/nuvoton,nau8360.yaml#
>> +$schema: http://devicetree.org/meta-schemas/core.yaml#
>> +
>> +title: Nuvoton NAU83G60 Stereo Class-D Amplifier with DSP
>> +
>> +description:
>> + Stereo Class-D Amplifier with DSP and I/V-sense.
>> + This device supports I2C.
>> +
>> +maintainers:
>> + - Neo Chang <YLCHANG2@nuvoton.com>
>> +
>> +properties:
>> + compatible:
>> + enum:
>> + - nuvoton,nau8360
>> +
>> + reg:
>> + maxItems: 1
>> + description:
> You want |
>
> Or this could be just enum of addresses, no need to copy paste address
> decoding from datasheet.
Thank you for the suggestion. I will modify it to an enum of addresses
and remove redundant description in v5.
>
>> + The I2C address of the device. The address is determined by the external
>> + hardware configuration of GPIO1 and GPIO2 pins.
>> + - 0x1a (GPIO2=Low, GPIO1=Low)
>> + - 0x1b (GPIO2=Low, GPIO1=High)
>> + - 0x4a (GPIO2=High, GPIO1=Low)
>> + - 0x4b (GPIO2=High, GPIO1=High)
>> +
>> + "#sound-dai-cells":
>> + const: 0
>> +
>> + clocks:
>> + maxItems: 1
>> +
>> + clock-names:
>> + const: mclk
>> +
>> + firmware-name:
>> + minItems: 2
>> + maxItems: 2
>> + description:
>> + Assign firmware filenames for Left and Right DSP cores.
>> + The first firmware is for the Left channel,
>> + and the second is for the Right channel.
> Drop all above and just list the items with description
>
>> + In PBTL mode, the Left firmware is ignored and only the Right is applied.
> Combining also this.
>
> items:
> - description: ...
> - description: ...
Got it, I will format this using items and merge the descriptions in v5.
>
>
> Best regards,
> Krzysztof
>
^ permalink raw reply
* RE: [PATCH 7/7] ASoC: dt-bindings: ES8389: Add members about HPF and clock
From: Zhang Yi @ 2026-06-15 10:14 UTC (permalink / raw)
To: krzk
Cc: alsa-devel, broonie, conor+dt, devicetree, krzk+dt, robh, tiwai,
zhangyi
In-Reply-To: <241d0fab-26ea-4c06-9928-e256f2cc5d1c@kernel.org>
> >>> Yes, setting mclk-from-sclk does not affect the MCLK connection.
> >>
> >> I am asking about wiring of the device. If MCLK is used from SCLK, but
> >> SCLK is used as the internal clock, then how can you still have MCLK
> >> connected?
> >
> > If MCLK is derived from SCLK, whether the 'MCLK' pin on the device is
> > connected or not has no effect on operation.
>
> If MCLK is connected, why would you derive it from SCLK? That's the
> point - your clocks property already might be telling everything needed
> here.
This is because sometimes the codec does not work properly
when using the MCLK provided by the CPU.
> >>>>> +
> >>>>> + everest,hpfl:
> >>>>> + $ref: /schemas/types.yaml#/definitions/uint8
> >>>>> + description:
> >>>>> + the HPF value of ADCL.
> >>>>
> >>>> Is HPF value in dB? If so, use proper unit suffix and proper units.
> >>>
> >>> No, the values here correspond to the values in the registers.
> >>> The value is not in dB
> >>
> >> What are the meanings of the register values?
> >
> > The value of everest,hpfl is equal to the value of the corresponding register,
> > not the cutoff frequency of the HPF.
>
> You keep avoiding answers.
>
> I don't want you to encode standard units as register values.
I think I understand what you mean.
Do you want me to enter the physical values in DTS and then convert them to register values in the code?
^ permalink raw reply
* RE: [PATCH 7/7] ASoC: dt-bindings: ES8389: Add members about HPF and clock
From: Zhang Yi @ 2026-06-15 6:07 UTC (permalink / raw)
To: krzk
Cc: alsa-devel, broonie, conor+dt, devicetree, krzk+dt, robh, tiwai,
zhangyi
In-Reply-To: <fa710884-e66e-4ef8-bbbd-034eeef8ee62@kernel.org>
> >>> + $ref: /schemas/types.yaml#/definitions/flag
> >>> + description:
> >>> + Indicates that SCLK is used as the internal clock.
> >>
> >> And what happens with mclk in such case? Is it still wired?
> >
> > Yes, setting mclk-from-sclk does not affect the MCLK connection.
>
> I am asking about wiring of the device. If MCLK is used from SCLK, but
> SCLK is used as the internal clock, then how can you still have MCLK
> connected?
If MCLK is derived from SCLK, whether the 'MCLK' pin on the device is
connected or not has no effect on operation.
> >>> +
> >>> + everest,hpfl:
> >>> + $ref: /schemas/types.yaml#/definitions/uint8
> >>> + description:
> >>> + the HPF value of ADCL.
> >>
> >> Is HPF value in dB? If so, use proper unit suffix and proper units.
> >
> > No, the values here correspond to the values in the registers.
> > The value is not in dB
>
> What are the meanings of the register values?
The value of everest,hpfl is equal to the value of the corresponding register,
not the cutoff frequency of the HPF.
The code does not specify which register corresponds to which HPF cutoff frequency.
And we did not set the HPF to kcontrol because we do not want users to be able to control it
while the codec is running.
> >>> + everest,hpfl = [0a];
> >>
> >> <0xa>? What did you want to say here?
> >
> > I just wanted to give an example to show how to set the values of everest,hpfl to 0x0a.
>
> So use syntax I asked.
OK
If you receive this email, please reply to me.
(I'm worried that the issue with not receiving emails might happen again.)
^ permalink raw reply
* RE: [PATCH 2/7] ASoC: codecs: ES8389: Fix the issue about mclk_src
From: Zhang Yi @ 2026-06-15 6:06 UTC (permalink / raw)
To: krzk
Cc: alsa-devel, broonie, conor+dt, devicetree, krzk+dt, robh, tiwai,
zhangyi
In-Reply-To: <fbaf1829-723b-4a87-882b-b164bb544912@kernel.org>
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1: Type: text/plain, Size: 793 bytes --]
> >
> >>> struct es8389_private *es8389 = snd_soc_component_get_drvdata(component);
> >>>
> >>> - ret = device_property_read_u8(component->dev, "everest,mclk-src", &es8389->mclk_src);
> >>
> >> Why are you changing implemented ABI?
> >
> > In the old ABI, `mclk_src` was defined as `u8`, which meant that users could set `mclk_src` to any value in the DTS¡ªsuch as `0x02`,
> > but the code wouldn't recognize what that value represented.
> > The actual purpose of `mclk_src` is to indicate whether `sclk` should be used as `mclk`.
> > So I've changed it to bool.
>
> You break ABI implemented by this driver, so you must clearly document
> it with reasons, why breaking is necessary. Honestly, without proper
> reason I would just answer that you must keep it backwards compatible.
OK
^ permalink raw reply
* [PATCH v2] ALSA: hda/conexant: Add pin config quirk for Lenovo IdeaPad Slim 5 16AKP10
From: Galen Hassen @ 2026-06-16 17:32 UTC (permalink / raw)
To: tiwai; +Cc: alsa-devel, linux-sound, Galen Hassen
In-Reply-To: <87se6mrah4.wl-tiwai@suse.de>
The Lenovo IdeaPad Slim 5 16AKP10 (PCI SSID 17aa:38b6) uses the
Conexant SN6140 codec. The internal microphone is on pin 0x1a but
the BIOS configures it with pin default 0x95a60120, which includes
a jack detection bit that causes the kernel to treat it as an
unplugged external mic rather than a fixed internal mic.
Add a pin config quirk that overrides pin 0x1a to 0x95a60130,
setting the connectivity bits to indicate a fixed/always-connected
device. This allows the internal microphone to be correctly
identified and used.
Signed-off-by: Galen Hassen <rwekyes@gmail.com>
---
sound/hda/codecs/conexant.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
Changes in v2:
- Move the quirk table entry to the correct position in PCI SSID
order (between 0x38af and 0x3905), as pointed out by Takashi Iwai.
diff --git a/sound/hda/codecs/conexant.c b/sound/hda/codecs/conexant.c
index e3b6aaabe..3d9226276 100644
--- a/sound/hda/codecs/conexant.c
+++ b/sound/hda/codecs/conexant.c
@@ -291,6 +291,7 @@ enum {
CXT_FIXUP_HEADSET_MIC,
CXT_FIXUP_HP_MIC_NO_PRESENCE,
CXT_PINCFG_SWS_JS201D,
+ CXT_PINCFG_LENOVO_IDEAPAD_SLIM5_16AKP10,
CXT_PINCFG_TOP_SPEAKER,
CXT_FIXUP_HP_A_U,
CXT_FIXUP_ACER_SWIFT_HP,
@@ -826,6 +827,12 @@ static const struct hda_pintbl cxt_pincfg_lemote[] = {
{}
};
+/* Lenovo IdeaPad Slim 5 16AKP10 with SN6140 */
+static const struct hda_pintbl cxt_pincfg_lenovo_ideapad_slim5_16akp10[] = {
+ { 0x1a, 0x95a60130 }, /* Internal mic, fixed/always-connected */
+ {}
+};
+
/* SuoWoSi/South-holding JS201D with sn6140 */
static const struct hda_pintbl cxt_pincfg_sws_js201d[] = {
{ 0x16, 0x03211040 }, /* hp out */
@@ -1006,6 +1013,10 @@ static const struct hda_fixup cxt_fixups[] = {
.type = HDA_FIXUP_PINS,
.v.pins = cxt_pincfg_sws_js201d,
},
+ [CXT_PINCFG_LENOVO_IDEAPAD_SLIM5_16AKP10] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = cxt_pincfg_lenovo_ideapad_slim5_16akp10,
+ },
[CXT_PINCFG_TOP_SPEAKER] = {
.type = HDA_FIXUP_PINS,
.v.pins = (const struct hda_pintbl[]) {
@@ -1114,6 +1125,7 @@ static const struct hda_quirk cxt5066_fixups[] = {
SND_PCI_QUIRK(0x17aa, 0x21da, "Lenovo X220", CXT_PINCFG_LENOVO_TP410),
SND_PCI_QUIRK(0x17aa, 0x21db, "Lenovo X220-tablet", CXT_PINCFG_LENOVO_TP410),
SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo IdeaPad Z560", CXT_FIXUP_MUTE_LED_EAPD),
+ SND_PCI_QUIRK(0x17aa, 0x38b6, "Lenovo IdeaPad Slim 5 16AKP10", CXT_PINCFG_LENOVO_IDEAPAD_SLIM5_16AKP10),
SND_PCI_QUIRK(0x17aa, 0x3905, "Lenovo G50-30", CXT_FIXUP_STEREO_DMIC),
SND_PCI_QUIRK(0x17aa, 0x390b, "Lenovo G50-80", CXT_FIXUP_STEREO_DMIC),
SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", CXT_FIXUP_STEREO_DMIC),
--
2.53.0
^ permalink raw reply related
* [PATCH] ALSA: hda/conexant: Add pin config quirk for Lenovo IdeaPad Slim 5 16AKP10
From: Galen @ 2026-06-15 23:33 UTC (permalink / raw)
To: tiwai; +Cc: alsa-devel, linux-sound, Galen
The Lenovo IdeaPad Slim 5 16AKP10 (PCI SSID 17aa:38b6) uses the
Conexant SN6140 codec. The internal microphone is on pin 0x1a but
the BIOS configures it with pin default 0x95a60120, which includes
a jack detection bit that causes the kernel to treat it as an
unplugged external mic rather than a fixed internal mic.
Add a pin config quirk that overrides pin 0x1a to 0x95a60130,
setting the connectivity bits to indicate a fixed/always-connected
device. This allows the internal microphone to be correctly
identified and used.
Signed-off-by: Galen Hassen <rwekyes@gmail.com>
---
sound/hda/codecs/conexant.c | 12 ++++++++++++
1 file changed, 12 insertions(+)
diff --git a/sound/hda/codecs/conexant.c b/sound/hda/codecs/conexant.c
index e3b6aaabe..40d4591f9 100644
--- a/sound/hda/codecs/conexant.c
+++ b/sound/hda/codecs/conexant.c
@@ -291,6 +291,7 @@ enum {
CXT_FIXUP_HEADSET_MIC,
CXT_FIXUP_HP_MIC_NO_PRESENCE,
CXT_PINCFG_SWS_JS201D,
+ CXT_PINCFG_LENOVO_IDEAPAD_SLIM5_16AKP10,
CXT_PINCFG_TOP_SPEAKER,
CXT_FIXUP_HP_A_U,
CXT_FIXUP_ACER_SWIFT_HP,
@@ -826,6 +827,12 @@ static const struct hda_pintbl cxt_pincfg_lemote[] = {
{}
};
+/* Lenovo IdeaPad Slim 5 16AKP10 with SN6140 */
+static const struct hda_pintbl cxt_pincfg_lenovo_ideapad_slim5_16akp10[] = {
+ { 0x1a, 0x95a60130 }, /* Internal mic, fixed/always-connected */
+ {}
+};
+
/* SuoWoSi/South-holding JS201D with sn6140 */
static const struct hda_pintbl cxt_pincfg_sws_js201d[] = {
{ 0x16, 0x03211040 }, /* hp out */
@@ -1006,6 +1013,10 @@ static const struct hda_fixup cxt_fixups[] = {
.type = HDA_FIXUP_PINS,
.v.pins = cxt_pincfg_sws_js201d,
},
+ [CXT_PINCFG_LENOVO_IDEAPAD_SLIM5_16AKP10] = {
+ .type = HDA_FIXUP_PINS,
+ .v.pins = cxt_pincfg_lenovo_ideapad_slim5_16akp10,
+ },
[CXT_PINCFG_TOP_SPEAKER] = {
.type = HDA_FIXUP_PINS,
.v.pins = (const struct hda_pintbl[]) {
@@ -1116,6 +1127,7 @@ static const struct hda_quirk cxt5066_fixups[] = {
SND_PCI_QUIRK(0x17aa, 0x38af, "Lenovo IdeaPad Z560", CXT_FIXUP_MUTE_LED_EAPD),
SND_PCI_QUIRK(0x17aa, 0x3905, "Lenovo G50-30", CXT_FIXUP_STEREO_DMIC),
SND_PCI_QUIRK(0x17aa, 0x390b, "Lenovo G50-80", CXT_FIXUP_STEREO_DMIC),
+ SND_PCI_QUIRK(0x17aa, 0x38b6, "Lenovo IdeaPad Slim 5 16AKP10", CXT_PINCFG_LENOVO_IDEAPAD_SLIM5_16AKP10),
SND_PCI_QUIRK(0x17aa, 0x3975, "Lenovo U300s", CXT_FIXUP_STEREO_DMIC),
/* NOTE: we'd need to extend the quirk for 17aa:3977 as the same
* PCI SSID is used on multiple Lenovo models
--
2.53.0
^ permalink raw reply related
* EDIROL UA-1000 driver module
From: NiLace @ 2026-06-17 22:52 UTC (permalink / raw)
To: alsa-devel
Hello,
First message and although I've searching for this I don't believe
this topic has been proposed. I'm writing to ask for a (I believe)
small modification on snd-ua101.
The driver handles audio on the EDIROL UA-1000 perfectly (which is
amazing, thank you), but MIDI control of the device doesn't work at
all, and I think I've found why: the UA-1000 wants its control messages
on USB-MIDI cable 1, while the driver hardcodes cable 0.
Here's what I found:
The UA-1000 (USB 0582:0044) is a 10x10 USB 2.0 interface from 2003.
Besides audio it has a built-in digital mixer, a patch bay/router and
direct monitoring, all driven by Roland SysEx (DT1) messages over its
USB-MIDI interface — on Windows that's what the "UA-1000 Control Panel"
talks to. None of it is reachable from Linux today.
The device has 4 USB interfaces:
- Interface 0: Control/mixer descriptors (no endpoints)
- Interface 1: Audio capture (isochronous, EP 1 IN)
- Interface 2: Audio playback (isochronous, EP 2 OUT)
- Interface 3: MIDI control (bulk, EP 4 OUT + EP 3 IN)
The driver defines a fixed MIDI endpoint configuration:
static const struct snd_usb_midi_endpoint_info midi_ep = {
.out_cables = 0x0001,
.in_cables = 0x0001
};
This configures MIDI on cable 0 (bit 0 set). However, the UA-1000
requires cable 1. I discovered this by capturing USB traffic from the
Windows XP driver using Wireshark/USBPcap while operating the official
EDIROL UA-1000 Control Panel software in a VirtualBox VM with USB
passthrough.
All SysEx messages captured from the Windows driver use USB-MIDI cable
1.
The cable number is encoded in the high nibble of each 4-byte USB-MIDI
packet's first byte (Code Index Number byte).
Here's an example, a captured Monitor Output Link On command:
Raw USB-MIDI data (hex):
14 f0 41 10 14 00 69 12 14 00 03 00 14 01 01 7b 15 f7 00 00
Decoded packet-by-packet:
Byte Meaning
---- -------
14 Cable 1 (high nibble = 0x1) | CIN 0x4 (SysEx start/continue)
f0 SysEx start
41 Roland manufacturer ID
10 Device ID (default 0x10)
14 Cable 1 | CIN 0x4
00 Model ID byte 1
69 Model ID byte 2 (0x00 0x69 = UA-1000)
12 Command: DT1 (Data Set 1 = write)
14 Cable 1 | CIN 0x4
00 Address byte 1
03 Address byte 2 (Monitor Output section)
00 Address byte 3 (Left channel)
14 Cable 1 | CIN 0x4
01 Address byte 4 (Link parameter)
01 Data (0x01 = on)
7b Roland checksum
15 Cable 1 (high nibble = 0x1) | CIN 0x5 (SysEx ends with 1 byte)
f7 SysEx end
00 Padding
00 Padding
If the device used cable 0, the high nibble of each packet would be
0x0_. All 18 capture files I have collected (input channel gain, pan,
solo, link, on/off, monitor output gain, monitor link, direct monitor
toggle, software control, and output volume mode) consistently show
cable 1.
I verified the fix by binary-patching the compiled snd-ua101.ko module.
At the offset where the midi_ep struct is stored, I changed:
out_cables: 0x0001 -> 0x0002 (cable 0 -> cable 1)
in_cables: 0x0001 -> 0x0002 (cable 0 -> cable 1)
Before: 00 00 00 00 01 00 01 00
After: 00 00 00 00 02 00 02 00
After loading the patched module, all SysEx commands are accepted by
the device. I have built a command-line control tool (ua1000ctl) that
successfully controls the UA-1000's mixer parameters via ALSA rawmidi,
including:
- Monitor output volume (left, right, linked) — confirmed working
- Monitor link on/off — confirmed working
- Direct monitor on/off — confirmed working
- Input channel on/off, solo, link, pan, and gain — addresses
identified
Audio capture and playback continue to work correctly with the patched
module and the MIDI port remains functional at hw:X,0,0 (subdevice 0).
I have 18 USB capture files covering all major SysEx command categories
and would be happy to share them if valuable.
To be transparent, I have relied heavily on Claude Code to help me in
several tasks I don't have the proper knowledge to do (and probably
would have not been able to implement). I have personally verified each
finding against the device but would like to be honest about it. I used
it for instance to analyze the USB captures, to inspect the device and
to modify a copy of the kernel module.
If it is still a possibility to ask for an update (or patch) of the
module, it would be amazing though.
Thank you.
^ permalink raw reply
* Creative Sound Blaster AE9 Linux Support
From: NA NA @ 2026-06-17 23:11 UTC (permalink / raw)
To: alsa-devel@alsa-project.org, linux-sound@vger.kernel.org
In-Reply-To: <LO2P302MB0105F8CF5B3A084E484021F7CDE42@LO2P302MB0105.GBRP302.PROD.OUTLOOK.COM>
Please contact the Linux Kernal\Audio team to get support for the Creative Sound Blaster AE9 added to the Linux Kernal so I can finely move to Linux, As it is right now, No Linux distro can even boot, everyone of them boot loops with the sound card in the system.
If a dev reads this who can add support and needs some kernel panic crash logs message me back how to get them without removing the sound card from the system or getting to the desktop,
I'm more than happy to help with that
^ permalink raw reply
* [PATCH] ALSA: hda/realtek: Fix speaker pin routing for HP Pavilion Gaming 15 (103c:8742)
From: Msh @ 2026-06-13 14:12 UTC (permalink / raw)
To: tiwai, perex; +Cc: alsa-devel
[-- Attachment #1: Type: text/plain, Size: 1920 bytes --]
Greetings,
I want to report a missing speaker quirk for the HP Pavilion Gaming
Laptop 15-dk1xxx. Right now, the internal audio sounds very thin and
tinny on Linux.
== Hardware Info ==
Laptop: HP Pavilion Gaming Laptop 15-dk1xxx
Codec: Realtek ALC285
Subsystem ID: 103c:8742
== The Issue ==
By default, dmesg shows line_outs=1 and only uses pin 0x14.
When looking at the raw codec dump, Node 0x17 (the internal bass/mid
speakers) is marked as disabled or disconnected by the default factory
firmware:
-------------------------------------
Node 0x17 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
-------------------------------------
Because of this 0x411111f0 value, the driver leaves the internal
woofers completely turned off.
== The Fix ==
I fixed this by creating a manual firmware patch in hda-jack-retask.fw
to force Node 0x17 to act as an internal speaker:
-------------------------------------
[codec]
0x808606c8 0x103c8742 0
[pincfg]
0x14 0x90170110
0x17 0x90170115
-------------------------------------
After doing this, dmesg updates to line_outs=2 (0x14/0x17/0x0/0x0/0x0)
type:speaker. Both the tweeters and woofers fire together, and the
laptop audio finally sounds full and normal.
I have attached the original, clean codec dump file
(hp_pavilion_alc285_codec.txt) from /proc/asound/card0/codec#0 before
any overrides were applied.
Hopefully, a maintainer can add this subsystem ID (103c:8742) and the
pin table fix into sound/pci/hda/patch_realtek.c so it works out of
the box for everyone in the next kernel releases.
Note: I am just a user, not a software engineer or a native English
speaker. I used an AI tools to help me read my terminal logs,
understand the codec dump, and find the correct pin values to fix my
laptop audio. I am sharing these verified hardware details so the
developers can easily implement the patch.
--
Best Regards,
MSH
[-- Attachment #2: hp_pavilion_alc285_codec.txt --]
[-- Type: text/plain, Size: 10383 bytes --]
Codec: Realtek ALC285
Address: 0
AFG Function Id: 0x1 (unsol 1)
Vendor Id: 0x10ec0285
Subsystem Id: 0x103c8742
Revision Id: 0x100002
No Modem Function Group found
Default PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Default Amp-In caps: N/A
Default Amp-Out caps: N/A
State of AFG node 0x01:
Power states: D0 D1 D2 D3 D3cold CLKSTOP EPSS
Power: setting=D0, actual=D0
GPIO: io=3, o=0, i=0, unsolicited=1, wake=0
IO[0]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
IO[1]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
IO[2]: enable=0, dir=0, wake=0, sticky=0, data=0, unsol=0
Node 0x02 [Audio Output] wcaps 0x41d: Stereo Amp-Out
Control: name="Speaker Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Device: name="ALC285 Analog", type="Audio", device=0
Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
Amp-Out vals: [0x54 0x54]
Converter: stream=1, channel=0
PCM:
rates [0x40]: 48000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x03 [Audio Output] wcaps 0x41d: Stereo Amp-Out
Control: name="Headphone Playback Volume", index=0, device=0
ControlAmp: chs=3, dir=Out, idx=0, ofs=0
Amp-Out caps: ofs=0x57, nsteps=0x57, stepsize=0x02, mute=0
Amp-Out vals: [0x00 0x00]
Converter: stream=1, channel=0
PCM:
rates [0x40]: 48000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x04 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x05 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x06 [Audio Output] wcaps 0x411: Stereo
Converter: stream=1, channel=0
PCM:
rates [0x40]: 48000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x07 [Audio Input] wcaps 0x10051b: Stereo Amp-In
Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
Amp-In vals: [0x97 0x97]
Converter: stream=0, channel=0
SDI-Select: 0
PCM:
rates [0x40]: 48000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x24
Node 0x08 [Audio Input] wcaps 0x10051b: Stereo Amp-In
Control: name="Capture Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Control: name="Capture Switch", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Device: name="ALC285 Analog", type="Audio", device=0
Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
Amp-In vals: [0x3f 0x3f]
Converter: stream=0, channel=0
SDI-Select: 0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x23
Node 0x09 [Audio Input] wcaps 0x10051b: Stereo Amp-In
Amp-In caps: ofs=0x17, nsteps=0x3f, stepsize=0x02, mute=1
Amp-In vals: [0x97 0x97]
Converter: stream=0, channel=0
SDI-Select: 0
PCM:
rates [0x560]: 44100 48000 96000 192000
bits [0xe]: 16 20 24
formats [0x1]: PCM
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x22
Node 0x0a [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0b [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0c [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0d [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0e [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x0f [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x10 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x11 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x12 [Pin Complex] wcaps 0x40040b: Stereo Amp-In
Control: name="Internal Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x03 0x03]
Pincap 0x00000020: IN
Pin Default 0xb7a601c0: [Fixed] Mic at Oth Mobile-In
Conn = Digital, Color = Unknown
DefAssociation = 0xc, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x20: IN
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x13 [Pin Complex] wcaps 0x40040b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Pincap 0x00000020: IN
Pin Default 0x40000000: [N/A] Line Out at Ext N/A
Conn = Unknown, Color = Unknown
DefAssociation = 0x0, Sequence = 0x0
Pin-ctls: 0x00:
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x14 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="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: [0x00 0x00]
Pincap 0x00010014: OUT EAPD Detect
EAPD 0x2: EAPD
Pin Default 0x90170110: [Fixed] Speaker at Int N/A
Conn = Analog, Color = Unknown
DefAssociation = 0x1, 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: 1
0x02
Node 0x15 [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x16 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x0000001c: OUT HP Detect
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x00:
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x02* 0x03
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: [0x00 0x00]
Pincap 0x0000001c: OUT HP Detect
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, 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: 3
0x02 0x03 0x06*
Node 0x18 [Pin Complex] wcaps 0x40048b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Pincap 0x00000024: IN Detect
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x00:
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x19 [Pin Complex] wcaps 0x40048b: Stereo Amp-In
Control: name="Mic Boost Volume", index=0, device=0
ControlAmp: chs=3, dir=In, idx=0, ofs=0
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Pincap 0x00003724: IN Detect
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x04a11040: [Jack] Mic at Ext Right
Conn = 1/8, Color = Black
DefAssociation = 0x4, Sequence = 0x0
Pin-ctls: 0x24: IN VREF_80
Unsolicited: tag=02, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x1a [Pin Complex] wcaps 0x40048b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Pincap 0x00003724: IN Detect
Vref caps: HIZ 50 GRD 80 100
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x00: VREF_HIZ
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x1b [Pin Complex] wcaps 0x40058f: Stereo Amp-In Amp-Out
Amp-In caps: ofs=0x00, nsteps=0x03, stepsize=0x27, mute=0
Amp-In vals: [0x00 0x00]
Amp-Out caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-Out vals: [0x80 0x80]
Pincap 0x00013734: IN OUT EAPD Detect
Vref caps: HIZ 50 GRD 80 100
EAPD 0x2: EAPD
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x00: VREF_HIZ
Unsolicited: tag=00, enabled=0
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x02* 0x03
Node 0x1c [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x1d [Pin Complex] wcaps 0x400400: Mono
Pincap 0x00000020: IN
Pin Default 0x40600001: [N/A] Modem Line at Ext N/A
Conn = Unknown, Color = Unknown
DefAssociation = 0x0, Sequence = 0x1
Pin-ctls: 0x20: IN
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Node 0x1e [Pin Complex] wcaps 0x400501: Stereo
Pincap 0x00000010: OUT
Pin Default 0x411111f0: [N/A] Speaker at Ext Rear
Conn = 1/8, Color = Black
DefAssociation = 0xf, Sequence = 0x0
Misc = NO_PRESENCE
Pin-ctls: 0x40: OUT
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 1
0x06
Node 0x1f [Vendor Defined Widget] wcaps 0xf00000: Mono
Node 0x20 [Vendor Defined Widget] wcaps 0xf00040: Mono
Processing caps: benign=0, ncoeff=142
Node 0x21 [Pin Complex] wcaps 0x40058d: Stereo Amp-Out
Control: name="Headphone 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 0x0001001c: OUT HP EAPD Detect
EAPD 0x2: EAPD
Pin Default 0x04211020: [Jack] HP Out at Ext Right
Conn = 1/8, Color = Black
DefAssociation = 0x2, Sequence = 0x0
Pin-ctls: 0xc0: OUT HP
Unsolicited: tag=01, enabled=1
Power states: D0 D1 D2 D3 EPSS
Power: setting=D0, actual=D0
Connection: 2
0x02 0x03*
Node 0x22 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80]
Connection: 5
0x19 0x1a 0x1b 0x1d 0x13
Node 0x23 [Audio Mixer] wcaps 0x20010b: Stereo Amp-In
Amp-In caps: ofs=0x00, nsteps=0x00, stepsize=0x00, mute=1
Amp-In vals: [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x80 0x80] [0x00 0x00]
Connection: 5
0x19 0x1a 0x1b 0x1d 0x12
Node 0x24 [Audio Selector] wcaps 0x300101: Stereo
Connection: 3
0x12* 0x13 0x18
^ permalink raw reply
* Hollow Internal Speaker Sound on HP ZBook 15 G6 (Realtek ALC285)
From: GitHub issues - edited @ 2026-06-19 20:09 UTC (permalink / raw)
To: alsa-devel
In-Reply-To: <18ba9460c5231700-webhooks-bot@alsa-project.org>
alsa-project/alsa-lib issue #513 was edited from Purgenta889:
I've tested this throughout several different Linux kernels (ranging from version 6.x to the latest 7.x), and no matter which distribution is used, the internal speakers sound considerably emptier and without bass than they should, compared to how they sound on Windows 11.
Hardware Details:
- Laptop Model: HP ZBook 15 G6
- CPU: Intel Xeon E-2286M
- GPU: NVIDIA Quadro T2000
- Audio Codec: Realtek ALC285
- Speaker Brand: Bang & Olufsen (B&O)
- Speaker Type: Dual Stereo
Additional Information:
All audio with bluetooth and wired headphones work perfectly fine, with no noticeable change in bass or quality. According to [this source](https://www.storagereview.com/review/hp-zbook-15-g6-workstation-review), the laptop comes with something called "HP Clear Sound Amp", which could be a contributor to the lack of bass, if it does not work properly on Linux.
ALSA Report:
[alsa-report.txt](https://github.com/user-attachments/files/29149672/alsa-report.txt)
Issue URL : https://github.com/alsa-project/alsa-lib/issues/513
Repository URL: https://github.com/alsa-project/alsa-lib
^ permalink raw reply
* Hollow Internal Speaker Sound on HP ZBook 15 G6 (Realtek ALC285)
From: GitHub issues - opened @ 2026-06-19 20:08 UTC (permalink / raw)
To: alsa-devel
In-Reply-To: <18ba945d36de2f00-webhooks-bot@alsa-project.org>
alsa-project/alsa-lib issue #513 was opened from Purgenta889:
I've tested this throughout several different Linux kernels (ranging from version 6.x to 7.x), and no matter which distribution is used, the internal speakers sound considerably emptier and without bass than they should, compared to how they sound on Windows 11.
Hardware Details:
- Laptop Model: HP ZBook 15 G6
- CPU: Intel Xeon E-2286M
- GPU: NVIDIA Quadro T2000
- Audio Codec: Realtek ALC285
- Speaker Brand: Bang & Olufsen (B&O)
- Speaker Type: Dual Stereo
Additional Information:
All audio with bluetooth and wired headphones work perfectly fine, with no noticeable change in bass or quality. According to [this source](https://www.storagereview.com/review/hp-zbook-15-g6-workstation-review), the laptop comes with something called "HP Clear Sound Amp", which could be a contributor to the lack of bass, if it does not work properly on Linux.
ALSA Report:
[alsa-report.txt](https://github.com/user-attachments/files/29149672/alsa-report.txt)
Issue URL : https://github.com/alsa-project/alsa-lib/issues/513
Repository URL: https://github.com/alsa-project/alsa-lib
^ permalink raw reply
* Re: [PATCH] ASoC: amd: acp: Fix linker error with SDCA quirks
From: Julian Braha @ 2026-06-19 13:08 UTC (permalink / raw)
To: Syed Saba Kareem, Mark Brown, alsa-devel
Cc: Vijendar Mukunda, Sunil-kumar Dommati, Arnd Bergmann,
Mario Limonciello, Venkata Prasad Potturu, Liam Girdwood,
Jaroslav Kysela, Takashi Iwai, Randy Dunlap, Simon Trimmer,
Mario Limonciello (AMD), Hasun Park, open list:AMD ASoC DRIVERS,
open list
In-Reply-To: <20260619124343.1683484-1-syed.sabakareem@amd.com>
Hi Syed,
On 6/19/26 13:43, Syed Saba Kareem wrote:
> config SND_SOC_ACPI_AMD_SDCA_QUIRKS
> - tristate
> - depends on ACPI
> + bool "AMD ACPI SDCA quirks"
> + depends on SND_SOC_ACPI_AMD_MATCH
> depends on SND_SOC_SDCA
> + depends on SND_SOC_ACPI_AMD_MATCH = m || SND_SOC_SDCA = y
> + default y
> + help
> + Enable SDCA quirk support for AMD ACPI match tables.
> + This is compiled into the snd-soc-acpi-amd-match module.
This Kconfig file uses tabs instead of spaces. Most of your Kconfig
additions are formatted correctly, but one line uses spaces.
- Julian Braha
^ permalink raw reply
page: next (older)
- recent:[subjects (threaded)|topics (new)|topics (active)]
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox