Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
a5cba18c
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
a5cba18c
编写于
7月 03, 2015
作者:
D
Dmitry Torokhov
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'next' into for-linus
Prepare second round of input updates for 4.2 merge window.
上级
f7ebc4dc
d55d0b56
变更
12
展开全部
隐藏空白更改
内联
并排
Showing
12 changed file
with
1296 addition
and
76 deletion
+1296
-76
drivers/input/input.c
drivers/input/input.c
+9
-25
drivers/input/joystick/xpad.c
drivers/input/joystick/xpad.c
+65
-13
drivers/input/keyboard/imx_keypad.c
drivers/input/keyboard/imx_keypad.c
+3
-1
drivers/input/misc/axp20x-pek.c
drivers/input/misc/axp20x-pek.c
+6
-2
drivers/input/serio/Kconfig
drivers/input/serio/Kconfig
+1
-0
drivers/input/touchscreen/Kconfig
drivers/input/touchscreen/Kconfig
+12
-0
drivers/input/touchscreen/Makefile
drivers/input/touchscreen/Makefile
+1
-0
drivers/input/touchscreen/edt-ft5x06.c
drivers/input/touchscreen/edt-ft5x06.c
+2
-7
drivers/input/touchscreen/of_touchscreen.c
drivers/input/touchscreen/of_touchscreen.c
+44
-25
drivers/input/touchscreen/tsc2005.c
drivers/input/touchscreen/tsc2005.c
+1
-1
drivers/input/touchscreen/wdt87xx_i2c.c
drivers/input/touchscreen/wdt87xx_i2c.c
+1149
-0
include/linux/input/touchscreen.h
include/linux/input/touchscreen.h
+3
-2
未找到文件。
drivers/input/input.c
浏览文件 @
a5cba18c
...
...
@@ -677,12 +677,9 @@ static void input_dev_release_keys(struct input_dev *dev)
int
code
;
if
(
is_event_supported
(
EV_KEY
,
dev
->
evbit
,
EV_MAX
))
{
for
(
code
=
0
;
code
<=
KEY_MAX
;
code
++
)
{
if
(
is_event_supported
(
code
,
dev
->
keybit
,
KEY_MAX
)
&&
__test_and_clear_bit
(
code
,
dev
->
key
))
{
input_pass_event
(
dev
,
EV_KEY
,
code
,
0
);
}
}
for_each_set_bit
(
code
,
dev
->
key
,
KEY_CNT
)
input_pass_event
(
dev
,
EV_KEY
,
code
,
0
);
memset
(
dev
->
key
,
0
,
sizeof
(
dev
->
key
));
input_pass_event
(
dev
,
EV_SYN
,
SYN_REPORT
,
1
);
}
}
...
...
@@ -1626,10 +1623,7 @@ static int input_dev_uevent(struct device *device, struct kobj_uevent_env *env)
if (!test_bit(EV_##type, dev->evbit)) \
break; \
\
for (i = 0; i < type##_MAX; i++) { \
if (!test_bit(i, dev->bits##bit)) \
continue; \
\
for_each_set_bit(i, dev->bits##bit, type##_CNT) { \
active = test_bit(i, dev->bits); \
if (!active && !on) \
continue; \
...
...
@@ -1980,22 +1974,12 @@ static unsigned int input_estimate_events_per_packet(struct input_dev *dev)
events
=
mt_slots
+
1
;
/* count SYN_MT_REPORT and SYN_REPORT */
if
(
test_bit
(
EV_ABS
,
dev
->
evbit
))
{
for
(
i
=
0
;
i
<
ABS_CNT
;
i
++
)
{
if
(
test_bit
(
i
,
dev
->
absbit
))
{
if
(
input_is_mt_axis
(
i
))
events
+=
mt_slots
;
else
events
++
;
}
}
}
if
(
test_bit
(
EV_ABS
,
dev
->
evbit
))
for_each_set_bit
(
i
,
dev
->
absbit
,
ABS_CNT
)
events
+=
input_is_mt_axis
(
i
)
?
mt_slots
:
1
;
if
(
test_bit
(
EV_REL
,
dev
->
evbit
))
{
for
(
i
=
0
;
i
<
REL_CNT
;
i
++
)
if
(
test_bit
(
i
,
dev
->
relbit
))
events
++
;
}
if
(
test_bit
(
EV_REL
,
dev
->
evbit
))
events
+=
bitmap_weight
(
dev
->
relbit
,
REL_CNT
);
/* Make room for KEY and MSC events */
events
+=
7
;
...
...
drivers/input/joystick/xpad.c
浏览文件 @
a5cba18c
...
...
@@ -344,6 +344,7 @@ struct usb_xpad {
int
mapping
;
/* map d-pad to buttons or to axes */
int
xtype
;
/* type of xbox device */
unsigned
long
led_no
;
/* led to lit on xbox360 controllers */
};
/*
...
...
@@ -488,6 +489,8 @@ static void xpad360_process_packet(struct usb_xpad *xpad,
input_sync
(
dev
);
}
static
void
xpad_identify_controller
(
struct
usb_xpad
*
xpad
);
/*
* xpad360w_process_packet
*
...
...
@@ -510,6 +513,11 @@ static void xpad360w_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned cha
if
(
data
[
1
]
&
0x80
)
{
xpad
->
pad_present
=
1
;
usb_submit_urb
(
xpad
->
bulk_out
,
GFP_ATOMIC
);
/*
* Light up the segment corresponding to
* controller number.
*/
xpad_identify_controller
(
xpad
);
}
else
xpad
->
pad_present
=
0
;
}
...
...
@@ -881,17 +889,63 @@ struct xpad_led {
struct
usb_xpad
*
xpad
;
};
/**
* @param command
* 0: off
* 1: all blink, then previous setting
* 2: 1/top-left blink, then on
* 3: 2/top-right blink, then on
* 4: 3/bottom-left blink, then on
* 5: 4/bottom-right blink, then on
* 6: 1/top-left on
* 7: 2/top-right on
* 8: 3/bottom-left on
* 9: 4/bottom-right on
* 10: rotate
* 11: blink, based on previous setting
* 12: slow blink, based on previous setting
* 13: rotate with two lights
* 14: persistent slow all blink
* 15: blink once, then previous setting
*/
static
void
xpad_send_led_command
(
struct
usb_xpad
*
xpad
,
int
command
)
{
if
(
command
>=
0
&&
command
<
14
)
{
mutex_lock
(
&
xpad
->
odata_mutex
);
command
%=
16
;
mutex_lock
(
&
xpad
->
odata_mutex
);
switch
(
xpad
->
xtype
)
{
case
XTYPE_XBOX360
:
xpad
->
odata
[
0
]
=
0x01
;
xpad
->
odata
[
1
]
=
0x03
;
xpad
->
odata
[
2
]
=
command
;
xpad
->
irq_out
->
transfer_buffer_length
=
3
;
usb_submit_urb
(
xpad
->
irq_out
,
GFP_KERNEL
);
mutex_unlock
(
&
xpad
->
odata_mutex
);
break
;
case
XTYPE_XBOX360W
:
xpad
->
odata
[
0
]
=
0x00
;
xpad
->
odata
[
1
]
=
0x00
;
xpad
->
odata
[
2
]
=
0x08
;
xpad
->
odata
[
3
]
=
0x40
+
command
;
xpad
->
odata
[
4
]
=
0x00
;
xpad
->
odata
[
5
]
=
0x00
;
xpad
->
odata
[
6
]
=
0x00
;
xpad
->
odata
[
7
]
=
0x00
;
xpad
->
odata
[
8
]
=
0x00
;
xpad
->
odata
[
9
]
=
0x00
;
xpad
->
odata
[
10
]
=
0x00
;
xpad
->
odata
[
11
]
=
0x00
;
xpad
->
irq_out
->
transfer_buffer_length
=
12
;
break
;
}
usb_submit_urb
(
xpad
->
irq_out
,
GFP_KERNEL
);
mutex_unlock
(
&
xpad
->
odata_mutex
);
}
static
void
xpad_identify_controller
(
struct
usb_xpad
*
xpad
)
{
/* Light up the segment corresponding to controller number */
xpad_send_led_command
(
xpad
,
(
xpad
->
led_no
%
4
)
+
2
);
}
static
void
xpad_led_set
(
struct
led_classdev
*
led_cdev
,
...
...
@@ -905,22 +959,21 @@ static void xpad_led_set(struct led_classdev *led_cdev,
static
int
xpad_led_probe
(
struct
usb_xpad
*
xpad
)
{
static
atomic_t
led_seq
=
ATOMIC_INIT
(
-
1
);
unsigned
long
led_no
;
static
atomic_t
led_seq
=
ATOMIC_INIT
(
-
1
);
struct
xpad_led
*
led
;
struct
led_classdev
*
led_cdev
;
int
error
;
if
(
xpad
->
xtype
!=
XTYPE_XBOX360
)
if
(
xpad
->
xtype
!=
XTYPE_XBOX360
&&
xpad
->
xtype
!=
XTYPE_XBOX360W
)
return
0
;
xpad
->
led
=
led
=
kzalloc
(
sizeof
(
struct
xpad_led
),
GFP_KERNEL
);
if
(
!
led
)
return
-
ENOMEM
;
led_no
=
atomic_inc_return
(
&
led_seq
);
xpad
->
led_no
=
atomic_inc_return
(
&
led_seq
);
snprintf
(
led
->
name
,
sizeof
(
led
->
name
),
"xpad%lu"
,
led_no
);
snprintf
(
led
->
name
,
sizeof
(
led
->
name
),
"xpad%lu"
,
xpad
->
led_no
);
led
->
xpad
=
xpad
;
led_cdev
=
&
led
->
led_cdev
;
...
...
@@ -934,10 +987,8 @@ static int xpad_led_probe(struct usb_xpad *xpad)
return
error
;
}
/*
* Light up the segment corresponding to controller number
*/
xpad_send_led_command
(
xpad
,
(
led_no
%
4
)
+
2
);
/* Light up the segment corresponding to controller number */
xpad_identify_controller
(
xpad
);
return
0
;
}
...
...
@@ -954,6 +1005,7 @@ static void xpad_led_disconnect(struct usb_xpad *xpad)
#else
static
int
xpad_led_probe
(
struct
usb_xpad
*
xpad
)
{
return
0
;
}
static
void
xpad_led_disconnect
(
struct
usb_xpad
*
xpad
)
{
}
static
void
xpad_identify_controller
(
struct
usb_xpad
*
xpad
)
{
}
#endif
...
...
drivers/input/keyboard/imx_keypad.c
浏览文件 @
a5cba18c
...
...
@@ -506,7 +506,9 @@ static int imx_keypad_probe(struct platform_device *pdev)
input_set_drvdata
(
input_dev
,
keypad
);
/* Ensure that the keypad will stay dormant until opened */
clk_prepare_enable
(
keypad
->
clk
);
error
=
clk_prepare_enable
(
keypad
->
clk
);
if
(
error
)
return
error
;
imx_keypad_inhibit
(
keypad
);
clk_disable_unprepare
(
keypad
->
clk
);
...
...
drivers/input/misc/axp20x-pek.c
浏览文件 @
a5cba18c
...
...
@@ -167,9 +167,13 @@ static irqreturn_t axp20x_pek_irq(int irq, void *pwr)
struct
input_dev
*
idev
=
pwr
;
struct
axp20x_pek
*
axp20x_pek
=
input_get_drvdata
(
idev
);
if
(
irq
==
axp20x_pek
->
irq_dbr
)
/*
* The power-button is connected to ground so a falling edge (dbf)
* means it is pressed.
*/
if
(
irq
==
axp20x_pek
->
irq_dbf
)
input_report_key
(
idev
,
KEY_POWER
,
true
);
else
if
(
irq
==
axp20x_pek
->
irq_db
f
)
else
if
(
irq
==
axp20x_pek
->
irq_db
r
)
input_report_key
(
idev
,
KEY_POWER
,
false
);
input_sync
(
idev
);
...
...
drivers/input/serio/Kconfig
浏览文件 @
a5cba18c
...
...
@@ -244,6 +244,7 @@ config SERIO_PS2MULT
config SERIO_ARC_PS2
tristate "ARC PS/2 support"
depends on HAS_IOMEM
help
Say Y here if you have an ARC FPGA platform with a PS/2
controller in it.
...
...
drivers/input/touchscreen/Kconfig
浏览文件 @
a5cba18c
...
...
@@ -658,6 +658,18 @@ config TOUCHSCREEN_PIXCIR
To compile this driver as a module, choose M here: the
module will be called pixcir_i2c_ts.
config TOUCHSCREEN_WDT87XX_I2C
tristate "Weida HiTech I2C touchscreen"
depends on I2C
help
Say Y here if you have a Weida WDT87XX I2C touchscreen
connected to your system.
If unsure, say N.
To compile this driver as a module, choose M here: the
module will be called wdt87xx_i2c.
config TOUCHSCREEN_WM831X
tristate "Support for WM831x touchscreen controllers"
depends on MFD_WM831X
...
...
drivers/input/touchscreen/Makefile
浏览文件 @
a5cba18c
...
...
@@ -72,6 +72,7 @@ obj-$(CONFIG_TOUCHSCREEN_TSC2007) += tsc2007.o
obj-$(CONFIG_TOUCHSCREEN_UCB1400)
+=
ucb1400_ts.o
obj-$(CONFIG_TOUCHSCREEN_WACOM_W8001)
+=
wacom_w8001.o
obj-$(CONFIG_TOUCHSCREEN_WACOM_I2C)
+=
wacom_i2c.o
obj-$(CONFIG_TOUCHSCREEN_WDT87XX_I2C)
+=
wdt87xx_i2c.o
obj-$(CONFIG_TOUCHSCREEN_WM831X)
+=
wm831x-ts.o
obj-$(CONFIG_TOUCHSCREEN_WM97XX)
+=
wm97xx-ts.o
wm97xx-ts-$(CONFIG_TOUCHSCREEN_WM9705)
+=
wm9705.o
...
...
drivers/input/touchscreen/edt-ft5x06.c
浏览文件 @
a5cba18c
...
...
@@ -1035,20 +1035,15 @@ static int edt_ft5x06_ts_probe(struct i2c_client *client,
input
->
id
.
bustype
=
BUS_I2C
;
input
->
dev
.
parent
=
&
client
->
dev
;
__set_bit
(
EV_KEY
,
input
->
evbit
);
__set_bit
(
EV_ABS
,
input
->
evbit
);
__set_bit
(
BTN_TOUCH
,
input
->
keybit
);
input_set_abs_params
(
input
,
ABS_X
,
0
,
tsdata
->
num_x
*
64
-
1
,
0
,
0
);
input_set_abs_params
(
input
,
ABS_Y
,
0
,
tsdata
->
num_y
*
64
-
1
,
0
,
0
);
input_set_abs_params
(
input
,
ABS_MT_POSITION_X
,
0
,
tsdata
->
num_x
*
64
-
1
,
0
,
0
);
input_set_abs_params
(
input
,
ABS_MT_POSITION_Y
,
0
,
tsdata
->
num_y
*
64
-
1
,
0
,
0
);
if
(
!
pdata
)
touchscreen_parse_of_params
(
input
);
touchscreen_parse_of_params
(
input
,
true
);
error
=
input_mt_init_slots
(
input
,
MAX_SUPPORT_POINTS
,
0
);
error
=
input_mt_init_slots
(
input
,
MAX_SUPPORT_POINTS
,
INPUT_MT_DIRECT
);
if
(
error
)
{
dev_err
(
&
client
->
dev
,
"Unable to init MT slots.
\n
"
);
return
error
;
...
...
drivers/input/touchscreen/of_touchscreen.c
浏览文件 @
a5cba18c
...
...
@@ -14,14 +14,22 @@
#include <linux/input/mt.h>
#include <linux/input/touchscreen.h>
static
u32
of_get_optional_u32
(
struct
device_node
*
np
,
const
char
*
property
)
static
bool
touchscreen_get_prop_u32
(
struct
device_node
*
np
,
const
char
*
property
,
unsigned
int
default_value
,
unsigned
int
*
value
)
{
u32
val
=
0
;
u32
val
;
int
error
;
of_property_read_u32
(
np
,
property
,
&
val
);
error
=
of_property_read_u32
(
np
,
property
,
&
val
);
if
(
error
)
{
*
value
=
default_value
;
return
false
;
}
return
val
;
*
value
=
val
;
return
true
;
}
static
void
touchscreen_set_params
(
struct
input_dev
*
dev
,
...
...
@@ -54,34 +62,45 @@ static void touchscreen_set_params(struct input_dev *dev,
* input device accordingly. The function keeps previously setuped default
* values if no value is specified via DT.
*/
void
touchscreen_parse_of_params
(
struct
input_dev
*
dev
)
void
touchscreen_parse_of_params
(
struct
input_dev
*
dev
,
bool
multitouch
)
{
struct
device_node
*
np
=
dev
->
dev
.
parent
->
of_node
;
u32
maximum
,
fuzz
;
unsigned
int
axis
;
unsigned
int
maximum
,
fuzz
;
bool
data_present
;
input_alloc_absinfo
(
dev
);
if
(
!
dev
->
absinfo
)
return
;
maximum
=
of_get_optional_u32
(
np
,
"touchscreen-size-x"
);
fuzz
=
of_get_optional_u32
(
np
,
"touchscreen-fuzz-x"
);
if
(
maximum
||
fuzz
)
{
touchscreen_set_params
(
dev
,
ABS_X
,
maximum
,
fuzz
);
touchscreen_set_params
(
dev
,
ABS_MT_POSITION_X
,
maximum
,
fuzz
);
}
axis
=
multitouch
?
ABS_MT_POSITION_X
:
ABS_X
;
data_present
=
touchscreen_get_prop_u32
(
np
,
"touchscreen-size-x"
,
input_abs_get_max
(
dev
,
axis
),
&
maximum
)
|
touchscreen_get_prop_u32
(
np
,
"touchscreen-fuzz-x"
,
input_abs_get_fuzz
(
dev
,
axis
),
&
fuzz
);
if
(
data_present
)
touchscreen_set_params
(
dev
,
axis
,
maximum
,
fuzz
);
maximum
=
of_get_optional_u32
(
np
,
"touchscreen-size-y"
);
fuzz
=
of_get_optional_u32
(
np
,
"touchscreen-fuzz-y"
);
if
(
maximum
||
fuzz
)
{
touchscreen_set_params
(
dev
,
ABS_Y
,
maximum
,
fuzz
);
touchscreen_set_params
(
dev
,
ABS_MT_POSITION_Y
,
maximum
,
fuzz
);
}
axis
=
multitouch
?
ABS_MT_POSITION_Y
:
ABS_Y
;
data_present
=
touchscreen_get_prop_u32
(
np
,
"touchscreen-size-y"
,
input_abs_get_max
(
dev
,
axis
),
&
maximum
)
|
touchscreen_get_prop_u32
(
np
,
"touchscreen-fuzz-y"
,
input_abs_get_fuzz
(
dev
,
axis
),
&
fuzz
);
if
(
data_present
)
touchscreen_set_params
(
dev
,
axis
,
maximum
,
fuzz
);
maximum
=
of_get_optional_u32
(
np
,
"touchscreen-max-pressure"
);
fuzz
=
of_get_optional_u32
(
np
,
"touchscreen-fuzz-pressure"
);
if
(
maximum
||
fuzz
)
{
touchscreen_set_params
(
dev
,
ABS_PRESSURE
,
maximum
,
fuzz
);
touchscreen_set_params
(
dev
,
ABS_MT_PRESSURE
,
maximum
,
fuzz
);
}
axis
=
multitouch
?
ABS_MT_PRESSURE
:
ABS_PRESSURE
;
data_present
=
touchscreen_get_prop_u32
(
np
,
"touchscreen-max-pressure"
,
input_abs_get_max
(
dev
,
axis
),
&
maximum
)
|
touchscreen_get_prop_u32
(
np
,
"touchscreen-fuzz-pressure"
,
input_abs_get_fuzz
(
dev
,
axis
),
&
fuzz
);
if
(
data_present
)
touchscreen_set_params
(
dev
,
axis
,
maximum
,
fuzz
);
}
EXPORT_SYMBOL
(
touchscreen_parse_of_params
);
drivers/input/touchscreen/tsc2005.c
浏览文件 @
a5cba18c
...
...
@@ -709,7 +709,7 @@ static int tsc2005_probe(struct spi_device *spi)
input_set_abs_params
(
input_dev
,
ABS_PRESSURE
,
0
,
max_p
,
fudge_p
,
0
);
if
(
np
)
touchscreen_parse_of_params
(
input_dev
);
touchscreen_parse_of_params
(
input_dev
,
false
);
input_dev
->
open
=
tsc2005_open
;
input_dev
->
close
=
tsc2005_close
;
...
...
drivers/input/touchscreen/wdt87xx_i2c.c
0 → 100644
浏览文件 @
a5cba18c
此差异已折叠。
点击以展开。
include/linux/input/touchscreen.h
浏览文件 @
a5cba18c
...
...
@@ -12,9 +12,10 @@
#include <linux/input.h>
#ifdef CONFIG_OF
void
touchscreen_parse_of_params
(
struct
input_dev
*
dev
);
void
touchscreen_parse_of_params
(
struct
input_dev
*
dev
,
bool
multitouch
);
#else
static
inline
void
touchscreen_parse_of_params
(
struct
input_dev
*
dev
)
static
inline
void
touchscreen_parse_of_params
(
struct
input_dev
*
dev
,
bool
multitouch
)
{
}
#endif
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录