I've got an old USB PixelView webcam, detected by system as: Bus 002 Device 002: ID 0471:0304 Philips Askey VC010 WebCam [pwc] Output from dmesg: pwc: Philips webcam module version 10.0.13 loaded. pwc: Supports Philips PCA645/646, PCVC675/680/690, PCVC720[40]/730/740/750 & PCVC830/840. pwc: Also supports the Askey VC010, various Logitech Quickcams, Samsung MPC-C10 and MPC-C30, pwc: the Creative WebCam 5 & Pro Ex, SOTEC Afina Eye and Visionite VCS-UC300 and VCS-UM100. pwc: Askey VC010 type 2 USB webcam detected. pwc: Registered as /dev/video0. usbcore: registered new interface driver snd-usb-audio To make everything work, I need two kernel modules: pwc (for image capture) and snd-usb-audio (integrated microphone). Everything worked fine, until kernel version 2.6.20. Now, integrated microphone is unusable. When connecting the camera, everything behaves just like on 2.6.18 - dmesg reports loading of snd-usb-audio. But when I try to use e.g. Skype, I've got an error "Problem with capture device". Skype in the console returns many times: ALSA lib pcm_params.c:2152:(snd_pcm_hw_refine_slave) Slave PCM not usable In the dmesg there's nothing related to audio device at the same time. No matter, what ALSA version I compile - it seems to be a kernel problem (I also submitted this bug to ALSA bugtracker, but without any response).
What shows /proc/asound/card*/stream#* files? It's more likely a problem of alsa-lib default configuration for usb-audio devices than the driver issue. Possibly the format dmix/dsnoop alsa-lib plugins require isn't supported on your device.
/proc/asound/card1/stream0: USB Device 0x471:0x304 at usb-0000:00:03.1-2, full speed : USB Audio Capture: Status: Stop Interface 2 Altset 1 Format: 0x0 (8 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 48000 Interface 2 Altset 2 Format: 0x2 (16 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 48000 Interface 2 Altset 3 Format: 0x20 (24 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 48000 Interface 2 Altset 4 Format: 0x0 (8 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 44100 Interface 2 Altset 5 Format: 0x2 (16 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 44100 Interface 2 Altset 6 Format: 0x20 (24 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 44100 Interface 2 Altset 7 Format: 0x0 (8 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 32000 Interface 2 Altset 8 Format: 0x2 (16 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 32000 Interface 2 Altset 9 Format: 0x20 (24 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 32000 Interface 2 Altset 10 Format: 0x0 (8 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 24000 Interface 2 Altset 11 Format: 0x2 (16 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 24000 Interface 2 Altset 12 Format: 0x20 (24 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 24000 Interface 2 Altset 13 Format: 0x0 (8 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 22050 Interface 2 Altset 14 Format: 0x2 (16 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 22050 Interface 2 Altset 15 Format: 0x20 (24 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 22050 Interface 2 Altset 16 Format: 0x0 (8 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 16000 Interface 2 Altset 17 Format: 0x2 (16 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 16000 Interface 2 Altset 18 Format: 0x20 (24 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 16000 Interface 2 Altset 19 Format: 0x0 (8 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 12000 Interface 2 Altset 20 Format: 0x2 (16 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 12000 Interface 2 Altset 21 Format: 0x20 (24 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 12000 Interface 2 Altset 22 Format: 0x0 (8 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 11025 Interface 2 Altset 23 Format: 0x2 (16 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 11025 Interface 2 Altset 24 Format: 0x20 (24 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 11025 Interface 2 Altset 25 Format: 0x0 (8 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 8000 Interface 2 Altset 26 Format: 0x2 (16 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 8000 Interface 2 Altset 27 Format: 0x20 (24 bits) Channels: 1 Endpoint: 5 IN (ASYNC) Rates: 8000 ------------------ I've got two kernels in my system now: 2.6.18 and 2.6.20. On the first my device works correctly with the same alsa-lib which makes problems on 2.6.20. I tried to compile latest alsa-lib, but nothing changed.
This patch might be the culprit: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=a79eee8d3d8a80c37d235e1181d67c3705c7bbfe These patches fix things, but went in after 2.6.20: http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=8fec560d9beb3957bf45ac93b1c0c616abd77a07 http://git.kernel.org/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commitdiff;h=0412558c873f716efe902b397af0653a550f7341 Andrzej, could you check a newer kernel (2.6.29 or later)?
I checked 2.6.30-1-686 from Debian Squeeze and I can also confirm this bug.
Do the following commands work? arecord -D hw:1 -f dat -c 1 something.wav arecord -D default:1 -f dat -c 1 something.wav
adk@linux:~$ arecord -D hw:1 -f dat -c 1 something.wav Recording WAVE 'something.wav' : Signed 16 bit Little Endian, Rate 48000 Hz, Mono arecord: set_params:882: Broken configuration for this PCM: no configurations available adk@linux:~$ arecord -D default:1 -f dat -c 1 something.wav ALSA lib pcm_direct.c:866:(snd1_pcm_direct_initialize_slave) snd_pcm_hw_params_any failed ALSA lib pcm_dsnoop.c:604:(snd_pcm_dsnoop_open) unable to initialize slave arecord: main:550: audio open error: Bad argument I also executed these commands on 2.6.18 kernel and both record a file, which could be correctly played by mplayer.
> $ arecord -D hw:1 ... > arecord: Broken configuration for this PCM: no configurations available OK, this is definitely a driver bug. Please uncomment the "#define HW_CONST_DEBUG" in sound/usb/usbaudio.c, recompile the driver, and show the debug message in the system log when you try to run arecord on hw:1. BTW: Your /proc/asound/card1/stream0 is from a 2.6.30 kernel.
usbcore: registered new interface driver snd-usb-audio hw_rule_rate: (8000,48000) --> (8000, 48000) (changed = 0) hw_rule_channels: (1,1) --> (1, 1) (changed = 0) hw_rule_format: 5:1 --> 5:1 (changed = 0) > BTW: Your /proc/asound/card1/stream0 is from a 2.6.30 kernel. That sounds strange - I am completely sure it was from 2.6.20 (but with self-compiled alsa-driver 1.0.20).
> --> (8000, 48000) (changed = 0) > --> (1, 1) (changed = 0) > --> 5:1 (changed = 0) This looks OK, but the arecord message indicates that these values did not end up in userspace. Please change "#undef RULES_DEBUG" to "#define RULES_DEBUG" in sound/core/pcm_native.c and show that debug output. > it was from 2.6.20 (but with self-compiled alsa-driver 1.0.20) The drivers from the alsa-driver package replace the kernel drivers. Did you ever test with the 2.6.20 drivers?
> Did you ever test with the 2.6.20 drivers? Yes, just after kernel compilation, but with the same result - so I decided to compile ALSA again, from latest source. After changes debug output shows: ACCESS = 00000000ffffffffffffffff -> 0000000000000009 FORMAT = 00000000ffffffffffffffff -> 0000000000010005 SUBFORMAT = 00000000ffffffffffffffff -> 0000000000000001 SAMPLE_BITS = [0 4294967295] -> [0 4294967295] FRAME_BITS = [0 4294967295] -> [0 4294967295] CHANNELS = [0 4294967295] -> [1 1] RATE = [0 4294967295] -> [8000 48000] PERIOD_TIME = [0 4294967295] -> [1000 4294967295] PERIOD_SIZE = [0 4294967295] -> [0 4294967295] PERIOD_BYTES = [0 4294967295] -> [64 524288] PERIODS = [0 4294967295] -> [2 1024] BUFFER_TIME = [0 4294967295] -> [0 4294967295] BUFFER_SIZE = [0 4294967295] -> [0 4294967295] BUFFER_BYTES = [0 4294967295] -> [64 1048576] TICK_TIME = [0 4294967295] -> [0 4294967295] Rule 0 [f89ca589]: FORMAT = 5 -> 5 Rule 1 [f89ca40f]: SAMPLE_BITS = [0 4294967295] -> [8 24] Rule 2 [f89ca54e]: SAMPLE_BITS = [8 24] -> [8 24] Rule 3 [f89ca513]: FRAME_BITS = [0 4294967295] -> [8 24] Rule 4 [f89ca4d0]: FRAME_BITS = [8 24] -> [8 24] Rule 5 [f89ca4d0]: FRAME_BITS = [8 24] -> [8 24] Rule 6 [f89ca54e]: CHANNELS = [1 1] -> [1 1] Rule 7 [f89ca4d0]: RATE = [8000 48000] -> [8000 48000] Rule 8 [f89ca4d0]: RATE = [8000 48000] -> [8000 48000] Rule 9 [f89ca54e]: PERIODS = [2 1024] -> [2 1024] Rule 10 [f89ca54e]: PERIOD_SIZE = [0 4294967295] -> [0 2147483647] Rule 11 [f89ca4d0]: PERIOD_SIZE = [0 2147483647] -> [22 524288] Rule 12 [f89ca48d]: PERIOD_SIZE = [22 524288] -> [22 524288] Rule 13 [f89ca513]: BUFFER_SIZE = [0 4294967295] -> [44 536870912] Rule 14 [f89ca4d0]: BUFFER_SIZE = [44 536870912] -> [44 1048576] Rule 15 [f89ca48d]: BUFFER_SIZE = [44 1048576] -> [44 1048576] Rule 16 [f89ca48d]: PERIOD_BYTES = [64 524288] -> [64 524288] Rule 17 [f89ca48d]: BUFFER_BYTES = [64 1048576] -> [64 1048576] Rule 18 [f89ca4d0]: PERIOD_TIME = [1000 4294967295] -> [1000 65536000] Rule 19 [f89ca4d0]: BUFFER_TIME = [0 4294967295] -> (916 131072000] Rule 20 [f8c01ba9]: RATE = [8000 48000]<7>hw_rule_rate: (8000,48000) --> (8000, 48000) (changed = 0) -> [8000 48000] Rule 21 [f8c01a73]: CHANNELS = [1 1]<7>hw_rule_channels: (1,1) --> (1, 1) (changed = 0) -> [1 1] Rule 22 [f8c0196c]: FORMAT = 5<7>hw_rule_format: 5:1 --> 5:1 (changed = 0) -> 5 Rule 23 [f89cd557]: RATE = [8000 48000] -> empty
Created attachment 22826 [details] fix unsorted list constraint handling > Rule 23 [f89cd557]: RATE = [8000 48000] -> empty So the rate list created by snd_usb_pcm_check_knot() does not work. Please try the patch.
Your patch seems to be working :)
If you want to be credited, please provide your e-mail address for the Reported-and-tested-by tag.
adkadk at gmail dot com Thanks for your help.