linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Jiri Slaby <jslaby@suse.cz>
To: stable@vger.kernel.org
Cc: linux-kernel@vger.kernel.org,
	"Николай Кудрявцев" <nkudriavtsev@gmail.com>,
	"Jiri Kosina" <jkosina@suse.com>, "Jiri Slaby" <jslaby@suse.cz>
Subject: [PATCH 3.12 10/56] HID: chicony: Add support for Acer Aspire Switch 12
Date: Wed, 15 Jun 2016 09:30:34 +0200	[thread overview]
Message-ID: <37934c9107112d8547304644c648402bd1e3bf8f.1465975780.git.jslaby@suse.cz> (raw)
In-Reply-To: <352d108e14e126b7dfb5fbecde3dc78be62a5ce5.1465975780.git.jslaby@suse.cz>
In-Reply-To: <cover.1465975780.git.jslaby@suse.cz>

From: Николай Кудрявцев <nkudriavtsev@gmail.com>

3.12-stable review patch.  If anyone has any objections, please let me know.

===============

commit 9a1d78a3780e0e37eeff11b377fc5fbb01446a36 upstream.

Acer Aspire Switch 12 keyboard Chicony's controller reports too big usage
index on the 1st interface. The patch fixes the report. The work based on
solution from drivers/hid/hid-holtek-mouse.c

Bug report: https://bugzilla.kernel.org/show_bug.cgi?id=101721

Signed-off-by: Nicholas Kudriavtsev <nkudriavtsev@gmail.com>
Signed-off-by: Jiri Kosina <jkosina@suse.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
---
 drivers/hid/hid-chicony.c | 26 ++++++++++++++++++++++++++
 drivers/hid/hid-core.c    |  1 +
 drivers/hid/hid-ids.h     |  1 +
 3 files changed, 28 insertions(+)

diff --git a/drivers/hid/hid-chicony.c b/drivers/hid/hid-chicony.c
index b613d5a79684..bc3cec199fee 100644
--- a/drivers/hid/hid-chicony.c
+++ b/drivers/hid/hid-chicony.c
@@ -20,6 +20,7 @@
 #include <linux/input.h>
 #include <linux/hid.h>
 #include <linux/module.h>
+#include <linux/usb.h>
 
 #include "hid-ids.h"
 
@@ -57,10 +58,34 @@ static int ch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
 	return 1;
 }
 
+static __u8 *ch_switch12_report_fixup(struct hid_device *hdev, __u8 *rdesc,
+		unsigned int *rsize)
+{
+	struct usb_interface *intf = to_usb_interface(hdev->dev.parent);
+	
+	if (intf->cur_altsetting->desc.bInterfaceNumber == 1) {
+		/* Change usage maximum and logical maximum from 0x7fff to
+		 * 0x2fff, so they don't exceed HID_MAX_USAGES */
+		switch (hdev->product) {
+		case USB_DEVICE_ID_CHICONY_ACER_SWITCH12:
+			if (*rsize >= 128 && rdesc[64] == 0xff && rdesc[65] == 0x7f
+					&& rdesc[69] == 0xff && rdesc[70] == 0x7f) {
+				hid_info(hdev, "Fixing up report descriptor\n");
+				rdesc[65] = rdesc[70] = 0x2f;
+			}
+			break;
+		}
+
+	}
+	return rdesc;
+}
+
+
 static const struct hid_device_id ch_devices[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
 	{ }
 };
 MODULE_DEVICE_TABLE(hid, ch_devices);
@@ -68,6 +93,7 @@ MODULE_DEVICE_TABLE(hid, ch_devices);
 static struct hid_driver ch_driver = {
 	.name = "chicony",
 	.id_table = ch_devices,
+	.report_fixup = ch_switch12_report_fixup,
 	.input_mapping = ch_input_mapping,
 };
 module_hid_driver(ch_driver);
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 6ae4df439d06..05867d1d8cdc 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -1719,6 +1719,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS2) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_AK1D) },
+	{ HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_ACER_SWITCH12) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_1) },
 	{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2) },
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index 6a6b06ef31b1..555dc61d2eb3 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -224,6 +224,7 @@
 #define USB_DEVICE_ID_CHICONY_PIXART_USB_OPTICAL_MOUSE	0x1053
 #define USB_DEVICE_ID_CHICONY_WIRELESS2	0x1123
 #define USB_DEVICE_ID_CHICONY_AK1D	0x1125
+#define USB_DEVICE_ID_CHICONY_ACER_SWITCH12	0x1421
 
 #define USB_VENDOR_ID_CHUNGHWAT		0x2247
 #define USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH	0x0001
-- 
2.9.0

  parent reply	other threads:[~2016-06-15  7:45 UTC|newest]

Thread overview: 60+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-06-15  7:30 [PATCH 3.12 00/56] 3.12.61-stable review Jiri Slaby
2016-06-15  7:29 ` [PATCH 3.12 01/56] NFS: Don't attempt to decode missing directory entries Jiri Slaby
2016-06-15  7:29 ` [PATCH 3.12 02/56] IB/security: Restrict use of the write() interface Jiri Slaby
2016-06-15  7:29 ` [PATCH 3.12 03/56] HID: usbhid: quirks for Corsair RGB keyboard & mice (K70R, K95RGB, M65RGB, K70RGB, K65RGB) Jiri Slaby
2016-06-15  7:29 ` [PATCH 3.12 04/56] HID: Fix boot delay for Creative SB Omni Surround 5.1 with quirk Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 05/56] HID: microsoft: Add Surface Power Cover Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 06/56] HID: microsoft: Add Surface 3 type cover Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 07/56] HID: microsoft: add support for 3 more devices Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 08/56] HID: Add new Microsoft Type Cover 3 product ID Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 09/56] HID: microsoft: Add ID for MS Wireless Comfort Keyboard Jiri Slaby
2016-06-15  7:30 ` Jiri Slaby [this message]
2016-06-15  7:30 ` [PATCH 3.12 11/56] HID: sjoy: support Super Joy Box 4 Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 12/56] HID: wiimote: Fix wiimote mp scale linearization Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 13/56] HID: usbhid: enable NO_INIT_REPORTS quirk for Semico USB Keykoard2 Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 14/56] ARC: use ASL assembler mnemonic Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 15/56] remove directory incorrectly tries to set delete on close on non-empty directories Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 16/56] fs/cifs: correctly to anonymous authentication via NTLMSSP Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 17/56] ring-buffer: Use long for nr_pages to avoid overflow failures Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 18/56] ring-buffer: Prevent overflow of size in ring_buffer_resize() Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 19/56] mmc: mmc: Fix partition switch timeout for some eMMCs Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 20/56] ACPI / osi: Fix an issue that acpi_osi=!* cannot disable ACPICA internal strings Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 21/56] mmc: longer timeout for long read time quirk Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 22/56] [media] usbvision: revert commit 588afcc1 Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 23/56] USB: serial: keyspan: fix use-after-free in probe error path Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 24/56] USB: serial: quatech2: " Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 25/56] USB: serial: io_edgeport: fix memory leaks in attach " Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 26/56] USB: serial: io_edgeport: fix memory leaks in probe " Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 27/56] USB: serial: option: add support for Cinterion PH8 and AHxx Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 28/56] tty: vt, return error when con_startup fails Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 29/56] serial: samsung: Reorder the sequence of clock control when call s3c24xx_serial_set_termios() Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 30/56] MIPS: math-emu: Fix jalr emulation when rd == $0 Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 31/56] MIPS: Fix siginfo.h to use strict posix types Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 32/56] MIPS: ath79: make bootconsole wait for both THRE and TEMT Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 33/56] Input: uinput - handle compat ioctl for UI_SET_PHYS Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 34/56] ath5k: Change led pin configuration for compaq c700 laptop Jiri Slaby
2016-06-15  7:30 ` [PATCH 3.12 35/56] aacraid: Relinquish CPU during timeout wait Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 36/56] aacraid: Fix for aac_command_thread hang Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 37/56] cpuidle: Indicate when a device has been unregistered Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 38/56] PCI: Disable all BAR sizing for devices with non-compliant BARs Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 39/56] rtlwifi: Fix logic error in enter/exit power-save mode Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 40/56] powerpc/book3s64: Fix branching to OOL handlers in relocatable kernel Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 41/56] xen/events: Don't move disabled irqs Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 42/56] sunrpc: fix stripping of padded MIC tokens Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 43/56] drm/gma500: Fix possible out of bounds read Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 44/56] drm/fb_helper: Fix references to dev->mode_config.num_connector Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 45/56] ext4: fix hang when processing corrupted orphaned inode list Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 46/56] ext4: address UBSAN warning in mb_find_order_for_block() Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 47/56] ext4: silence UBSAN in ext4_mb_init() Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 48/56] dma-debug: avoid spinlock recursion when disabling dma-debug Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 49/56] xfs: xfs_iflush_cluster fails to abort on error Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 50/56] xfs: fix inode validity check in xfs_iflush_cluster Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 51/56] xfs: skip stale inodes " Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 52/56] [media] af9035: correct eeprom offsets Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 53/56] misc: ad525x_dpot: Fix the enabling of the "otpXen" attributes Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 54/56] pch_phub: return -ENODATA if ROM can't be mapped Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 55/56] Bluetooth: btmrvl_sdio: fix firmware activation failure Jiri Slaby
2016-06-15  7:31 ` [PATCH 3.12 56/56] Bluetooth: hci_ldisc: Fix null pointer derefence in case of early data Jiri Slaby
2016-06-15 15:34 ` [PATCH 3.12 00/56] 3.12.61-stable review Shuah Khan
2016-06-20  8:07   ` Jiri Slaby
2016-06-15 18:42 ` Guenter Roeck

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=37934c9107112d8547304644c648402bd1e3bf8f.1465975780.git.jslaby@suse.cz \
    --to=jslaby@suse.cz \
    --cc=jkosina@suse.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=nkudriavtsev@gmail.com \
    --cc=stable@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).