Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
4a247a41
cloud-kernel
项目概览
openanolis
/
cloud-kernel
1 年多 前同步成功
通知
160
Star
36
Fork
7
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
10
列表
看板
标记
里程碑
合并请求
2
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
cloud-kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
10
Issue
10
列表
看板
标记
里程碑
合并请求
2
合并请求
2
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
提交
4a247a41
编写于
3月 20, 2012
作者:
J
Jiri Kosina
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'upstream' into for-linus
Conflicts: drivers/hid/Makefile
上级
77aa8e65
4d5df5d1
变更
15
展开全部
隐藏空白更改
内联
并排
Showing
15 changed file
with
860 addition
and
1084 deletion
+860
-1084
drivers/hid/Kconfig
drivers/hid/Kconfig
+24
-4
drivers/hid/Makefile
drivers/hid/Makefile
+2
-0
drivers/hid/hid-chicony.c
drivers/hid/hid-chicony.c
+7
-0
drivers/hid/hid-core.c
drivers/hid/hid-core.c
+19
-2
drivers/hid/hid-ids.h
drivers/hid/hid-ids.h
+16
-0
drivers/hid/hid-kye.c
drivers/hid/hid-kye.c
+382
-17
drivers/hid/hid-magicmouse.c
drivers/hid/hid-magicmouse.c
+2
-0
drivers/hid/hid-multitouch.c
drivers/hid/hid-multitouch.c
+5
-0
drivers/hid/hid-saitek.c
drivers/hid/hid-saitek.c
+70
-0
drivers/hid/hid-sjoy.c
drivers/hid/hid-sjoy.c
+4
-2
drivers/hid/hid-tivo.c
drivers/hid/hid-tivo.c
+90
-0
drivers/hid/hid-uclogic.c
drivers/hid/hid-uclogic.c
+11
-402
drivers/hid/hid-wacom.c
drivers/hid/hid-wacom.c
+1
-0
drivers/hid/hid-waltop.c
drivers/hid/hid-waltop.c
+224
-657
drivers/hid/usbhid/hid-quirks.c
drivers/hid/usbhid/hid-quirks.c
+3
-0
未找到文件。
drivers/hid/Kconfig
浏览文件 @
4a247a41
...
...
@@ -200,11 +200,14 @@ config HID_KEYTOUCH
- Keytouch IEC 60945
config HID_KYE
tristate "K
ye/Genius Ergo Mouse" if EXPERT
tristate "K
YE/Genius devices"
depends on USB_HID
default !EXPERT
---help---
Support for Kye/Genius Ergo Mouse.
Support for KYE/Genius devices not fully compliant with HID standard:
- Ergo Mouse
- EasyPen i405X tablet
- MousePen i608X tablet
- EasyPen M610X tablet
config HID_UCLOGIC
tristate "UC-Logic"
...
...
@@ -257,7 +260,9 @@ config HID_LOGITECH_DJ
---help---
Say Y if you want support for Logitech Unifying receivers and devices.
Unifying receivers are capable of pairing up to 6 Logitech compliant
devices to the same receiver.
devices to the same receiver. Without this driver it will be handled by
generic USB_HID driver and all incomming events will be multiplexed
into a single mouse and a single keyboard device.
config LOGITECH_FF
bool "Logitech force feedback support"
...
...
@@ -485,6 +490,15 @@ config HID_ROCCAT
Say Y here if you have a Roccat mouse or keyboard and want
support for its special functionalities.
config HID_SAITEK
tristate "Saitek non-fully HID-compliant devices"
depends on USB_HID
---help---
Support for Saitek devices that are not fully compliant with the
HID standard.
Currently only supports the PS1000 controller.
config HID_SAMSUNG
tristate "Samsung InfraRed remote control or keyboards"
depends on USB_HID
...
...
@@ -549,6 +563,12 @@ config SMARTJOYPLUS_FF
Say Y here if you have a SmartJoy PLUS PS2/USB adapter and want to
enable force feedback support for it.
config HID_TIVO
tristate "TiVo Slide Bluetooth remote control support"
depends on (USB_HID || BT_HIDP)
---help---
Say Y if you have a TiVo Slide Bluetooth remote control.
config HID_TOPSEED
tristate "TopSeed Cyberlink, BTC Emprex, Conceptronic remote control support"
depends on USB_HID
...
...
drivers/hid/Makefile
浏览文件 @
4a247a41
...
...
@@ -67,6 +67,7 @@ obj-$(CONFIG_HID_PRIMAX) += hid-primax.o
obj-$(CONFIG_HID_ROCCAT)
+=
hid-roccat.o hid-roccat-common.o
\
hid-roccat-arvo.o hid-roccat-isku.o hid-roccat-kone.o
\
hid-roccat-koneplus.o hid-roccat-kovaplus.o hid-roccat-pyra.o
obj-$(CONFIG_HID_SAITEK)
+=
hid-saitek.o
obj-$(CONFIG_HID_SAMSUNG)
+=
hid-samsung.o
obj-$(CONFIG_HID_SMARTJOYPLUS)
+=
hid-sjoy.o
obj-$(CONFIG_HID_SONY)
+=
hid-sony.o
...
...
@@ -74,6 +75,7 @@ obj-$(CONFIG_HID_SPEEDLINK) += hid-speedlink.o
obj-$(CONFIG_HID_SUNPLUS)
+=
hid-sunplus.o
obj-$(CONFIG_HID_GREENASIA)
+=
hid-gaff.o
obj-$(CONFIG_HID_THRUSTMASTER)
+=
hid-tmff.o
obj-$(CONFIG_HID_TIVO)
+=
hid-tivo.o
obj-$(CONFIG_HID_TOPSEED)
+=
hid-topseed.o
obj-$(CONFIG_HID_TWINHAN)
+=
hid-twinhan.o
obj-$(CONFIG_HID_UCLOGIC)
+=
hid-uclogic.o
...
...
drivers/hid/hid-chicony.c
浏览文件 @
4a247a41
...
...
@@ -45,6 +45,12 @@ static int ch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
case
0xff09
:
ch_map_key_clear
(
BTN_9
);
break
;
case
0xff0a
:
ch_map_key_clear
(
BTN_A
);
break
;
case
0xff0b
:
ch_map_key_clear
(
BTN_B
);
break
;
case
0x00f1
:
ch_map_key_clear
(
KEY_WLAN
);
break
;
case
0x00f2
:
ch_map_key_clear
(
KEY_BRIGHTNESSDOWN
);
break
;
case
0x00f3
:
ch_map_key_clear
(
KEY_BRIGHTNESSUP
);
break
;
case
0x00f4
:
ch_map_key_clear
(
KEY_DISPLAY_OFF
);
break
;
case
0x00f7
:
ch_map_key_clear
(
KEY_CAMERA
);
break
;
case
0x00f8
:
ch_map_key_clear
(
KEY_PROG1
);
break
;
default:
return
0
;
}
...
...
@@ -53,6 +59,7 @@ static int ch_input_mapping(struct hid_device *hdev, struct hid_input *hi,
static
const
struct
hid_device_id
ch_devices
[]
=
{
{
HID_USB_DEVICE
(
USB_VENDOR_ID_CHICONY
,
USB_DEVICE_ID_CHICONY_TACTICAL_PAD
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_CHICONY
,
USB_DEVICE_ID_CHICONY_WIRELESS2
)
},
{
}
};
MODULE_DEVICE_TABLE
(
hid
,
ch_devices
);
...
...
drivers/hid/hid-core.c
浏览文件 @
4a247a41
...
...
@@ -4,7 +4,7 @@
* Copyright (c) 1999 Andreas Gal
* Copyright (c) 2000-2005 Vojtech Pavlik <vojtech@suse.cz>
* Copyright (c) 2005 Michael Haboustak <mike-@cinci.rr.com> for Concept2, Inc
* Copyright (c) 2006-201
0
Jiri Kosina
* Copyright (c) 2006-201
2
Jiri Kosina
*/
/*
...
...
@@ -50,6 +50,10 @@ module_param_named(debug, hid_debug, int, 0600);
MODULE_PARM_DESC
(
debug
,
"toggle HID debugging messages"
);
EXPORT_SYMBOL_GPL
(
hid_debug
);
static
int
hid_ignore_special_drivers
=
0
;
module_param_named
(
ignore_special_drivers
,
hid_ignore_special_drivers
,
int
,
0600
);
MODULE_PARM_DESC
(
debug
,
"Ignore any special drivers and handle all devices by generic driver"
);
/*
* Register a new report for a device.
*/
...
...
@@ -1395,6 +1399,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
{
HID_USB_DEVICE
(
USB_VENDOR_ID_CHERRY
,
USB_DEVICE_ID_CHERRY_CYMOTION_SOLAR
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_CHICONY
,
USB_DEVICE_ID_CHICONY_TACTICAL_PAD
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_CHICONY
,
USB_DEVICE_ID_CHICONY_WIRELESS
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_CHICONY
,
USB_DEVICE_ID_CHICONY_WIRELESS2
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_CHUNGHWAT
,
USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_CREATIVELABS
,
USB_DEVICE_ID_PRODIKEYS_PCMIDI
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_CVTOUCH
,
USB_DEVICE_ID_CVTOUCH_SCREEN
)
},
...
...
@@ -1418,6 +1423,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
{
HID_USB_DEVICE
(
USB_VENDOR_ID_ELO
,
USB_DEVICE_ID_ELO_TS2515
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_EMS
,
USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_EZKEY
,
USB_DEVICE_ID_BTC_8193
)
},
{
HID_BLUETOOTH_DEVICE
(
USB_VENDOR_ID_FRUCTEL
,
USB_DEVICE_ID_GAMETEL_MT_MODE
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_GAMERON
,
USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_GAMERON
,
USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_GENERAL_TOUCH
,
USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS
)
},
...
...
@@ -1436,6 +1442,9 @@ static const struct hid_device_id hid_have_special_driver[] = {
{
HID_USB_DEVICE
(
USB_VENDOR_ID_KENSINGTON
,
USB_DEVICE_ID_KS_SLIMBLADE
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_KEYTOUCH
,
USB_DEVICE_ID_KEYTOUCH_IEC
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_KYE
,
USB_DEVICE_ID_KYE_ERGO_525V
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_KYE
,
USB_DEVICE_ID_KYE_EASYPEN_I405X
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_KYE
,
USB_DEVICE_ID_KYE_MOUSEPEN_I608X
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_KYE
,
USB_DEVICE_ID_KYE_EASYPEN_M610X
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LABTEC
,
USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LCPOWER
,
USB_DEVICE_ID_LCPOWER_LC1000
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LG
,
USB_DEVICE_ID_LG_MULTITOUCH
)
},
...
...
@@ -1463,8 +1472,10 @@ static const struct hid_device_id hid_have_special_driver[] = {
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LOGITECH
,
USB_DEVICE_ID_LOGITECH_DFGT_WHEEL
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LOGITECH
,
USB_DEVICE_ID_LOGITECH_G25_WHEEL
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LOGITECH
,
USB_DEVICE_ID_LOGITECH_G27_WHEEL
)
},
#if IS_ENABLED(CONFIG_HID_LOGITECH_DJ)
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LOGITECH
,
USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LOGITECH
,
USB_DEVICE_ID_LOGITECH_UNIFYING_RECEIVER_2
)
},
#endif
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LOGITECH
,
USB_DEVICE_ID_LOGITECH_WII_WHEEL
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LOGITECH
,
USB_DEVICE_ID_LOGITECH_RUMBLEPAD2
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_LOGITECH
,
USB_DEVICE_ID_SPACETRAVELLER
)
},
...
...
@@ -1519,6 +1530,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
{
HID_USB_DEVICE
(
USB_VENDOR_ID_ROCCAT
,
USB_DEVICE_ID_ROCCAT_KOVAPLUS
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_ROCCAT
,
USB_DEVICE_ID_ROCCAT_PYRA_WIRED
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_ROCCAT
,
USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SAITEK
,
USB_DEVICE_ID_SAITEK_PS1000
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SAMSUNG
,
USB_DEVICE_ID_SAMSUNG_IR_REMOTE
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SAMSUNG
,
USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SKYCABLE
,
USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER
)
},
...
...
@@ -1538,6 +1550,8 @@ static const struct hid_device_id hid_have_special_driver[] = {
{
HID_USB_DEVICE
(
USB_VENDOR_ID_THRUSTMASTER
,
0xb653
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_THRUSTMASTER
,
0xb654
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_THRUSTMASTER
,
0xb65a
)
},
{
HID_BLUETOOTH_DEVICE
(
USB_VENDOR_ID_TIVO
,
USB_DEVICE_ID_TIVO_SLIDE_BT
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_TIVO
,
USB_DEVICE_ID_TIVO_SLIDE
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_TOPSEED
,
USB_DEVICE_ID_TOPSEED_CYBERLINK
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_TOPSEED2
,
USB_DEVICE_ID_TOPSEED2_RF_COMBO
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_TOUCH_INTL
,
USB_DEVICE_ID_TOUCH_INTL_MULTI_TOUCH
)
},
...
...
@@ -1551,6 +1565,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
{
HID_USB_DEVICE
(
USB_VENDOR_ID_UNITEC
,
USB_DEVICE_ID_UNITEC_USB_TOUCH_0709
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_UNITEC
,
USB_DEVICE_ID_UNITEC_USB_TOUCH_0A19
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP
,
USB_DEVICE_ID_SMARTJOY_PLUS
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP
,
USB_DEVICE_ID_SUPER_JOY_BOX_3
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP
,
USB_DEVICE_ID_DUAL_USB_JOYPAD
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP_LTD
,
USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP_LTD
,
USB_DEVICE_ID_SUPER_DUAL_BOX_PRO
)
},
...
...
@@ -1559,6 +1574,8 @@ static const struct hid_device_id hid_have_special_driver[] = {
{
HID_BLUETOOTH_DEVICE
(
USB_VENDOR_ID_WACOM
,
USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WALTOP
,
USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WALTOP
,
USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WALTOP
,
USB_DEVICE_ID_WALTOP_Q_PAD
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WALTOP
,
USB_DEVICE_ID_WALTOP_PID_0038
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WALTOP
,
USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WALTOP
,
USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_XAT
,
USB_DEVICE_ID_XAT_CSR
)
},
...
...
@@ -1674,7 +1691,7 @@ static int hid_bus_match(struct device *dev, struct device_driver *drv)
return
0
;
/* generic wants all that don't have specialized driver */
if
(
!
strncmp
(
hdrv
->
name
,
"generic-"
,
8
))
if
(
!
strncmp
(
hdrv
->
name
,
"generic-"
,
8
)
&&
!
hid_ignore_special_drivers
)
return
!
hid_match_id
(
hdev
,
hid_have_special_driver
);
return
1
;
...
...
drivers/hid/hid-ids.h
浏览文件 @
4a247a41
...
...
@@ -177,6 +177,7 @@
#define USB_VENDOR_ID_CH 0x068e
#define USB_DEVICE_ID_CH_PRO_THROTTLE 0x00f1
#define USB_DEVICE_ID_CH_PRO_PEDALS 0x00f2
#define USB_DEVICE_ID_CH_FIGHTERSTICK 0x00f3
#define USB_DEVICE_ID_CH_COMBATSTICK 0x00f4
#define USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE 0x0051
#define USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE 0x00ff
...
...
@@ -194,6 +195,7 @@
#define USB_DEVICE_ID_CHICONY_TACTICAL_PAD 0x0418
#define USB_DEVICE_ID_CHICONY_MULTI_TOUCH 0xb19d
#define USB_DEVICE_ID_CHICONY_WIRELESS 0x0618
#define USB_DEVICE_ID_CHICONY_WIRELESS2 0x1123
#define USB_VENDOR_ID_CHUNGHWAT 0x2247
#define USB_DEVICE_ID_CHUNGHWAT_MULTITOUCH 0x0001
...
...
@@ -280,6 +282,9 @@
#define USB_VENDOR_ID_EZKEY 0x0518
#define USB_DEVICE_ID_BTC_8193 0x0002
#define USB_VENDOR_ID_FRUCTEL 0x25B6
#define USB_DEVICE_ID_GAMETEL_MT_MODE 0x0002
#define USB_VENDOR_ID_GAMERON 0x0810
#define USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR 0x0001
#define USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR 0x0002
...
...
@@ -417,6 +422,9 @@
#define USB_VENDOR_ID_KYE 0x0458
#define USB_DEVICE_ID_KYE_ERGO_525V 0x0087
#define USB_DEVICE_ID_KYE_GPEN_560 0x5003
#define USB_DEVICE_ID_KYE_EASYPEN_I405X 0x5010
#define USB_DEVICE_ID_KYE_MOUSEPEN_I608X 0x5011
#define USB_DEVICE_ID_KYE_EASYPEN_M610X 0x5013
#define USB_VENDOR_ID_LABTEC 0x1020
#define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD 0x0006
...
...
@@ -629,6 +637,7 @@
#define USB_VENDOR_ID_SAITEK 0x06a3
#define USB_DEVICE_ID_SAITEK_RUMBLEPAD 0xff17
#define USB_DEVICE_ID_SAITEK_PS1000 0x0621
#define USB_VENDOR_ID_SAMSUNG 0x0419
#define USB_DEVICE_ID_SAMSUNG_IR_REMOTE 0x0001
...
...
@@ -670,6 +679,10 @@
#define USB_VENDOR_ID_THRUSTMASTER 0x044f
#define USB_VENDOR_ID_TIVO 0x150a
#define USB_DEVICE_ID_TIVO_SLIDE_BT 0x1200
#define USB_DEVICE_ID_TIVO_SLIDE 0x1201
#define USB_VENDOR_ID_TOPSEED 0x0766
#define USB_DEVICE_ID_TOPSEED_CYBERLINK 0x0204
...
...
@@ -720,6 +733,8 @@
#define USB_VENDOR_ID_WALTOP 0x172f
#define USB_DEVICE_ID_WALTOP_SLIM_TABLET_5_8_INCH 0x0032
#define USB_DEVICE_ID_WALTOP_SLIM_TABLET_12_1_INCH 0x0034
#define USB_DEVICE_ID_WALTOP_Q_PAD 0x0037
#define USB_DEVICE_ID_WALTOP_PID_0038 0x0038
#define USB_DEVICE_ID_WALTOP_MEDIA_TABLET_10_6_INCH 0x0501
#define USB_DEVICE_ID_WALTOP_MEDIA_TABLET_14_1_INCH 0x0500
...
...
@@ -728,6 +743,7 @@
#define USB_DEVICE_ID_1_PHIDGETSERVO_20 0x8101
#define USB_DEVICE_ID_4_PHIDGETSERVO_20 0x8104
#define USB_DEVICE_ID_8_8_4_IF_KIT 0x8201
#define USB_DEVICE_ID_SUPER_JOY_BOX_3 0x8888
#define USB_DEVICE_ID_QUAD_USB_JOYPAD 0x8800
#define USB_DEVICE_ID_DUAL_USB_JOYPAD 0x8866
...
...
drivers/hid/hid-kye.c
浏览文件 @
4a247a41
...
...
@@ -3,6 +3,7 @@
*
* Copyright (c) 2009 Jiri Kosina
* Copyright (c) 2009 Tomas Hanak
* Copyright (c) 2012 Nikolai Kondrashov
*/
/*
...
...
@@ -15,36 +16,399 @@
#include <linux/device.h>
#include <linux/hid.h>
#include <linux/module.h>
#include <linux/usb.h>
#include "usbhid/usbhid.h"
#include "hid-ids.h"
/* the fixups that need to be done:
* - change led usage page to button for extra buttons
* - report size 8 count 1 must be size 1 count 8 for button bitfield
* - change the button usage range to 4-7 for the extra buttons
/*
* See EasyPen i405X description, device and HID report descriptors at
* http://sf.net/apps/mediawiki/digimend/?title=KYE_EasyPen_i405X
*/
/* Original EasyPen i405X report descriptor size */
#define EASYPEN_I405X_RDESC_ORIG_SIZE 476
/* Fixed EasyPen i405X report descriptor */
static
__u8
easypen_i405x_rdesc_fixed
[]
=
{
0x06
,
0x00
,
0xFF
,
/* Usage Page (FF00h), */
0x09
,
0x01
,
/* Usage (01h), */
0xA1
,
0x01
,
/* Collection (Application), */
0x85
,
0x05
,
/* Report ID (5), */
0x09
,
0x01
,
/* Usage (01h), */
0x15
,
0x80
,
/* Logical Minimum (-128), */
0x25
,
0x7F
,
/* Logical Maximum (127), */
0x75
,
0x08
,
/* Report Size (8), */
0x95
,
0x07
,
/* Report Count (7), */
0xB1
,
0x02
,
/* Feature (Variable), */
0xC0
,
/* End Collection, */
0x05
,
0x0D
,
/* Usage Page (Digitizer), */
0x09
,
0x02
,
/* Usage (Pen), */
0xA1
,
0x01
,
/* Collection (Application), */
0x85
,
0x10
,
/* Report ID (16), */
0x09
,
0x20
,
/* Usage (Stylus), */
0xA0
,
/* Collection (Physical), */
0x14
,
/* Logical Minimum (0), */
0x25
,
0x01
,
/* Logical Maximum (1), */
0x75
,
0x01
,
/* Report Size (1), */
0x09
,
0x42
,
/* Usage (Tip Switch), */
0x09
,
0x44
,
/* Usage (Barrel Switch), */
0x09
,
0x46
,
/* Usage (Tablet Pick), */
0x95
,
0x03
,
/* Report Count (3), */
0x81
,
0x02
,
/* Input (Variable), */
0x95
,
0x04
,
/* Report Count (4), */
0x81
,
0x03
,
/* Input (Constant, Variable), */
0x09
,
0x32
,
/* Usage (In Range), */
0x95
,
0x01
,
/* Report Count (1), */
0x81
,
0x02
,
/* Input (Variable), */
0x75
,
0x10
,
/* Report Size (16), */
0x95
,
0x01
,
/* Report Count (1), */
0xA4
,
/* Push, */
0x05
,
0x01
,
/* Usage Page (Desktop), */
0x55
,
0xFD
,
/* Unit Exponent (-3), */
0x65
,
0x13
,
/* Unit (Inch), */
0x34
,
/* Physical Minimum (0), */
0x09
,
0x30
,
/* Usage (X), */
0x46
,
0x7C
,
0x15
,
/* Physical Maximum (5500), */
0x26
,
0x00
,
0x37
,
/* Logical Maximum (14080), */
0x81
,
0x02
,
/* Input (Variable), */
0x09
,
0x31
,
/* Usage (Y), */
0x46
,
0xA0
,
0x0F
,
/* Physical Maximum (4000), */
0x26
,
0x00
,
0x28
,
/* Logical Maximum (10240), */
0x81
,
0x02
,
/* Input (Variable), */
0xB4
,
/* Pop, */
0x09
,
0x30
,
/* Usage (Tip Pressure), */
0x26
,
0xFF
,
0x03
,
/* Logical Maximum (1023), */
0x81
,
0x02
,
/* Input (Variable), */
0xC0
,
/* End Collection, */
0xC0
/* End Collection */
};
/*
* See MousePen i608X description, device and HID report descriptors at
* http://sf.net/apps/mediawiki/digimend/?title=KYE_MousePen_i608X
*/
/* Original MousePen i608X report descriptor size */
#define MOUSEPEN_I608X_RDESC_ORIG_SIZE 476
/* Fixed MousePen i608X report descriptor */
static
__u8
mousepen_i608x_rdesc_fixed
[]
=
{
0x06
,
0x00
,
0xFF
,
/* Usage Page (FF00h), */
0x09
,
0x01
,
/* Usage (01h), */
0xA1
,
0x01
,
/* Collection (Application), */
0x85
,
0x05
,
/* Report ID (5), */
0x09
,
0x01
,
/* Usage (01h), */
0x15
,
0x80
,
/* Logical Minimum (-128), */
0x25
,
0x7F
,
/* Logical Maximum (127), */
0x75
,
0x08
,
/* Report Size (8), */
0x95
,
0x07
,
/* Report Count (7), */
0xB1
,
0x02
,
/* Feature (Variable), */
0xC0
,
/* End Collection, */
0x05
,
0x0D
,
/* Usage Page (Digitizer), */
0x09
,
0x02
,
/* Usage (Pen), */
0xA1
,
0x01
,
/* Collection (Application), */
0x85
,
0x10
,
/* Report ID (16), */
0x09
,
0x20
,
/* Usage (Stylus), */
0xA0
,
/* Collection (Physical), */
0x14
,
/* Logical Minimum (0), */
0x25
,
0x01
,
/* Logical Maximum (1), */
0x75
,
0x01
,
/* Report Size (1), */
0x09
,
0x42
,
/* Usage (Tip Switch), */
0x09
,
0x44
,
/* Usage (Barrel Switch), */
0x09
,
0x46
,
/* Usage (Tablet Pick), */
0x95
,
0x03
,
/* Report Count (3), */
0x81
,
0x02
,
/* Input (Variable), */
0x95
,
0x04
,
/* Report Count (4), */
0x81
,
0x03
,
/* Input (Constant, Variable), */
0x09
,
0x32
,
/* Usage (In Range), */
0x95
,
0x01
,
/* Report Count (1), */
0x81
,
0x02
,
/* Input (Variable), */
0x75
,
0x10
,
/* Report Size (16), */
0x95
,
0x01
,
/* Report Count (1), */
0xA4
,
/* Push, */
0x05
,
0x01
,
/* Usage Page (Desktop), */
0x55
,
0xFD
,
/* Unit Exponent (-3), */
0x65
,
0x13
,
/* Unit (Inch), */
0x34
,
/* Physical Minimum (0), */
0x09
,
0x30
,
/* Usage (X), */
0x46
,
0x40
,
0x1F
,
/* Physical Maximum (8000), */
0x26
,
0x00
,
0x50
,
/* Logical Maximum (20480), */
0x81
,
0x02
,
/* Input (Variable), */
0x09
,
0x31
,
/* Usage (Y), */
0x46
,
0x70
,
0x17
,
/* Physical Maximum (6000), */
0x26
,
0x00
,
0x3C
,
/* Logical Maximum (15360), */
0x81
,
0x02
,
/* Input (Variable), */
0xB4
,
/* Pop, */
0x09
,
0x30
,
/* Usage (Tip Pressure), */
0x26
,
0xFF
,
0x03
,
/* Logical Maximum (1023), */
0x81
,
0x02
,
/* Input (Variable), */
0xC0
,
/* End Collection, */
0xC0
,
/* End Collection, */
0x05
,
0x01
,
/* Usage Page (Desktop), */
0x09
,
0x02
,
/* Usage (Mouse), */
0xA1
,
0x01
,
/* Collection (Application), */
0x85
,
0x11
,
/* Report ID (17), */
0x09
,
0x01
,
/* Usage (Pointer), */
0xA0
,
/* Collection (Physical), */
0x14
,
/* Logical Minimum (0), */
0xA4
,
/* Push, */
0x05
,
0x09
,
/* Usage Page (Button), */
0x75
,
0x01
,
/* Report Size (1), */
0x19
,
0x01
,
/* Usage Minimum (01h), */
0x29
,
0x03
,
/* Usage Maximum (03h), */
0x25
,
0x01
,
/* Logical Maximum (1), */
0x95
,
0x03
,
/* Report Count (3), */
0x81
,
0x02
,
/* Input (Variable), */
0x95
,
0x05
,
/* Report Count (5), */
0x81
,
0x01
,
/* Input (Constant), */
0xB4
,
/* Pop, */
0x95
,
0x01
,
/* Report Count (1), */
0xA4
,
/* Push, */
0x55
,
0xFD
,
/* Unit Exponent (-3), */
0x65
,
0x13
,
/* Unit (Inch), */
0x34
,
/* Physical Minimum (0), */
0x75
,
0x10
,
/* Report Size (16), */
0x09
,
0x30
,
/* Usage (X), */
0x46
,
0x40
,
0x1F
,
/* Physical Maximum (8000), */
0x26
,
0x00
,
0x50
,
/* Logical Maximum (20480), */
0x81
,
0x02
,
/* Input (Variable), */
0x09
,
0x31
,
/* Usage (Y), */
0x46
,
0x70
,
0x17
,
/* Physical Maximum (6000), */
0x26
,
0x00
,
0x3C
,
/* Logical Maximum (15360), */
0x81
,
0x02
,
/* Input (Variable), */
0xB4
,
/* Pop, */
0x75
,
0x08
,
/* Report Size (8), */
0x09
,
0x38
,
/* Usage (Wheel), */
0x15
,
0xFF
,
/* Logical Minimum (-1), */
0x25
,
0x01
,
/* Logical Maximum (1), */
0x81
,
0x06
,
/* Input (Variable, Relative), */
0x81
,
0x01
,
/* Input (Constant), */
0xC0
,
/* End Collection, */
0xC0
/* End Collection */
};
/*
* See EasyPen M610X description, device and HID report descriptors at
* http://sf.net/apps/mediawiki/digimend/?title=KYE_EasyPen_M610X
*/
/* Original EasyPen M610X report descriptor size */
#define EASYPEN_M610X_RDESC_ORIG_SIZE 476
/* Fixed EasyPen M610X report descriptor */
static
__u8
easypen_m610x_rdesc_fixed
[]
=
{
0x06
,
0x00
,
0xFF
,
/* Usage Page (FF00h), */
0x09
,
0x01
,
/* Usage (01h), */
0xA1
,
0x01
,
/* Collection (Application), */
0x85
,
0x05
,
/* Report ID (5), */
0x09
,
0x01
,
/* Usage (01h), */
0x15
,
0x80
,
/* Logical Minimum (-128), */
0x25
,
0x7F
,
/* Logical Maximum (127), */
0x75
,
0x08
,
/* Report Size (8), */
0x95
,
0x07
,
/* Report Count (7), */
0xB1
,
0x02
,
/* Feature (Variable), */
0xC0
,
/* End Collection, */
0x05
,
0x0D
,
/* Usage Page (Digitizer), */
0x09
,
0x02
,
/* Usage (Pen), */
0xA1
,
0x01
,
/* Collection (Application), */
0x85
,
0x10
,
/* Report ID (16), */
0x09
,
0x20
,
/* Usage (Stylus), */
0xA0
,
/* Collection (Physical), */
0x14
,
/* Logical Minimum (0), */
0x25
,
0x01
,
/* Logical Maximum (1), */
0x75
,
0x01
,
/* Report Size (1), */
0x09
,
0x42
,
/* Usage (Tip Switch), */
0x09
,
0x44
,
/* Usage (Barrel Switch), */
0x09
,
0x46
,
/* Usage (Tablet Pick), */
0x95
,
0x03
,
/* Report Count (3), */
0x81
,
0x02
,
/* Input (Variable), */
0x95
,
0x04
,
/* Report Count (4), */
0x81
,
0x03
,
/* Input (Constant, Variable), */
0x09
,
0x32
,
/* Usage (In Range), */
0x95
,
0x01
,
/* Report Count (1), */
0x81
,
0x02
,
/* Input (Variable), */
0x75
,
0x10
,
/* Report Size (16), */
0x95
,
0x01
,
/* Report Count (1), */
0xA4
,
/* Push, */
0x05
,
0x01
,
/* Usage Page (Desktop), */
0x55
,
0xFD
,
/* Unit Exponent (-3), */
0x65
,
0x13
,
/* Unit (Inch), */
0x34
,
/* Physical Minimum (0), */
0x09
,
0x30
,
/* Usage (X), */
0x46
,
0x10
,
0x27
,
/* Physical Maximum (10000), */
0x27
,
0x00
,
0xA0
,
0x00
,
0x00
,
/* Logical Maximum (40960), */
0x81
,
0x02
,
/* Input (Variable), */
0x09
,
0x31
,
/* Usage (Y), */
0x46
,
0x6A
,
0x18
,
/* Physical Maximum (6250), */
0x26
,
0x00
,
0x64
,
/* Logical Maximum (25600), */
0x81
,
0x02
,
/* Input (Variable), */
0xB4
,
/* Pop, */
0x09
,
0x30
,
/* Usage (Tip Pressure), */
0x26
,
0xFF
,
0x03
,
/* Logical Maximum (1023), */
0x81
,
0x02
,
/* Input (Variable), */
0xC0
,
/* End Collection, */
0xC0
,
/* End Collection, */
0x05
,
0x0C
,
/* Usage Page (Consumer), */
0x09
,
0x01
,
/* Usage (Consumer Control), */
0xA1
,
0x01
,
/* Collection (Application), */
0x85
,
0x12
,
/* Report ID (18), */
0x14
,
/* Logical Minimum (0), */
0x25
,
0x01
,
/* Logical Maximum (1), */
0x75
,
0x01
,
/* Report Size (1), */
0x95
,
0x04
,
/* Report Count (4), */
0x0A
,
0x1A
,
0x02
,
/* Usage (AC Undo), */
0x0A
,
0x79
,
0x02
,
/* Usage (AC Redo Or Repeat), */
0x0A
,
0x2D
,
0x02
,
/* Usage (AC Zoom In), */
0x0A
,
0x2E
,
0x02
,
/* Usage (AC Zoom Out), */
0x81
,
0x02
,
/* Input (Variable), */
0x95
,
0x01
,
/* Report Count (1), */
0x75
,
0x14
,
/* Report Size (20), */
0x81
,
0x03
,
/* Input (Constant, Variable), */
0x75
,
0x20
,
/* Report Size (32), */
0x81
,
0x03
,
/* Input (Constant, Variable), */
0xC0
/* End Collection */
};
static
__u8
*
kye_report_fixup
(
struct
hid_device
*
hdev
,
__u8
*
rdesc
,
unsigned
int
*
rsize
)
{
if
(
*
rsize
>=
74
&&
rdesc
[
61
]
==
0x05
&&
rdesc
[
62
]
==
0x08
&&
rdesc
[
63
]
==
0x19
&&
rdesc
[
64
]
==
0x08
&&
rdesc
[
65
]
==
0x29
&&
rdesc
[
66
]
==
0x0f
&&
rdesc
[
71
]
==
0x75
&&
rdesc
[
72
]
==
0x08
&&
rdesc
[
73
]
==
0x95
&&
rdesc
[
74
]
==
0x01
)
{
hid_info
(
hdev
,
"fixing up Kye/Genius Ergo Mouse report descriptor
\n
"
);
rdesc
[
62
]
=
0x09
;
rdesc
[
64
]
=
0x04
;
rdesc
[
66
]
=
0x07
;
rdesc
[
72
]
=
0x01
;
rdesc
[
74
]
=
0x08
;
switch
(
hdev
->
product
)
{
case
USB_DEVICE_ID_KYE_ERGO_525V
:
/* the fixups that need to be done:
* - change led usage page to button for extra buttons
* - report size 8 count 1 must be size 1 count 8 for button
* bitfield
* - change the button usage range to 4-7 for the extra
* buttons
*/
if
(
*
rsize
>=
74
&&
rdesc
[
61
]
==
0x05
&&
rdesc
[
62
]
==
0x08
&&
rdesc
[
63
]
==
0x19
&&
rdesc
[
64
]
==
0x08
&&
rdesc
[
65
]
==
0x29
&&
rdesc
[
66
]
==
0x0f
&&
rdesc
[
71
]
==
0x75
&&
rdesc
[
72
]
==
0x08
&&
rdesc
[
73
]
==
0x95
&&
rdesc
[
74
]
==
0x01
)
{
hid_info
(
hdev
,
"fixing up Kye/Genius Ergo Mouse "
"report descriptor
\n
"
);
rdesc
[
62
]
=
0x09
;
rdesc
[
64
]
=
0x04
;
rdesc
[
66
]
=
0x07
;
rdesc
[
72
]
=
0x01
;
rdesc
[
74
]
=
0x08
;
}
break
;
case
USB_DEVICE_ID_KYE_EASYPEN_I405X
:
if
(
*
rsize
==
EASYPEN_I405X_RDESC_ORIG_SIZE
)
{
rdesc
=
easypen_i405x_rdesc_fixed
;
*
rsize
=
sizeof
(
easypen_i405x_rdesc_fixed
);
}
break
;
case
USB_DEVICE_ID_KYE_MOUSEPEN_I608X
:
if
(
*
rsize
==
MOUSEPEN_I608X_RDESC_ORIG_SIZE
)
{
rdesc
=
mousepen_i608x_rdesc_fixed
;
*
rsize
=
sizeof
(
mousepen_i608x_rdesc_fixed
);
}
break
;
case
USB_DEVICE_ID_KYE_EASYPEN_M610X
:
if
(
*
rsize
==
EASYPEN_M610X_RDESC_ORIG_SIZE
)
{
rdesc
=
easypen_m610x_rdesc_fixed
;
*
rsize
=
sizeof
(
easypen_m610x_rdesc_fixed
);
}
break
;
}
return
rdesc
;
}
/**
* Enable fully-functional tablet mode by setting a special feature report.
*
* @hdev: HID device
*
* The specific report ID and data were discovered by sniffing the
* Windows driver traffic.
*/
static
int
kye_tablet_enable
(
struct
hid_device
*
hdev
)
{
struct
list_head
*
list
;
struct
list_head
*
head
;
struct
hid_report
*
report
;
__s32
*
value
;
list
=
&
hdev
->
report_enum
[
HID_FEATURE_REPORT
].
report_list
;
list_for_each
(
head
,
list
)
{
report
=
list_entry
(
head
,
struct
hid_report
,
list
);
if
(
report
->
id
==
5
)
break
;
}
if
(
head
==
list
)
{
hid_err
(
hdev
,
"tablet-enabling feature report not found
\n
"
);
return
-
ENODEV
;
}
if
(
report
->
maxfield
<
1
||
report
->
field
[
0
]
->
report_count
<
7
)
{
hid_err
(
hdev
,
"invalid tablet-enabling feature report
\n
"
);
return
-
ENODEV
;
}
value
=
report
->
field
[
0
]
->
value
;
value
[
0
]
=
0x12
;
value
[
1
]
=
0x10
;
value
[
2
]
=
0x11
;
value
[
3
]
=
0x12
;
value
[
4
]
=
0x00
;
value
[
5
]
=
0x00
;
value
[
6
]
=
0x00
;
usbhid_submit_report
(
hdev
,
report
,
USB_DIR_OUT
);
return
0
;
}
static
int
kye_probe
(
struct
hid_device
*
hdev
,
const
struct
hid_device_id
*
id
)
{
int
ret
;
ret
=
hid_parse
(
hdev
);
if
(
ret
)
{
hid_err
(
hdev
,
"parse failed
\n
"
);
goto
err
;
}
ret
=
hid_hw_start
(
hdev
,
HID_CONNECT_DEFAULT
);
if
(
ret
)
{
hid_err
(
hdev
,
"hw start failed
\n
"
);
goto
err
;
}
switch
(
id
->
product
)
{
case
USB_DEVICE_ID_KYE_EASYPEN_I405X
:
case
USB_DEVICE_ID_KYE_MOUSEPEN_I608X
:
case
USB_DEVICE_ID_KYE_EASYPEN_M610X
:
ret
=
kye_tablet_enable
(
hdev
);
if
(
ret
)
{
hid_err
(
hdev
,
"tablet enabling failed
\n
"
);
goto
enabling_err
;
}
break
;
}
return
0
;
enabling_err:
hid_hw_stop
(
hdev
);
err:
return
ret
;
}
static
const
struct
hid_device_id
kye_devices
[]
=
{
{
HID_USB_DEVICE
(
USB_VENDOR_ID_KYE
,
USB_DEVICE_ID_KYE_ERGO_525V
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_KYE
,
USB_DEVICE_ID_KYE_EASYPEN_I405X
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_KYE
,
USB_DEVICE_ID_KYE_MOUSEPEN_I608X
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_KYE
,
USB_DEVICE_ID_KYE_EASYPEN_M610X
)
},
{
}
};
MODULE_DEVICE_TABLE
(
hid
,
kye_devices
);
...
...
@@ -52,6 +416,7 @@ MODULE_DEVICE_TABLE(hid, kye_devices);
static
struct
hid_driver
kye_driver
=
{
.
name
=
"kye"
,
.
id_table
=
kye_devices
,
.
probe
=
kye_probe
,
.
report_fixup
=
kye_report_fixup
,
};
...
...
drivers/hid/hid-magicmouse.c
浏览文件 @
4a247a41
...
...
@@ -418,6 +418,8 @@ static void magicmouse_setup_input(struct input_dev *input, struct hid_device *h
__set_bit
(
BTN_TOOL_TRIPLETAP
,
input
->
keybit
);
__set_bit
(
BTN_TOOL_QUADTAP
,
input
->
keybit
);
__set_bit
(
BTN_TOUCH
,
input
->
keybit
);
__set_bit
(
INPUT_PROP_POINTER
,
input
->
propbit
);
__set_bit
(
INPUT_PROP_BUTTONPAD
,
input
->
propbit
);
}
if
(
report_touches
)
{
...
...
drivers/hid/hid-multitouch.c
浏览文件 @
4a247a41
...
...
@@ -837,6 +837,11 @@ static const struct hid_device_id mt_devices[] = {
HID_USB_DEVICE
(
USB_VENDOR_ID_GENERAL_TOUCH
,
USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS
)
},
/* Gametel game controller */
{
.
driver_data
=
MT_CLS_DEFAULT
,
HID_BLUETOOTH_DEVICE
(
USB_VENDOR_ID_FRUCTEL
,
USB_DEVICE_ID_GAMETEL_MT_MODE
)
},
/* GoodTouch panels */
{
.
driver_data
=
MT_CLS_DEFAULT
,
HID_USB_DEVICE
(
USB_VENDOR_ID_GOODTOUCH
,
...
...
drivers/hid/hid-saitek.c
0 → 100644
浏览文件 @
4a247a41
/*
* HID driver for Saitek devices, currently only the PS1000 (USB gamepad).
* Fixes the HID report descriptor by removing a non-existent axis and
* clearing the constant bit on the input reports for buttons and d-pad.
* (This module is based on "hid-ortek".)
*
* Copyright (c) 2012 Andreas Hübner
*/
/*
* 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 <linux/device.h>
#include <linux/hid.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include "hid-ids.h"
static
__u8
*
saitek_report_fixup
(
struct
hid_device
*
hdev
,
__u8
*
rdesc
,
unsigned
int
*
rsize
)
{
if
(
*
rsize
==
137
&&
rdesc
[
20
]
==
0x09
&&
rdesc
[
21
]
==
0x33
&&
rdesc
[
94
]
==
0x81
&&
rdesc
[
95
]
==
0x03
&&
rdesc
[
110
]
==
0x81
&&
rdesc
[
111
]
==
0x03
)
{
hid_info
(
hdev
,
"Fixing up Saitek PS1000 report descriptor
\n
"
);
/* convert spurious axis to a "noop" Logical Minimum (0) */
rdesc
[
20
]
=
0x15
;
rdesc
[
21
]
=
0x00
;
/* clear constant bit on buttons and d-pad */
rdesc
[
95
]
=
0x02
;
rdesc
[
111
]
=
0x02
;
}
return
rdesc
;
}
static
const
struct
hid_device_id
saitek_devices
[]
=
{
{
HID_USB_DEVICE
(
USB_VENDOR_ID_SAITEK
,
USB_DEVICE_ID_SAITEK_PS1000
)},
{
}
};
MODULE_DEVICE_TABLE
(
hid
,
saitek_devices
);
static
struct
hid_driver
saitek_driver
=
{
.
name
=
"saitek"
,
.
id_table
=
saitek_devices
,
.
report_fixup
=
saitek_report_fixup
};
static
int
__init
saitek_init
(
void
)
{
return
hid_register_driver
(
&
saitek_driver
);
}
static
void
__exit
saitek_exit
(
void
)
{
hid_unregister_driver
(
&
saitek_driver
);
}
module_init
(
saitek_init
);
module_exit
(
saitek_exit
);
MODULE_LICENSE
(
"GPL"
);
drivers/hid/hid-sjoy.c
浏览文件 @
4a247a41
...
...
@@ -155,7 +155,8 @@ static int sjoy_probe(struct hid_device *hdev, const struct hid_device_id *id)
}
static
const
struct
hid_device_id
sjoy_devices
[]
=
{
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP_LTD
,
USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP_LTD
,
USB_DEVICE_ID_SUPER_JOY_BOX_3_PRO
),
.
driver_data
=
HID_QUIRK_NOGET
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP_LTD
,
USB_DEVICE_ID_SUPER_DUAL_BOX_PRO
),
.
driver_data
=
HID_QUIRK_MULTI_INPUT
|
HID_QUIRK_NOGET
|
HID_QUIRK_SKIP_OUTPUT_REPORTS
},
...
...
@@ -163,8 +164,9 @@ static const struct hid_device_id sjoy_devices[] = {
.
driver_data
=
HID_QUIRK_MULTI_INPUT
|
HID_QUIRK_NOGET
|
HID_QUIRK_SKIP_OUTPUT_REPORTS
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP
,
USB_DEVICE_ID_SMARTJOY_PLUS
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP
,
USB_DEVICE_ID_SUPER_JOY_BOX_3
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_WISEGROUP
,
USB_DEVICE_ID_DUAL_USB_JOYPAD
),
.
driver_data
=
HID_QUIRK_MULTI_INPUT
|
HID_QUIRK_NOGET
|
.
driver_data
=
HID_QUIRK_MULTI_INPUT
|
HID_QUIRK_SKIP_OUTPUT_REPORTS
},
{
}
};
...
...
drivers/hid/hid-tivo.c
0 → 100644
浏览文件 @
4a247a41
/*
* HID driver for TiVo Slide Bluetooth remote
*
* Copyright (c) 2011 Jarod Wilson <jarod@redhat.com>
* based on the hid-topseed driver, which is in turn, based on hid-cherry...
*/
/*
* 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 <linux/device.h>
#include <linux/hid.h>
#include <linux/module.h>
#include "hid-ids.h"
#define HID_UP_TIVOVENDOR 0xffff0000
#define tivo_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, \
EV_KEY, (c))
static
int
tivo_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
&
HID_USAGE_PAGE
)
{
case
HID_UP_TIVOVENDOR
:
switch
(
usage
->
hid
&
HID_USAGE
)
{
/* TiVo button */
case
0x3d
:
tivo_map_key_clear
(
KEY_MEDIA
);
break
;
/* Live TV */
case
0x3e
:
tivo_map_key_clear
(
KEY_TV
);
break
;
/* Red thumbs down */
case
0x41
:
tivo_map_key_clear
(
KEY_KPMINUS
);
break
;
/* Green thumbs up */
case
0x42
:
tivo_map_key_clear
(
KEY_KPPLUS
);
break
;
default:
return
0
;
}
break
;
case
HID_UP_CONSUMER
:
switch
(
usage
->
hid
&
HID_USAGE
)
{
/* Enter/Last (default mapping: KEY_LAST) */
case
0x083
:
tivo_map_key_clear
(
KEY_ENTER
);
break
;
/* Info (default mapping: KEY_PROPS) */
case
0x209
:
tivo_map_key_clear
(
KEY_INFO
);
break
;
default:
return
0
;
}
break
;
default:
return
0
;
}
/* This means we found a matching mapping here, else, look in the
* standard hid mappings in hid-input.c */
return
1
;
}
static
const
struct
hid_device_id
tivo_devices
[]
=
{
/* TiVo Slide Bluetooth remote, pairs with a Broadcom dongle */
{
HID_USB_DEVICE
(
USB_VENDOR_ID_TIVO
,
USB_DEVICE_ID_TIVO_SLIDE_BT
)
},
{
HID_USB_DEVICE
(
USB_VENDOR_ID_TIVO
,
USB_DEVICE_ID_TIVO_SLIDE
)
},
{
}
};
MODULE_DEVICE_TABLE
(
hid
,
tivo_devices
);
static
struct
hid_driver
tivo_driver
=
{
.
name
=
"tivo_slide"
,
.
id_table
=
tivo_devices
,
.
input_mapping
=
tivo_input_mapping
,
};
static
int
__init
tivo_init
(
void
)
{
return
hid_register_driver
(
&
tivo_driver
);
}
static
void
__exit
tivo_exit
(
void
)
{
hid_unregister_driver
(
&
tivo_driver
);
}
module_init
(
tivo_init
);
module_exit
(
tivo_exit
);
MODULE_LICENSE
(
"GPL"
);
MODULE_AUTHOR
(
"Jarod Wilson <jarod@redhat.com>"
);
drivers/hid/hid-uclogic.c
浏览文件 @
4a247a41
...
...
@@ -18,141 +18,16 @@
#include "hid-ids.h"
/*
* The original descriptors of WPXXXXU tablets have three report IDs, of
* which only two are used (8 and 9), and the remaining (7) seems to have
* the originally intended pen description which was abandoned for some
* reason. From this unused description it is possible to extract the
* actual physical extents and resolution. All the models use the same
* descriptor with different extents for the unused report ID.
*
* Here it is:
*
* Usage Page (Digitizer), ; Digitizer (0Dh)
* Usage (Pen), ; Pen (02h, application collection)
* Collection (Application),
* Report ID (7),
* Usage (Stylus), ; Stylus (20h, logical collection)
* Collection (Physical),
* Usage (Tip Switch), ; Tip switch (42h, momentary control)
* Usage (Barrel Switch), ; Barrel switch (44h, momentary control)
* Usage (Eraser), ; Eraser (45h, momentary control)
* Logical Minimum (0),
* Logical Maximum (1),
* Report Size (1),
* Report Count (3),
* Input (Variable),
* Report Count (3),
* Input (Constant, Variable),
* Usage (In Range), ; In range (32h, momentary control)
* Report Count (1),
* Input (Variable),
* Report Count (1),
* Input (Constant, Variable),
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (X), ; X (30h, dynamic value)
* Report Size (16),
* Report Count (1),
* Push,
* Unit Exponent (13),
* Unit (Inch^3),
* Physical Minimum (0),
* Physical Maximum (Xpm),
* Logical Maximum (Xlm),
* Input (Variable),
* Usage (Y), ; Y (31h, dynamic value)
* Physical Maximum (Ypm),
* Logical Maximum (Ylm),
* Input (Variable),
* Pop,
* Usage Page (Digitizer), ; Digitizer (0Dh)
* Usage (Tip Pressure), ; Tip pressure (30h, dynamic value)
* Logical Maximum (1023),
* Input (Variable),
* Report Size (16),
* End Collection,
* End Collection,
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (Mouse), ; Mouse (02h, application collection)
* Collection (Application),
* Report ID (8),
* Usage (Pointer), ; Pointer (01h, physical collection)
* Collection (Physical),
* Usage Page (Button), ; Button (09h)
* Usage Minimum (01h),
* Usage Maximum (03h),
* Logical Minimum (0),
* Logical Maximum (1),
* Report Count (3),
* Report Size (1),
* Input (Variable),
* Report Count (5),
* Input (Constant),
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (X), ; X (30h, dynamic value)
* Usage (Y), ; Y (31h, dynamic value)
* Usage (Wheel), ; Wheel (38h, dynamic value)
* Usage (00h),
* Logical Minimum (-127),
* Logical Maximum (127),
* Report Size (8),
* Report Count (4),
* Input (Variable, Relative),
* End Collection,
* End Collection,
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (Mouse), ; Mouse (02h, application collection)
* Collection (Application),
* Report ID (9),
* Usage (Pointer), ; Pointer (01h, physical collection)
* Collection (Physical),
* Usage Page (Button), ; Button (09h)
* Usage Minimum (01h),
* Usage Maximum (03h),
* Logical Minimum (0),
* Logical Maximum (1),
* Report Count (3),
* Report Size (1),
* Input (Variable),
* Report Count (5),
* Input (Constant),
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (X), ; X (30h, dynamic value)
* Usage (Y), ; Y (31h, dynamic value)
* Logical Minimum (0),
* Logical Maximum (32767),
* Physical Minimum (0),
* Physical Maximum (32767),
* Report Count (2),
* Report Size (16),
* Input (Variable),
* Usage Page (Digitizer), ; Digitizer (0Dh)
* Usage (Tip Pressure), ; Tip pressure (30h, dynamic value)
* Logical Maximum (1023),
* Report Count (1),
* Report Size (16),
* Input (Variable),
* End Collection,
* End Collection
*
* Here are the extents values for the WPXXXXU models:
*
* Xpm Xlm Ypm Ylm
* WP4030U 4000 8000 3000 6000
* WP5540U 5500 11000 4000 8000
* WP8060U 8000 16000 6000 12000
*
* This suggests that all of them have 2000 LPI resolution, as advertised.
* See WPXXXXU model descriptions, device and HID report descriptors at
* http://sf.net/apps/mediawiki/digimend/?title=UC-Logic_Tablet_WP4030U
* http://sf.net/apps/mediawiki/digimend/?title=UC-Logic_Tablet_WP5540U
* http://sf.net/apps/mediawiki/digimend/?title=UC-Logic_Tablet_WP8060U
*/
/* Size of the original descriptor of WPXXXXU tablets */
#define WPXXXXU_RDESC_ORIG_SIZE 212
/*
* Fixed WP4030U report descriptor.
* Although the hardware might actually support it, the mouse description
* has been removed, since there seems to be no devices having one and it
* wouldn't make much sense because of the working area size.
*/
/* Fixed WP4030U report descriptor */
static
__u8
wp4030u_rdesc_fixed
[]
=
{
0x05
,
0x0D
,
/* Usage Page (Digitizer), */
0x09
,
0x02
,
/* Usage (Pen), */
...
...
@@ -343,148 +218,14 @@ static __u8 wp8060u_rdesc_fixed[] = {
};
/*
* Original WP1062 report descriptor.
*
* Only report ID 9 is actually used.
*
* Usage Page (Digitizer), ; Digitizer (0Dh)
* Usage (Pen), ; Pen (02h, application collection)
* Collection (Application),
* Report ID (7),
* Usage (Stylus), ; Stylus (20h, logical collection)
* Collection (Physical),
* Usage (Tip Switch), ; Tip switch (42h, momentary control)
* Usage (Barrel Switch), ; Barrel switch (44h, momentary control)
* Usage (Eraser), ; Eraser (45h, momentary control)
* Logical Minimum (0),
* Logical Maximum (1),
* Report Size (1),
* Report Count (3),
* Input (Variable),
* Report Count (3),
* Input (Constant, Variable),
* Usage (In Range), ; In range (32h, momentary control)
* Report Count (1),
* Input (Variable),
* Report Count (1),
* Input (Constant, Variable),
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (X), ; X (30h, dynamic value)
* Report Size (16),
* Report Count (1),
* Push,
* Unit Exponent (13),
* Unit (Inch),
* Physical Minimum (0),
* Physical Maximum (10000),
* Logical Maximum (20000),
* Input (Variable),
* Usage (Y), ; Y (31h, dynamic value)
* Physical Maximum (6583),
* Logical Maximum (13166),
* Input (Variable),
* Pop,
* Usage Page (Digitizer), ; Digitizer (0Dh)
* Usage (Tip Pressure), ; Tip pressure (30h, dynamic value)
* Logical Maximum (1023),
* Input (Variable),
* Report Size (16),
* End Collection,
* End Collection,
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (Mouse), ; Mouse (02h, application collection)
* Collection (Application),
* Report ID (8),
* Usage (Pointer), ; Pointer (01h, physical collection)
* Collection (Physical),
* Usage Page (Button), ; Button (09h)
* Usage Minimum (01h),
* Usage Maximum (03h),
* Logical Minimum (0),
* Logical Maximum (1),
* Report Count (3),
* Report Size (1),
* Input (Variable),
* Report Count (5),
* Input (Constant),
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (X), ; X (30h, dynamic value)
* Usage (Y), ; Y (31h, dynamic value)
* Usage (Wheel), ; Wheel (38h, dynamic value)
* Usage (00h),
* Logical Minimum (-127),
* Logical Maximum (127),
* Report Size (8),
* Report Count (4),
* Input (Variable, Relative),
* End Collection,
* End Collection,
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (Mouse), ; Mouse (02h, application collection)
* Collection (Application),
* Report ID (9),
* Usage (Pointer), ; Pointer (01h, physical collection)
* Collection (Physical),
* Usage Page (Button), ; Button (09h)
* Usage Minimum (01h),
* Usage Maximum (03h),
* Logical Minimum (0),
* Logical Maximum (1),
* Report Count (3),
* Report Size (1),
* Input (Variable),
* Report Count (4),
* Input (Constant),
* Usage Page (Digitizer), ; Digitizer (0Dh)
* Usage (In Range), ; In range (32h, momentary control)
* Report Count (1),
* Input (Variable),
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (X), ; X (30h, dynamic value)
* Report Size (16),
* Report Count (1),
* Push,
* Unit Exponent (13),
* Unit (Inch),
* Physical Minimum (0),
* Physical Maximum (10000),
* Logical Maximum (20000),
* Input (Variable),
* Usage (Y), ; Y (31h, dynamic value)
* Physical Maximum (6583),
* Logical Maximum (13166),
* Input (Variable),
* Pop,
* Usage Page (Digitizer), ; Digitizer (0Dh)
* Usage (Tip Pressure), ; Tip pressure (30h, dynamic value)
* Logical Maximum (1023),
* Report Count (1),
* Report Size (16),
* Input (Variable),
* End Collection,
* End Collection,
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (00h),
* Collection (Application),
* Report ID (4),
* Logical Minimum (0),
* Logical Maximum (255),
* Usage (00h),
* Report Size (8),
* Report Count (3),
* Feature (Variable),
* End Collection
* See WP1062 description, device and HID report descriptors at
* http://sf.net/apps/mediawiki/digimend/?title=UC-Logic_Tablet_WP1062
*/
/* Size of the original descriptor of WP1062 tablet */
#define WP1062_RDESC_ORIG_SIZE 254
/*
* Fixed WP1062 report descriptor.
*
* Removed unused reports, corrected second barrel button usage code, physical
* units.
*/
/* Fixed WP1062 report descriptor */
static
__u8
wp1062_rdesc_fixed
[]
=
{
0x05
,
0x0D
,
/* Usage Page (Digitizer), */
0x09
,
0x02
,
/* Usage (Pen), */
...
...
@@ -530,146 +271,14 @@ static __u8 wp1062_rdesc_fixed[] = {
};
/*
* Original PF1209 report descriptor.
*
* The descriptor is similar to WPXXXXU descriptors, with an addition of a
* feature report (ID 4) of unknown purpose.
*
* Although the advertised resolution is 4000 LPI the unused report ID
* (taken from WPXXXXU, it seems) states 2000 LPI, but it is probably
* incorrect and is a result of blind copying without understanding. Anyway
* the real logical extents are always scaled to 0..32767, which IMHO spoils
* the precision.
*
* Usage Page (Digitizer), ; Digitizer (0Dh)
* Usage (Pen), ; Pen (02h, application collection)
* Collection (Application),
* Report ID (7),
* Usage (Stylus), ; Stylus (20h, logical collection)
* Collection (Physical),
* Usage (Tip Switch), ; Tip switch (42h, momentary control)
* Usage (Barrel Switch), ; Barrel switch (44h, momentary control)
* Usage (Eraser), ; Eraser (45h, momentary control)
* Logical Minimum (0),
* Logical Maximum (1),
* Report Size (1),
* Report Count (3),
* Input (Variable),
* Report Count (3),
* Input (Constant, Variable),
* Usage (In Range), ; In range (32h, momentary control)
* Report Count (1),
* Input (Variable),
* Report Count (1),
* Input (Constant, Variable),
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (X), ; X (30h, dynamic value)
* Report Size (16),
* Report Count (1),
* Push,
* Unit Exponent (13),
* Unit (Inch^3),
* Physical Minimum (0),
* Physical Maximum (12000),
* Logical Maximum (24000),
* Input (Variable),
* Usage (Y), ; Y (31h, dynamic value)
* Physical Maximum (9000),
* Logical Maximum (18000),
* Input (Variable),
* Pop,
* Usage Page (Digitizer), ; Digitizer (0Dh)
* Usage (Tip Pressure), ; Tip pressure (30h, dynamic value)
* Logical Maximum (1023),
* Input (Variable),
* Report Size (16),
* End Collection,
* End Collection,
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (Mouse), ; Mouse (02h, application collection)
* Collection (Application),
* Report ID (8),
* Usage (Pointer), ; Pointer (01h, physical collection)
* Collection (Physical),
* Usage Page (Button), ; Button (09h)
* Usage Minimum (01h),
* Usage Maximum (03h),
* Logical Minimum (0),
* Logical Maximum (1),
* Report Count (3),
* Report Size (1),
* Input (Variable),
* Report Count (5),
* Input (Constant),
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (X), ; X (30h, dynamic value)
* Usage (Y), ; Y (31h, dynamic value)
* Usage (Wheel), ; Wheel (38h, dynamic value)
* Usage (00h),
* Logical Minimum (-127),
* Logical Maximum (127),
* Report Size (8),
* Report Count (4),
* Input (Variable, Relative),
* End Collection,
* End Collection,
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (Mouse), ; Mouse (02h, application collection)
* Collection (Application),
* Report ID (9),
* Usage (Pointer), ; Pointer (01h, physical collection)
* Collection (Physical),
* Usage Page (Button), ; Button (09h)
* Usage Minimum (01h),
* Usage Maximum (03h),
* Logical Minimum (0),
* Logical Maximum (1),
* Report Count (3),
* Report Size (1),
* Input (Variable),
* Report Count (5),
* Input (Constant),
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (X), ; X (30h, dynamic value)
* Usage (Y), ; Y (31h, dynamic value)
* Logical Minimum (0),
* Logical Maximum (32767),
* Physical Minimum (0),
* Physical Maximum (32767),
* Report Count (2),
* Report Size (16),
* Input (Variable),
* Usage Page (Digitizer), ; Digitizer (0Dh)
* Usage (Tip Pressure), ; Tip pressure (30h, dynamic value)
* Logical Maximum (1023),
* Report Count (1),
* Report Size (16),
* Input (Variable),
* End Collection,
* End Collection,
* Usage Page (Desktop), ; Generic desktop controls (01h)
* Usage (00h),
* Collection (Application),
* Report ID (4),
* Logical Minimum (0),
* Logical Maximum (255),
* Usage (00h),
* Report Size (8),
* Report Count (3),
* Feature (Variable),
* End Collection
* See PF1209 description, device and HID report descriptors at
* http://sf.net/apps/mediawiki/digimend/?title=UC-Logic_Tablet_PF1209
*/
/* Size of the original descriptor of PF1209 tablet */
#define PF1209_RDESC_ORIG_SIZE 234
/*
* Fixed PF1209 report descriptor
*
* The descriptor is fixed similarly to WP5540U and WP8060U, plus the
* feature report is removed, because its purpose is unknown and it is of no
* use to the generic HID driver anyway for now.
*/
/* Fixed PF1209 report descriptor */
static
__u8
pf1209_rdesc_fixed
[]
=
{
0x05
,
0x0D
,
/* Usage Page (Digitizer), */
0x09
,
0x02
,
/* Usage (Pen), */
...
...
drivers/hid/hid-wacom.c
浏览文件 @
4a247a41
...
...
@@ -590,6 +590,7 @@ static int wacom_probe(struct hid_device *hdev,
wacom_poke
(
hdev
,
1
);
break
;
case
USB_DEVICE_ID_WACOM_INTUOS4_BLUETOOTH
:
sprintf
(
hdev
->
name
,
"%s"
,
"Wacom Intuos4 WL"
);
wdata
->
features
=
0
;
wacom_set_features
(
hdev
);
break
;
...
...
drivers/hid/hid-waltop.c
浏览文件 @
4a247a41
此差异已折叠。
点击以展开。
drivers/hid/usbhid/hid-quirks.c
浏览文件 @
4a247a41
...
...
@@ -60,6 +60,7 @@ static const struct hid_blacklist {
{
USB_VENDOR_ID_ATEN
,
USB_DEVICE_ID_ATEN_2PORTKVM
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_ATEN
,
USB_DEVICE_ID_ATEN_4PORTKVM
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_ATEN
,
USB_DEVICE_ID_ATEN_4PORTKVMC
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_FIGHTERSTICK
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_COMBATSTICK
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YOKE
,
HID_QUIRK_NOGET
},
{
USB_VENDOR_ID_CH
,
USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE
,
HID_QUIRK_NOGET
},
...
...
@@ -96,6 +97,8 @@ static const struct hid_blacklist {
{
USB_VENDOR_ID_CHICONY
,
USB_DEVICE_ID_CHICONY_MULTI_TOUCH
,
HID_QUIRK_MULTI_INPUT
},
{
USB_VENDOR_ID_CHICONY
,
USB_DEVICE_ID_CHICONY_WIRELESS
,
HID_QUIRK_MULTI_INPUT
},
{
USB_VENDOR_ID_SIGMA_MICRO
,
USB_DEVICE_ID_SIGMA_MICRO_KEYBOARD
,
HID_QUIRK_NO_INIT_REPORTS
},
{
USB_VENDOR_ID_KYE
,
USB_DEVICE_ID_KYE_MOUSEPEN_I608X
,
HID_QUIRK_MULTI_INPUT
},
{
USB_VENDOR_ID_KYE
,
USB_DEVICE_ID_KYE_EASYPEN_M610X
,
HID_QUIRK_MULTI_INPUT
},
{
0
,
0
}
};
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录