diff -ruN rc/hid-rcking.c rc.mod/hid-rcking.c --- linux/drivers/hid/hid-rcking.c 1970-01-01 01:00:00.000000000 +0100 +++ linux./drivers/hid/hid-rcking.c 2013-05-05 11:46:42.000000000 +0200 @@ -0,0 +1,116 @@ +/* + * HID driver for RCKING USB IR remote receivers + * + * Copyright (c) 2011,2012 H. Pannenbaecker + * based on hid-lcpower.c and hid-gyration.c +*/ + +/* + * The driver supports USB IR remote receivers of the vendor + * Guangzhou Rcking Electronics Co., Ltd. detected as HID devices + * i.e. in MS-Tech cases working with the vendor's original IR remote control. + * + * [1d57:ac01] RCKing USB IR Receiver found in MS-Tech MC-1200 Rev.C/D and more (?) cases + */ + +/* + * 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 +#include +#include + +/* #include "hid-ids.h" +*/ + +/* + * Not yet defined vendor/device id in hid-ids.h, so define it here + */ +#define USB_VENDOR_ID_RCKING 0x1d57 +#define USB_DEVICE_ID_RCKING 0xac01 + +#define DRIVER_DESC "RCKing IR USB Remote Control" +#define DRIVER_VERSION "0.0.1" + +#define rcking_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, \ + EV_KEY, (c)) + +static int rcking_input_mapping(struct hid_device *hdev, struct hid_input *hi, + struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + + if ((usage->hid & HID_USAGE_PAGE) != HID_UP_LOGIVENDOR) + return 0; +/* + Map the "missing" keys +*/ + set_bit(EV_REP, hi->input->evbit); + switch (usage->hid & HID_USAGE) { + case 0x000d: rcking_map_key_clear(KEY_HOME); break; // The "green" start button + case 0x004a: rcking_map_key_clear(KEY_RED); break; // Red + case 0x0047: rcking_map_key_clear(KEY_GREEN); break; // Green + case 0x0049: rcking_map_key_clear(KEY_YELLOW); break; // Yellow + case 0x0025: rcking_map_key_clear(KEY_BLUE); break; // Blue + case 0x0046: rcking_map_key_clear(KEY_VCR); break; // RecordTV + + default: + return 0; + } + + return 1; +} + +static int rcking_event(struct hid_device *hdev, struct hid_field *field, + struct hid_usage *usage, __s32 value) +{ + if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput) + return 0; + + if ((usage->hid & HID_USAGE_PAGE) == HID_UP_GENDESK && + (usage->hid & 0xff) == 0x82) { + struct input_dev *input = field->hidinput->input; + input_event(input, usage->type, usage->code, 1); + input_sync(input); + input_event(input, usage->type, usage->code, 0); + input_sync(input); + return 1; + } + + return 0; +} + +static const struct hid_device_id rcking_devices[] = { + { HID_USB_DEVICE( USB_VENDOR_ID_RCKING, USB_DEVICE_ID_RCKING ) }, + { } +}; +MODULE_DEVICE_TABLE(hid, rcking_devices); + +static struct hid_driver rcking_driver = { + .name = "rcking", + .id_table = rcking_devices, + .input_mapping = rcking_input_mapping, + .event = rcking_event, +}; + +static int __init rcking_init(void) +{ + return hid_register_driver(&rcking_driver); +} + +static void __exit rcking_exit(void) +{ + hid_unregister_driver(&rcking_driver); +} + +module_init(rcking_init); +module_exit(rcking_exit); + +MODULE_DESCRIPTION(DRIVER_DESC); +MODULE_VERSION(DRIVER_VERSION); +MODULE_LICENSE("GPL"); diff -u org/Kconfig mod/Kconfig --- linux/drivers/hid/Kconfig 2013-03-20 21:11:19.000000000 +0100 +++ linux./drivers/hid/Kconfig 2013-09-01 01:22:41.000000000 +0200 @@ -264,6 +264,12 @@ ---help--- Support for UC-Logic tablets. +config HID_RCKING + tristate "hid-rcking" + depends on USB_HID + ---help--- + Support for hid-rcking USB IR Receiver 1d57:ac01 in MC-1200 Rev.C/D. + config HID_WALTOP tristate "Waltop" depends on USB_HID diff -u org/Makefile mod/Makefile --- linux/drivers/hid/Makefile 2013-03-20 21:11:19.000000000 +0100 +++ linux./drivers/hid/Makefile 2013-09-01 01:20:34.000000000 +0200 @@ -116,6 +116,7 @@ obj-$(CONFIG_HID_WACOM) += hid-wacom.o obj-$(CONFIG_HID_WALTOP) += hid-waltop.o obj-$(CONFIG_HID_WIIMOTE) += hid-wiimote.o +obj-$(CONFIG_HID_RCKING) += hid-rcking.o obj-$(CONFIG_HID_SENSOR_HUB) += hid-sensor-hub.o obj-$(CONFIG_USB_HID) += usbhid/