On Wed, 2002-10-16 at 22:16, Steve Edwards wrote: > I just upgraded my RH 7.3 (2.4.18) host to 2.4.19. During the > configuration process, I noticed that I could configure the kernel to > use my USB audio speakers (Microsoft Digital Sound System 80). > > I built the kernel and rebooted. While the host was in POST, I plugged > in the USB cable. The following was in /var/log/messages, so I thought > I'd send it to you.
> Oct 16 21:19:53 fs kernel: usbaudio: registered dsp 14,3
> Oct 16 21:19:53 fs kernel: usbaudio: registered mixer 14,0
> Oct 16 21:19:53 fs kernel: usbaudio: warning: found 2 of 1 logical channels.
> Oct 16 21:19:53 fs kernel: usbaudio: no idea what's going on..., contact
>[EMAIL PROTECTED]
> Oct 16 21:19:53 fs kernel: usbaudio: mixer request device 2 if 0 unit 11 ch 1
>selector 2 failed
> Oct 16 21:19:53 fs kernel: usbaudio: registered mixer 14,16
I believe it was once reported on linux-usb-users.
The warning comes up during parsing of a feature unit (usbaudio.c):
nr_logical_channels=(ftr[0]-7)/ftr[5]-1;
if (nr_logical_channels != state->nrchannels) {
printk(KERN_WARNING "usbaudio: warning: found %d of %d logical
channels.\n", state->nrchannels,nr_logical_channels);
where ftr[] is the feature unit descriptor. One silly thing with this
descriptor is that it does not anywhere explicitly say how many channels
it has. The driver has to guess that based on the size of the descriptor
and on the size of the control block for one channel. That's where the
formula above comes from, because
size = 7 + (ch+1)*n
where n = ftr[5] - the size of the control block per channel.
Feature units do things like muting, bass, volume, AGC, delay etc. and
likely your speakers have one. The master control (channel 0) operates
on all channels (0 and all 'ch' above zero), and controls 1, 2 .. ch
work independently.
The mixer error that you see in the log corresponds to the [same]
feature unit being asked about the min/max/current volume setting
(selector 2) for the output control array 1. It failed. It means that
only one - master - control is available, and it's anyone's guess what
the descriptor tried to say by reporting one control block besides the
master control. Because even that one (#1) did not work.
Quite possibly, the feature unit descriptor is wrong. It should have
control arrays for all channels, and since array #0 is always a master
control, only a mono feature unit would report 2 control blocks (and
thus 1 logical channel). Something is very strange here. But the audio
class is so convoluted that I am not really surprised. Maybe just the
size of the descriptor is one byte too short, and that makes 1 out of 2
just because of integer arithmetics. Maybe a better check - for a really
weird length - is in order there.
Thanks,
Dmitri
--
114. I will never accept a challenge from the hero. ("Evil Overlord" by
Peter Anspach and John VanSickl)
signature.asc
Description: This is a digitally signed message part
