summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--usr/src/dkms_source_tree/KERNEL_SOURCE_VERSION2
-rw-r--r--usr/src/dkms_source_tree/hid-core.c36
-rw-r--r--usr/src/dkms_source_tree/hid-debug.c3
-rw-r--r--usr/src/dkms_source_tree/hid-ids.h117
-rw-r--r--usr/src/dkms_source_tree/hid-input.c216
-rw-r--r--usr/src/dkms_source_tree/hidraw.c29
6 files changed, 316 insertions, 87 deletions
diff --git a/usr/src/dkms_source_tree/KERNEL_SOURCE_VERSION b/usr/src/dkms_source_tree/KERNEL_SOURCE_VERSION
index fab7071..ccb045a 100644
--- a/usr/src/dkms_source_tree/KERNEL_SOURCE_VERSION
+++ b/usr/src/dkms_source_tree/KERNEL_SOURCE_VERSION
@@ -1 +1 @@
2.6.35-23-generic 2.6.37-9-generic
diff --git a/usr/src/dkms_source_tree/hid-core.c b/usr/src/dkms_source_tree/hid-core.c
index bd2141e..5ba6dda 100644
--- a/usr/src/dkms_source_tree/hid-core.c
+++ b/usr/src/dkms_source_tree/hid-core.c
@@ -651,7 +651,7 @@ int hid_parse_report(struct hid_device *device, __u8 *start,
651 }; 651 };
652 652
653 if (device->driver->report_fixup) 653 if (device->driver->report_fixup)
654 device->driver->report_fixup(device, start, size); 654 start = device->driver->report_fixup(device, start, &size);
655 655
656 device->rdesc = kmemdup(start, size, GFP_KERNEL); 656 device->rdesc = kmemdup(start, size, GFP_KERNEL);
657 if (device->rdesc == NULL) 657 if (device->rdesc == NULL)
@@ -1157,6 +1157,8 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
1157 1157
1158 if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE) 1158 if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE)
1159 connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV); 1159 connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV);
1160 if (hdev->quirks & HID_QUIRK_HIDINPUT_FORCE)
1161 connect_mask |= HID_CONNECT_HIDINPUT_FORCE;
1160 if (hdev->bus != BUS_USB) 1162 if (hdev->bus != BUS_USB)
1161 connect_mask &= ~HID_CONNECT_HIDDEV; 1163 connect_mask &= ~HID_CONNECT_HIDDEV;
1162 if (hid_hiddev(hdev)) 1164 if (hid_hiddev(hdev))
@@ -1239,6 +1241,10 @@ static const struct hid_device_id hid_blacklist[] = {
1239 { HID_USB_DEVICE(USB_VENDOR_ID_3M, USB_DEVICE_ID_3M2256) }, 1241 { HID_USB_DEVICE(USB_VENDOR_ID_3M, USB_DEVICE_ID_3M2256) },
1240 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) }, 1242 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
1241 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) }, 1243 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
1244 { HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
1245#if defined(CONFIG_HID_ACRUX_FF) || defined(CONFIG_HID_ACRUX_FF_MODULE)
1246 { HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
1247#endif
1242 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) }, 1248 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
1243 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) }, 1249 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
1244 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) }, 1250 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
@@ -1287,11 +1293,14 @@ static const struct hid_device_id hid_blacklist[] = {
1287 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) }, 1293 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_JIS) },
1288 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) }, 1294 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
1289 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) }, 1295 { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
1290 { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_T91MT)}, 1296 { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUS_T91MT) },
1297 { HID_USB_DEVICE(USB_VENDOR_ID_ASUS, USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO) },
1291 { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) }, 1298 { HID_USB_DEVICE(USB_VENDOR_ID_BELKIN, USB_DEVICE_ID_FLIP_KVM) },
1292 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE) }, 1299 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE) },
1300 { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE_2) },
1293 { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH) }, 1301 { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH) },
1294 { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) }, 1302 { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) },
1303 { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) },
1295 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION) }, 1304 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION) },
1296 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR) }, 1305 { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR) },
1297 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) }, 1306 { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_TACTICAL_PAD) },
@@ -1304,6 +1313,7 @@ static const struct hid_device_id hid_blacklist[] = {
1304 { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) }, 1313 { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
1305 { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) }, 1314 { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
1306 { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2) }, 1315 { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2) },
1316 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
1307 { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) }, 1317 { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
1308 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) }, 1318 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
1309 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR) }, 1319 { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR) },
@@ -1326,6 +1336,7 @@ static const struct hid_device_id hid_blacklist[] = {
1326 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500) }, 1336 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_CORDLESS_DESKTOP_LX500) },
1327 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D) }, 1337 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_EXTREME_3D) },
1328 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL) }, 1338 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WHEEL) },
1339 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD) },
1329 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD) }, 1340 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD) },
1330 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2) }, 1341 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2_2) },
1331 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_F3D) }, 1342 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_F3D) },
@@ -1335,6 +1346,7 @@ static const struct hid_device_id hid_blacklist[] = {
1335 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) }, 1346 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
1336 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) }, 1347 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
1337 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) }, 1348 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
1349 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL) },
1338 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) }, 1350 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
1339 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACETRAVELLER) }, 1351 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACETRAVELLER) },
1340 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR) }, 1352 { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_SPACENAVIGATOR) },
@@ -1370,12 +1382,15 @@ static const struct hid_device_id hid_blacklist[] = {
1370 { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) }, 1382 { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
1371 { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) }, 1383 { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) },
1372 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) }, 1384 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
1385 { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
1373 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) }, 1386 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
1374 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) }, 1387 { HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
1375 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, 1388 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
1376 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, 1389 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) },
1377 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, 1390 { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) },
1378 { HID_USB_DEVICE(USB_VENDOR_ID_STANTUM, USB_DEVICE_ID_MTP) }, 1391 { HID_USB_DEVICE(USB_VENDOR_ID_STANTUM, USB_DEVICE_ID_MTP) },
1392 { HID_USB_DEVICE(USB_VENDOR_ID_STANTUM_STM, USB_DEVICE_ID_MTP_STM) },
1393 { HID_USB_DEVICE(USB_VENDOR_ID_STANTUM_SITRONIX, USB_DEVICE_ID_MTP_SITRONIX) },
1379 { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) }, 1394 { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) },
1380 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) }, 1395 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) },
1381 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) }, 1396 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) },
@@ -1384,12 +1399,22 @@ static const struct hid_device_id hid_blacklist[] = {
1384 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) }, 1399 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651) },
1385 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653) }, 1400 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653) },
1386 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) }, 1401 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654) },
1402 { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a) },
1387 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) }, 1403 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED, USB_DEVICE_ID_TOPSEED_CYBERLINK) },
1388 { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) }, 1404 { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART) },
1405 { HID_USB_DEVICE(USB_VENDOR_ID_TOPSEED2, USB_DEVICE_ID_TOPSEED2_RF_COMBO) },
1389 { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) }, 1406 { HID_USB_DEVICE(USB_VENDOR_ID_TWINHAN, USB_DEVICE_ID_TWINHAN_IR_REMOTE) },
1407 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_PF1209) },
1408 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U) },
1409 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U) },
1410 { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U) },
1390 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SMARTJOY_PLUS) }, 1411 { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_SMARTJOY_PLUS) },
1391 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH) }, 1412 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH) },
1392 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH) }, 1413 { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_WACOM, USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH) },
1414 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH) },
1415 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH) },
1416 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH) },
1417 { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH) },
1393 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) }, 1418 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0005) },
1394 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) }, 1419 { HID_USB_DEVICE(USB_VENDOR_ID_ZEROPLUS, 0x0030) },
1395 { HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) }, 1420 { HID_USB_DEVICE(USB_VENDOR_ID_ZYDACRON, USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL) },
@@ -1596,6 +1621,7 @@ static const struct hid_device_id hid_ignore_list[] = {
1596 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) }, 1621 { HID_USB_DEVICE(USB_VENDOR_ID_DELORME, USB_DEVICE_ID_DELORME_EM_LT20) },
1597 { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) }, 1622 { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) },
1598 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC5UH) }, 1623 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC5UH) },
1624 { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC4UM) },
1599 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) }, 1625 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) },
1600 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) }, 1626 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) },
1601 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0003) }, 1627 { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0003) },
@@ -1661,6 +1687,7 @@ static const struct hid_device_id hid_ignore_list[] = {
1661 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006) }, 1687 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1006) },
1662 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1007) }, 1688 { HID_USB_DEVICE(USB_VENDOR_ID_GTCO, USB_DEVICE_ID_GTCO_1007) },
1663 { HID_USB_DEVICE(USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA) }, 1689 { HID_USB_DEVICE(USB_VENDOR_ID_IMATION, USB_DEVICE_ID_DISC_STAKKA) },
1690 { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_JESS_YUREX) },
1664 { HID_USB_DEVICE(USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO) }, 1691 { HID_USB_DEVICE(USB_VENDOR_ID_KBGEAR, USB_DEVICE_ID_KBGEAR_JAMSTUDIO) },
1665 { HID_USB_DEVICE(USB_VENDOR_ID_KWORLD, USB_DEVICE_ID_KWORLD_RADIO_FM700) }, 1692 { HID_USB_DEVICE(USB_VENDOR_ID_KWORLD, USB_DEVICE_ID_KWORLD_RADIO_FM700) },
1666 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_GPEN_560) }, 1693 { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_GPEN_560) },
@@ -1775,6 +1802,11 @@ static bool hid_ignore(struct hid_device *hdev)
1775 hdev->product <= USB_DEVICE_ID_SOUNDGRAPH_IMON_LAST) 1802 hdev->product <= USB_DEVICE_ID_SOUNDGRAPH_IMON_LAST)
1776 return true; 1803 return true;
1777 break; 1804 break;
1805 case USB_VENDOR_ID_HANWANG:
1806 if (hdev->product >= USB_DEVICE_ID_HANWANG_TABLET_FIRST &&
1807 hdev->product <= USB_DEVICE_ID_HANWANG_TABLET_LAST)
1808 return true;
1809 break;
1778 } 1810 }
1779 1811
1780 if (hdev->type == HID_TYPE_USBMOUSE && 1812 if (hdev->type == HID_TYPE_USBMOUSE &&
diff --git a/usr/src/dkms_source_tree/hid-debug.c b/usr/src/dkms_source_tree/hid-debug.c
index 850d02a..75c5e23 100644
--- a/usr/src/dkms_source_tree/hid-debug.c
+++ b/usr/src/dkms_source_tree/hid-debug.c
@@ -570,6 +570,8 @@ void hid_debug_event(struct hid_device *hdev, char *buf)
570 buf[i]; 570 buf[i];
571 list->tail = (list->tail + i) % HID_DEBUG_BUFSIZE; 571 list->tail = (list->tail + i) % HID_DEBUG_BUFSIZE;
572 } 572 }
573
574 wake_up_interruptible(&hdev->debug_wait);
573} 575}
574EXPORT_SYMBOL_GPL(hid_debug_event); 576EXPORT_SYMBOL_GPL(hid_debug_event);
575 577
@@ -1051,6 +1053,7 @@ static const struct file_operations hid_debug_events_fops = {
1051 .read = hid_debug_events_read, 1053 .read = hid_debug_events_read,
1052 .poll = hid_debug_events_poll, 1054 .poll = hid_debug_events_poll,
1053 .release = hid_debug_events_release, 1055 .release = hid_debug_events_release,
1056 .llseek = noop_llseek,
1054}; 1057};
1055 1058
1056 1059
diff --git a/usr/src/dkms_source_tree/hid-ids.h b/usr/src/dkms_source_tree/hid-ids.h
index 3032aed..e07a944 100644
--- a/usr/src/dkms_source_tree/hid-ids.h
+++ b/usr/src/dkms_source_tree/hid-ids.h
@@ -25,6 +25,7 @@
25#define USB_VENDOR_ID_A4TECH 0x09da 25#define USB_VENDOR_ID_A4TECH 0x09da
26#define USB_DEVICE_ID_A4TECH_WCP32PU 0x0006 26#define USB_DEVICE_ID_A4TECH_WCP32PU 0x0006
27#define USB_DEVICE_ID_A4TECH_X5_005D 0x000a 27#define USB_DEVICE_ID_A4TECH_X5_005D 0x000a
28#define USB_DEVICE_ID_A4TECH_RP_649 0x001a
28 29
29#define USB_VENDOR_ID_AASHIMA 0x06d6 30#define USB_VENDOR_ID_AASHIMA 0x06d6
30#define USB_DEVICE_ID_AASHIMA_GAMEPAD 0x0025 31#define USB_DEVICE_ID_AASHIMA_GAMEPAD 0x0025
@@ -34,6 +35,8 @@
34#define USB_DEVICE_ID_ACECAD_FLAIR 0x0004 35#define USB_DEVICE_ID_ACECAD_FLAIR 0x0004
35#define USB_DEVICE_ID_ACECAD_302 0x0008 36#define USB_DEVICE_ID_ACECAD_302 0x0008
36 37
38#define USB_VENDOR_ID_ACRUX 0x1a34
39
37#define USB_VENDOR_ID_ADS_TECH 0x06e1 40#define USB_VENDOR_ID_ADS_TECH 0x06e1
38#define USB_DEVICE_ID_ADS_TECH_RADIO_SI470X 0xa155 41#define USB_DEVICE_ID_ADS_TECH_RADIO_SI470X 0xa155
39 42
@@ -82,12 +85,12 @@
82#define USB_DEVICE_ID_APPLE_WELLSPRING_ANSI 0x0223 85#define USB_DEVICE_ID_APPLE_WELLSPRING_ANSI 0x0223
83#define USB_DEVICE_ID_APPLE_WELLSPRING_ISO 0x0224 86#define USB_DEVICE_ID_APPLE_WELLSPRING_ISO 0x0224
84#define USB_DEVICE_ID_APPLE_WELLSPRING_JIS 0x0225 87#define USB_DEVICE_ID_APPLE_WELLSPRING_JIS 0x0225
85#define USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI 0x0229 88#define USB_DEVICE_ID_APPLE_GEYSER4_HF_ANSI 0x0229
86#define USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO 0x022a 89#define USB_DEVICE_ID_APPLE_GEYSER4_HF_ISO 0x022a
87#define USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS 0x022b 90#define USB_DEVICE_ID_APPLE_GEYSER4_HF_JIS 0x022b
88#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI 0x022c 91#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI 0x022c
89#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO 0x022d 92#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_ISO 0x022d
90#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS 0x022e 93#define USB_DEVICE_ID_APPLE_ALU_WIRELESS_JIS 0x022e
91#define USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI 0x0230 94#define USB_DEVICE_ID_APPLE_WELLSPRING2_ANSI 0x0230
92#define USB_DEVICE_ID_APPLE_WELLSPRING2_ISO 0x0231 95#define USB_DEVICE_ID_APPLE_WELLSPRING2_ISO 0x0231
93#define USB_DEVICE_ID_APPLE_WELLSPRING2_JIS 0x0232 96#define USB_DEVICE_ID_APPLE_WELLSPRING2_JIS 0x0232
@@ -110,6 +113,7 @@
110 113
111#define USB_VENDOR_ID_ASUS 0x0486 114#define USB_VENDOR_ID_ASUS 0x0486
112#define USB_DEVICE_ID_ASUS_T91MT 0x0185 115#define USB_DEVICE_ID_ASUS_T91MT 0x0185
116#define USB_DEVICE_ID_ASUSTEK_MULTITOUCH_YFO 0x0186
113 117
114#define USB_VENDOR_ID_ASUSTEK 0x0b05 118#define USB_VENDOR_ID_ASUSTEK 0x0b05
115#define USB_DEVICE_ID_ASUSTEK_LCM 0x1726 119#define USB_DEVICE_ID_ASUSTEK_LCM 0x1726
@@ -125,18 +129,20 @@
125#define USB_VENDOR_ID_AVERMEDIA 0x07ca 129#define USB_VENDOR_ID_AVERMEDIA 0x07ca
126#define USB_DEVICE_ID_AVER_FM_MR800 0xb800 130#define USB_DEVICE_ID_AVER_FM_MR800 0xb800
127 131
128#define USB_VENDOR_ID_BELKIN 0x050d 132#define USB_VENDOR_ID_BELKIN 0x050d
129#define USB_DEVICE_ID_FLIP_KVM 0x3201 133#define USB_DEVICE_ID_FLIP_KVM 0x3201
130 134
131#define USB_VENDOR_ID_BERKSHIRE 0x0c98 135#define USB_VENDOR_ID_BERKSHIRE 0x0c98
132#define USB_DEVICE_ID_BERKSHIRE_PCWD 0x1140 136#define USB_DEVICE_ID_BERKSHIRE_PCWD 0x1140
133 137
134#define USB_VENDOR_ID_BTC 0x046e 138#define USB_VENDOR_ID_BTC 0x046e
135#define USB_DEVICE_ID_BTC_EMPREX_REMOTE 0x5578 139#define USB_DEVICE_ID_BTC_EMPREX_REMOTE 0x5578
140#define USB_DEVICE_ID_BTC_EMPREX_REMOTE_2 0x5577
136 141
137#define USB_VENDOR_ID_CANDO 0x2087 142#define USB_VENDOR_ID_CANDO 0x2087
138#define USB_DEVICE_ID_CANDO_MULTI_TOUCH 0x0a01 143#define USB_DEVICE_ID_CANDO_MULTI_TOUCH 0x0a01
139#define USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6 0x0b03 144#define USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6 0x0b03
145#define USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6 0x0f01
140 146
141#define USB_VENDOR_ID_CH 0x068e 147#define USB_VENDOR_ID_CH 0x068e
142#define USB_DEVICE_ID_CH_PRO_PEDALS 0x00f2 148#define USB_DEVICE_ID_CH_PRO_PEDALS 0x00f2
@@ -144,6 +150,7 @@
144#define USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE 0x0051 150#define USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE 0x0051
145#define USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE 0x00ff 151#define USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE 0x00ff
146#define USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK 0x00d3 152#define USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK 0x00d3
153#define USB_DEVICE_ID_CH_AXIS_295 0x001c
147 154
148#define USB_VENDOR_ID_CHERRY 0x046a 155#define USB_VENDOR_ID_CHERRY 0x046a
149#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023 156#define USB_DEVICE_ID_CHERRY_CYMOTION 0x0023
@@ -154,6 +161,7 @@
154 161
155#define USB_VENDOR_ID_CHICONY 0x04f2 162#define USB_VENDOR_ID_CHICONY 0x04f2
156#define USB_DEVICE_ID_CHICONY_TACTICAL_PAD 0x0418 163#define USB_DEVICE_ID_CHICONY_TACTICAL_PAD 0x0418
164#define USB_DEVICE_ID_CHICONY_MULTI_TOUCH 0xb19d
157 165
158#define USB_VENDOR_ID_CIDC 0x1677 166#define USB_VENDOR_ID_CIDC 0x1677
159 167
@@ -182,7 +190,7 @@
182#define USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701 0x819a 190#define USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701 0x819a
183 191
184#define USB_VENDOR_ID_DELORME 0x1163 192#define USB_VENDOR_ID_DELORME 0x1163
185#define USB_DEVICE_ID_DELORME_EARTHMATE 0x0100 193#define USB_DEVICE_ID_DELORME_EARTHMATE 0x0100
186#define USB_DEVICE_ID_DELORME_EM_LT20 0x0200 194#define USB_DEVICE_ID_DELORME_EM_LT20 0x0200
187 195
188#define USB_VENDOR_ID_DMI 0x0c0b 196#define USB_VENDOR_ID_DMI 0x0c0b
@@ -196,6 +204,8 @@
196#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1 0x720c 204#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1 0x720c
197#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2 0x72a1 205#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2 0x72a1
198 206
207#define USB_VENDOR_ID_ELECOM 0x056e
208#define USB_DEVICE_ID_ELECOM_BM084 0x0061
199 209
200#define USB_VENDOR_ID_ELO 0x04E7 210#define USB_VENDOR_ID_ELO 0x04E7
201#define USB_DEVICE_ID_ELO_TS2700 0x0020 211#define USB_DEVICE_ID_ELO_TS2700 0x0020
@@ -203,13 +213,14 @@
203#define USB_VENDOR_ID_ESSENTIAL_REALITY 0x0d7f 213#define USB_VENDOR_ID_ESSENTIAL_REALITY 0x0d7f
204#define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100 214#define USB_DEVICE_ID_ESSENTIAL_REALITY_P5 0x0100
205 215
206#define USB_VENDOR_ID_ETURBOTOUCH 0x22b9
207#define USB_DEVICE_ID_ETURBOTOUCH 0x0006
208
209#define USB_VENDOR_ID_ETT 0x0664 216#define USB_VENDOR_ID_ETT 0x0664
210#define USB_DEVICE_ID_TC5UH 0x0309 217#define USB_DEVICE_ID_TC5UH 0x0309
218#define USB_DEVICE_ID_TC4UM 0x0306
219
220#define USB_VENDOR_ID_ETURBOTOUCH 0x22b9
221#define USB_DEVICE_ID_ETURBOTOUCH 0x0006
211 222
212#define USB_VENDOR_ID_EZKEY 0x0518 223#define USB_VENDOR_ID_EZKEY 0x0518
213#define USB_DEVICE_ID_BTC_8193 0x0002 224#define USB_DEVICE_ID_BTC_8193 0x0002
214 225
215#define USB_VENDOR_ID_GAMERON 0x0810 226#define USB_VENDOR_ID_GAMERON 0x0810
@@ -295,6 +306,10 @@
295#define USB_DEVICE_ID_GYRATION_REMOTE_2 0x0003 306#define USB_DEVICE_ID_GYRATION_REMOTE_2 0x0003
296#define USB_DEVICE_ID_GYRATION_REMOTE_3 0x0008 307#define USB_DEVICE_ID_GYRATION_REMOTE_3 0x0008
297 308
309#define USB_VENDOR_ID_HANWANG 0x0b57
310#define USB_DEVICE_ID_HANWANG_TABLET_FIRST 0x5000
311#define USB_DEVICE_ID_HANWANG_TABLET_LAST 0x8fff
312
298#define USB_VENDOR_ID_HAPP 0x078b 313#define USB_VENDOR_ID_HAPP 0x078b
299#define USB_DEVICE_ID_UGCI_DRIVING 0x0010 314#define USB_DEVICE_ID_UGCI_DRIVING 0x0010
300#define USB_DEVICE_ID_UGCI_FLYING 0x0020 315#define USB_DEVICE_ID_UGCI_FLYING 0x0020
@@ -303,12 +318,22 @@
303#define USB_VENDOR_ID_IMATION 0x0718 318#define USB_VENDOR_ID_IMATION 0x0718
304#define USB_DEVICE_ID_DISC_STAKKA 0xd000 319#define USB_DEVICE_ID_DISC_STAKKA 0xd000
305 320
321#define USB_VENDOR_ID_JESS 0x0c45
322#define USB_DEVICE_ID_JESS_YUREX 0x1010
323
306#define USB_VENDOR_ID_KBGEAR 0x084e 324#define USB_VENDOR_ID_KBGEAR 0x084e
307#define USB_DEVICE_ID_KBGEAR_JAMSTUDIO 0x1001 325#define USB_DEVICE_ID_KBGEAR_JAMSTUDIO 0x1001
308 326
327#define USB_VENDOR_ID_KENSINGTON 0x047d
328#define USB_DEVICE_ID_KS_SLIMBLADE 0x2041
329
309#define USB_VENDOR_ID_KWORLD 0x1b80 330#define USB_VENDOR_ID_KWORLD 0x1b80
310#define USB_DEVICE_ID_KWORLD_RADIO_FM700 0xd700 331#define USB_DEVICE_ID_KWORLD_RADIO_FM700 0xd700
311 332
333#define USB_VENDOR_ID_KYE 0x0458
334#define USB_DEVICE_ID_KYE_ERGO_525V 0x0087
335#define USB_DEVICE_ID_KYE_GPEN_560 0x5003
336
312#define USB_VENDOR_ID_LABTEC 0x1020 337#define USB_VENDOR_ID_LABTEC 0x1020
313#define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD 0x0006 338#define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD 0x0006
314 339
@@ -328,13 +353,11 @@
328#define USB_DEVICE_ID_LD_POWERCONTROL 0x2030 353#define USB_DEVICE_ID_LD_POWERCONTROL 0x2030
329#define USB_DEVICE_ID_LD_MACHINETEST 0x2040 354#define USB_DEVICE_ID_LD_MACHINETEST 0x2040
330 355
331#define USB_VENDOR_ID_KENSINGTON 0x047d
332#define USB_DEVICE_ID_KS_SLIMBLADE 0x2041
333
334#define USB_VENDOR_ID_LOGITECH 0x046d 356#define USB_VENDOR_ID_LOGITECH 0x046d
335#define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101 357#define USB_DEVICE_ID_LOGITECH_RECEIVER 0xc101
336#define USB_DEVICE_ID_LOGITECH_HARMONY_FIRST 0xc110 358#define USB_DEVICE_ID_LOGITECH_HARMONY_FIRST 0xc110
337#define USB_DEVICE_ID_LOGITECH_HARMONY_LAST 0xc14f 359#define USB_DEVICE_ID_LOGITECH_HARMONY_LAST 0xc14f
360#define USB_DEVICE_ID_LOGITECH_RUMBLEPAD_CORD 0xc20a
338#define USB_DEVICE_ID_LOGITECH_RUMBLEPAD 0xc211 361#define USB_DEVICE_ID_LOGITECH_RUMBLEPAD 0xc211
339#define USB_DEVICE_ID_LOGITECH_EXTREME_3D 0xc215 362#define USB_DEVICE_ID_LOGITECH_EXTREME_3D 0xc215
340#define USB_DEVICE_ID_LOGITECH_RUMBLEPAD2 0xc218 363#define USB_DEVICE_ID_LOGITECH_RUMBLEPAD2 0xc218
@@ -346,6 +369,7 @@
346#define USB_DEVICE_ID_LOGITECH_WINGMAN_FFG 0xc293 369#define USB_DEVICE_ID_LOGITECH_WINGMAN_FFG 0xc293
347#define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL 0xc295 370#define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL 0xc295
348#define USB_DEVICE_ID_LOGITECH_G25_WHEEL 0xc299 371#define USB_DEVICE_ID_LOGITECH_G25_WHEEL 0xc299
372#define USB_DEVICE_ID_LOGITECH_WII_WHEEL 0xc29c
349#define USB_DEVICE_ID_LOGITECH_ELITE_KBD 0xc30a 373#define USB_DEVICE_ID_LOGITECH_ELITE_KBD 0xc30a
350#define USB_DEVICE_ID_S510_RECEIVER 0xc50c 374#define USB_DEVICE_ID_S510_RECEIVER 0xc50c
351#define USB_DEVICE_ID_S510_RECEIVER_2 0xc517 375#define USB_DEVICE_ID_S510_RECEIVER_2 0xc517
@@ -386,23 +410,23 @@
386#define USB_VENDOR_ID_MONTEREY 0x0566 410#define USB_VENDOR_ID_MONTEREY 0x0566
387#define USB_DEVICE_ID_GENIUS_KB29E 0x3004 411#define USB_DEVICE_ID_GENIUS_KB29E 0x3004
388 412
413#define USB_VENDOR_ID_NATIONAL_SEMICONDUCTOR 0x0400
414#define USB_DEVICE_ID_N_S_HARMONY 0xc359
415
416#define USB_VENDOR_ID_NATSU 0x08b7
417#define USB_DEVICE_ID_NATSU_GAMEPAD 0x0001
418
389#define USB_VENDOR_ID_NCR 0x0404 419#define USB_VENDOR_ID_NCR 0x0404
390#define USB_DEVICE_ID_NCR_FIRST 0x0300 420#define USB_DEVICE_ID_NCR_FIRST 0x0300
391#define USB_DEVICE_ID_NCR_LAST 0x03ff 421#define USB_DEVICE_ID_NCR_LAST 0x03ff
392 422
393#define USB_VENDOR_ID_NATIONAL_SEMICONDUCTOR 0x0400
394#define USB_DEVICE_ID_N_S_HARMONY 0xc359
395
396#define USB_VENDOR_ID_NATSU 0x08b7
397#define USB_DEVICE_ID_NATSU_GAMEPAD 0x0001
398
399#define USB_VENDOR_ID_NEC 0x073e 423#define USB_VENDOR_ID_NEC 0x073e
400#define USB_DEVICE_ID_NEC_USB_GAME_PAD 0x0301 424#define USB_DEVICE_ID_NEC_USB_GAME_PAD 0x0301
401 425
402#define USB_VENDOR_ID_NEXTWINDOW 0x1926 426#define USB_VENDOR_ID_NEXTWINDOW 0x1926
403#define USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN 0x0003 427#define USB_DEVICE_ID_NEXTWINDOW_TOUCHSCREEN 0x0003
404 428
405#define USB_VENDOR_ID_NTRIG 0x1b96 429#define USB_VENDOR_ID_NTRIG 0x1b96
406#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN 0x0001 430#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN 0x0001
407#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1 0x0003 431#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_1 0x0003
408#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_2 0x0004 432#define USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_2 0x0004
@@ -437,9 +461,12 @@
437#define USB_VENDOR_ID_PETALYNX 0x18b1 461#define USB_VENDOR_ID_PETALYNX 0x18b1
438#define USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE 0x0037 462#define USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE 0x0037
439 463
440#define USB_VENDOR_ID_PHILIPS 0x0471 464#define USB_VENDOR_ID_PHILIPS 0x0471
441#define USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE 0x0617 465#define USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE 0x0617
442 466
467#define USB_VENDOR_ID_PI_ENGINEERING 0x05f3
468#define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL 0xff
469
443#define USB_VENDOR_ID_PLAYDOTCOM 0x0b43 470#define USB_VENDOR_ID_PLAYDOTCOM 0x0b43
444#define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII 0x0003 471#define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII 0x0003
445 472
@@ -449,16 +476,18 @@
449#define USB_VENDOR_ID_PRODIGE 0x05af 476#define USB_VENDOR_ID_PRODIGE 0x05af
450#define USB_DEVICE_ID_PRODIGE_CORDLESS 0x3062 477#define USB_DEVICE_ID_PRODIGE_CORDLESS 0x3062
451 478
479#define USB_VENDOR_ID_QUANTA 0x0408
480#define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH 0x3000
481#define USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN 0x3001
482
452#define USB_VENDOR_ID_ROCCAT 0x1e7d 483#define USB_VENDOR_ID_ROCCAT 0x1e7d
453#define USB_DEVICE_ID_ROCCAT_KONE 0x2ced 484#define USB_DEVICE_ID_ROCCAT_KONE 0x2ced
485#define USB_DEVICE_ID_ROCCAT_PYRA_WIRED 0x2c24
486#define USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS 0x2cf6
454 487
455#define USB_VENDOR_ID_SAITEK 0x06a3 488#define USB_VENDOR_ID_SAITEK 0x06a3
456#define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17 489#define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17
457 490
458#define USB_VENDOR_ID_QUANTA 0x0408
459#define USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH 0x3000
460#define USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN 0x3001
461
462#define USB_VENDOR_ID_SAMSUNG 0x0419 491#define USB_VENDOR_ID_SAMSUNG 0x0419
463#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001 492#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
464#define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE 0x0600 493#define USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE 0x0600
@@ -474,6 +503,12 @@
474#define USB_VENDOR_ID_STANTUM 0x1f87 503#define USB_VENDOR_ID_STANTUM 0x1f87
475#define USB_DEVICE_ID_MTP 0x0002 504#define USB_DEVICE_ID_MTP 0x0002
476 505
506#define USB_VENDOR_ID_STANTUM_STM 0x0483
507#define USB_DEVICE_ID_MTP_STM 0x3261
508
509#define USB_VENDOR_ID_STANTUM_SITRONIX 0x1403
510#define USB_DEVICE_ID_MTP_SITRONIX 0x5001
511
477#define USB_VENDOR_ID_SUN 0x0430 512#define USB_VENDOR_ID_SUN 0x0430
478#define USB_DEVICE_ID_RARITAN_KVM_DONGLE 0xcdab 513#define USB_DEVICE_ID_RARITAN_KVM_DONGLE 0xcdab
479 514
@@ -482,25 +517,31 @@
482 517
483#define USB_VENDOR_ID_THRUSTMASTER 0x044f 518#define USB_VENDOR_ID_THRUSTMASTER 0x044f
484 519
485#define USB_VENDOR_ID_TOUCHPACK 0x1bfd 520#define USB_VENDOR_ID_TOPSEED 0x0766
486#define USB_DEVICE_ID_TOUCHPACK_RTS 0x1688 521#define USB_DEVICE_ID_TOPSEED_CYBERLINK 0x0204
522
523#define USB_VENDOR_ID_TOPSEED2 0x1784
524#define USB_DEVICE_ID_TOPSEED2_RF_COMBO 0x0004
487 525
488#define USB_VENDOR_ID_TOPMAX 0x0663 526#define USB_VENDOR_ID_TOPMAX 0x0663
489#define USB_DEVICE_ID_TOPMAX_COBRAPAD 0x0103 527#define USB_DEVICE_ID_TOPMAX_COBRAPAD 0x0103
490 528
491#define USB_VENDOR_ID_TOPSEED 0x0766 529#define USB_VENDOR_ID_TOUCHPACK 0x1bfd
492#define USB_DEVICE_ID_TOPSEED_CYBERLINK 0x0204 530#define USB_DEVICE_ID_TOUCHPACK_RTS 0x1688
493 531
494#define USB_VENDOR_ID_TURBOX 0x062a 532#define USB_VENDOR_ID_TURBOX 0x062a
495#define USB_DEVICE_ID_TURBOX_KEYBOARD 0x0201 533#define USB_DEVICE_ID_TURBOX_KEYBOARD 0x0201
496#define USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART 0x7100 534#define USB_DEVICE_ID_TURBOX_TOUCHSCREEN_MOSART 0x7100
497 535
498#define USB_VENDOR_ID_TWINHAN 0x6253 536#define USB_VENDOR_ID_TWINHAN 0x6253
499#define USB_DEVICE_ID_TWINHAN_IR_REMOTE 0x0100 537#define USB_DEVICE_ID_TWINHAN_IR_REMOTE 0x0100
500 538
501#define USB_VENDOR_ID_UCLOGIC 0x5543 539#define USB_VENDOR_ID_UCLOGIC 0x5543
502#define USB_DEVICE_ID_UCLOGIC_TABLET_PF1209 0x0042 540#define USB_DEVICE_ID_UCLOGIC_TABLET_PF1209 0x0042
541#define USB_DEVICE_ID_UCLOGIC_TABLET_KNA5 0x6001
503#define USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U 0x0003 542#define USB_DEVICE_ID_UCLOGIC_TABLET_WP4030U 0x0003
543#define USB_DEVICE_ID_UCLOGIC_TABLET_WP5540U 0x0004
544#define USB_DEVICE_ID_UCLOGIC_TABLET_WP8060U 0x0005
504 545
505#define USB_VENDOR_ID_VERNIER 0x08f7 546#define USB_VENDOR_ID_VERNIER 0x08f7
506#define USB_DEVICE_ID_VERNIER_LABPRO 0x0001 547#define USB_DEVICE_ID_VERNIER_LABPRO 0x0001
@@ -513,6 +554,12 @@
513#define USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH 0x81 554#define USB_DEVICE_ID_WACOM_GRAPHIRE_BLUETOOTH 0x81
514#define USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH 0xbd 555#define USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH 0xbd
515 556
557#define USB_VENDOR_ID_WALTOP 0x172f
558#define USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH 0x0032
559#define USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH 0x0034
560#define USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH 0x0501
561#define USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH 0x0500
562
516#define USB_VENDOR_ID_WISEGROUP 0x0925 563#define USB_VENDOR_ID_WISEGROUP 0x0925
517#define USB_DEVICE_ID_SMARTJOY_PLUS 0x0005 564#define USB_DEVICE_ID_SMARTJOY_PLUS 0x0005
518#define USB_DEVICE_ID_1_PHIDGETSERVO_20 0x8101 565#define USB_DEVICE_ID_1_PHIDGETSERVO_20 0x8101
diff --git a/usr/src/dkms_source_tree/hid-input.c b/usr/src/dkms_source_tree/hid-input.c
index 9d97934..d8d372b 100644
--- a/usr/src/dkms_source_tree/hid-input.c
+++ b/usr/src/dkms_source_tree/hid-input.c
@@ -68,39 +68,52 @@ static const struct {
68#define map_key_clear(c) hid_map_usage_clear(hidinput, usage, &bit, \ 68#define map_key_clear(c) hid_map_usage_clear(hidinput, usage, &bit, \
69 &max, EV_KEY, (c)) 69 &max, EV_KEY, (c))
70 70
71static inline int match_scancode(unsigned int code, unsigned int scancode) 71static bool match_scancode(struct hid_usage *usage,
72 unsigned int cur_idx, unsigned int scancode)
72{ 73{
73 if (scancode == 0) 74 return (usage->hid & (HID_USAGE_PAGE | HID_USAGE)) == scancode;
74 return 1;
75
76 return (code & (HID_USAGE_PAGE | HID_USAGE)) == scancode;
77} 75}
78 76
79static inline int match_keycode(unsigned int code, unsigned int keycode) 77static bool match_keycode(struct hid_usage *usage,
78 unsigned int cur_idx, unsigned int keycode)
80{ 79{
81 if (keycode == 0) 80 /*
82 return 1; 81 * We should exclude unmapped usages when doing lookup by keycode.
82 */
83 return (usage->type == EV_KEY && usage->code == keycode);
84}
83 85
84 return code == keycode; 86static bool match_index(struct hid_usage *usage,
87 unsigned int cur_idx, unsigned int idx)
88{
89 return cur_idx == idx;
85} 90}
86 91
92typedef bool (*hid_usage_cmp_t)(struct hid_usage *usage,
93 unsigned int cur_idx, unsigned int val);
94
87static struct hid_usage *hidinput_find_key(struct hid_device *hid, 95static struct hid_usage *hidinput_find_key(struct hid_device *hid,
88 unsigned int scancode, 96 hid_usage_cmp_t match,
89 unsigned int keycode) 97 unsigned int value,
98 unsigned int *usage_idx)
90{ 99{
91 int i, j, k; 100 unsigned int i, j, k, cur_idx = 0;
92 struct hid_report *report; 101 struct hid_report *report;
93 struct hid_usage *usage; 102 struct hid_usage *usage;
94 103
95 for (k = HID_INPUT_REPORT; k <= HID_OUTPUT_REPORT; k++) { 104 for (k = HID_INPUT_REPORT; k <= HID_OUTPUT_REPORT; k++) {
96 list_for_each_entry(report, &hid->report_enum[k].report_list, list) { 105 list_for_each_entry(report, &hid->report_enum[k].report_list, list) {
97 for (i = 0; i < report->maxfield; i++) { 106 for (i = 0; i < report->maxfield; i++) {
98 for ( j = 0; j < report->field[i]->maxusage; j++) { 107 for (j = 0; j < report->field[i]->maxusage; j++) {
99 usage = report->field[i]->usage + j; 108 usage = report->field[i]->usage + j;
100 if (usage->type == EV_KEY && 109 if (usage->type == EV_KEY || usage->type == 0) {
101 match_scancode(usage->hid, scancode) && 110 if (match(usage, cur_idx, value)) {
102 match_keycode(usage->code, keycode)) 111 if (usage_idx)
103 return usage; 112 *usage_idx = cur_idx;
113 return usage;
114 }
115 cur_idx++;
116 }
104 } 117 }
105 } 118 }
106 } 119 }
@@ -108,39 +121,68 @@ static struct hid_usage *hidinput_find_key(struct hid_device *hid,
108 return NULL; 121 return NULL;
109} 122}
110 123
124static struct hid_usage *hidinput_locate_usage(struct hid_device *hid,
125 const struct input_keymap_entry *ke,
126 unsigned int *index)
127{
128 struct hid_usage *usage;
129 unsigned int scancode;
130
131 if (ke->flags & INPUT_KEYMAP_BY_INDEX)
132 usage = hidinput_find_key(hid, match_index, ke->index, index);
133 else if (input_scancode_to_scalar(ke, &scancode) == 0)
134 usage = hidinput_find_key(hid, match_scancode, scancode, index);
135 else
136 usage = NULL;
137
138 return usage;
139}
140
111static int hidinput_getkeycode(struct input_dev *dev, 141static int hidinput_getkeycode(struct input_dev *dev,
112 unsigned int scancode, unsigned int *keycode) 142 struct input_keymap_entry *ke)
113{ 143{
114 struct hid_device *hid = input_get_drvdata(dev); 144 struct hid_device *hid = input_get_drvdata(dev);
115 struct hid_usage *usage; 145 struct hid_usage *usage;
146 unsigned int scancode, index;
116 147
117 usage = hidinput_find_key(hid, scancode, 0); 148 usage = hidinput_locate_usage(hid, ke, &index);
118 if (usage) { 149 if (usage) {
119 *keycode = usage->code; 150 ke->keycode = usage->type == EV_KEY ?
151 usage->code : KEY_RESERVED;
152 ke->index = index;
153 scancode = usage->hid & (HID_USAGE_PAGE | HID_USAGE);
154 ke->len = sizeof(scancode);
155 memcpy(ke->scancode, &scancode, sizeof(scancode));
120 return 0; 156 return 0;
121 } 157 }
158
122 return -EINVAL; 159 return -EINVAL;
123} 160}
124 161
125static int hidinput_setkeycode(struct input_dev *dev, 162static int hidinput_setkeycode(struct input_dev *dev,
126 unsigned int scancode, unsigned int keycode) 163 const struct input_keymap_entry *ke,
164 unsigned int *old_keycode)
127{ 165{
128 struct hid_device *hid = input_get_drvdata(dev); 166 struct hid_device *hid = input_get_drvdata(dev);
129 struct hid_usage *usage; 167 struct hid_usage *usage;
130 int old_keycode;
131 168
132 usage = hidinput_find_key(hid, scancode, 0); 169 usage = hidinput_locate_usage(hid, ke, NULL);
133 if (usage) { 170 if (usage) {
134 old_keycode = usage->code; 171 *old_keycode = usage->type == EV_KEY ?
135 usage->code = keycode; 172 usage->code : KEY_RESERVED;
173 usage->code = ke->keycode;
136 174
137 clear_bit(old_keycode, dev->keybit); 175 clear_bit(*old_keycode, dev->keybit);
138 set_bit(usage->code, dev->keybit); 176 set_bit(usage->code, dev->keybit);
139 dbg_hid(KERN_DEBUG "Assigned keycode %d to HID usage code %x\n", keycode, scancode); 177 dbg_hid("Assigned keycode %d to HID usage code %x\n",
140 /* Set the keybit for the old keycode if the old keycode is used 178 usage->code, usage->hid);
141 * by another key */ 179
142 if (hidinput_find_key (hid, 0, old_keycode)) 180 /*
143 set_bit(old_keycode, dev->keybit); 181 * Set the keybit for the old keycode if the old keycode is used
182 * by another key
183 */
184 if (hidinput_find_key(hid, match_keycode, *old_keycode, NULL))
185 set_bit(*old_keycode, dev->keybit);
144 186
145 return 0; 187 return 0;
146 } 188 }
@@ -149,6 +191,86 @@ static int hidinput_setkeycode(struct input_dev *dev,
149} 191}
150 192
151 193
194/**
195 * hidinput_calc_abs_res - calculate an absolute axis resolution
196 * @field: the HID report field to calculate resolution for
197 * @code: axis code
198 *
199 * The formula is:
200 * (logical_maximum - logical_minimum)
201 * resolution = ----------------------------------------------------------
202 * (physical_maximum - physical_minimum) * 10 ^ unit_exponent
203 *
204 * as seen in the HID specification v1.11 6.2.2.7 Global Items.
205 *
206 * Only exponent 1 length units are processed. Centimeters and inches are
207 * converted to millimeters. Degrees are converted to radians.
208 */
209static __s32 hidinput_calc_abs_res(const struct hid_field *field, __u16 code)
210{
211 __s32 unit_exponent = field->unit_exponent;
212 __s32 logical_extents = field->logical_maximum -
213 field->logical_minimum;
214 __s32 physical_extents = field->physical_maximum -
215 field->physical_minimum;
216 __s32 prev;
217
218 /* Check if the extents are sane */
219 if (logical_extents <= 0 || physical_extents <= 0)
220 return 0;
221
222 /*
223 * Verify and convert units.
224 * See HID specification v1.11 6.2.2.7 Global Items for unit decoding
225 */
226 if (code == ABS_X || code == ABS_Y || code == ABS_Z) {
227 if (field->unit == 0x11) { /* If centimeters */
228 /* Convert to millimeters */
229 unit_exponent += 1;
230 } else if (field->unit == 0x13) { /* If inches */
231 /* Convert to millimeters */
232 prev = physical_extents;
233 physical_extents *= 254;
234 if (physical_extents < prev)
235 return 0;
236 unit_exponent -= 1;
237 } else {
238 return 0;
239 }
240 } else if (code == ABS_RX || code == ABS_RY || code == ABS_RZ) {
241 if (field->unit == 0x14) { /* If degrees */
242 /* Convert to radians */
243 prev = logical_extents;
244 logical_extents *= 573;
245 if (logical_extents < prev)
246 return 0;
247 unit_exponent += 1;
248 } else if (field->unit != 0x12) { /* If not radians */
249 return 0;
250 }
251 } else {
252 return 0;
253 }
254
255 /* Apply negative unit exponent */
256 for (; unit_exponent < 0; unit_exponent++) {
257 prev = logical_extents;
258 logical_extents *= 10;
259 if (logical_extents < prev)
260 return 0;
261 }
262 /* Apply positive unit exponent */
263 for (; unit_exponent > 0; unit_exponent--) {
264 prev = physical_extents;
265 physical_extents *= 10;
266 if (physical_extents < prev)
267 return 0;
268 }
269
270 /* Calculate resolution */
271 return logical_extents / physical_extents;
272}
273
152static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_field *field, 274static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_field *field,
153 struct hid_usage *usage) 275 struct hid_usage *usage)
154{ 276{
@@ -199,11 +321,11 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
199 case HID_GD_MOUSE: 321 case HID_GD_MOUSE:
200 case HID_GD_POINTER: code += 0x110; break; 322 case HID_GD_POINTER: code += 0x110; break;
201 case HID_GD_JOYSTICK: 323 case HID_GD_JOYSTICK:
202 if (code <= 0xf) 324 if (code <= 0xf)
203 code += BTN_JOYSTICK; 325 code += BTN_JOYSTICK;
204 else 326 else
205 code += BTN_TRIGGER_HAPPY; 327 code += BTN_TRIGGER_HAPPY;
206 break; 328 break;
207 case HID_GD_GAMEPAD: code += 0x130; break; 329 case HID_GD_GAMEPAD: code += 0x130; break;
208 default: 330 default:
209 switch (field->physical) { 331 switch (field->physical) {
@@ -301,6 +423,9 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
301 423
302 case HID_UP_DIGITIZER: 424 case HID_UP_DIGITIZER:
303 switch (usage->hid & 0xff) { 425 switch (usage->hid & 0xff) {
426 case 0x00: /* Undefined */
427 goto ignore;
428
304 case 0x30: /* TipPressure */ 429 case 0x30: /* TipPressure */
305 if (!test_bit(BTN_TOUCH, input->keybit)) { 430 if (!test_bit(BTN_TOUCH, input->keybit)) {
306 device->quirks |= HID_QUIRK_NOTOUCH; 431 device->quirks |= HID_QUIRK_NOTOUCH;
@@ -333,6 +458,10 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
333 map_key_clear(BTN_STYLUS); 458 map_key_clear(BTN_STYLUS);
334 break; 459 break;
335 460
461 case 0x46: /* TabletPick */
462 map_key_clear(BTN_STYLUS2);
463 break;
464
336 default: goto unknown; 465 default: goto unknown;
337 } 466 }
338 break; 467 break;
@@ -480,7 +609,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
480 609
481 case HID_UP_LOGIVENDOR: 610 case HID_UP_LOGIVENDOR:
482 goto ignore; 611 goto ignore;
483 612
484 case HID_UP_PID: 613 case HID_UP_PID:
485 switch (usage->hid & HID_USAGE) { 614 switch (usage->hid & HID_USAGE) {
486 case 0xa4: map_key_clear(BTN_DEAD); break; 615 case 0xa4: map_key_clear(BTN_DEAD); break;
@@ -534,6 +663,9 @@ mapped:
534 input_set_abs_params(input, usage->code, a, b, (b - a) >> 8, (b - a) >> 4); 663 input_set_abs_params(input, usage->code, a, b, (b - a) >> 8, (b - a) >> 4);
535 else input_set_abs_params(input, usage->code, a, b, 0, 0); 664 else input_set_abs_params(input, usage->code, a, b, 0, 0);
536 665
666 input_abs_set_res(input, usage->code,
667 hidinput_calc_abs_res(field, usage->code));
668
537 /* use a larger default input buffer for MT devices */ 669 /* use a larger default input buffer for MT devices */
538 if (usage->code == ABS_MT_POSITION_X && input->hint_events_per_packet == 0) 670 if (usage->code == ABS_MT_POSITION_X && input->hint_events_per_packet == 0)
539 input_set_events_per_packet(input, 60); 671 input_set_events_per_packet(input, 60);
@@ -589,9 +721,9 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
589 hat_dir = (value - usage->hat_min) * 8 / (usage->hat_max - usage->hat_min + 1) + 1; 721 hat_dir = (value - usage->hat_min) * 8 / (usage->hat_max - usage->hat_min + 1) + 1;
590 if (hat_dir < 0 || hat_dir > 8) hat_dir = 0; 722 if (hat_dir < 0 || hat_dir > 8) hat_dir = 0;
591 input_event(input, usage->type, usage->code , hid_hat_to_axis[hat_dir].x); 723 input_event(input, usage->type, usage->code , hid_hat_to_axis[hat_dir].x);
592 input_event(input, usage->type, usage->code + 1, hid_hat_to_axis[hat_dir].y); 724 input_event(input, usage->type, usage->code + 1, hid_hat_to_axis[hat_dir].y);
593 return; 725 return;
594 } 726 }
595 727
596 if (usage->hid == (HID_UP_DIGITIZER | 0x003c)) { /* Invert */ 728 if (usage->hid == (HID_UP_DIGITIZER | 0x003c)) { /* Invert */
597 *quirks = value ? (*quirks | HID_QUIRK_INVERT) : (*quirks & ~HID_QUIRK_INVERT); 729 *quirks = value ? (*quirks | HID_QUIRK_INVERT) : (*quirks & ~HID_QUIRK_INVERT);
@@ -748,8 +880,8 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)
748 hid->ll_driver->hidinput_input_event; 880 hid->ll_driver->hidinput_input_event;
749 input_dev->open = hidinput_open; 881 input_dev->open = hidinput_open;
750 input_dev->close = hidinput_close; 882 input_dev->close = hidinput_close;
751 input_dev->setkeycode = hidinput_setkeycode; 883 input_dev->setkeycode_new = hidinput_setkeycode;
752 input_dev->getkeycode = hidinput_getkeycode; 884 input_dev->getkeycode_new = hidinput_getkeycode;
753 885
754 input_dev->name = hid->name; 886 input_dev->name = hid->name;
755 input_dev->phys = hid->phys; 887 input_dev->phys = hid->phys;
diff --git a/usr/src/dkms_source_tree/hidraw.c b/usr/src/dkms_source_tree/hidraw.c
index 3ccd478..e1f0748 100644
--- a/usr/src/dkms_source_tree/hidraw.c
+++ b/usr/src/dkms_source_tree/hidraw.c
@@ -32,7 +32,6 @@
32#include <linux/hid.h> 32#include <linux/hid.h>
33#include <linux/mutex.h> 33#include <linux/mutex.h>
34#include <linux/sched.h> 34#include <linux/sched.h>
35#include <linux/smp_lock.h>
36 35
37#include <linux/hidraw.h> 36#include <linux/hidraw.h>
38 37
@@ -46,7 +45,6 @@ static ssize_t hidraw_read(struct file *file, char __user *buffer, size_t count,
46{ 45{
47 struct hidraw_list *list = file->private_data; 46 struct hidraw_list *list = file->private_data;
48 int ret = 0, len; 47 int ret = 0, len;
49 char *report;
50 DECLARE_WAITQUEUE(wait, current); 48 DECLARE_WAITQUEUE(wait, current);
51 49
52 mutex_lock(&list->read_mutex); 50 mutex_lock(&list->read_mutex);
@@ -84,7 +82,6 @@ static ssize_t hidraw_read(struct file *file, char __user *buffer, size_t count,
84 if (ret) 82 if (ret)
85 goto out; 83 goto out;
86 84
87 report = list->buffer[list->tail].value;
88 len = list->buffer[list->tail].len > count ? 85 len = list->buffer[list->tail].len > count ?
89 count : list->buffer[list->tail].len; 86 count : list->buffer[list->tail].len;
90 87
@@ -111,6 +108,12 @@ static ssize_t hidraw_write(struct file *file, const char __user *buffer, size_t
111 int ret = 0; 108 int ret = 0;
112 109
113 mutex_lock(&minors_lock); 110 mutex_lock(&minors_lock);
111
112 if (!hidraw_table[minor]) {
113 ret = -ENODEV;
114 goto out;
115 }
116
114 dev = hidraw_table[minor]->hid; 117 dev = hidraw_table[minor]->hid;
115 118
116 if (!dev->hid_output_raw_report) { 119 if (!dev->hid_output_raw_report) {
@@ -214,9 +217,13 @@ static int hidraw_release(struct inode * inode, struct file * file)
214 unsigned int minor = iminor(inode); 217 unsigned int minor = iminor(inode);
215 struct hidraw *dev; 218 struct hidraw *dev;
216 struct hidraw_list *list = file->private_data; 219 struct hidraw_list *list = file->private_data;
220 int ret;
217 221
218 if (!hidraw_table[minor]) 222 mutex_lock(&minors_lock);
219 return -ENODEV; 223 if (!hidraw_table[minor]) {
224 ret = -ENODEV;
225 goto unlock;
226 }
220 227
221 list_del(&list->node); 228 list_del(&list->node);
222 dev = hidraw_table[minor]; 229 dev = hidraw_table[minor];
@@ -229,10 +236,12 @@ static int hidraw_release(struct inode * inode, struct file * file)
229 kfree(list->hidraw); 236 kfree(list->hidraw);
230 } 237 }
231 } 238 }
232
233 kfree(list); 239 kfree(list);
240 ret = 0;
241unlock:
242 mutex_unlock(&minors_lock);
234 243
235 return 0; 244 return ret;
236} 245}
237 246
238static long hidraw_ioctl(struct file *file, unsigned int cmd, 247static long hidraw_ioctl(struct file *file, unsigned int cmd,
@@ -246,6 +255,10 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd,
246 255
247 mutex_lock(&minors_lock); 256 mutex_lock(&minors_lock);
248 dev = hidraw_table[minor]; 257 dev = hidraw_table[minor];
258 if (!dev) {
259 ret = -ENODEV;
260 goto out;
261 }
249 262
250 switch (cmd) { 263 switch (cmd) {
251 case HIDIOCGRDESCSIZE: 264 case HIDIOCGRDESCSIZE:
@@ -319,6 +332,7 @@ static long hidraw_ioctl(struct file *file, unsigned int cmd,
319 332
320 ret = -ENOTTY; 333 ret = -ENOTTY;
321 } 334 }
335out:
322 mutex_unlock(&minors_lock); 336 mutex_unlock(&minors_lock);
323 return ret; 337 return ret;
324} 338}
@@ -331,6 +345,7 @@ static const struct file_operations hidraw_ops = {
331 .open = hidraw_open, 345 .open = hidraw_open,
332 .release = hidraw_release, 346 .release = hidraw_release,
333 .unlocked_ioctl = hidraw_ioctl, 347 .unlocked_ioctl = hidraw_ioctl,
348 .llseek = noop_llseek,
334}; 349};
335 350
336void hidraw_report_event(struct hid_device *hid, u8 *data, int len) 351void hidraw_report_event(struct hid_device *hid, u8 *data, int len)