Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kirill Smelkov
linux
Commits
05b7b842
Commit
05b7b842
authored
Mar 09, 2012
by
Dmitry Torokhov
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'for-next' of github.com:rydberg/linux into next
parents
b675b366
7491f3df
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
59 additions
and
4 deletions
+59
-4
drivers/input/evdev.c
drivers/input/evdev.c
+26
-1
drivers/input/input.c
drivers/input/input.c
+1
-1
drivers/input/mouse/bcm5974.c
drivers/input/mouse/bcm5974.c
+1
-0
include/linux/input.h
include/linux/input.h
+25
-0
include/linux/input/mt.h
include/linux/input/mt.h
+6
-2
No files found.
drivers/input/evdev.c
View file @
05b7b842
...
...
@@ -20,7 +20,7 @@
#include <linux/slab.h>
#include <linux/module.h>
#include <linux/init.h>
#include <linux/input.h>
#include <linux/input
/mt
.h>
#include <linux/major.h>
#include <linux/device.h>
#include "input-compat.h"
...
...
@@ -632,6 +632,28 @@ static int evdev_handle_set_keycode_v2(struct input_dev *dev, void __user *p)
return
input_set_keycode
(
dev
,
&
ke
);
}
static
int
evdev_handle_mt_request
(
struct
input_dev
*
dev
,
unsigned
int
size
,
int
__user
*
ip
)
{
const
struct
input_mt_slot
*
mt
=
dev
->
mt
;
unsigned
int
code
;
int
max_slots
;
int
i
;
if
(
get_user
(
code
,
&
ip
[
0
]))
return
-
EFAULT
;
if
(
!
input_is_mt_value
(
code
))
return
-
EINVAL
;
max_slots
=
(
size
-
sizeof
(
__u32
))
/
sizeof
(
__s32
);
for
(
i
=
0
;
i
<
dev
->
mtsize
&&
i
<
max_slots
;
i
++
)
if
(
put_user
(
input_mt_get_value
(
&
mt
[
i
],
code
),
&
ip
[
1
+
i
]))
return
-
EFAULT
;
return
0
;
}
static
long
evdev_do_ioctl
(
struct
file
*
file
,
unsigned
int
cmd
,
void
__user
*
p
,
int
compat_mode
)
{
...
...
@@ -725,6 +747,9 @@ static long evdev_do_ioctl(struct file *file, unsigned int cmd,
return
bits_to_user
(
dev
->
propbit
,
INPUT_PROP_MAX
,
size
,
p
,
compat_mode
);
case
EVIOCGMTSLOTS
(
0
):
return
evdev_handle_mt_request
(
dev
,
size
,
ip
);
case
EVIOCGKEY
(
0
):
return
bits_to_user
(
dev
->
key
,
KEY_MAX
,
size
,
p
,
compat_mode
);
...
...
drivers/input/input.c
View file @
05b7b842
...
...
@@ -180,7 +180,7 @@ static int input_handle_abs_event(struct input_dev *dev,
return
INPUT_IGNORE_EVENT
;
}
is_mt_event
=
code
>=
ABS_MT_FIRST
&&
code
<=
ABS_MT_LAST
;
is_mt_event
=
input_is_mt_value
(
code
)
;
if
(
!
is_mt_event
)
{
pold
=
&
dev
->
absinfo
[
code
].
value
;
...
...
drivers/input/mouse/bcm5974.c
View file @
05b7b842
...
...
@@ -433,6 +433,7 @@ static void setup_events_to_report(struct input_dev *input_dev,
__set_bit
(
BTN_TOOL_QUADTAP
,
input_dev
->
keybit
);
__set_bit
(
BTN_LEFT
,
input_dev
->
keybit
);
__set_bit
(
INPUT_PROP_POINTER
,
input_dev
->
propbit
);
if
(
cfg
->
caps
&
HAS_INTEGRATED_BUTTON
)
__set_bit
(
INPUT_PROP_BUTTONPAD
,
input_dev
->
propbit
);
...
...
include/linux/input.h
View file @
05b7b842
...
...
@@ -114,6 +114,31 @@ struct input_keymap_entry {
#define EVIOCGUNIQ(len) _IOC(_IOC_READ, 'E', 0x08, len)
/* get unique identifier */
#define EVIOCGPROP(len) _IOC(_IOC_READ, 'E', 0x09, len)
/* get device properties */
/**
* EVIOCGMTSLOTS(len) - get MT slot values
*
* The ioctl buffer argument should be binary equivalent to
*
* struct input_mt_request_layout {
* __u32 code;
* __s32 values[num_slots];
* };
*
* where num_slots is the (arbitrary) number of MT slots to extract.
*
* The ioctl size argument (len) is the size of the buffer, which
* should satisfy len = (num_slots + 1) * sizeof(__s32). If len is
* too small to fit all available slots, the first num_slots are
* returned.
*
* Before the call, code is set to the wanted ABS_MT event type. On
* return, values[] is filled with the slot values for the specified
* ABS_MT code.
*
* If the request code is not an ABS_MT value, -EINVAL is returned.
*/
#define EVIOCGMTSLOTS(len) _IOC(_IOC_READ, 'E', 0x0a, len)
#define EVIOCGKEY(len) _IOC(_IOC_READ, 'E', 0x18, len)
/* get global key state */
#define EVIOCGLED(len) _IOC(_IOC_READ, 'E', 0x19, len)
/* get all LEDs */
#define EVIOCGSND(len) _IOC(_IOC_READ, 'E', 0x1a, len)
/* get all sounds status */
...
...
include/linux/input/mt.h
View file @
05b7b842
...
...
@@ -48,10 +48,14 @@ static inline void input_mt_slot(struct input_dev *dev, int slot)
input_event
(
dev
,
EV_ABS
,
ABS_MT_SLOT
,
slot
);
}
static
inline
bool
input_is_mt_value
(
int
axis
)
{
return
axis
>=
ABS_MT_FIRST
&&
axis
<=
ABS_MT_LAST
;
}
static
inline
bool
input_is_mt_axis
(
int
axis
)
{
return
axis
==
ABS_MT_SLOT
||
(
axis
>=
ABS_MT_FIRST
&&
axis
<=
ABS_MT_LAST
);
return
axis
==
ABS_MT_SLOT
||
input_is_mt_value
(
axis
);
}
void
input_mt_report_slot_state
(
struct
input_dev
*
dev
,
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment