So, I have found CM6206 datasheet via baidu.cn. I think most things must be similar to mine CM6206-LX chip. It is unclear how to download pdf file, I am not very familiar with china language. There is description of internal registers. There is no much interesting settings, already existed initial values in snd_usb_audio module must be ok. If somebody needs reg info feel free to contact me. Next there is some information about volume control. I think it can be used for quirks that can fix following errors: [31010.646123] usb 1-1: Warning! Unlikely big volume range (=8065), cval->res is probably wrong. [31010.646126] usb 1-1: [9] FU [Mic Playback Volume] ch = 2, val = -6144/1921/1 [31010.646485] usb 1-1: Warning! Unlikely big volume range (=8065), cval->res is probably wrong. [31010.646486] usb 1-1: [11] FU [Line Playback Volume] ch = 2, val = -6144/1921/1 [31010.647884] usb 1-1: Warning! Unlikely big volume range (=6928), cval->res is probably wrong. [31010.647887] usb 1-1: [8] FU [Mic Capture Volume] ch = 2, val = -4096/2832/1 [31010.648291] usb 1-1: Warning! Unlikely big volume range (=6928), cval->res is probably wrong. [31010.648295] usb 1-1: [15] FU [Line Capture Volume] ch = 2, val = -4096/2832/1 [31010.648662] usb 1-1: Warning! Unlikely big volume range (=6928), cval->res is probably wrong. [31010.648664] usb 1-1: [2] FU [PCM Capture Volume] ch = 2, val = -4096/2832/1 I have uploaded images of related info from datasheet here https://yadi.sk/d/1kdCFs7Gpv8L8 I have tested arecord with mic and line in via simple test app. It seems only one avalible sample rate is 48000 Hz. printf("Sample rate = %d\n", SampleRate); snd_pcm_hw_params_set_rate_near(Handle, params, &SampleRate, &dir); printf("Sample rate = %d\n", SampleRate); After calling these function SampleRate becomes 48000, even if before it was 44100 or 96000. But, according to cat /proc/asound/card2/stream0 USB Sound Device at usb-0000:00:14.0-1, full speed : USB Audio Playback: Status: Stop Interface 1 Altset 1 Format: S16_LE Channels: 8 Endpoint: 6 OUT (ADAPTIVE) Rates: 44100, 48000 Interface 1 Altset 2 Format: S16_LE Channels: 2 Endpoint: 6 OUT (ADAPTIVE) Rates: 44100, 48000 Interface 1 Altset 3 Format: S16_LE Channels: 4 Endpoint: 6 OUT (ADAPTIVE) Rates: 44100, 48000 Interface 1 Altset 4 Format: S16_LE Channels: 6 Endpoint: 6 OUT (ADAPTIVE) Rates: 44100, 48000 Interface 1 Altset 5 Format: S16_LE Channels: 2 Endpoint: 6 OUT (ADAPTIVE) Rates: 96000 Capture: Status: Stop Interface 2 Altset 1 Format: S16_LE Channels: 2 Endpoint: 5 IN (ASYNC) Rates: 44100, 48000 It is able to capture 44100. Maybe it is related to following warning: [31010.643908] usb 1-1: current rate 30464 is different from the runtime rate 96000 I have tried to capture via arecord: arecord -D hw:2,0 -f cd -c 2 > ./test2.wav and VLC said it is 44100, but I don`t have microphone at the moment to test is there proper sound recorded or not. I will try it later. So, my questions: 1) How to make quirks for volume? I have try with mixer.c in sound/usb/ dir of kernel tree (4.2.0) and tried to add experimental code in volume_control_quirks function. But it seems function is not called for my device for some reason. It is more complicated that I think first. Maybe this mailing list is not proper place to ask it, than what is proper place to ask? 2) What reason can be, that I can`t record at 44,1kHz sample rate? 04.03.2016, 11:07, "Nikita Orlov" <nikitos1550@xxxxxxxxx>: > I don`t know much about it. But I can think following way as both C6206 and CM6206LX have same ID, original Windows driver can read some internal register and get such info. > I will try to find datasheets for both chips and see it. > As I know from mailing list archives reg init in quirk was done by sniffing usb traffic under windows. > But it was in 2009 year... > > 04.03.2016, 11:00, "Clemens Ladisch" <cladisch@xxxxxxxxxxxxxx>: >> Nikita Orlov wrote: >>> By the way CM6206-LX if different to CM6206. >>> CM6206 has 7.1 channels output and CM6206-LX has 5.1 channels output. >>> >>> Maybe these init: >>> static int snd_usb_cm6206_boot_quirk(struct usb_device *dev) >>> ... >>> is not sutible to -LX version, because it somehow try turn off channels >>> that are not exist. >> >> Well, how would it possible for the driver to differentiate the CM6206 >> and the CM6206-LX? >> >> Regards, >> Clemens > > -- > Nikita Orlov > Skype: nik_stet > QQ: 2717846083 > > ------------------------------------------------------------------------------ > Site24x7 APM Insight: Get Deep Visibility into Application Performance > APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month > Monitor end-to-end web transactions and take corrective actions now > Troubleshoot faster and improve end-user experience. Signup Now! > http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140 > _______________________________________________ > Alsa-user mailing list > Alsa-user@xxxxxxxxxxxxxxxxxxxxx > https://lists.sourceforge.net/lists/listinfo/alsa-user -- Nikita Orlov Skype: nik_stet QQ: 2717846083 ------------------------------------------------------------------------------ Site24x7 APM Insight: Get Deep Visibility into Application Performance APM + Mobile APM + RUM: Monitor 3 App instances at just $35/Month Monitor end-to-end web transactions and take corrective actions now Troubleshoot faster and improve end-user experience. Signup Now! http://pubads.g.doubleclick.net/gampad/clk?id=272487151&iu=/4140 _______________________________________________ Alsa-user mailing list Alsa-user@xxxxxxxxxxxxxxxxxxxxx https://lists.sourceforge.net/lists/listinfo/alsa-user