Ok, so I actually tested my patch, and it turned out things were slightly more complex than expected - the original patch is still needed, but in addition, we also need to build the channel map after the format parse, because the format of the descriptor is not always the same as the format of the input terminal. These two fixes made the mono chmap show up on my logitech USB headset, on both output and input side.
I also tested my patches with another USB device. This device is UAC2, and when looking at lsusb I found that in UAC2 the streaming descriptor has a channel config too. Given what I found on the headset, it seems reasonable to use this channel config instead of the input terminal's channel config, although in my case it made no practical difference.
David Henningsson (3): ALSA: usb: supply channel maps even when wChannelConfig is unspecified ALSA: usb - For class 2 devices, use channel map from altsettings ALSA: usb - Don't trust the channel config if the channel count changed
sound/usb/stream.c | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-)