mirror of
https://github.com/torvalds/linux.git
synced 2026-07-30 19:21:28 +02:00
input: misc: pm8941-pwrkey: simulate missed key press events
The status of the keys connected to the KPDPWR_N and RESIN_N pins is identified by reading corresponding bits in the interrupt real time status register. If the status has changed by the time that the interrupt is handled then a press event will be missed. Maintain a last known status variable to find unbalanced release events and simulate press events for each accordingly. Change-Id: I180469a7048a40e490f21d0f8b9504136131e75b Signed-off-by: David Collins <collinsd@codeaurora.org>
This commit is contained in:
parent
90e0e5b9ed
commit
04809156b5
|
|
@ -78,6 +78,7 @@ struct pm8941_pwrkey {
|
|||
u32 code;
|
||||
u32 sw_debounce_time_us;
|
||||
ktime_t last_release_time;
|
||||
bool last_status;
|
||||
const struct pm8941_data *data;
|
||||
};
|
||||
|
||||
|
|
@ -170,6 +171,16 @@ static irqreturn_t pm8941_pwrkey_irq(int irq, void *_data)
|
|||
if (pwrkey->sw_debounce_time_us && !sts)
|
||||
pwrkey->last_release_time = ktime_get();
|
||||
|
||||
/*
|
||||
* Simulate a press event in case a release event occurred without a
|
||||
* corresponding press event.
|
||||
*/
|
||||
if (!pwrkey->last_status && !sts) {
|
||||
input_report_key(pwrkey->input, pwrkey->code, 1);
|
||||
input_sync(pwrkey->input);
|
||||
}
|
||||
pwrkey->last_status = sts;
|
||||
|
||||
input_report_key(pwrkey->input, pwrkey->code, sts);
|
||||
input_sync(pwrkey->input);
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user