Message ID | 20190328033435.17931-1-alexhenrie24@gmail.com (mailing list archive) |
---|---|
State | Superseded |
Delegated to: | Jiri Kosina |
Headers | show |
Series | [1/2] HID: macally: Add support for Macally ikey keyboard | expand |
Hi, On Thu, Mar 28, 2019 at 4:34 AM Alex Henrie <alexhenrie24@gmail.com> wrote: > > This enables the power and equals keys on the Macally ikey keyboard. > > Based on the Cougar gaming keyboard HID driver, which uses the same > vendor ID. > > Signed-off-by: Alex Henrie <alexhenrie24@gmail.com> > --- > drivers/hid/Kconfig | 10 +++++++++ > drivers/hid/Makefile | 1 + > drivers/hid/hid-ids.h | 1 + > drivers/hid/hid-macally.c | 47 +++++++++++++++++++++++++++++++++++++++ > 4 files changed, 59 insertions(+) > create mode 100644 drivers/hid/hid-macally.c > > diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig > index 6ca8d322b487..aef4a2a690e1 100644 > --- a/drivers/hid/Kconfig > +++ b/drivers/hid/Kconfig > @@ -230,6 +230,16 @@ config HID_COUGAR > Supported devices: > - Cougar 500k Gaming Keyboard > > +config HID_MACALLY > + tristate "Macally devices" > + depends on HID > + help > + Support for Macally devices that are not fully compliant with the > + HID standard. > + > + supported devices: > + - Macally ikey keyboard > + > config HID_PRODIKEYS > tristate "Prodikeys PC-MIDI Keyboard support" > depends on HID && SND > diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile > index 170163b41303..44b9caea46a7 100644 > --- a/drivers/hid/Makefile > +++ b/drivers/hid/Makefile > @@ -65,6 +65,7 @@ obj-$(CONFIG_HID_LENOVO) += hid-lenovo.o > obj-$(CONFIG_HID_LOGITECH) += hid-logitech.o > obj-$(CONFIG_HID_LOGITECH_DJ) += hid-logitech-dj.o > obj-$(CONFIG_HID_LOGITECH_HIDPP) += hid-logitech-hidpp.o > +obj-$(CONFIG_HID_MACALLY) += hid-macally.o > obj-$(CONFIG_HID_MAGICMOUSE) += hid-magicmouse.o > obj-$(CONFIG_HID_MALTRON) += hid-maltron.o > obj-$(CONFIG_HID_MAYFLASH) += hid-mf.o > diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h > index b6d93f4ad037..aacc7534b076 100644 > --- a/drivers/hid/hid-ids.h > +++ b/drivers/hid/hid-ids.h > @@ -1034,6 +1034,7 @@ > #define USB_DEVICE_ID_SINO_LITE_CONTROLLER 0x3008 > > #define USB_VENDOR_ID_SOLID_YEAR 0x060b > +#define USB_DEVICE_ID_MACALLY_IKEY_KEYBOARD 0x0001 > #define USB_DEVICE_ID_COUGAR_500K_GAMING_KEYBOARD 0x500a > #define USB_DEVICE_ID_COUGAR_700K_GAMING_KEYBOARD 0x700a > > diff --git a/drivers/hid/hid-macally.c b/drivers/hid/hid-macally.c > new file mode 100644 > index 000000000000..6f62f059b795 > --- /dev/null > +++ b/drivers/hid/hid-macally.c > @@ -0,0 +1,47 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * HID driver for Macally devices > + * > + * Copyright (c) 2019 Alex Henrie <alexhenrie24@gmail.com> > + */ > + > +#include <linux/hid.h> > +#include <linux/module.h> > + > +#include "hid-ids.h" > + > +MODULE_AUTHOR("Alex Henrie <alexhenrie24@gmail.com>"); > +MODULE_DESCRIPTION("Macally devices"); > +MODULE_LICENSE("GPL"); > + > +/* > + * The Macally ikey keyboard says that its logical and usage maximums are both > + * 101, but the power key is 102 and the equals key is 103 > + */ > +static __u8 *macally_report_fixup(struct hid_device *hdev, __u8 *rdesc, > + unsigned int *rsize) > +{ > + if (hdev->product == USB_DEVICE_ID_MACALLY_IKEY_KEYBOARD) { As mentioned in 2/2, I have one tiny nitpick here: the driver only concerns this particular keyboard and PID, so there is no point in having a PID check here. Cheers, Benjamin > + if (*rsize >= 60 && rdesc[53] == 0x65 && rdesc[59] == 0x65) { > + hid_info(hdev, > + "fixing up Macally ikey keyboard report descriptor\n"); > + rdesc[53] = rdesc[59] = 0x67; > + } > + } > + return rdesc; > +} > + > +static struct hid_device_id macally_id_table[] = { > + { HID_USB_DEVICE(USB_VENDOR_ID_SOLID_YEAR, > + USB_DEVICE_ID_MACALLY_IKEY_KEYBOARD) }, > + { } > +}; > +MODULE_DEVICE_TABLE(hid, macally_id_table); > + > +static struct hid_driver macally_driver = { > + .name = "macally", > + .id_table = macally_id_table, > + .report_fixup = macally_report_fixup, > +}; > + > +module_hid_driver(macally_driver); > -- > 2.21.0 >
diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index 6ca8d322b487..aef4a2a690e1 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig @@ -230,6 +230,16 @@ config HID_COUGAR Supported devices: - Cougar 500k Gaming Keyboard +config HID_MACALLY + tristate "Macally devices" + depends on HID + help + Support for Macally devices that are not fully compliant with the + HID standard. + + supported devices: + - Macally ikey keyboard + config HID_PRODIKEYS tristate "Prodikeys PC-MIDI Keyboard support" depends on HID && SND diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile index 170163b41303..44b9caea46a7 100644 --- a/drivers/hid/Makefile +++ b/drivers/hid/Makefile @@ -65,6 +65,7 @@ obj-$(CONFIG_HID_LENOVO) += hid-lenovo.o obj-$(CONFIG_HID_LOGITECH) += hid-logitech.o obj-$(CONFIG_HID_LOGITECH_DJ) += hid-logitech-dj.o obj-$(CONFIG_HID_LOGITECH_HIDPP) += hid-logitech-hidpp.o +obj-$(CONFIG_HID_MACALLY) += hid-macally.o obj-$(CONFIG_HID_MAGICMOUSE) += hid-magicmouse.o obj-$(CONFIG_HID_MALTRON) += hid-maltron.o obj-$(CONFIG_HID_MAYFLASH) += hid-mf.o diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index b6d93f4ad037..aacc7534b076 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -1034,6 +1034,7 @@ #define USB_DEVICE_ID_SINO_LITE_CONTROLLER 0x3008 #define USB_VENDOR_ID_SOLID_YEAR 0x060b +#define USB_DEVICE_ID_MACALLY_IKEY_KEYBOARD 0x0001 #define USB_DEVICE_ID_COUGAR_500K_GAMING_KEYBOARD 0x500a #define USB_DEVICE_ID_COUGAR_700K_GAMING_KEYBOARD 0x700a diff --git a/drivers/hid/hid-macally.c b/drivers/hid/hid-macally.c new file mode 100644 index 000000000000..6f62f059b795 --- /dev/null +++ b/drivers/hid/hid-macally.c @@ -0,0 +1,47 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * HID driver for Macally devices + * + * Copyright (c) 2019 Alex Henrie <alexhenrie24@gmail.com> + */ + +#include <linux/hid.h> +#include <linux/module.h> + +#include "hid-ids.h" + +MODULE_AUTHOR("Alex Henrie <alexhenrie24@gmail.com>"); +MODULE_DESCRIPTION("Macally devices"); +MODULE_LICENSE("GPL"); + +/* + * The Macally ikey keyboard says that its logical and usage maximums are both + * 101, but the power key is 102 and the equals key is 103 + */ +static __u8 *macally_report_fixup(struct hid_device *hdev, __u8 *rdesc, + unsigned int *rsize) +{ + if (hdev->product == USB_DEVICE_ID_MACALLY_IKEY_KEYBOARD) { + if (*rsize >= 60 && rdesc[53] == 0x65 && rdesc[59] == 0x65) { + hid_info(hdev, + "fixing up Macally ikey keyboard report descriptor\n"); + rdesc[53] = rdesc[59] = 0x67; + } + } + return rdesc; +} + +static struct hid_device_id macally_id_table[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_SOLID_YEAR, + USB_DEVICE_ID_MACALLY_IKEY_KEYBOARD) }, + { } +}; +MODULE_DEVICE_TABLE(hid, macally_id_table); + +static struct hid_driver macally_driver = { + .name = "macally", + .id_table = macally_id_table, + .report_fixup = macally_report_fixup, +}; + +module_hid_driver(macally_driver);
This enables the power and equals keys on the Macally ikey keyboard. Based on the Cougar gaming keyboard HID driver, which uses the same vendor ID. Signed-off-by: Alex Henrie <alexhenrie24@gmail.com> --- drivers/hid/Kconfig | 10 +++++++++ drivers/hid/Makefile | 1 + drivers/hid/hid-ids.h | 1 + drivers/hid/hid-macally.c | 47 +++++++++++++++++++++++++++++++++++++++ 4 files changed, 59 insertions(+) create mode 100644 drivers/hid/hid-macally.c