diff mbox

hid: usbhid: add quirk for SB arena headset v2

Message ID 1352145945-8035-1-git-send-email-chris.j.arges@canonical.com (mailing list archive)
State New, archived
Delegated to: Jiri Kosina
Headers show

Commit Message

Chris J Arges Nov. 5, 2012, 8:05 p.m. UTC
When an SB Arena USB headset is plugged in, it registers the volume
keys on the headset as a keyboard and continually sends events causing
issues with normal keyboard input. This quirk disables the volume keys.

BugLink: http://bugs.launchpad.net/bugs/1007575
Signed-off-by: Chris J Arges <chris.j.arges@canonical.com>
---
 drivers/hid/hid-ids.h           |    1 +
 drivers/hid/usbhid/hid-quirks.c |    1 +
 2 files changed, 2 insertions(+)

Comments

Jiri Kosina Nov. 5, 2012, 8:18 p.m. UTC | #1
On Mon, 5 Nov 2012, Chris J Arges wrote:

> When an SB Arena USB headset is plugged in, it registers the volume
> keys on the headset as a keyboard and continually sends events causing
> issues with normal keyboard input. This quirk disables the volume keys.

I don't know how the device looks like, but wouldn't it make more sense to 
actually remap the bogus keys it's sending to produce KEY_VOLUMEUP and 
KEY_VOLUMEDOWN?
Chris J Arges Nov. 5, 2012, 9:32 p.m. UTC | #2
On 11/05/2012 02:18 PM, Jiri Kosina wrote:
> On Mon, 5 Nov 2012, Chris J Arges wrote:
> 
>> When an SB Arena USB headset is plugged in, it registers the volume
>> keys on the headset as a keyboard and continually sends events causing
>> issues with normal keyboard input. This quirk disables the volume keys.
> 
> I don't know how the device looks like, but wouldn't it make more sense to 
> actually remap the bogus keys it's sending to produce KEY_VOLUMEUP and 
> KEY_VOLUMEDOWN?
> 

Yes, if I can track this hardware down or get data I'll fix it like
this. This happened to be a do-no harm fix for the following bug:
https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/1007575

Thanks for the feedback.
--chris j arges
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Jiri Kosina Nov. 6, 2012, 11:14 a.m. UTC | #3
On Mon, 5 Nov 2012, Chris J Arges wrote:

> >> When an SB Arena USB headset is plugged in, it registers the volume
> >> keys on the headset as a keyboard and continually sends events causing
> >> issues with normal keyboard input. This quirk disables the volume keys.
> > 
> > I don't know how the device looks like, but wouldn't it make more sense to 
> > actually remap the bogus keys it's sending to produce KEY_VOLUMEUP and 
> > KEY_VOLUMEDOWN?
> > 
> 
> Yes, if I can track this hardware down or get data I'll fix it like
> this. This happened to be a do-no harm fix for the following bug:
> https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/1007575

You should be able to obtain it easily either by running evtest on 
corresponding /dev/input/eventX node, or by looking into debugfs 
hid/<device>/events file.
Chris J Arges Nov. 21, 2012, 3:29 p.m. UTC | #4
On 11/06/2012 05:14 AM, Jiri Kosina wrote:
> On Mon, 5 Nov 2012, Chris J Arges wrote:
> 
>>>> When an SB Arena USB headset is plugged in, it registers the volume
>>>> keys on the headset as a keyboard and continually sends events causing
>>>> issues with normal keyboard input. This quirk disables the volume keys.
>>>
>>> I don't know how the device looks like, but wouldn't it make more sense to 
>>> actually remap the bogus keys it's sending to produce KEY_VOLUMEUP and 
>>> KEY_VOLUMEDOWN?
>>>
>>
>> Yes, if I can track this hardware down or get data I'll fix it like
>> this. This happened to be a do-no harm fix for the following bug:
>> https://bugs.launchpad.net/ubuntu/+source/xorg-server/+bug/1007575
> 
> You should be able to obtain it easily either by running evtest on 
> corresponding /dev/input/eventX node, or by looking into debugfs 
> hid/<device>/events file.
> 

Hi,
I've been able to track down this particular headset and have been
trying to fix it so that it doesn't interfere with normal clicking.
I've setup a script to remove and reinsert the usbhid module and then
run evtest on that event and found the following:

Event: time 1353511306.254194, type 4 (EV_MSC), code 4 (MSC_SCAN), value
c00e9
Event: time 1353511306.254199, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP),
value 1
Event: time 1353511306.254227, type 4 (EV_MSC), code 4 (MSC_SCAN), value
ff010002
Event: time 1353511306.254229, type 1 (EV_KEY), code 259 (BTN_3), value 1
Event: time 1353511306.254241, -------------- SYN_REPORT ------------
Event: time 1353511306.414246, type 4 (EV_MSC), code 4 (MSC_SCAN), value
c00e9
Event: time 1353511306.414250, type 1 (EV_KEY), code 115 (KEY_VOLUMEUP),
value 0
Event: time 1353511306.414283, -------------- SYN_REPORT ------------


Whenever the EV_KEY event BTN_3 code occurs, then I can no longer click
on various items. I'm assuming the input system thinks that a 3rd mouse
button is down and never released.

Where would be the proper place to quirk this particular headset? The
goal would be to still have the EV_MSC/EV_KEY events for proper codes
such as KEY_VOLUMEUP and KEY_VOLUMEDOWN, but ignore BTN_3 events since
the headset device only has two buttons for adjusting volume.

I have actually seen a few other bug reports of other devices that have
this quirk so I think this might affect more than one device; however at
this point I only have one that I can verify myself.

Thanks,
--chris j arges

--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 269b509..1936414 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -223,6 +223,7 @@ 
 
 #define USB_VENDOR_ID_CREATIVELABS	0x041e
 #define USB_DEVICE_ID_PRODIKEYS_PCMIDI	0x2801
+#define USB_DEVICE_ID_SB_ARENA_HEADSET	0x0403
 
 #define USB_VENDOR_ID_CVTOUCH		0x1ff7
 #define USB_DEVICE_ID_CVTOUCH_SCREEN	0x0013
diff --git a/drivers/hid/usbhid/hid-quirks.c b/drivers/hid/usbhid/hid-quirks.c
index 11c7932..4bee3b7 100644
--- a/drivers/hid/usbhid/hid-quirks.c
+++ b/drivers/hid/usbhid/hid-quirks.c
@@ -68,6 +68,7 @@  static const struct hid_blacklist {
 	{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_PEDALS, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295, HID_QUIRK_NOGET },
+	{ USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_SB_ARENA_HEADSET, HID_QUIRK_IGNORE },
 	{ USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700, HID_QUIRK_NOGET },
 	{ USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28, HID_QUIRK_NOGET },