Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 346943
b: refs/heads/master
c: 5383116
h: refs/heads/master
i:
  346941: 0301f2d
  346939: 03d189c
  346935: f9d0331
  346927: 687b20e
  346911: 830aa00
  346879: ecedc39
v: v3
  • Loading branch information
Dmitry Torokhov committed Nov 14, 2012
1 parent 2c80061 commit a64cb9b
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 2 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 544a46c917fcf0a439cc0c428d76ba731a380cae
refs/heads/master: 5383116b86d8e877684770d05acd1dda62be102d
23 changes: 22 additions & 1 deletion trunk/drivers/input/matrix-keymap.c
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
*/

#include <linux/device.h>
#include <linux/gfp.h>
#include <linux/kernel.h>
#include <linux/types.h>
#include <linux/input.h>
Expand Down Expand Up @@ -122,6 +123,11 @@ static int matrix_keypad_parse_of_keymap(const char *propname,
* it will attempt load the keymap from property specified by @keymap_name
* argument (or "linux,keymap" if @keymap_name is %NULL).
*
* If @keymap is %NULL the function will automatically allocate managed
* block of memory to store the keymap. This memory will be associated with
* the parent device and automatically freed when device unbinds from the
* driver.
*
* Callers are expected to set up input_dev->dev.parent before calling this
* function.
*/
Expand All @@ -132,12 +138,27 @@ int matrix_keypad_build_keymap(const struct matrix_keymap_data *keymap_data,
struct input_dev *input_dev)
{
unsigned int row_shift = get_count_order(cols);
size_t max_keys = rows << row_shift;
int i;
int error;

if (WARN_ON(!input_dev->dev.parent))
return -EINVAL;

if (!keymap) {
keymap = devm_kzalloc(input_dev->dev.parent,
max_keys * sizeof(*keymap),
GFP_KERNEL);
if (!keymap) {
dev_err(input_dev->dev.parent,
"Unable to allocate memory for keymap");
return -ENOMEM;
}
}

input_dev->keycode = keymap;
input_dev->keycodesize = sizeof(*keymap);
input_dev->keycodemax = rows << row_shift;
input_dev->keycodemax = max_keys;

__set_bit(EV_KEY, input_dev->evbit);

Expand Down

0 comments on commit a64cb9b

Please sign in to comment.