mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-28 02:32:09 -04:00
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: matrix_keypad - increase the limit of rows and columns Input: wacom - fix error path in wacom_probe() Input: ads7846 - check proper condition when freeing gpio Revert "Input: do not pass injected events back to the originating handler" Input: sysrq - rework re-inject logic Input: serio - clear pending rescans after sysfs driver rebind Input: rotary_encoder - use proper irqflags Input: wacom_w8001 - report resolution to userland
This commit is contained in:
commit
87450bd55d
8 changed files with 72 additions and 54 deletions
|
|
@ -571,6 +571,7 @@ struct sysrq_state {
|
|||
unsigned int alt_use;
|
||||
bool active;
|
||||
bool need_reinject;
|
||||
bool reinjecting;
|
||||
};
|
||||
|
||||
static void sysrq_reinject_alt_sysrq(struct work_struct *work)
|
||||
|
|
@ -581,6 +582,10 @@ static void sysrq_reinject_alt_sysrq(struct work_struct *work)
|
|||
unsigned int alt_code = sysrq->alt_use;
|
||||
|
||||
if (sysrq->need_reinject) {
|
||||
/* we do not want the assignment to be reordered */
|
||||
sysrq->reinjecting = true;
|
||||
mb();
|
||||
|
||||
/* Simulate press and release of Alt + SysRq */
|
||||
input_inject_event(handle, EV_KEY, alt_code, 1);
|
||||
input_inject_event(handle, EV_KEY, KEY_SYSRQ, 1);
|
||||
|
|
@ -589,6 +594,9 @@ static void sysrq_reinject_alt_sysrq(struct work_struct *work)
|
|||
input_inject_event(handle, EV_KEY, KEY_SYSRQ, 0);
|
||||
input_inject_event(handle, EV_KEY, alt_code, 0);
|
||||
input_inject_event(handle, EV_SYN, SYN_REPORT, 1);
|
||||
|
||||
mb();
|
||||
sysrq->reinjecting = false;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -599,6 +607,13 @@ static bool sysrq_filter(struct input_handle *handle,
|
|||
bool was_active = sysrq->active;
|
||||
bool suppress;
|
||||
|
||||
/*
|
||||
* Do not filter anything if we are in the process of re-injecting
|
||||
* Alt+SysRq combination.
|
||||
*/
|
||||
if (sysrq->reinjecting)
|
||||
return false;
|
||||
|
||||
switch (type) {
|
||||
|
||||
case EV_SYN:
|
||||
|
|
@ -629,7 +644,7 @@ static bool sysrq_filter(struct input_handle *handle,
|
|||
sysrq->alt_use = sysrq->alt;
|
||||
/*
|
||||
* If nothing else will be pressed we'll need
|
||||
* to * re-inject Alt-SysRq keysroke.
|
||||
* to re-inject Alt-SysRq keysroke.
|
||||
*/
|
||||
sysrq->need_reinject = true;
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in a new issue