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

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi,

On Thu, Mar 28, 2019 at 4:34 AM Alex Henrie <alexhenrie24@xxxxxxxxx> 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@xxxxxxxxx>
> ---
>  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@xxxxxxxxx>
> + */
> +
> +#include <linux/hid.h>
> +#include <linux/module.h>
> +
> +#include "hid-ids.h"
> +
> +MODULE_AUTHOR("Alex Henrie <alexhenrie24@xxxxxxxxx>");
> +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
>



[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux