Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
b037b08e
K
Kernel
项目概览
openeuler
/
Kernel
大约 1 年 前同步成功
通知
6
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看板
提交
b037b08e
编写于
11月 04, 2007
作者:
D
Dmitry Torokhov
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Input: cobalt_btns - add support for loadable keymaps
Signed-off-by:
N
Dmitry Torokhov
<
dtor@mail.ru
>
上级
72341eea
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
36 addition
and
37 deletion
+36
-37
drivers/input/misc/cobalt_btns.c
drivers/input/misc/cobalt_btns.c
+36
-37
未找到文件。
drivers/input/misc/cobalt_btns.c
浏览文件 @
b037b08e
...
...
@@ -27,55 +27,48 @@
#define BUTTONS_COUNT_THRESHOLD 3
#define BUTTONS_STATUS_MASK 0xfe000000
static
const
unsigned
short
cobalt_map
[]
=
{
KEY_RESERVED
,
KEY_RESTART
,
KEY_LEFT
,
KEY_UP
,
KEY_DOWN
,
KEY_RIGHT
,
KEY_ENTER
,
KEY_SELECT
};
struct
buttons_dev
{
struct
input_polled_dev
*
poll_dev
;
unsigned
short
keymap
[
ARRAY_SIZE
(
cobalt_map
)];
int
count
[
ARRAY_SIZE
(
cobalt_map
)];
void
__iomem
*
reg
;
};
struct
buttons_map
{
uint32_t
mask
;
int
keycode
;
int
count
;
};
static
struct
buttons_map
buttons_map
[]
=
{
{
0x02000000
,
KEY_RESTART
,
},
{
0x04000000
,
KEY_LEFT
,
},
{
0x08000000
,
KEY_UP
,
},
{
0x10000000
,
KEY_DOWN
,
},
{
0x20000000
,
KEY_RIGHT
,
},
{
0x40000000
,
KEY_ENTER
,
},
{
0x80000000
,
KEY_SELECT
,
},
};
static
void
handle_buttons
(
struct
input_polled_dev
*
dev
)
{
struct
buttons_map
*
button
=
buttons_map
;
struct
buttons_dev
*
bdev
=
dev
->
private
;
struct
input_dev
*
input
=
dev
->
input
;
uint32_t
status
;
int
i
;
status
=
readl
(
bdev
->
reg
);
status
=
~
status
&
BUTTONS_STATUS_MASK
;
status
=
~
readl
(
bdev
->
reg
)
>>
24
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
buttons_map
);
i
++
)
{
if
(
status
&
button
->
mask
)
{
button
->
count
++
;
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
bdev
->
keymap
);
i
++
)
{
if
(
status
&
(
1UL
<<
i
))
{
if
(
++
bdev
->
count
[
i
]
==
BUTTONS_COUNT_THRESHOLD
)
{
input_event
(
input
,
EV_MSC
,
MSC_SCAN
,
i
);
input_report_key
(
input
,
bdev
->
keymap
[
i
],
1
);
input_sync
(
input
);
}
}
else
{
if
(
button
->
count
>=
BUTTONS_COUNT_THRESHOLD
)
{
input_report_key
(
input
,
button
->
keycode
,
0
);
if
(
bdev
->
count
[
i
]
>=
BUTTONS_COUNT_THRESHOLD
)
{
input_event
(
input
,
EV_MSC
,
MSC_SCAN
,
i
);
input_report_key
(
input
,
bdev
->
keymap
[
i
],
0
);
input_sync
(
input
);
}
button
->
count
=
0
;
}
if
(
button
->
count
==
BUTTONS_COUNT_THRESHOLD
)
{
input_report_key
(
input
,
button
->
keycode
,
1
);
input_sync
(
input
);
bdev
->
count
[
i
]
=
0
;
}
button
++
;
}
}
...
...
@@ -94,6 +87,8 @@ static int __devinit cobalt_buttons_probe(struct platform_device *pdev)
goto
err_free_mem
;
}
memcpy
(
bdev
->
keymap
,
cobalt_map
,
sizeof
(
bdev
->
keymap
));
poll_dev
->
private
=
bdev
;
poll_dev
->
poll
=
handle_buttons
;
poll_dev
->
poll_interval
=
BUTTONS_POLL_INTERVAL
;
...
...
@@ -104,11 +99,15 @@ static int __devinit cobalt_buttons_probe(struct platform_device *pdev)
input
->
id
.
bustype
=
BUS_HOST
;
input
->
cdev
.
dev
=
&
pdev
->
dev
;
input
->
evbit
[
0
]
=
BIT_MASK
(
EV_KEY
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
buttons_map
);
i
++
)
{
set_bit
(
buttons_map
[
i
].
keycode
,
input
->
keybit
);
buttons_map
[
i
].
count
=
0
;
}
input
->
keycode
=
pdev
->
keymap
;
input
->
keycodemax
=
ARRAY_SIZE
(
pdev
->
keymap
);
input
->
keycodesize
=
sizeof
(
unsigned
short
);
input_set_capability
(
input
,
EV_MSC
,
MSC_SCAN
);
__set_bit
(
EV_KEY
,
input
->
evbit
);
for
(
i
=
0
;
i
<
ARRAY_SIZE
(
buttons_map
);
i
++
)
__set_bit
(
input
->
keycode
[
i
],
input
->
keybit
);
__clear_bit
(
KEY_RESERVED
,
input
->
keybit
);
res
=
platform_get_resource
(
pdev
,
IORESOURCE_MEM
,
0
);
if
(
!
res
)
{
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录