diff mbox series

[1/2] HID: macally: Add support for Macally ikey keyboard

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

Commit Message

Alex Henrie March 28, 2019, 3:34 a.m. UTC
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

Comments

Benjamin Tissoires April 2, 2019, 2:16 p.m. UTC | #1
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 mbox series

Patch

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