-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Input: of_keymap - add device tree bindings for simple key matrices
This adds a simple device tree binding for simple key matrix data and a helper to fill in the platform data. Signed-off-by: Olof Johansson <olof@lixom.net> Acked-by: Stephen Warren <swarren@nvidia.com> Signed-off-by: Dmitry Torokhov <dtor@mail.ru>
- Loading branch information
Olof Johansson
authored and
Dmitry Torokhov
committed
Mar 14, 2012
1 parent
b51425b
commit 2cd3687
Showing
6 changed files
with
131 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,19 @@ | ||
A simple common binding for matrix-connected key boards. Currently targeted at | ||
defining the keys in the scope of linux key codes since that is a stable and | ||
standardized interface at this time. | ||
|
||
Required properties: | ||
- linux,keymap: an array of packed 1-cell entries containing the equivalent | ||
of row, column and linux key-code. The 32-bit big endian cell is packed | ||
as: | ||
row << 24 | column << 16 | key-code | ||
|
||
Optional properties: | ||
Some users of this binding might choose to specify secondary keymaps for | ||
cases where there is a modifier key such as a Fn key. Proposed names | ||
for said properties are "linux,fn-keymap" or with another descriptive | ||
word for the modifier other from "Fn". | ||
|
||
Example: | ||
linux,keymap = < 0x00030012 | ||
0x0102003a >; |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,87 @@ | ||
/* | ||
* Helpers for open firmware matrix keyboard bindings | ||
* | ||
* Copyright (C) 2012 Google, Inc | ||
* | ||
* Author: | ||
* Olof Johansson <olof@lixom.net> | ||
* | ||
* This software is licensed under the terms of the GNU General Public | ||
* License version 2, as published by the Free Software Foundation, and | ||
* may be copied, distributed, and modified under those terms. | ||
* | ||
* This program is distributed in the hope that it will be useful, | ||
* but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
* GNU General Public License for more details. | ||
* | ||
*/ | ||
|
||
#include <linux/kernel.h> | ||
#include <linux/types.h> | ||
#include <linux/input.h> | ||
#include <linux/of.h> | ||
#include <linux/input/matrix_keypad.h> | ||
#include <linux/export.h> | ||
#include <linux/gfp.h> | ||
#include <linux/slab.h> | ||
|
||
struct matrix_keymap_data * | ||
matrix_keyboard_of_fill_keymap(struct device_node *np, | ||
const char *propname) | ||
{ | ||
struct matrix_keymap_data *kd; | ||
u32 *keymap; | ||
int proplen, i; | ||
const __be32 *prop; | ||
|
||
if (!np) | ||
return NULL; | ||
|
||
if (!propname) | ||
propname = "linux,keymap"; | ||
|
||
prop = of_get_property(np, propname, &proplen); | ||
if (!prop) | ||
return NULL; | ||
|
||
if (proplen % sizeof(u32)) { | ||
pr_warn("Malformed keymap property %s in %s\n", | ||
propname, np->full_name); | ||
return NULL; | ||
} | ||
|
||
kd = kzalloc(sizeof(*kd), GFP_KERNEL); | ||
if (!kd) | ||
return NULL; | ||
|
||
kd->keymap = keymap = kzalloc(proplen, GFP_KERNEL); | ||
if (!kd->keymap) { | ||
kfree(kd); | ||
return NULL; | ||
} | ||
|
||
kd->keymap_size = proplen / sizeof(u32); | ||
|
||
for (i = 0; i < kd->keymap_size; i++) { | ||
u32 tmp = be32_to_cpup(prop + i); | ||
int key_code, row, col; | ||
|
||
row = (tmp >> 24) & 0xff; | ||
col = (tmp >> 16) & 0xff; | ||
key_code = tmp & 0xffff; | ||
keymap[i] = KEY(row, col, key_code); | ||
} | ||
|
||
return kd; | ||
} | ||
EXPORT_SYMBOL_GPL(matrix_keyboard_of_fill_keymap); | ||
|
||
void matrix_keyboard_of_free_keymap(const struct matrix_keymap_data *kd) | ||
{ | ||
if (kd) { | ||
kfree(kd->keymap); | ||
kfree(kd); | ||
} | ||
} | ||
EXPORT_SYMBOL_GPL(matrix_keyboard_of_free_keymap); |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters