[alsa-devel] Jabra SPEAK 410 USB - no audio playback
I got one of these rather nice USB conference phones. It works fine with Windows/Mac. ALSA gives the following errors:
[336517.162535] usb 1-1.1: SerialNumber: 0023781E0530x010100 [336517.172419] ALSA sound/usb/stream.c:176 10:1:1 : no or invalid class specific endpoint descriptor [336517.177029] ALSA sound/usb/stream.c:176 10:2:1 : no or invalid class specific endpoint descriptor [336517.183248] ALSA sound/usb/mixer.c:795 2:0: cannot get min/max values for control 2 (id 2) [336517.183350] ALSA sound/usb/mixer.c:795 5:0: cannot get min/max values for control 2 (id 5) [336517.236151] input: Jabra SPEAK 410 USB as /devices/pci0000:00/0000:00:1a.0/usb1/1-1/1-1.1/1-1.1:1.3/input/input13
The microphone and other features are fine, but there is no playback.
I hope I've attached all possible details about this device, but if there is anything I've missed out, please let me know.
Rich.
This is alsa-info --stdout output. I had to compress it to get around the mailing list 60K limit.
Rich.
I have the same problem - the products looks great but no sound!!!
[84634.255183] usbcore: registered new interface driver hiddev [84634.365746] usbcore: registered new interface driver snd-usb-audio [84634.413374] input: Jabra SPEAK 410 USB as /devices/pci0000:00/0000:00:1d.2/usb4/4-1/4-1:1.3/input/input10 [84634.413697] generic-usb 0003:0B0E:0410.0001: input,hiddev96,hidraw0: USB HID v1.11 Device [Jabra SPEAK 410 USB] on usb-0000:00:1d.2-1/input3 [84634.413743] usbcore: registered new interface driver usbhid [84634.413747] usbhid: USB HID core driver [84635.174212] 2:1:1: endpoint lacks sample rate attribute bit, cannot set. [84635.179213] 2:2:1: endpoint lacks sample rate attribute bit, cannot set. [84635.233223] 2:2:1: endpoint lacks sample rate attribute bit, cannot set.
On Sat, Dec 10, 2011 at 04:49:26PM +0000, Tom Walder wrote:
I have the same problem - the products looks great but no sound!!!
[84634.255183] usbcore: registered new interface driver hiddev [84634.365746] usbcore: registered new interface driver snd-usb-audio [84634.413374] input: Jabra SPEAK 410 USB as /devices/pci0000:00/0000:00:1d.2/usb4/4-1/4-1:1.3/input/input10 [84634.413697] generic-usb 0003:0B0E:0410.0001: input,hiddev96,hidraw0: USB HID v1.11 Device [Jabra SPEAK 410 USB] on usb-0000:00:1d.2-1/input3 [84634.413743] usbcore: registered new interface driver usbhid [84634.413747] usbhid: USB HID core driver [84635.174212] 2:1:1: endpoint lacks sample rate attribute bit, cannot set. [84635.179213] 2:2:1: endpoint lacks sample rate attribute bit, cannot set. [84635.233223] 2:2:1: endpoint lacks sample rate attribute bit, cannot set.
The error you're seeing is a bit different from me.
Can you reply with the output of 'lsusb -v'?
I have a suspicion that Linux is fine and that the USB descriptor for the device is bad. My device has an Endpoint descriptor with bDescriptorType 0x25, which seems to be an invalid value (should be 0x5).
Rich.
The attached patch fixes USB audio support for the Jabra SPEAK 410 USB.
The problem, as I understand it, is that the device contains a Class-Specific Endpoint (CS_ENDPOINT) descriptor before the Endpoint (ENDPOINT) descriptor. The USB code all assumes that CS_ENDPOINT can only appear after ENDPOINT. Therefore the USB code divides up the interface descriptor into "stuff before ENDPOINT" (in interface->extra) and "stuff after ENDPOINT" (in interface->endpoint[0]->extra). For this device, this division does not work.
You can see lsusb for my device here: http://mailman.alsa-project.org/pipermail/alsa-devel/2011-December/047036.ht... Notice the "** UNRECOGNIZED: 07 25 01 81 02 00 00" line which is the CS_ENDPOINT descriptor.
The solution (which is a hack ...) is to also search interface->extra looking for the missing descriptor.
For me, this fully enables the functions of this device.
Rich.
On Sat, Dec 10, 2011 at 07:45:39PM +0000, Richard W.M. Jones wrote:
diff -uNrp kernel-3.1.fc16.orig/sound/usb/stream.c kernel-3.1.fc16.new/sound/usb/stream.c --- kernel-3.1.fc16.orig/sound/usb/stream.c 2011-12-10 18:03:29.658729051 +0000 +++ kernel-3.1.fc16.new/sound/usb/stream.c 2011-12-10 18:08:41.468694907 +0000 @@ -164,6 +164,12 @@ static int parse_uac_endpoint_attributes
csep = snd_usb_find_desc(alts->endpoint[0].extra, alts->endpoint[0].extralen, NULL, USB_DT_CS_ENDPOINT);
- /* Jabra SPEAK 410 USB has CS_ENDPOINT before ordinary ENDPOINT,
* which confuses the USB descriptor parsing code. Try looking
* for CS_ENDPOINT in the interface->extra - RWMJ. */
- if (!csep)
csep = snd_usb_find_desc(alts->extra, alts->extralen, NULL, USB_DT_CS_ENDPOINT);
- /* Creamware Noah has this descriptor after the 2nd endpoint */ if (!csep && altsd->bNumEndpoints >= 2) csep = snd_usb_find_desc(alts->endpoint[1].extra, alts->endpoint[1].extralen, NULL, USB_DT_CS_ENDPOINT);
Anyone? Tested on two different machines and it fixes the audio output problem on both ... If I've sent this to the wrong list please let me know.
Rich.
Richard W.M. Jones wrote:
The attached patch fixes USB audio support for the Jabra SPEAK 410 USB.
The problem, as I understand it, is that the device contains a Class-Specific Endpoint (CS_ENDPOINT) descriptor before the Endpoint (ENDPOINT) descriptor. The USB code all assumes that CS_ENDPOINT can only appear after ENDPOINT. Therefore the USB code divides up the interface descriptor into "stuff before ENDPOINT" (in interface->extra) and "stuff after ENDPOINT" (in interface->endpoint[0]->extra). For this device, this division does not work.
The solution (which is a hack ...) is to also search interface->extra looking for the missing descriptor.
The patch looks good. Please run it through checkpatch.pl and provice a Signed-off-by tag (see Documentation/SubmittingPatches).
Regards, Clemens
On Fri, Dec 16, 2011 at 02:49:05PM +0100, Clemens Ladisch wrote:
Richard W.M. Jones wrote:
The attached patch fixes USB audio support for the Jabra SPEAK 410 USB.
The problem, as I understand it, is that the device contains a Class-Specific Endpoint (CS_ENDPOINT) descriptor before the Endpoint (ENDPOINT) descriptor. The USB code all assumes that CS_ENDPOINT can only appear after ENDPOINT. Therefore the USB code divides up the interface descriptor into "stuff before ENDPOINT" (in interface->extra) and "stuff after ENDPOINT" (in interface->endpoint[0]->extra). For this device, this division does not work.
The solution (which is a hack ...) is to also search interface->extra looking for the missing descriptor.
The patch looks good. Please run it through checkpatch.pl and provice a Signed-off-by tag (see Documentation/SubmittingPatches).
Sorry, I should have followed up on this list ...
Tom (in the CC line) opened a bug with Jabra, and they have issued a firmware update. Unfortunately this update requires some Windows software to run. I applied this, and it does appear to fix the audio playback problem, though curiously it doesn't completely fix the ENDPOINT/CS_ENDPOINT problem, so who knows what's really going on there.
Anyway, should you want the update it is here:
https://bugzilla.redhat.com/show_bug.cgi?id=766714#c1
Thanks Tom!
Rich.
participants (3)
-
Clemens Ladisch
-
Richard W.M. Jones
-
Tom Walder