Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
L
linux-davinci
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Redmine
Redmine
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
linux
linux-davinci
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
Show 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