linux-input.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 0/2] Report wake_events for some button presses.
@ 2012-07-30  1:09 NeilBrown
  2012-07-30  1:09 ` [PATCH 2/2] Input: twl4030-pwrbutton: report a wakeup_event on button press NeilBrown
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: NeilBrown @ 2012-07-30  1:09 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel, linux-pm

To avoid racing with suspend, we need to report wakeup events to the
pm subsystem when they happen.
These two patches do this for gpio_keys and twl4030-pwrbutton.

---

NeilBrown (2):
      Input: twl4030-pwrbutton: report a wakeup_event on button press.
      Input: gpio_keys: report a wakeup_event for a button press on a wake_up button.


 drivers/input/keyboard/gpio_keys.c     |    7 +++++++
 drivers/input/misc/twl4030-pwrbutton.c |    1 +
 2 files changed, 8 insertions(+)

-- 
Signature


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH 1/2] Input: gpio_keys: report a wakeup_event for a button press on a wake_up button.
  2012-07-30  1:09 [PATCH 0/2] Report wake_events for some button presses NeilBrown
  2012-07-30  1:09 ` [PATCH 2/2] Input: twl4030-pwrbutton: report a wakeup_event on button press NeilBrown
@ 2012-07-30  1:09 ` NeilBrown
  2012-07-30  5:49 ` [PATCH 0/2] Report wake_events for some button presses Dmitry Torokhov
  2 siblings, 0 replies; 4+ messages in thread
From: NeilBrown @ 2012-07-30  1:09 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel, linux-pm, NeilBrown

In order to avoid races with suspend, a wakeup event must register as
such by calling pm_wakeup_event() or pm_stay_awake().  This will ensure
that the current suspend cycle aborts.

When the user-space visible event is created in the interrupt handler
(gpio_keys_irq_isr), a simple pm_wakeup_event() with no delay is
sufficient as suspend will synchronise with all interrupt delivery.

When the user-space visible event is created later
(gpio_keys_gpio_isr), we need to bracket the event with
pm_stay_awake() and pm_relax().

Signed-off-by: NeilBrown <neilb@suse.de>
---

 drivers/input/keyboard/gpio_keys.c |    7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/drivers/input/keyboard/gpio_keys.c b/drivers/input/keyboard/gpio_keys.c
index 62bfce4..ee6e525 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -346,6 +346,8 @@ static void gpio_keys_gpio_work_func(struct work_struct *work)
 		container_of(work, struct gpio_button_data, work);
 
 	gpio_keys_gpio_report_event(bdata);
+	if (bdata->button->wakeup)
+		pm_relax(bdata->input->dev.parent);
 }
 
 static void gpio_keys_gpio_timer(unsigned long _data)
@@ -361,6 +363,8 @@ static irqreturn_t gpio_keys_gpio_isr(int irq, void *dev_id)
 
 	BUG_ON(irq != bdata->irq);
 
+	if (bdata->button->wakeup)
+		pm_stay_awake(bdata->input->dev.parent);
 	if (bdata->timer_debounce)
 		mod_timer(&bdata->timer,
 			jiffies + msecs_to_jiffies(bdata->timer_debounce));
@@ -397,6 +401,9 @@ static irqreturn_t gpio_keys_irq_isr(int irq, void *dev_id)
 	spin_lock_irqsave(&bdata->lock, flags);
 
 	if (!bdata->key_pressed) {
+		if (bdata->button->wakeup)
+			pm_wakeup_event(bdata->input->dev.parent, 0);
+
 		input_event(input, EV_KEY, button->code, 1);
 		input_sync(input);
 

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/2] Input: twl4030-pwrbutton: report a wakeup_event on button press.
  2012-07-30  1:09 [PATCH 0/2] Report wake_events for some button presses NeilBrown
@ 2012-07-30  1:09 ` NeilBrown
  2012-07-30  1:09 ` [PATCH 1/2] Input: gpio_keys: report a wakeup_event for a button press on a wake_up button NeilBrown
  2012-07-30  5:49 ` [PATCH 0/2] Report wake_events for some button presses Dmitry Torokhov
  2 siblings, 0 replies; 4+ messages in thread
From: NeilBrown @ 2012-07-30  1:09 UTC (permalink / raw)
  To: Dmitry Torokhov; +Cc: linux-input, linux-kernel, linux-pm, NeilBrown

As the power button causes a wake from suspend, we need to register
the event with the pm sustem to avoid racing with suspend.

As the input event is reported in the interrupt handler, as simple
pm_wakeup_event() is sufficient.

Signed-off-by: NeilBrown <neilb@suse.de>
---

 drivers/input/misc/twl4030-pwrbutton.c |    1 +
 1 file changed, 1 insertion(+)

diff --git a/drivers/input/misc/twl4030-pwrbutton.c b/drivers/input/misc/twl4030-pwrbutton.c
index 38e4b50..b3dd96d 100644
--- a/drivers/input/misc/twl4030-pwrbutton.c
+++ b/drivers/input/misc/twl4030-pwrbutton.c
@@ -42,6 +42,7 @@ static irqreturn_t powerbutton_irq(int irq, void *_pwr)
 	err = twl_i2c_read_u8(TWL4030_MODULE_PM_MASTER, &value,
 				STS_HW_CONDITIONS);
 	if (!err)  {
+		pm_wakeup_event(pwr->dev.parent, 0);
 		input_report_key(pwr, KEY_POWER, value & PWR_PWRON_IRQ);
 		input_sync(pwr);
 	} else {

^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 0/2] Report wake_events for some button presses.
  2012-07-30  1:09 [PATCH 0/2] Report wake_events for some button presses NeilBrown
  2012-07-30  1:09 ` [PATCH 2/2] Input: twl4030-pwrbutton: report a wakeup_event on button press NeilBrown
  2012-07-30  1:09 ` [PATCH 1/2] Input: gpio_keys: report a wakeup_event for a button press on a wake_up button NeilBrown
@ 2012-07-30  5:49 ` Dmitry Torokhov
  2 siblings, 0 replies; 4+ messages in thread
From: Dmitry Torokhov @ 2012-07-30  5:49 UTC (permalink / raw)
  To: NeilBrown; +Cc: linux-input, linux-kernel, linux-pm

On Mon, Jul 30, 2012 at 11:09:01AM +1000, NeilBrown wrote:
> To avoid racing with suspend, we need to report wakeup events to the
> pm subsystem when they happen.
> These two patches do this for gpio_keys and twl4030-pwrbutton.
> 
> ---
> 
> NeilBrown (2):
>       Input: twl4030-pwrbutton: report a wakeup_event on button press.
>       Input: gpio_keys: report a wakeup_event for a button press on a wake_up button.
> 

Applied both, thanks Neil.

-- 
Dmitry

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2012-07-30  5:49 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-07-30  1:09 [PATCH 0/2] Report wake_events for some button presses NeilBrown
2012-07-30  1:09 ` [PATCH 2/2] Input: twl4030-pwrbutton: report a wakeup_event on button press NeilBrown
2012-07-30  1:09 ` [PATCH 1/2] Input: gpio_keys: report a wakeup_event for a button press on a wake_up button NeilBrown
2012-07-30  5:49 ` [PATCH 0/2] Report wake_events for some button presses Dmitry Torokhov

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).