diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2011-04-05 15:35:29 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2011-04-05 15:35:29 -0400 |
commit | 899631c7916b231ba6509c90dbc33221e9194029 (patch) | |
tree | 260cd353d6e6c7493d56fabe7dfc686d4a168d16 /drivers/input/sparse-keymap.c | |
parent | 47e89798e7cd9390b74a173006afafcb12e8bc89 (diff) | |
parent | e28e1d93e9591d21e440f5210a9b4317c59445df (diff) |
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
* 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
Input: rpckbd - fix a leak of the IRQ during init failure
Input: wacom - add support for Lenovo tablet ID (0xE6)
Input: i8042 - downgrade selftest error message to dbg()
Input: synaptics - fix crash in synaptics_module_init()
Input: spear-keyboard - fix inverted condition in interrupt handler
Input: uinput - allow for 0/0 min/max on absolute axes.
Input: sparse-keymap - report KEY_UNKNOWN for unknown scan codes
Input: sparse-keymap - report scancodes with key events
Input: h3600_ts_input - fix a spelling error
Input: wacom - report resolution for pen devices
Input: wacom - constify wacom_features for a new missed Bamboo models
Diffstat (limited to 'drivers/input/sparse-keymap.c')
-rw-r--r-- | drivers/input/sparse-keymap.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/input/sparse-keymap.c b/drivers/input/sparse-keymap.c index 337bf51bc984..fdb6a3976f94 100644 --- a/drivers/input/sparse-keymap.c +++ b/drivers/input/sparse-keymap.c | |||
@@ -208,6 +208,12 @@ int sparse_keymap_setup(struct input_dev *dev, | |||
208 | } | 208 | } |
209 | } | 209 | } |
210 | 210 | ||
211 | if (test_bit(EV_KEY, dev->evbit)) { | ||
212 | __set_bit(KEY_UNKNOWN, dev->keybit); | ||
213 | __set_bit(EV_MSC, dev->evbit); | ||
214 | __set_bit(MSC_SCAN, dev->mscbit); | ||
215 | } | ||
216 | |||
211 | dev->keycode = map; | 217 | dev->keycode = map; |
212 | dev->keycodemax = map_size; | 218 | dev->keycodemax = map_size; |
213 | dev->getkeycode = sparse_keymap_getkeycode; | 219 | dev->getkeycode = sparse_keymap_getkeycode; |
@@ -268,6 +274,7 @@ void sparse_keymap_report_entry(struct input_dev *dev, const struct key_entry *k | |||
268 | { | 274 | { |
269 | switch (ke->type) { | 275 | switch (ke->type) { |
270 | case KE_KEY: | 276 | case KE_KEY: |
277 | input_event(dev, EV_MSC, MSC_SCAN, ke->code); | ||
271 | input_report_key(dev, ke->keycode, value); | 278 | input_report_key(dev, ke->keycode, value); |
272 | input_sync(dev); | 279 | input_sync(dev); |
273 | if (value && autorelease) { | 280 | if (value && autorelease) { |
@@ -305,12 +312,19 @@ bool sparse_keymap_report_event(struct input_dev *dev, unsigned int code, | |||
305 | { | 312 | { |
306 | const struct key_entry *ke = | 313 | const struct key_entry *ke = |
307 | sparse_keymap_entry_from_scancode(dev, code); | 314 | sparse_keymap_entry_from_scancode(dev, code); |
315 | struct key_entry unknown_ke; | ||
308 | 316 | ||
309 | if (ke) { | 317 | if (ke) { |
310 | sparse_keymap_report_entry(dev, ke, value, autorelease); | 318 | sparse_keymap_report_entry(dev, ke, value, autorelease); |
311 | return true; | 319 | return true; |
312 | } | 320 | } |
313 | 321 | ||
322 | /* Report an unknown key event as a debugging aid */ | ||
323 | unknown_ke.type = KE_KEY; | ||
324 | unknown_ke.code = code; | ||
325 | unknown_ke.keycode = KEY_UNKNOWN; | ||
326 | sparse_keymap_report_entry(dev, &unknown_ke, value, true); | ||
327 | |||
314 | return false; | 328 | return false; |
315 | } | 329 | } |
316 | EXPORT_SYMBOL(sparse_keymap_report_event); | 330 | EXPORT_SYMBOL(sparse_keymap_report_event); |