Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openanolis
cloud-kernel
提交
ada8c797
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看板
提交
ada8c797
编写于
8月 04, 2010
作者:
J
Jiri Kosina
浏览文件
操作
浏览文件
下载
差异文件
Merge branches 'magicmouse', 'roccat' and 'vec-pedal' into for-linus
Conflicts: drivers/hid/hid-ids.h
上级
35d03a0d
7d876c05
0b3fa399
70c7c9c4
变更
11
隐藏空白更改
内联
并排
Showing
11 changed file
with
99 addition
and
75 deletion
+99
-75
Documentation/ABI/testing/sysfs-driver-hid-roccat-kone
Documentation/ABI/testing/sysfs-driver-hid-roccat-kone
+0
-13
drivers/hid/hid-core.c
drivers/hid/hid-core.c
+2
-0
drivers/hid/hid-ids.h
drivers/hid/hid-ids.h
+3
-1
drivers/hid/hid-input.c
drivers/hid/hid-input.c
+9
-9
drivers/hid/hid-magicmouse.c
drivers/hid/hid-magicmouse.c
+73
-23
drivers/hid/hid-roccat-kone.c
drivers/hid/hid-roccat-kone.c
+2
-23
drivers/hid/hid-roccat-kone.h
drivers/hid/hid-roccat-kone.h
+0
-2
drivers/hid/hid-roccat.c
drivers/hid/hid-roccat.c
+6
-3
drivers/hid/hid-roccat.h
drivers/hid/hid-roccat.h
+1
-1
drivers/hid/usbhid/hid-quirks.c
drivers/hid/usbhid/hid-quirks.c
+2
-0
include/linux/hid.h
include/linux/hid.h
+1
-0
未找到文件。
Documentation/ABI/testing/sysfs-driver-hid-roccat-kone
浏览文件 @
ada8c797
...
...
@@ -33,19 +33,6 @@ Description: When read, this file returns the raw integer version number of the
left. E.g. a returned value of 138 means 1.38
This file is readonly.
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/kone_driver_version
Date: March 2010
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
Description: When read, this file returns the driver version.
The format of the string is "v<major>.<minor>.<patchlevel>".
This attribute is used by the userland tools to find the sysfs-
paths of installed kone-mice and determine the capabilites of
the driver. Versions of this driver for old kernels replace
usbhid instead of generic-usb. The way to scan for this file
has been chosen to provide a consistent way for all supported
kernel versions.
This file is readonly.
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/profile[1-5]
Date: March 2010
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
...
...
drivers/hid/hid-core.c
浏览文件 @
ada8c797
...
...
@@ -1157,6 +1157,8 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
if
(
hdev
->
quirks
&
HID_QUIRK_HIDDEV_FORCE
)
connect_mask
|=
(
HID_CONNECT_HIDDEV_FORCE
|
HID_CONNECT_HIDDEV
);
if
(
hdev
->
quirks
&
HID_QUIRK_HIDINPUT_FORCE
)
connect_mask
|=
HID_CONNECT_HIDINPUT_FORCE
;
if
(
hdev
->
bus
!=
BUS_USB
)
connect_mask
&=
~
HID_CONNECT_HIDDEV
;
if
(
hid_hiddev
(
hdev
))
...
...
drivers/hid/hid-ids.h
浏览文件 @
ada8c797
...
...
@@ -439,6 +439,9 @@
#define USB_VENDOR_ID_PHILIPS 0x0471
#define USB_DEVICE_ID_PHILIPS_IEEE802154_DONGLE 0x0617
#define USB_VENDOR_ID_PI_ENGINEERING 0x05f3
#define USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL 0xff
#define USB_VENDOR_ID_PLAYDOTCOM 0x0b43
#define USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII 0x0003
...
...
@@ -533,5 +536,4 @@
#define USB_VENDOR_ID_ZYDACRON 0x13EC
#define USB_DEVICE_ID_ZYDACRON_REMOTE_CONTROL 0x0006
#endif
drivers/hid/hid-input.c
浏览文件 @
ada8c797
...
...
@@ -199,11 +199,11 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
case
HID_GD_MOUSE
:
case
HID_GD_POINTER
:
code
+=
0x110
;
break
;
case
HID_GD_JOYSTICK
:
if
(
code
<=
0xf
)
code
+=
BTN_JOYSTICK
;
else
code
+=
BTN_TRIGGER_HAPPY
;
break
;
if
(
code
<=
0xf
)
code
+=
BTN_JOYSTICK
;
else
code
+=
BTN_TRIGGER_HAPPY
;
break
;
case
HID_GD_GAMEPAD
:
code
+=
0x130
;
break
;
default:
switch
(
field
->
physical
)
{
...
...
@@ -483,7 +483,7 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
case
HID_UP_LOGIVENDOR
:
goto
ignore
;
case
HID_UP_PID
:
switch
(
usage
->
hid
&
HID_USAGE
)
{
case
0xa4
:
map_key_clear
(
BTN_DEAD
);
break
;
...
...
@@ -589,9 +589,9 @@ void hidinput_hid_event(struct hid_device *hid, struct hid_field *field, struct
hat_dir
=
(
value
-
usage
->
hat_min
)
*
8
/
(
usage
->
hat_max
-
usage
->
hat_min
+
1
)
+
1
;
if
(
hat_dir
<
0
||
hat_dir
>
8
)
hat_dir
=
0
;
input_event
(
input
,
usage
->
type
,
usage
->
code
,
hid_hat_to_axis
[
hat_dir
].
x
);
input_event
(
input
,
usage
->
type
,
usage
->
code
+
1
,
hid_hat_to_axis
[
hat_dir
].
y
);
return
;
}
input_event
(
input
,
usage
->
type
,
usage
->
code
+
1
,
hid_hat_to_axis
[
hat_dir
].
y
);
return
;
}
if
(
usage
->
hid
==
(
HID_UP_DIGITIZER
|
0x003c
))
{
/* Invert */
*
quirks
=
value
?
(
*
quirks
|
HID_QUIRK_INVERT
)
:
(
*
quirks
&
~
HID_QUIRK_INVERT
);
...
...
drivers/hid/hid-magicmouse.c
浏览文件 @
ada8c797
...
...
@@ -30,6 +30,21 @@ static bool emulate_scroll_wheel = true;
module_param
(
emulate_scroll_wheel
,
bool
,
0644
);
MODULE_PARM_DESC
(
emulate_scroll_wheel
,
"Emulate a scroll wheel"
);
static
unsigned
int
scroll_speed
=
32
;
static
int
param_set_scroll_speed
(
const
char
*
val
,
struct
kernel_param
*
kp
)
{
unsigned
long
speed
;
if
(
!
val
||
strict_strtoul
(
val
,
0
,
&
speed
)
||
speed
>
63
)
return
-
EINVAL
;
scroll_speed
=
speed
;
return
0
;
}
module_param_call
(
scroll_speed
,
param_set_scroll_speed
,
param_get_uint
,
&
scroll_speed
,
0644
);
MODULE_PARM_DESC
(
scroll_speed
,
"Scroll speed, value from 0 (slow) to 63 (fast)"
);
static
bool
scroll_acceleration
=
false
;
module_param
(
scroll_acceleration
,
bool
,
0644
);
MODULE_PARM_DESC
(
scroll_acceleration
,
"Accelerate sequential scroll events"
);
static
bool
report_touches
=
true
;
module_param
(
report_touches
,
bool
,
0644
);
MODULE_PARM_DESC
(
report_touches
,
"Emit touch records (otherwise, only use them for emulation)"
);
...
...
@@ -50,6 +65,8 @@ MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state fie
#define TOUCH_STATE_START 0x30
#define TOUCH_STATE_DRAG 0x40
#define SCROLL_ACCEL_DEFAULT 7
/**
* struct magicmouse_sc - Tracks Magic Mouse-specific data.
* @input: Input device through which we report events.
...
...
@@ -78,8 +95,10 @@ struct magicmouse_sc {
struct
{
short
x
;
short
y
;
short
scroll_x
;
short
scroll_y
;
u8
size
;
u8
down
;
}
touches
[
16
];
int
tracking_ids
[
16
];
};
...
...
@@ -141,7 +160,7 @@ static void magicmouse_emit_buttons(struct magicmouse_sc *msc, int state)
input_report_key
(
msc
->
input
,
BTN_RIGHT
,
state
&
2
);
if
(
state
!=
last_state
)
msc
->
scroll_accel
=
0
;
msc
->
scroll_accel
=
SCROLL_ACCEL_DEFAULT
;
}
static
void
magicmouse_emit_touch
(
struct
magicmouse_sc
*
msc
,
int
raw_id
,
u8
*
tdata
)
...
...
@@ -152,6 +171,7 @@ static void magicmouse_emit_touch(struct magicmouse_sc *msc, int raw_id, u8 *tda
int
id
=
(
misc
>>
6
)
&
15
;
int
x
=
x_y
<<
12
>>
20
;
int
y
=
-
(
x_y
>>
20
);
int
down
=
(
tdata
[
7
]
&
TOUCH_STATE_MASK
)
!=
TOUCH_STATE_NONE
;
/* Store tracking ID and other fields. */
msc
->
tracking_ids
[
raw_id
]
=
id
;
...
...
@@ -160,42 +180,54 @@ static void magicmouse_emit_touch(struct magicmouse_sc *msc, int raw_id, u8 *tda
msc
->
touches
[
id
].
size
=
misc
&
63
;
/* If requested, emulate a scroll wheel by detecting small
* vertical touch motions
along the middle of the mouse
.
* vertical touch motions.
*/
if
(
emulate_scroll_wheel
&&
middle_button_start
<
x
&&
x
<
middle_button_stop
)
{
static
const
int
accel_profile
[]
=
{
256
,
228
,
192
,
160
,
128
,
96
,
64
,
32
,
};
if
(
emulate_scroll_wheel
)
{
unsigned
long
now
=
jiffies
;
int
step
=
msc
->
touches
[
id
].
scroll_y
-
y
;
/* Reset acceleration after half a second. */
if
(
time_after
(
now
,
msc
->
scroll_jiffies
+
HZ
/
2
))
msc
->
scroll_accel
=
0
;
int
step_x
=
msc
->
touches
[
id
].
scroll_x
-
x
;
int
step_y
=
msc
->
touches
[
id
].
scroll_y
-
y
;
/* Calculate and apply the scroll motion. */
switch
(
tdata
[
7
]
&
TOUCH_STATE_MASK
)
{
case
TOUCH_STATE_START
:
msc
->
touches
[
id
].
scroll_x
=
x
;
msc
->
touches
[
id
].
scroll_y
=
y
;
msc
->
scroll_accel
=
min_t
(
int
,
msc
->
scroll_accel
+
1
,
ARRAY_SIZE
(
accel_profile
)
-
1
);
/* Reset acceleration after half a second. */
if
(
scroll_acceleration
&&
time_before
(
now
,
msc
->
scroll_jiffies
+
HZ
/
2
))
msc
->
scroll_accel
=
max_t
(
int
,
msc
->
scroll_accel
-
1
,
1
);
else
msc
->
scroll_accel
=
SCROLL_ACCEL_DEFAULT
;
break
;
case
TOUCH_STATE_DRAG
:
step
=
step
/
accel_profile
[
msc
->
scroll_accel
];
if
(
step
!=
0
)
{
msc
->
touches
[
id
].
scroll_y
=
y
;
step_x
/=
(
64
-
(
int
)
scroll_speed
)
*
msc
->
scroll_accel
;
if
(
step_x
!=
0
)
{
msc
->
touches
[
id
].
scroll_x
-=
step_x
*
(
64
-
scroll_speed
)
*
msc
->
scroll_accel
;
msc
->
scroll_jiffies
=
now
;
input_report_rel
(
input
,
REL_WHEEL
,
step
);
input_report_rel
(
input
,
REL_HWHEEL
,
-
step_x
);
}
step_y
/=
(
64
-
(
int
)
scroll_speed
)
*
msc
->
scroll_accel
;
if
(
step_y
!=
0
)
{
msc
->
touches
[
id
].
scroll_y
-=
step_y
*
(
64
-
scroll_speed
)
*
msc
->
scroll_accel
;
msc
->
scroll_jiffies
=
now
;
input_report_rel
(
input
,
REL_WHEEL
,
step_y
);
}
break
;
}
}
/* Generate the input events for this touch. */
if
(
report_touches
)
{
if
(
report_touches
&&
down
)
{
int
orientation
=
(
misc
>>
10
)
-
32
;
msc
->
touches
[
id
].
down
=
1
;
input_report_abs
(
input
,
ABS_MT_TRACKING_ID
,
id
);
input_report_abs
(
input
,
ABS_MT_TOUCH_MAJOR
,
tdata
[
3
]);
input_report_abs
(
input
,
ABS_MT_TOUCH_MINOR
,
tdata
[
4
]);
...
...
@@ -215,7 +247,7 @@ static int magicmouse_raw_event(struct hid_device *hdev,
{
struct
magicmouse_sc
*
msc
=
hid_get_drvdata
(
hdev
);
struct
input_dev
*
input
=
msc
->
input
;
int
x
,
y
,
ts
,
ii
,
clicks
;
int
x
,
y
,
ts
,
ii
,
clicks
,
last_up
;
switch
(
data
[
0
])
{
case
0x10
:
...
...
@@ -235,12 +267,26 @@ static int magicmouse_raw_event(struct hid_device *hdev,
msc
->
ntouches
=
(
size
-
6
)
/
8
;
for
(
ii
=
0
;
ii
<
msc
->
ntouches
;
ii
++
)
magicmouse_emit_touch
(
msc
,
ii
,
data
+
ii
*
8
+
6
);
if
(
report_touches
)
{
last_up
=
1
;
for
(
ii
=
0
;
ii
<
ARRAY_SIZE
(
msc
->
touches
);
ii
++
)
{
if
(
msc
->
touches
[
ii
].
down
)
{
last_up
=
0
;
msc
->
touches
[
ii
].
down
=
0
;
}
}
if
(
last_up
)
{
input_mt_sync
(
input
);
}
}
/* When emulating three-button mode, it is important
* to have the current touch information before
* generating a click event.
*/
x
=
(
signed
char
)
data
[
1
]
;
y
=
(
signed
char
)
data
[
2
]
;
x
=
(
int
)(((
data
[
3
]
&
0x0c
)
<<
28
)
|
(
data
[
1
]
<<
22
))
>>
22
;
y
=
(
int
)(((
data
[
3
]
&
0x30
)
<<
26
)
|
(
data
[
2
]
<<
22
))
>>
22
;
clicks
=
data
[
3
];
break
;
case
0x20
:
/* Theoretically battery status (0-100), but I have
...
...
@@ -301,8 +347,10 @@ static void magicmouse_setup_input(struct input_dev *input, struct hid_device *h
__set_bit
(
EV_REL
,
input
->
evbit
);
__set_bit
(
REL_X
,
input
->
relbit
);
__set_bit
(
REL_Y
,
input
->
relbit
);
if
(
emulate_scroll_wheel
)
if
(
emulate_scroll_wheel
)
{
__set_bit
(
REL_WHEEL
,
input
->
relbit
);
__set_bit
(
REL_HWHEEL
,
input
->
relbit
);
}
if
(
report_touches
)
{
__set_bit
(
EV_ABS
,
input
->
evbit
);
...
...
@@ -345,6 +393,8 @@ static int magicmouse_probe(struct hid_device *hdev,
return
-
ENOMEM
;
}
msc
->
scroll_accel
=
SCROLL_ACCEL_DEFAULT
;
msc
->
quirks
=
id
->
driver_data
;
hid_set_drvdata
(
hdev
,
msc
);
...
...
drivers/hid/hid-roccat-kone.c
浏览文件 @
ada8c797
...
...
@@ -22,11 +22,6 @@
* Is it possible to remove and reinstall the urb in raw-event- or any
* other handler, or to defer this action to be executed somewhere else?
*
* TODO implement notification mechanism for overlong macro execution
* If user wants to execute an overlong macro only the names of macroset
* and macro are given. Should userland tap hidraw or is there an
* additional streaming mechanism?
*
* TODO is it possible to overwrite group for sysfs attributes via udev?
*/
...
...
@@ -277,7 +272,7 @@ static ssize_t kone_sysfs_read_settings(struct file *fp, struct kobject *kobj,
count
=
sizeof
(
struct
kone_settings
)
-
off
;
mutex_lock
(
&
kone
->
kone_lock
);
memcpy
(
buf
,
&
kone
->
settings
+
off
,
count
);
memcpy
(
buf
,
((
char
const
*
)
&
kone
->
settings
)
+
off
,
count
);
mutex_unlock
(
&
kone
->
kone_lock
);
return
count
;
...
...
@@ -337,7 +332,7 @@ static ssize_t kone_sysfs_read_profilex(struct kobject *kobj,
count
=
sizeof
(
struct
kone_profile
)
-
off
;
mutex_lock
(
&
kone
->
kone_lock
);
memcpy
(
buf
,
&
kone
->
profiles
[
number
-
1
],
sizeof
(
struct
kone_profile
)
);
memcpy
(
buf
,
((
char
const
*
)
&
kone
->
profiles
[
number
-
1
])
+
off
,
count
);
mutex_unlock
(
&
kone
->
kone_lock
);
return
count
;
...
...
@@ -622,18 +617,6 @@ static ssize_t kone_sysfs_set_startup_profile(struct device *dev,
return
size
;
}
/*
* This file is used by userland software to find devices that are handled by
* this driver. This provides a consistent way for actual and older kernels
* where this driver replaced usbhid instead of generic-usb.
* Driver capabilities are determined by version number.
*/
static
ssize_t
kone_sysfs_show_driver_version
(
struct
device
*
dev
,
struct
device_attribute
*
attr
,
char
*
buf
)
{
return
snprintf
(
buf
,
PAGE_SIZE
,
ROCCAT_KONE_DRIVER_VERSION
"
\n
"
);
}
/*
* Read actual dpi settings.
* Returns raw value for further processing. Refer to enum kone_polling_rates to
...
...
@@ -671,9 +654,6 @@ static DEVICE_ATTR(startup_profile, 0660,
kone_sysfs_show_startup_profile
,
kone_sysfs_set_startup_profile
);
static
DEVICE_ATTR
(
kone_driver_version
,
0440
,
kone_sysfs_show_driver_version
,
NULL
);
static
struct
attribute
*
kone_attributes
[]
=
{
&
dev_attr_actual_dpi
.
attr
,
&
dev_attr_actual_profile
.
attr
,
...
...
@@ -681,7 +661,6 @@ static struct attribute *kone_attributes[] = {
&
dev_attr_firmware_version
.
attr
,
&
dev_attr_tcu
.
attr
,
&
dev_attr_startup_profile
.
attr
,
&
dev_attr_kone_driver_version
.
attr
,
NULL
};
...
...
drivers/hid/hid-roccat-kone.h
浏览文件 @
ada8c797
...
...
@@ -14,8 +14,6 @@
#include <linux/types.h>
#define ROCCAT_KONE_DRIVER_VERSION "v0.3.1"
#pragma pack(push)
#pragma pack(1)
...
...
drivers/hid/hid-roccat.c
浏览文件 @
ada8c797
...
...
@@ -168,7 +168,7 @@ static int roccat_open(struct inode *inode, struct file *file)
printk
(
KERN_EMERG
"roccat device with minor %d doesn't exist
\n
"
,
minor
);
error
=
-
ENODEV
;
goto
exit_
unlock
;
goto
exit_
err
;
}
if
(
!
device
->
open
++
)
{
...
...
@@ -178,7 +178,7 @@ static int roccat_open(struct inode *inode, struct file *file)
PM_HINT_FULLON
);
if
(
error
<
0
)
{
--
device
->
open
;
goto
exit_
unlock
;
goto
exit_
err
;
}
}
error
=
device
->
hid
->
ll_driver
->
open
(
device
->
hid
);
...
...
@@ -187,7 +187,7 @@ static int roccat_open(struct inode *inode, struct file *file)
device
->
hid
->
ll_driver
->
power
(
device
->
hid
,
PM_HINT_NORMAL
);
--
device
->
open
;
goto
exit_
unlock
;
goto
exit_
err
;
}
}
...
...
@@ -202,6 +202,9 @@ static int roccat_open(struct inode *inode, struct file *file)
mutex_unlock
(
&
device
->
readers_lock
);
mutex_unlock
(
&
devices_lock
);
return
error
;
exit_err:
kfree
(
reader
);
goto
exit_unlock
;
}
static
int
roccat_release
(
struct
inode
*
inode
,
struct
file
*
file
)
...
...
drivers/hid/hid-roccat.h
浏览文件 @
ada8c797
...
...
@@ -15,7 +15,7 @@
#include <linux/hid.h>
#include <linux/types.h>
#if defined(CONFIG_HID_ROCCAT) || defined
(CONFIG_HID_ROCCAT_MODULE)
#if defined(CONFIG_HID_ROCCAT) || defined(CONFIG_HID_ROCCAT_MODULE)
int
roccat_connect
(
struct
hid_device
*
hid
);
void
roccat_disconnect
(
int
minor
);
int
roccat_report_event
(
int
minor
,
u8
const
*
data
,
int
len
);
...
...
drivers/hid/usbhid/hid-quirks.c
浏览文件 @
ada8c797
...
...
@@ -75,6 +75,8 @@ static const struct hid_blacklist {
{
USB_VENDOR_ID_WISEGROUP_LTD
,
USB_DEVICE_ID_SMARTJOY_DUAL_PLUS
,
HID_QUIRK_NOGET
|
HID_QUIRK_MULTI_INPUT
},
{
USB_VENDOR_ID_WISEGROUP_LTD2
,
USB_DEVICE_ID_SMARTJOY_DUAL_PLUS
,
HID_QUIRK_NOGET
|
HID_QUIRK_MULTI_INPUT
},
{
USB_VENDOR_ID_PI_ENGINEERING
,
USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL
,
HID_QUIRK_HIDINPUT_FORCE
},
{
0
,
0
}
};
...
...
include/linux/hid.h
浏览文件 @
ada8c797
...
...
@@ -311,6 +311,7 @@ struct hid_item {
#define HID_QUIRK_HIDDEV_FORCE 0x00000010
#define HID_QUIRK_BADPAD 0x00000020
#define HID_QUIRK_MULTI_INPUT 0x00000040
#define HID_QUIRK_HIDINPUT_FORCE 0x00000080
#define HID_QUIRK_SKIP_OUTPUT_REPORTS 0x00010000
#define HID_QUIRK_FULLSPEED_INTERVAL 0x10000000
#define HID_QUIRK_NO_INIT_REPORTS 0x20000000
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录