From patchwork Fri Jun 18 09:11:22 2010 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Richard Nauber X-Patchwork-Id: 106817 X-Patchwork-Delegate: jikos@jikos.cz Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by demeter.kernel.org (8.14.3/8.14.3) with ESMTP id o5I9BRAw002189 for ; Fri, 18 Jun 2010 09:11:27 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758387Ab0FRJL1 (ORCPT ); Fri, 18 Jun 2010 05:11:27 -0400 Received: from fg-out-1718.google.com ([72.14.220.157]:40856 "EHLO fg-out-1718.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1756281Ab0FRJL0 (ORCPT ); Fri, 18 Jun 2010 05:11:26 -0400 Received: by fg-out-1718.google.com with SMTP id l26so325055fgb.1 for ; Fri, 18 Jun 2010 02:11:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=googlemail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from :user-agent:mime-version:to:subject:x-enigmail-version:content-type :content-transfer-encoding; bh=Sm52J3sMwCPkNXhN7tGmSvDXiTbKCHP+zF+zypHsKVM=; b=l2JcOBCkA5zQkfUti8xnunZylLgU2IHydcdLqlOZNPv1ybYPkH5CafPKet6fOfM40R nBUWv4UvlIVhtC2z1z7w4t25YtVZRNHaAcq3gSdE4qeuDEV6vYznIe7MTzBCBQirttBJ dwf1NWuMbRtOeMhvAtFvmx3/TuUHErAXXTJB4= DomainKey-Signature: a=rsa-sha1; c=nofws; d=googlemail.com; s=gamma; h=message-id:date:from:user-agent:mime-version:to:subject :x-enigmail-version:content-type:content-transfer-encoding; b=KPgcGF8qWI/nDu9JuexoqVqIDqT3HLXT4r+jeXQmaNxe45CAafEa2gEiAD0WMw4pWs ftSHIUpTQsC9o5WeOFIEvhJSSymBGcLeLwjdnjhnEIlgYHfBiLeGw0t8+tauMlk3m4QG CQqpPeR5384A4508fiQxCmBNSdWcIE1vvsqgk= Received: by 10.102.237.8 with SMTP id k8mr204380muh.41.1276852284589; Fri, 18 Jun 2010 02:11:24 -0700 (PDT) Received: from [192.168.0.48] (p54B64B84.dip.t-dialin.net [84.182.75.132]) by mx.google.com with ESMTPS id 12sm996305muq.33.2010.06.18.02.11.23 (version=TLSv1/SSLv3 cipher=RC4-MD5); Fri, 18 Jun 2010 02:11:24 -0700 (PDT) Message-ID: <4C1B383A.2010309@googlemail.com> Date: Fri, 18 Jun 2010 11:11:22 +0200 From: Richard Nauber User-Agent: Mozilla/5.0 (X11; U; Linux i686; en-US; rv:1.9.1.9) Gecko/20100423 Thunderbird/3.0.4 MIME-Version: 1.0 To: linux-input@vger.kernel.org Subject: [PATCH] HID: Fix reporting of nonexistent HWheel for Elecom BM084 (bluetooth mouse). X-Enigmail-Version: 1.0.1 Sender: linux-input-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-input@vger.kernel.org X-Greylist: IP, sender and recipient auto-whitelisted, not delayed by milter-greylist-4.2.3 (demeter.kernel.org [140.211.167.41]); Fri, 18 Jun 2010 09:11:28 +0000 (UTC) diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index 132278f..0eac193 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig @@ -148,6 +148,12 @@ config HID_EGALAX ---help--- Support for the eGalax dual-touch panel. +config HID_ELECOM + tristate "ELECOM" + depends on USB_HID + ---help--- + Support for the ELECOM BM084 (bluetooth mouse). + config HID_EZKEY tristate "Ezkey" if EMBEDDED depends on USB_HID diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile index 987fa06..2ec042f 100644 --- a/drivers/hid/Makefile +++ b/drivers/hid/Makefile @@ -32,6 +32,7 @@ obj-$(CONFIG_HID_CHICONY) += hid-chicony.o obj-$(CONFIG_HID_CYPRESS) += hid-cypress.o obj-$(CONFIG_HID_DRAGONRISE) += hid-drff.o obj-$(CONFIG_HID_EGALAX) += hid-egalax.o +obj-$(CONFIG_HID_ELECOM) += hid-elecom.o obj-$(CONFIG_HID_EZKEY) += hid-ezkey.o obj-$(CONFIG_HID_GYRATION) += hid-gyration.o obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o diff --git a/drivers/hid/hid-elecom.c b/drivers/hid/hid-elecom.c new file mode 100644 index 0000000..7a40878 --- /dev/null +++ b/drivers/hid/hid-elecom.c @@ -0,0 +1,57 @@ +/* + * HID driver for Elecom BM084 (bluetooth mouse). + * Removes a non-existing horizontal wheel from + * the HID descriptor. + * (This module is based on "hid-ortek".) + * + * Copyright (c) 2010 Richard Nauber + */ + +/* + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the Free + * Software Foundation; either version 2 of the License, or (at your option) + * any later version. + */ + +#include +#include +#include + +#include "hid-ids.h" + +static void elecom_report_fixup(struct hid_device *hdev, __u8 *rdesc, + unsigned int rsize) +{ + if (rsize >= 48 && rdesc[46] == 0x05 && rdesc[47] == 0x0c) { + dev_info(&hdev->dev, "Fixing up Elecom BM084 " + "report descriptor.\n"); + rdesc[47] = 0x00; + } +} + +static const struct hid_device_id elecom_devices[] = { + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084)}, + { } +}; +MODULE_DEVICE_TABLE(hid, elecom_devices); + +static struct hid_driver elecom_driver = { + .name = "elecom", + .id_table = elecom_devices, + .report_fixup = elecom_report_fixup +}; + +static int __init elecom_init(void) +{ + return hid_register_driver(&elecom_driver); +} + +static void __exit elecom_exit(void) +{ + hid_unregister_driver(&elecom_driver); +} + +module_init(elecom_init); +module_exit(elecom_exit); +MODULE_LICENSE("GPL"); diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 6af77ed..55cecb7 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -186,6 +186,9 @@ #define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER 0x0001 #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH 0x480d +#define USB_VENDOR_ID_ELECOM 0x056e +#define USB_DEVICE_ID_ELECOM_BM084 0x0061 + #define USB_VENDOR_ID_ELO 0x04E7 #define USB_DEVICE_ID_ELO_TS2700 0x0020