[alsa-devel] snd_usb_audio - siberia elite prism soundcard issues

Raymond Yau superquad.vortex2 at gmail.com
Fri Mar 13 14:51:12 CET 2015


>> >> >>
>> >> >> >       AudioControl Interface Descriptor:
>> >> >> >         bLength                13
>> >> >> >         bDescriptorType        36
>> >> >> >         bDescriptorSubtype      4 (MIXER_UNIT)
>> >> >> >       Warning: Descriptor too short
>> >> >> >         bUnitID                10
>> >> >> >         bNrInPins               2
>> >> >> >         baSourceID( 0)          9
>> >> >> >         baSourceID( 1)          1
>> >> >> >         bNrChannels            8
>> >> >> >         wChannelConfig     0x063f
>> >> >> >           Left Front (L)
>> >> >> >           Right Front (R)
>> >> >> >           Center Front (C)
>> >> >> >           Low Freqency Enhancement (LFE)
>> >> >> >           Left Surround (LS)
>> >> >> >           Right Surround (RS)
>> >> >> >           Side Left (SL)
>> >> >> >           Side Right (SR)
>> >> >> >         iChannelNames           0
>> >> >> >         bmControls         0x00
>> >> >> >         bmControls         0x00
>> >> >> >         iMixer                 33 (error)
>>
>> Refer to usb audio specification 1.0
>>
>> Table 4-5: Mixer Unit Descriptor
>>
>> bLength = 10 +  p +  N = 14

Bus 001 Device 003: ID 1038:1225 Ideazon, Inc.
Device Descriptor:
bLength 18
bDescriptorType 1
bcdUSB 2.00

Your usb audio device are 2.0
bLength = 13 + p + N

>>
>> Number of Input Pins of this Unit: p
>>
>> > >> >         bNrInPins               2
>>
>> The ID of the Unit or Terminal to which the first and second Input Pins
of this Mixer Unit is connected.
>>
>> > >> >         baSourceID( 0)          9
>> >> >> >         baSourceID( 1)          1
>>
>> Number of logical output channels in the Mixer’s output audio channel
cluster.
>>
>> >> >> >         bNrChannels            8
>>
>> Describes the spatial location of the logical channels.
>>
>> >> >> >         wChannelConfig     0x063f

Seem use 4 bytes instead of 2 bytes for usb audio 2.0 devices
This mean the values output by lsusb  is different from specification

>> >> >> >           Left Front (L)
>> >> >> >           Right Front (R)
>> >> >> >           Center Front (C)
>> >> >> >           Low Freqency Enhancement (LFE)
>> >> >> >           Left Surround (LS)
>> >> >> >           Right Surround (RS)
>> >> >> >           Side Left (SL)
>> >> >> >           Side Right (SR)
>>
>> Bit map indicating which mixing Controls are programmable.
>>
>> >> >> >         bmControls         0x00
>> >> >> >         bmControls         0x00
>>

>>
>> Index of a string descriptor, describing the name of the first logical
channel.
>>
>> >> >         iChannelNames           0
>>
>> Index of a string descriptor, describing the Mixer Unit.
>>
>> >> >> >         iMixer                 33
>>

> In case this can be of any useful info, in the form of unknown controls
reported by the lsusb output, manufacturer software in other OS has
controls for:
>
> * dolby surround activation (off and on).
> * microphone input volume (which works fine now) in snd_usb_audio
> * microphone input "compression" (supposedly to keep input within certain
non distorting levels)
> * input noise reduction (off and on too)
> * micro retro feedback volume
> * equalizer.
>

Take a look at 4.7.2.6 Mixer Unit Descriptor of USB Audio 2.0 specs

Do the sound card work with alsa when you force the driver to skip
build_mixer_unit_ctl() for unitid 10  ?

Can alsamixer change the 8 channels speaker playback volume control ?

You can add usb_audio_info to dump those values of the AudioControl
Interface Descriptor  with unitid 10

https://git.kernel.org/cgit/linux/kernel/git/tiwai/sound.git/tree/sound/usb/mixer.c

for (; ich < num_ins; ich++) {
int och, ich_has_controls = 0;

for (och = 0; och < num_outs; och++) {
__u8 *c = uac_mixer_unit_bmControls(desc, state->mixer->protocol);

+   usb_audio_info(state->chip, " bmControls [%d,%d] : %x\n", ich, och, *c);

if (check_matrix_bitmap(c, ich, och, num_outs)) {
ich_has_controls = 1;
break;
}
}

+ if (state->chip->usb_id == USB_ID(0x1038,0x1225))
+      if(unitid == 10)
+            ich_has_control = 0;

if (ich_has_controls)
build_mixer_unit_ctl(state, desc, pin, ich,
     unitid, &iterm);
}
}
return 0;
}


More information about the Alsa-devel mailing list