diff mbox

Input: gpio_keys - Report wakeup events if device may wakeup

Message ID 1343283113-16952-1-git-send-email-bleung@chromium.org (mailing list archive)
State New, archived
Headers show

Commit Message

Benson Leung July 26, 2012, 6:11 a.m. UTC
If a button is configured to wake the system, report a pm wakeup event.

Signed-off-by: Benson Leung <bleung@chromium.org>
---
 drivers/input/keyboard/gpio_keys.c |    4 ++++
 1 files changed, 4 insertions(+), 0 deletions(-)

Comments

Dmitry Torokhov July 30, 2012, 5:50 a.m. UTC | #1
Hi Benson,

On Wed, Jul 25, 2012 at 11:11:53PM -0700, Benson Leung wrote:
> If a button is configured to wake the system, report a pm wakeup event.
> 

Thank you for your patch, however I applied more complete patch sent by
NeilBrown.

> Signed-off-by: Benson Leung <bleung@chromium.org>
> ---
>  drivers/input/keyboard/gpio_keys.c |    4 ++++
>  1 files changed, 4 insertions(+), 0 deletions(-)
> 
> diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
> index cbb1add..15a80e2 100644
> --- a/drivers/input/keyboard/gpio_keys.c
> +++ b/drivers/input/keyboard/gpio_keys.c
> @@ -328,9 +328,13 @@ static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
>  {
>  	const struct gpio_keys_button *button = bdata->button;
>  	struct input_dev *input = bdata->input;
> +	struct device *dev = input->dev.parent;
>  	unsigned int type = button->type ?: EV_KEY;
>  	int state = (gpio_get_value_cansleep(button->gpio) ? 1 : 0) ^ button->active_low;
>  
> +	if (button->wakeup && device_may_wakeup(dev))
> +		pm_wakeup_event(dev, 0);
> +
>  	if (type == EV_ABS) {
>  		if (state)
>  			input_event(input, type, button->code, button->value);
> -- 
> 1.7.7.3
>
Benson Leung July 30, 2012, 7:28 p.m. UTC | #2
Hi Dmitry,

Yes I see Neil's changes. Thank you for letting me know.

By the way, looking at Neil's changes, would it make sense to check
for device_may_wakeup(dev) like in my patch so that the wakeup
behavior can be turned off by setting power/wakeup to disabled?

Benson

On Sun, Jul 29, 2012 at 10:50 PM, Dmitry Torokhov
<dmitry.torokhov@gmail.com> wrote:
> Hi Benson,
>
> On Wed, Jul 25, 2012 at 11:11:53PM -0700, Benson Leung wrote:
>> If a button is configured to wake the system, report a pm wakeup event.
>>
>
> Thank you for your patch, however I applied more complete patch sent by
> NeilBrown.
>
>> Signed-off-by: Benson Leung <bleung@chromium.org>
>> ---
>>  drivers/input/keyboard/gpio_keys.c |    4 ++++
>>  1 files changed, 4 insertions(+), 0 deletions(-)
>>
>> diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
>> index cbb1add..15a80e2 100644
>> --- a/drivers/input/keyboard/gpio_keys.c
>> +++ b/drivers/input/keyboard/gpio_keys.c
>> @@ -328,9 +328,13 @@ static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
>>  {
>>       const struct gpio_keys_button *button = bdata->button;
>>       struct input_dev *input = bdata->input;
>> +     struct device *dev = input->dev.parent;
>>       unsigned int type = button->type ?: EV_KEY;
>>       int state = (gpio_get_value_cansleep(button->gpio) ? 1 : 0) ^ button->active_low;
>>
>> +     if (button->wakeup && device_may_wakeup(dev))
>> +             pm_wakeup_event(dev, 0);
>> +
>>       if (type == EV_ABS) {
>>               if (state)
>>                       input_event(input, type, button->code, button->value);
>> --
>> 1.7.7.3
>>
>
> --
> Dmitry
Benson Leung July 30, 2012, 7:50 p.m. UTC | #3
Actually, I take it back. It doesn't look like it's necessary.

Benson

On Mon, Jul 30, 2012 at 12:28 PM, Benson Leung <bleung@chromium.org> wrote:
> Hi Dmitry,
>
> Yes I see Neil's changes. Thank you for letting me know.
>
> By the way, looking at Neil's changes, would it make sense to check
> for device_may_wakeup(dev) like in my patch so that the wakeup
> behavior can be turned off by setting power/wakeup to disabled?
>
> Benson
>
> On Sun, Jul 29, 2012 at 10:50 PM, Dmitry Torokhov
> <dmitry.torokhov@gmail.com> wrote:
>> Hi Benson,
>>
>> On Wed, Jul 25, 2012 at 11:11:53PM -0700, Benson Leung wrote:
>>> If a button is configured to wake the system, report a pm wakeup event.
>>>
>>
>> Thank you for your patch, however I applied more complete patch sent by
>> NeilBrown.
>>
>>> Signed-off-by: Benson Leung <bleung@chromium.org>
>>> ---
>>>  drivers/input/keyboard/gpio_keys.c |    4 ++++
>>>  1 files changed, 4 insertions(+), 0 deletions(-)
>>>
>>> diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
>>> index cbb1add..15a80e2 100644
>>> --- a/drivers/input/keyboard/gpio_keys.c
>>> +++ b/drivers/input/keyboard/gpio_keys.c
>>> @@ -328,9 +328,13 @@ static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
>>>  {
>>>       const struct gpio_keys_button *button = bdata->button;
>>>       struct input_dev *input = bdata->input;
>>> +     struct device *dev = input->dev.parent;
>>>       unsigned int type = button->type ?: EV_KEY;
>>>       int state = (gpio_get_value_cansleep(button->gpio) ? 1 : 0) ^ button->active_low;
>>>
>>> +     if (button->wakeup && device_may_wakeup(dev))
>>> +             pm_wakeup_event(dev, 0);
>>> +
>>>       if (type == EV_ABS) {
>>>               if (state)
>>>                       input_event(input, type, button->code, button->value);
>>> --
>>> 1.7.7.3
>>>
>>
>> --
>> Dmitry
>
>
>
> --
> Benson Leung
> Software Engineer, Chrom* OS
> bleung@chromium.org
diff mbox

Patch

diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index cbb1add..15a80e2 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -328,9 +328,13 @@  static void gpio_keys_gpio_report_event(struct gpio_button_data *bdata)
 {
 	const struct gpio_keys_button *button = bdata->button;
 	struct input_dev *input = bdata->input;
+	struct device *dev = input->dev.parent;
 	unsigned int type = button->type ?: EV_KEY;
 	int state = (gpio_get_value_cansleep(button->gpio) ? 1 : 0) ^ button->active_low;
 
+	if (button->wakeup && device_may_wakeup(dev))
+		pm_wakeup_event(dev, 0);
+
 	if (type == EV_ABS) {
 		if (state)
 			input_event(input, type, button->code, button->value);