Skip to content

Commit

Permalink
Merge branch 'for-4.18/hid-redragon' into for-linus
Browse files Browse the repository at this point in the history
Redragon Asura support from Robert Munteanu
  • Loading branch information
Jiri Kosina committed Jun 8, 2018
2 parents c1144d2 + 85455dd commit 79b83b0
Show file tree
Hide file tree
Showing 4 changed files with 95 additions and 0 deletions.
7 changes: 7 additions & 0 deletions drivers/hid/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -575,6 +575,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
Expand Down
1 change: 1 addition & 0 deletions drivers/hid/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,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 \
Expand Down
1 change: 1 addition & 0 deletions drivers/hid/hid-ids.h
Original file line number Diff line number Diff line change
Expand Up @@ -615,6 +615,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
Expand Down
86 changes: 86 additions & 0 deletions drivers/hid/hid-redragon.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
/*
* 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 <linux/device.h>
#include <linux/hid.h>
#include <linux/module.h>

#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");

0 comments on commit 79b83b0

Please sign in to comment.