2013-03-07 14:01:27

by Oskar Andero

[permalink] [raw]
Subject: [PATCH] input: don't call input_dev_release_keys() in resume

From: Aleksej Makarov <[email protected]>

When waking up the platform by pressing a specific key, sending a
release on that key makes it impossible to react on the event in
user-space.

Cc: Dmitry Torokhov <[email protected]>
Reviewed-by: Radovan Lekanovic <[email protected]>
Signed-off-by: Aleksej Makarov <[email protected]>
Signed-off-by: Oskar Andero <[email protected]>
---
drivers/input/input.c | 5 ++++-
1 files changed, 4 insertions(+), 1 deletions(-)

diff --git a/drivers/input/input.c b/drivers/input/input.c
index c044699..61ce19f 100644
--- a/drivers/input/input.c
+++ b/drivers/input/input.c
@@ -1690,7 +1690,10 @@ static int input_dev_resume(struct device *dev)
{
struct input_dev *input_dev = to_input_dev(dev);

- input_reset_device(input_dev);
+ mutex_lock(&input_dev->mutex);
+ if (input_dev->users)
+ input_dev_toggle(input_dev, true);
+ mutex_unlock(&input_dev->mutex);

return 0;
}
--
1.7.8.6


2013-04-04 14:57:08

by Oskar Andero

[permalink] [raw]
Subject: Re: [PATCH] input: don't call input_dev_release_keys() in resume

On 15:01 Thu 07 Mar , [email protected] wrote:
> From: Aleksej Makarov <[email protected]>
>
> When waking up the platform by pressing a specific key, sending a
> release on that key makes it impossible to react on the event in
> user-space.
>
> Cc: Dmitry Torokhov <[email protected]>
> Reviewed-by: Radovan Lekanovic <[email protected]>
> Signed-off-by: Aleksej Makarov <[email protected]>
> Signed-off-by: Oskar Andero <[email protected]>
> ---
> drivers/input/input.c | 5 ++++-
> 1 files changed, 4 insertions(+), 1 deletions(-)
>
> diff --git a/drivers/input/input.c b/drivers/input/input.c
> index c044699..61ce19f 100644
> --- a/drivers/input/input.c
> +++ b/drivers/input/input.c
> @@ -1690,7 +1690,10 @@ static int input_dev_resume(struct device *dev)
> {
> struct input_dev *input_dev = to_input_dev(dev);
>
> - input_reset_device(input_dev);
> + mutex_lock(&input_dev->mutex);
> + if (input_dev->users)
> + input_dev_toggle(input_dev, true);
> + mutex_unlock(&input_dev->mutex);
>
> return 0;
> }
> --
> 1.7.8.6
>

Ping. Any input on the patch above?

-Oskar

2013-04-04 16:33:20

by Dmitry Torokhov

[permalink] [raw]
Subject: Re: [PATCH] input: don't call input_dev_release_keys() in resume

Hi Oskar,

On Thu, Mar 07, 2013 at 03:01:22PM +0100, [email protected] wrote:
> From: Aleksej Makarov <[email protected]>
>
> When waking up the platform by pressing a specific key, sending a
> release on that key makes it impossible to react on the event in
> user-space.
>

No, we can not simply not release keys after resume from suspend, as
this leads to keys being stuck. Consider you are holding an 'I' key on
your external USB keyboard and close your laptop's lid. Then you release
the key and leave. Later you come back, open the lid waking the laptop
and observe endless stream of 'I' in your open terminal.

Maybe we should release the keys during suspend time? I am not sure how
Android infrastructure will react to this though...

Thanks.

--
Dmitry

2013-04-05 08:57:06

by Oskar Andero

[permalink] [raw]
Subject: Re: [PATCH] input: don't call input_dev_release_keys() in resume

On 18:33 Thu 04 Apr , Dmitry Torokhov wrote:
> Hi Oskar,
>
> On Thu, Mar 07, 2013 at 03:01:22PM +0100, [email protected] wrote:
> > From: Aleksej Makarov <[email protected]>
> >
> > When waking up the platform by pressing a specific key, sending a
> > release on that key makes it impossible to react on the event in
> > user-space.
> >
>
> No, we can not simply not release keys after resume from suspend, as
> this leads to keys being stuck. Consider you are holding an 'I' key on
> your external USB keyboard and close your laptop's lid. Then you release
> the key and leave. Later you come back, open the lid waking the laptop
> and observe endless stream of 'I' in your open terminal.

You're absolutely right. But I guess you also see the case that the
patch is trying to fix, right?

To explain our use-case: We have a physical camera button on some devices.
When the user long-presses the button, the system will wake up and jump
directly in to the camera application.

> Maybe we should release the keys during suspend time? I am not sure how
> Android infrastructure will react to this though...

That sounds like a good idea! Let me do some testing on that.

Thanks!

-Oskar

2013-07-05 07:46:37

by Oskar Andero

[permalink] [raw]
Subject: Re: [PATCH] input: don't call input_dev_release_keys() in resume

Hi Dmitry,

On 18:33 Thu 04 Apr , Dmitry Torokhov wrote:
> Hi Oskar,
>
> On Thu, Mar 07, 2013 at 03:01:22PM +0100, [email protected] wrote:
> > From: Aleksej Makarov <[email protected]>
> >
> > When waking up the platform by pressing a specific key, sending a
> > release on that key makes it impossible to react on the event in
> > user-space.
> >
>
> No, we can not simply not release keys after resume from suspend, as
> this leads to keys being stuck. Consider you are holding an 'I' key on
> your external USB keyboard and close your laptop's lid. Then you release
> the key and leave. Later you come back, open the lid waking the laptop
> and observe endless stream of 'I' in your open terminal.
>
> Maybe we should release the keys during suspend time? I am not sure how
> Android infrastructure will react to this though...

I finally got the time to try this out. Releasing the keys in suspend
also solves our problem. Would such patch work for the USB keyboard
case you described? Theoretically, I think it should, right?

So, basically:

static int input_dev_suspend(struct device *dev)
{
struct input_dev *input_dev = to_input_dev(dev);

- mutex_lock(&input_dev->mutex);
-
- if (input_dev->users)
- input_dev_toggle(input_dev, false);
-
- mutex_unlock(&input_dev->mutex);
+ input_reset_device(input_dev);

return 0;
}

static int input_dev_resume(struct device *dev)
{
- struct input_dev *input_dev = to_input_dev(dev);
-
- input_reset_device(input_dev);
-
return 0;
}

Should I send the patch?

-Oskar

2013-07-12 07:44:47

by Oskar Andero

[permalink] [raw]
Subject: Re: [PATCH] input: don't call input_dev_release_keys() in resume

On 09:46 Fri 05 Jul , Oskar Andero wrote:
> Hi Dmitry,
>
> On 18:33 Thu 04 Apr , Dmitry Torokhov wrote:
> > Hi Oskar,
> >
> > On Thu, Mar 07, 2013 at 03:01:22PM +0100, [email protected] wrote:
> > > From: Aleksej Makarov <[email protected]>
> > >
> > > When waking up the platform by pressing a specific key, sending a
> > > release on that key makes it impossible to react on the event in
> > > user-space.
> > >
> >
> > No, we can not simply not release keys after resume from suspend, as
> > this leads to keys being stuck. Consider you are holding an 'I' key on
> > your external USB keyboard and close your laptop's lid. Then you release
> > the key and leave. Later you come back, open the lid waking the laptop
> > and observe endless stream of 'I' in your open terminal.
> >
> > Maybe we should release the keys during suspend time? I am not sure how
> > Android infrastructure will react to this though...
>
> I finally got the time to try this out. Releasing the keys in suspend
> also solves our problem. Would such patch work for the USB keyboard
> case you described? Theoretically, I think it should, right?
>
> So, basically:
>
> static int input_dev_suspend(struct device *dev)
> {
> struct input_dev *input_dev = to_input_dev(dev);
>
> - mutex_lock(&input_dev->mutex);
> -
> - if (input_dev->users)
> - input_dev_toggle(input_dev, false);
> -
> - mutex_unlock(&input_dev->mutex);
> + input_reset_device(input_dev);
>
> return 0;
> }
>
> static int input_dev_resume(struct device *dev)
> {
> - struct input_dev *input_dev = to_input_dev(dev);
> -
> - input_reset_device(input_dev);
> -
> return 0;
> }
>
> Should I send the patch?

Ping. Any thoughts on this?

Thanks!

-Oskar