Bug 14028
Summary: | snd_usb_audio and "Slave PCM not usable" | ||
---|---|---|---|
Product: | Drivers | Reporter: | Andrzej (adk_rzeszow) |
Component: | Sound(ALSA) | Assignee: | Clemens Ladisch (clemens) |
Status: | RESOLVED CODE_FIX | ||
Severity: | high | CC: | clemens, tiwai |
Priority: | P1 | ||
Hardware: | All | ||
OS: | Linux | ||
Kernel Version: | >=2.6.20 | Subsystem: | |
Regression: | No | Bisected commit-id: | |
Attachments: | fix unsorted list constraint handling |
Description
Andrzej
2009-08-20 15:24:12 UTC
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. |