Received: by 10.192.165.156 with SMTP id m28csp448538imm; Mon, 16 Apr 2018 03:06:11 -0700 (PDT) X-Google-Smtp-Source: AIpwx49I7DAIYcsguIWmcChTK5glsBKEIQu04ovm2pVMQzS9XvoT2sG6N+9wcSGI34H81vNJhIO0 X-Received: by 2002:a17:902:968d:: with SMTP id n13-v6mr14439410plp.168.1523873171715; Mon, 16 Apr 2018 03:06:11 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1523873171; cv=none; d=google.com; s=arc-20160816; b=dh1dYoT/yuiUmgErLqAATH+BRVcEufM9WsSz3m/GPVGo1DJEHsUUqRYgu/+La4bBlK PgJZUXI/eXamTElcYF3dhbFotZhZq5dWbam9pfuRsgX5lnEPhEUAAqUepnGLQRT3o2pU Y5n4sKAHB5PNZ0Pj/KEZod/mmdDV6SeJCxzLSMEdAAYKBOxWgy8hM83cZBqkCdA4s3PY /4OuM9dRDbQMsWCh6LTNkuaY9RqCBd6ablh1Qv/z2h4R0VCUeEcv4sb0ENeJY/e4FDJe p3ByayuXgBQk2qKgSttLLxK8kWFNULNAHkuqUAVqQpJ5rpxUbjDNUk1ct8ge++9oAFGV 7KfA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:cc:to:subject:message-id:date:from :references:in-reply-to:mime-version:arc-authentication-results; bh=NkpWp5UzWFws1FdjUnyL/vZzEP1+4JfkxSMVPQ8mBQM=; b=lWeta5cVTn/KucBFqBM44gcRDS6AX2fAhgT4m4szc8PHpCD19AqLFMLktQAP7S2s+y G/37hQN/kNYBNiBwy+TH9upg0YOrnoELXn24cUA//p1osUAoWd+Y4z4V94NwmTwzKN2V GC4dj9ZEAMwK/SxpqJeT6sOveZWqO4eUvGOTPrMC4EtbrApCtaq8alkHCsTXW0zVy7Mq BwxHxUwiOH1Iie5oliwg6rb+lveO/QXHcANW4NSvzd2R6GMcU8/2QWWuuVz8M9b1E/2O JYvrflRUOovn+VdVk3YKrul3u3jthrMJN2hG2xKsk9d45cIdzn12kummek4bRfQ6ECY+ eUMQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id l5-v6si11132298pls.144.2018.04.16.03.05.57; Mon, 16 Apr 2018 03:06:11 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=redhat.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753918AbeDPKCF (ORCPT + 99 others); Mon, 16 Apr 2018 06:02:05 -0400 Received: from mail-qk0-f170.google.com ([209.85.220.170]:34152 "EHLO mail-qk0-f170.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753800AbeDPKCC (ORCPT ); Mon, 16 Apr 2018 06:02:02 -0400 Received: by mail-qk0-f170.google.com with SMTP id g7so15896529qkm.1 for ; Mon, 16 Apr 2018 03:02:02 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from:date :message-id:subject:to:cc; bh=NkpWp5UzWFws1FdjUnyL/vZzEP1+4JfkxSMVPQ8mBQM=; b=jV14zMrl1oRvhxz79wlkgoRWwb0F+wysC5uoLFn+LFqfkqKR5neh2rtVnh76Cj64jG bttG16IYvI3BkZJHie0WtxtEYSfnCdoq6KmJiPhPgB+4czeX9a0MprEN+P74ks+rCWsd Km4jzpKCJK/RV6l171LfEMVEaKjulLThPCiQCPx8OVgH36zz0qx1Ppw5OnQqr72+AIjI L7q0S3Z1ZFFGGEimNg76GABprENOuYFBeJiKhymi4HAftKjDlMYDTIMgrOscv2Qvh6C7 IoO5DmtnUBCY03ePfw7TNfaCTWCi6ud93p4NQXJnUeh32Gbw4FnqglPrYqh/HkGCC7An slbQ== X-Gm-Message-State: ALQs6tDqs3ajTylyKLR+KzDeRezY+ep85L0pimE77a7TWouKdNlivwDR +oJHZxP3z7dkvuuH5O4xdZ5TkcoBXIGk6HwRysOwsQ== X-Received: by 10.55.80.6 with SMTP id e6mr16542114qkb.191.1523872921970; Mon, 16 Apr 2018 03:02:01 -0700 (PDT) MIME-Version: 1.0 Received: by 10.200.22.131 with HTTP; Mon, 16 Apr 2018 03:02:01 -0700 (PDT) In-Reply-To: <20180411094953.12053-1-rombert@apache.org> References: <20180411094953.12053-1-rombert@apache.org> From: Benjamin Tissoires Date: Mon, 16 Apr 2018 12:02:01 +0200 Message-ID: Subject: Re: [PATCH v5] Fix modifier keys for Redragon Asura Keyboard To: Robert Munteanu Cc: Jiri Kosina , lkml , "open list:HID CORE LAYER" Content-Type: text/plain; charset="UTF-8" Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Robert, On Wed, Apr 11, 2018 at 11:49 AM, Robert Munteanu wrote: > Changelog: > > - v2: modifier keys work, some combinations are still troublesome > - v3: style cleanup, rebase on top of 4.14 > - v4: remove most debugging calls, make init info useful for user, > rebased on top of 4.15 > - v5: fix the HID descriptor as suggested by Benjamin Tissoires, > use existing USB vendor id, update comment style, add SPDX > license identifier, rename to hid-redragon, stop registering > two input devices, rebased on top of 4.16 As Jiri said, please provide a correct commit message. I have a few nitpicks in the driver, v6 should be fine: > > Signed-off-by: Robert Munteanu > --- > drivers/hid/Kconfig | 7 ++++ > drivers/hid/Makefile | 1 + > drivers/hid/hid-ids.h | 1 + > drivers/hid/hid-quirks.c | 3 ++ > drivers/hid/hid-redragon.c | 89 ++++++++++++++++++++++++++++++++++++++++++++++ > 5 files changed, 101 insertions(+) > create mode 100644 drivers/hid/hid-redragon.c > > diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig > index 19c499f5623d..1125e4813716 100644 > --- a/drivers/hid/Kconfig > +++ b/drivers/hid/Kconfig > @@ -560,6 +560,13 @@ config HID_MAYFLASH > Say Y here if you have HJZ Mayflash PS3 game controller adapters > and want to enable force feedback support. > > +config HID_REDRAGON > + tristate "Redragon keyboards" > + depends on HID > + default !EXPERT > + ---help--- > + Support for Redragon keyboards that need fix-ups to work properly. > + > config HID_MICROSOFT > tristate "Microsoft non-fully HID-compliant devices" > depends on HID > diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile > index eb13b9e92d85..a36f3f40ba63 100644 > --- a/drivers/hid/Makefile > +++ b/drivers/hid/Makefile > @@ -84,6 +84,7 @@ hid-picolcd-$(CONFIG_DEBUG_FS) += hid-picolcd_debugfs.o > > obj-$(CONFIG_HID_PLANTRONICS) += hid-plantronics.o > obj-$(CONFIG_HID_PRIMAX) += hid-primax.o > +obj-$(CONFIG_HID_REDRAGON) += hid-redragon.o > obj-$(CONFIG_HID_RETRODE) += hid-retrode.o > obj-$(CONFIG_HID_ROCCAT) += hid-roccat.o hid-roccat-common.o \ > hid-roccat-arvo.o hid-roccat-isku.o hid-roccat-kone.o \ > diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h > index 9454ac134ce2..41a64d0e91f9 100644 > --- a/drivers/hid/hid-ids.h > +++ b/drivers/hid/hid-ids.h > @@ -599,6 +599,7 @@ > #define USB_VENDOR_ID_JESS 0x0c45 > #define USB_DEVICE_ID_JESS_YUREX 0x1010 > #define USB_DEVICE_ID_ASUS_MD_5112 0x5112 > +#define USB_DEVICE_ID_REDRAGON_ASURA 0x760b > > #define USB_VENDOR_ID_JESS2 0x0f30 > #define USB_DEVICE_ID_JESS2_COLOR_RUMBLE_PAD 0x0111 > diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c > index e92b77fa574a..5f1253f1739a 100644 > --- a/drivers/hid/hid-quirks.c > +++ b/drivers/hid/hid-quirks.c > @@ -557,6 +557,9 @@ static const struct hid_device_id hid_have_special_driver[] = { > #if IS_ENABLED(CONFIG_HID_PRODIKEYS) > { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_PRODIKEYS_PCMIDI) }, > #endif > +#if IS_ENABLED(CONFIG_HID_REDRAGON) > + { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_REDRAGON_ASURA) }, > +#endif Please drop this hunk. v4.16 should work without changing hid_have_special_driver. This way, you will be sure that an initramfs that doesn't include hid-redragon.ko will allo people to type their LUKS password. > #if IS_ENABLED(CONFIG_HID_RETRODE) > { HID_USB_DEVICE(USB_VENDOR_ID_FUTURE_TECHNOLOGY, USB_DEVICE_ID_RETRODE2) }, > #endif > diff --git a/drivers/hid/hid-redragon.c b/drivers/hid/hid-redragon.c > new file mode 100644 > index 000000000000..ff98a5dbb8e2 > --- /dev/null > +++ b/drivers/hid/hid-redragon.c > @@ -0,0 +1,89 @@ > +/* > + * HID driver for Redragon keyboards > + * > + * Copyright (c) 2017 Robert Munteanu > + * SPDX-License-Identifier: GPL-2.0 > + */ > + > +/* > + * 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 you probably don't need input.h > +#include > +#include > +#include log2.h? I am not sure you need it either > +#include probably drop this one too. > + > +#include "hid-ids.h" > + > + > +/* > + * The Redragon Asura keyboard sends an incorrect HID descriptor. > + * At byte 100 it contains > + * > + * 0x81, 0x00 > + * > + * which is Input (Data, Arr, Abs), but it should be > + * > + * 0x81, 0x02 > + * > + * which is Input (Data, Var, Abs), which is consistent with the way > + * key codes are generated. > + */ > + > +static __u8 *redragon_report_fixup(struct hid_device *hdev, __u8 *rdesc, > + unsigned int *rsize) > +{ > + if (*rsize >= 102 && rdesc[100] == 0x81 && rdesc[101] == 0x00) { > + dev_info(&hdev->dev, "Fixing Redragon ASURA report descriptor.\n"); > + rdesc[101] = 0x02; > + } > + > + return rdesc; > +} > + > +static int redragon_probe(struct hid_device *dev, > + const struct hid_device_id *id) > +{ > + int ret; > + > + ret = hid_parse(dev); > + if (ret) { > + hid_err(dev, "parse failed\n"); > + return ret; > + } > + > + /* do not register unused input device */ > + if (dev->maxapplication == 1) > + return 0; > + > + ret = hid_hw_start(dev, HID_CONNECT_DEFAULT); > + if (ret) { > + hid_err(dev, "hw start failed\n"); > + return ret; > + } > + > + return 0; > +} > +static const struct hid_device_id redragon_devices[] = { > + {HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_REDRAGON_ASURA)}, > + {} > +}; > + > +MODULE_DEVICE_TABLE(hid, redragon_devices); > + > +static struct hid_driver redragon_driver = { > + .name = "redragon", > + .id_table = redragon_devices, > + .report_fixup = redragon_report_fixup, > + .probe = redragon_probe > +}; > + > +module_hid_driver(redragon_driver); > + > +MODULE_LICENSE("GPL"); The SPDX header says GPL-v2. And IIRC if there is the SPDX header you can drop the MODULE_LICENSE (not entirely sure though). Cheers, Benjamin > -- > 2.16.3 >