Linux Documentation
 help / color / mirror / Atom feed
* [PATCH 0/2] usb: gadget: uac2: support explicit channel counts
@ 2026-07-29  5:41 Kyle Farrell
  2026-07-29  5:41 ` [PATCH 1/2] usb: gadget: u_audio: pass channel counts explicitly Kyle Farrell
  2026-07-29  5:41 ` [PATCH 2/2] usb: gadget: f_uac2: allow explicit channel counts Kyle Farrell
  0 siblings, 2 replies; 3+ messages in thread
From: Kyle Farrell @ 2026-07-29  5:41 UTC (permalink / raw)
  To: Greg Kroah-Hartman, linux-usb
  Cc: Jonathan Corbet, Shuah Khan, linux-kernel, linux-doc,
	Kyle Farrell

USB Audio Class 2.0 permits up to 255 channels in an audio channel cluster,
with bNrChannels specified independently of the channel-location bitmap
(bmChannelConfig). A zero channel-location bitmap indicates that the
channels have no predefined spatial positions.

The UAC2 gadget driver currently derives bNrChannels from the number of set
bits in bmChannelConfig. Since the descriptor defines only 27
channel-location bits, this limits playback and capture streams to 27
channels.

This series removes that limitation while preserving existing userspace
behavior. Existing ConfigFS channel-mask configuration continues to work
unchanged, while optional playback and capture channel-count attributes
allow non-spatial channel clusters to be described.

The series is split so that the shared u_audio infrastructure is updated
first without changing behavior, followed by the UAC2 functional change.

Patch 1:
  Pass resolved playback and capture channel counts explicitly into
  the shared u_audio implementation instead of deriving them from
  channel masks.

Patch 2:
  Add ConfigFS playback/capture channel-count attributes to the UAC2
  function driver and use them when generating descriptors and stream
  configuration, allowing counts beyond the 27 predefined channel
  locations.

Testing

Testing was performed using a Raspberry Pi Zero 2 W configured as a USB
UAC2 gadget. Streaming and descriptor validation were performed against
both Linux and macOS hosts.  Windows hosts were not tested.

UAC1
  - Verified playback/capture operation via alsaloop.
  - No descriptor or behavioral changes observed.

UAC2
  - Verified legacy channel-mask configuration (1-27 channels).
  - Verified explicit channel-count mode with 2, 28, 61, 62, 96 channels.
  - Verified invalid channel-count/channel-mask combinations are rejected.
  - Verified Feature Unit descriptor size limits are enforced.
  - Verified descriptors including:
      * bNrChannels
      * bmChannelConfig
      * Feature Unit presence and bLength
      * AudioControl wTotalLength
      * endpoint wMaxPacketSize
  - Verified ALSA-reported playback and capture channel counts.
  - Verified streaming using alsaloop.


Kyle Farrell (2):
  usb: gadget: u_audio: pass channel counts explicitly
  usb: gadget: f_uac2: allow explicit channel counts

 .../ABI/testing/configfs-usb-gadget-uac2      | 18 ++++-
 Documentation/usb/gadget-testing.rst          | 18 ++++-
 drivers/usb/gadget/function/f_uac1.c          |  2 +
 drivers/usb/gadget/function/f_uac2.c          | 69 ++++++++++++++-----
 drivers/usb/gadget/function/u_audio.c         | 32 ++++-----
 drivers/usb/gadget/function/u_audio.h         |  2 +
 drivers/usb/gadget/function/u_uac2.h          |  4 ++
 7 files changed, 105 insertions(+), 40 deletions(-)


base-commit: 1590cf0329716306e948a8fc29f1d3ee87d3989f
-- 
2.34.1


^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2026-07-29  6:13 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-29  5:41 [PATCH 0/2] usb: gadget: uac2: support explicit channel counts Kyle Farrell
2026-07-29  5:41 ` [PATCH 1/2] usb: gadget: u_audio: pass channel counts explicitly Kyle Farrell
2026-07-29  5:41 ` [PATCH 2/2] usb: gadget: f_uac2: allow explicit channel counts Kyle Farrell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox