0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013 #include <linux/device.h>
0014 #include <linux/input.h>
0015 #include <linux/hid.h>
0016 #include <linux/module.h>
0017
0018 #include "hid-ids.h"
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059 #define th_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, \
0060 EV_KEY, (c))
0061 static int twinhan_input_mapping(struct hid_device *hdev, struct hid_input *hi,
0062 struct hid_field *field, struct hid_usage *usage,
0063 unsigned long **bit, int *max)
0064 {
0065 if ((usage->hid & HID_USAGE_PAGE) != HID_UP_KEYBOARD)
0066 return 0;
0067
0068 switch (usage->hid & HID_USAGE) {
0069
0070 case 0x004: th_map_key_clear(KEY_TEXT); break;
0071 case 0x006: th_map_key_clear(KEY_RESTART); break;
0072 case 0x008: th_map_key_clear(KEY_EPG); break;
0073 case 0x00c: th_map_key_clear(KEY_REWIND); break;
0074 case 0x00e: th_map_key_clear(KEY_PROGRAM); break;
0075 case 0x00f: th_map_key_clear(KEY_LIST); break;
0076 case 0x010: th_map_key_clear(KEY_MUTE); break;
0077 case 0x011: th_map_key_clear(KEY_FORWARD); break;
0078 case 0x013: th_map_key_clear(KEY_PRINT); break;
0079 case 0x017: th_map_key_clear(KEY_PAUSE); break;
0080 case 0x019: th_map_key_clear(KEY_FAVORITES); break;
0081 case 0x01d: th_map_key_clear(KEY_SCREEN); break;
0082 case 0x01e: th_map_key_clear(KEY_NUMERIC_1); break;
0083 case 0x01f: th_map_key_clear(KEY_NUMERIC_2); break;
0084 case 0x020: th_map_key_clear(KEY_NUMERIC_3); break;
0085 case 0x021: th_map_key_clear(KEY_NUMERIC_4); break;
0086 case 0x022: th_map_key_clear(KEY_NUMERIC_5); break;
0087 case 0x023: th_map_key_clear(KEY_NUMERIC_6); break;
0088 case 0x024: th_map_key_clear(KEY_NUMERIC_7); break;
0089 case 0x025: th_map_key_clear(KEY_NUMERIC_8); break;
0090 case 0x026: th_map_key_clear(KEY_NUMERIC_9); break;
0091 case 0x027: th_map_key_clear(KEY_NUMERIC_0); break;
0092 case 0x028: th_map_key_clear(KEY_PLAY); break;
0093 case 0x029: th_map_key_clear(KEY_CANCEL); break;
0094 case 0x02b: th_map_key_clear(KEY_TAB); break;
0095
0096 case 0x03f: th_map_key_clear(KEY_POWER2); break;
0097 case 0x04a: th_map_key_clear(KEY_RECORD); break;
0098 case 0x04b: th_map_key_clear(KEY_CHANNELUP); break;
0099 case 0x04d: th_map_key_clear(KEY_STOP); break;
0100 case 0x04e: th_map_key_clear(KEY_CHANNELDOWN); break;
0101
0102 case 0x051: th_map_key_clear(KEY_VOLUMEDOWN); break;
0103
0104 case 0x052: th_map_key_clear(KEY_VOLUMEUP); break;
0105
0106
0107 case 0x0e0:
0108 case 0x0e1:
0109 case 0x0e2:
0110 case 0x0e3:
0111 case 0x0e4:
0112 case 0x0e5:
0113 case 0x0e6:
0114 case 0x0e7:
0115 default:
0116 return -1;
0117 }
0118 return 1;
0119 }
0120
0121 static const struct hid_device_id twinhan_devices[] = {
0122 { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
0123 { }
0124 };
0125 MODULE_DEVICE_TABLE(hid, twinhan_devices);
0126
0127 static struct hid_driver twinhan_driver = {
0128 .name = "twinhan",
0129 .id_table = twinhan_devices,
0130 .input_mapping = twinhan_input_mapping,
0131 };
0132 module_hid_driver(twinhan_driver);
0133
0134 MODULE_LICENSE("GPL");