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
77a53fd2
Commit
77a53fd2
authored
Aug 25, 2009
by
Dmitry Torokhov
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Input: matrix-keypad - add function to build device keymap
Signed-off-by:
Dmitry Torokhov
<
dtor@mail.ru
>
parent
8fbac18e
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
37 additions
and
26 deletions
+37
-26
drivers/input/keyboard/matrix_keypad.c
drivers/input/keyboard/matrix_keypad.c
+3
-12
drivers/input/keyboard/w90p910_keypad.c
drivers/input/keyboard/w90p910_keypad.c
+2
-14
include/linux/input/matrix_keypad.h
include/linux/input/matrix_keypad.h
+32
-0
No files found.
drivers/input/keyboard/matrix_keypad.c
View file @
77a53fd2
...
...
@@ -319,7 +319,6 @@ static int __devinit matrix_keypad_probe(struct platform_device *pdev)
struct
input_dev
*
input_dev
;
unsigned
short
*
keycodes
;
unsigned
int
row_shift
;
int
i
;
int
err
;
pdata
=
pdev
->
dev
.
platform_data
;
...
...
@@ -363,18 +362,10 @@ static int __devinit matrix_keypad_probe(struct platform_device *pdev)
input_dev
->
keycode
=
keycodes
;
input_dev
->
keycodesize
=
sizeof
(
*
keycodes
);
input_dev
->
keycodemax
=
pdata
->
num_row_gpios
<<
keypad
->
row_shift
;
for
(
i
=
0
;
i
<
keymap_data
->
keymap_size
;
i
++
)
{
unsigned
int
key
=
keymap_data
->
keymap
[
i
];
unsigned
int
row
=
KEY_ROW
(
key
);
unsigned
int
col
=
KEY_COL
(
key
);
unsigned
short
code
=
KEY_VAL
(
key
);
input_dev
->
keycodemax
=
pdata
->
num_row_gpios
<<
row_shift
;
keycodes
[
MATRIX_SCAN_CODE
(
row
,
col
,
row_shift
)]
=
code
;
__set_bit
(
code
,
input_dev
->
keybit
);
}
__clear_bit
(
KEY_RESERVED
,
input_dev
->
keybit
);
matrix_keypad_build_keymap
(
keymap_data
,
row_shift
,
input_dev
->
keycode
,
input_dev
->
keybit
);
input_set_capability
(
input_dev
,
EV_MSC
,
MSC_SCAN
);
input_set_drvdata
(
input_dev
,
keypad
);
...
...
drivers/input/keyboard/w90p910_keypad.c
View file @
77a53fd2
...
...
@@ -126,7 +126,6 @@ static int __devinit w90p910_keypad_probe(struct platform_device *pdev)
struct
resource
*
res
;
int
irq
;
int
error
;
int
i
;
if
(
!
pdata
)
{
dev_err
(
&
pdev
->
dev
,
"no platform data defined
\n
"
);
...
...
@@ -197,19 +196,8 @@ static int __devinit w90p910_keypad_probe(struct platform_device *pdev)
input_dev
->
evbit
[
0
]
=
BIT_MASK
(
EV_KEY
)
|
BIT_MASK
(
EV_REP
);
input_set_capability
(
input_dev
,
EV_MSC
,
MSC_SCAN
);
for
(
i
=
0
;
i
<
keymap_data
->
keymap_size
;
i
++
)
{
unsigned
int
key
=
keymap_data
->
keymap
[
i
];
unsigned
int
row
=
KEY_ROW
(
key
);
unsigned
int
col
=
KEY_COL
(
key
);
unsigned
short
keycode
=
KEY_VAL
(
key
);
unsigned
int
scancode
=
MATRIX_SCAN_CODE
(
row
,
col
,
W90P910_ROW_SHIFT
);
keypad
->
keymap
[
scancode
]
=
keycode
;
__set_bit
(
keycode
,
input_dev
->
keybit
);
}
__clear_bit
(
KEY_RESERVED
,
input_dev
->
keybit
);
matrix_keypad_build_keymap
(
keymap_data
,
W90P910_ROW_SHIFT
,
input_dev
->
keycode
,
input_dev
->
keybit
);
error
=
request_irq
(
keypad
->
irq
,
w90p910_keypad_irq_handler
,
IRQF_DISABLED
,
pdev
->
name
,
keypad
);
...
...
include/linux/input/matrix_keypad.h
View file @
77a53fd2
...
...
@@ -63,4 +63,36 @@ struct matrix_keypad_platform_data {
bool
wakeup
;
};
/**
* matrix_keypad_build_keymap - convert platform keymap into matrix keymap
* @keymap_data: keymap supplied by the platform code
* @row_shift: number of bits to shift row value by to advance to the next
* line in the keymap
* @keymap: expanded version of keymap that is suitable for use by
* matrix keyboad driver
* @keybit: pointer to bitmap of keys supported by input device
*
* This function converts platform keymap (encoded with KEY() macro) into
* an array of keycodes that is suitable for using in a standard matrix
* keyboard driver that uses row and col as indices.
*/
static
inline
void
matrix_keypad_build_keymap
(
const
struct
matrix_keymap_data
*
keymap_data
,
unsigned
int
row_shift
,
unsigned
short
*
keymap
,
unsigned
long
*
keybit
)
{
int
i
;
for
(
i
=
0
;
i
<
keymap_data
->
keymap_size
;
i
++
)
{
unsigned
int
key
=
keymap_data
->
keymap
[
i
];
unsigned
int
row
=
KEY_ROW
(
key
);
unsigned
int
col
=
KEY_COL
(
key
);
unsigned
short
code
=
KEY_VAL
(
key
);
keymap
[
MATRIX_SCAN_CODE
(
row
,
col
,
row_shift
)]
=
code
;
__set_bit
(
code
,
keybit
);
}
__clear_bit
(
KEY_RESERVED
,
keybit
);
}
#endif
/* _MATRIX_KEYPAD_H */
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