diff -Naur linux-3.9/drivers/hid/hid-core.c linux-3.9.patch/drivers/hid/hid-core.c --- linux-3.9/drivers/hid/hid-core.c 2013-04-29 02:36:01.000000000 +0200 +++ linux-3.9.patch/drivers/hid/hid-core.c 2013-04-29 17:08:40.528324010 +0200 @@ -1681,6 +1681,9 @@ { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) }, { HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) }, { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) }, + { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1) }, + { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2) }, + { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS, USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3) }, { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) }, #if IS_ENABLED(CONFIG_HID_ROCCAT) { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) }, diff -Naur linux-3.9/drivers/hid/hid-ids.h linux-3.9.patch/drivers/hid/hid-ids.h --- linux-3.9/drivers/hid/hid-ids.h 2013-04-29 02:36:01.000000000 +0200 +++ linux-3.9.patch/drivers/hid/hid-ids.h 2013-04-29 17:08:40.537323981 +0200 @@ -663,6 +663,9 @@ #define USB_VENDOR_ID_PHILIPS 0x0471 #define USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE 0x0617 +#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1 0x206c +#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2 0x20cc +#define USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3 0x0613 #define USB_VENDOR_ID_PI_ENGINEERING 0x05f3 #define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL 0xff diff -Naur linux-3.9/drivers/hid/hid-spinelplus.c linux-3.9.patch/drivers/hid/hid-spinelplus.c --- linux-3.9/drivers/hid/hid-spinelplus.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-3.9.patch/drivers/hid/hid-spinelplus.c 2013-04-29 17:08:40.537323981 +0200 @@ -0,0 +1,104 @@ +/* + * HID driver for "PHILIPS MCE USB IR Receiver- Spinel plus" remotes + * + * Copyright (c) 2010 Panagiotis Skintzos + * + * Renamed to Spinel, cleanup and modified to also support + * Spinel Plus 0471:20CC by Stephan Raue 2012. + */ + +/* + * 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" + +#define spinelplus_map_key(c) set_bit(EV_REP, hi->input->evbit); \ + hid_map_usage_clear(hi, usage, bit, max, EV_KEY, (c)) + +static int spinelplus_input_mapping(struct hid_device *hdev, + struct hid_input *hi, struct hid_field *field, struct hid_usage *usage, + unsigned long **bit, int *max) +{ + switch (usage->hid) { + case 0xffbc000d: spinelplus_map_key(KEY_MEDIA); break; + case 0xffbc0024: spinelplus_map_key(KEY_MEDIA); break; + case 0xffbc0027: spinelplus_map_key(KEY_ZOOM); break; + case 0xffbc0033: spinelplus_map_key(KEY_HOME); break; + case 0xffbc0035: spinelplus_map_key(KEY_CAMERA); break; + case 0xffbc0036: spinelplus_map_key(KEY_EPG); break; + case 0xffbc0037: spinelplus_map_key(KEY_DVD); break; + case 0xffbc0038: spinelplus_map_key(KEY_HOME); break; + case 0xffbc0039: spinelplus_map_key(KEY_MP3); break; + case 0xffbc003a: spinelplus_map_key(KEY_VIDEO); break; + case 0xffbc005a: spinelplus_map_key(KEY_TEXT); break; + case 0xffbc005b: spinelplus_map_key(KEY_RED); break; + case 0xffbc005c: spinelplus_map_key(KEY_GREEN); break; + case 0xffbc005d: spinelplus_map_key(KEY_YELLOW); break; + case 0xffbc005e: spinelplus_map_key(KEY_BLUE); break; + default: + return 0; + } + return 1; +} + +static int spinelplus_probe(struct hid_device *hdev, + const struct hid_device_id *id) +{ + int ret; + /* Connect only to hid input (not hiddev & hidraw)*/ + unsigned int cmask = HID_CONNECT_HIDINPUT; + + ret = hid_parse(hdev); + if (ret) { + dev_err(&hdev->dev, "parse failed\n"); + goto err_free; + } + + ret = hid_hw_start(hdev, cmask); + if (ret) { + dev_err(&hdev->dev, "hw start failed\n"); + goto err_free; + } + + return 0; +err_free: + return ret; +} + +static const struct hid_device_id spinelplus_devices[] = { + { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_1) }, + { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_2) }, + { HID_USB_DEVICE(USB_VENDOR_ID_PHILIPS,USB_DEVICE_ID_PHILIPS_SPINEL_PLUS_3) }, + { } +}; +MODULE_DEVICE_TABLE(hid, spinelplus_devices); + +static struct hid_driver spinelplus_driver = { + .name = "SpinelPlus", + .id_table = spinelplus_devices, + .input_mapping = spinelplus_input_mapping, + .probe = spinelplus_probe, +}; + +static int __init spinelplus_init(void) +{ + return hid_register_driver(&spinelplus_driver); +} + +static void __exit spinelplus_exit(void) +{ + hid_unregister_driver(&spinelplus_driver); +} + +module_init(spinelplus_init); +module_exit(spinelplus_exit); +MODULE_LICENSE("GPL"); diff -Naur linux-3.9/drivers/hid/Kconfig linux-3.9.patch/drivers/hid/Kconfig --- linux-3.9/drivers/hid/Kconfig 2013-04-29 02:36:01.000000000 +0200 +++ linux-3.9.patch/drivers/hid/Kconfig 2013-04-29 17:08:40.538323977 +0200 @@ -602,6 +602,12 @@ ---help--- Support for Steelseries SRW-S1 steering wheel +config HID_SPINELPLUS + tristate "Spinel Plus remote control" + depends on USB_HID + ---help--- + Say Y here if you have a Spinel Plus (0471:206c/20cc/0613) remote + config HID_SUNPLUS tristate "Sunplus wireless desktop" depends on USB_HID diff -Naur linux-3.9/drivers/hid/Makefile linux-3.9.patch/drivers/hid/Makefile --- linux-3.9/drivers/hid/Makefile 2013-04-29 02:36:01.000000000 +0200 +++ linux-3.9.patch/drivers/hid/Makefile 2013-04-29 17:09:26.744173841 +0200 @@ -101,6 +101,7 @@ obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o obj-$(CONFIG_HID_SONY) += hid-sony.o obj-$(CONFIG_HID_SPEEDLINK) += hid-speedlink.o +obj-$(CONFIG_HID_SPINELPLUS) += hid-spinelplus.o obj-$(CONFIG_HID_STEELSERIES) += hid-steelseries.o obj-$(CONFIG_HID_SUNPLUS) += hid-sunplus.o obj-$(CONFIG_HID_GREENASIA) += hid-gaff.o