Thread (6 messages) 6 messages, 4 authors, 2012-02-02

Re: Two devices, same USB ID: one needs HID, the other doesn't. How to solve this?

From: Andy Walls <awalls@md.metrocast.net>
Date: 2012-01-13 11:16:40
Also in: linux-input

Hans Verkuil [off-list ref] wrote:
quoted hunk ↗ jump to hunk
Hi!

I've made a video4linux driver for the USB Keene FM Transmitter. See:

http://www.amazon.co.uk/Keene-Electronics-USB-FM-Transmitter/dp/B003GCHPDY/ref=sr_1_1?ie=UTF8&qid=1326450476&sr=8-1

The driver code is here:

http://git.linuxtv.org/hverkuil/media_tree.git/shortlog/refs/heads/keene

Unfortunately this device has exactly the same USB ID as the Logitech
AudioHub
USB speaker (http://www.logitech.com/en-us/439/3503).

The AudioHub has HID support for volume keys, but the FM transmitter
needs
a custom V4L2 driver instead.

I've attached the full lsusb -v output of both devices, but this is the
diff of
the two:

$ diff keene.txt audiohub.txt -u
--- keene.txt   2012-01-13 11:10:48.265399953 +0100
+++ audiohub.txt        2012-01-13 11:09:45.185398935 +0100
@@ -1,5 +1,5 @@

-Bus 007 Device 009: ID 046d:0a0e Logitech, Inc. 
+Bus 003 Device 004: ID 046d:0a0e Logitech, Inc. 
Device Descriptor:
  bLength                18
  bDescriptorType         1
@@ -12,7 +12,7 @@
  idProduct          0x0a0e 
  bcdDevice            1.00
  iManufacturer           1 HOLTEK 
-  iProduct                2 B-LINK USB Audio  
+  iProduct                2 AudioHub Speaker
  iSerial                 0 
  bNumConfigurations      1
  Configuration Descriptor:
@@ -22,9 +22,8 @@
    bNumInterfaces          3
    bConfigurationValue     1
    iConfiguration          0 
-    bmAttributes         0xa0
+    bmAttributes         0x80
      (Bus Powered)
-      Remote Wakeup
    MaxPower              500mA
    Interface Descriptor:
      bLength                 9
@@ -152,7 +151,7 @@
          bCountryCode            0 Not supported
          bNumDescriptors         1
          bDescriptorType        34 Report
-          wDescriptorLength      22
+          wDescriptorLength      31
         Report Descriptors: 
           ** UNAVAILABLE **
      Endpoint Descriptor:
As you can see, the differences are very small.

In my git tree I worked around it by adding the USB ID to the ignore
list
if the Keene driver is enabled, and ensuring that the Keene driver is
disabled by default.

But is there a better method to do this? At least the iProduct strings
are
different, is that something that can be tested in hid-core.c?

Regards,

Hans
Maybe it doesn't matter, but what do the Report Descriptors look like?

http://www.slashdev.ca/2010/05/08/get-usb-report-descriptor-with-linux/

Regards,
Andy
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help