Re: [PATCH 1/2] input: gpio-keys: Disable hardware on suspend

2012-12-01 Thread Linus Walleij
On Sun, Nov 25, 2012 at 9:32 AM, Dmitry Torokhov
 wrote:
> On Thu, Nov 22, 2012 at 01:23:36PM +, Lee Jones wrote:
>> From: Jonas Aaberg 
>>
>> Disable hardware if active when suspending if the hw can not
>> wake the system from suspend.
>
> How about below instead (needs the other patch I have just sent out)?

LooksGoodToMe(TM)

Acked-by.

Yours,
Linus Walleij
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1/2] input: gpio-keys: Disable hardware on suspend

2012-11-26 Thread Dmitry Torokhov
On Mon, Nov 26, 2012 at 09:05:03AM +, Lee Jones wrote:
> > On Thu, Nov 22, 2012 at 01:23:36PM +, Lee Jones wrote:
> > > From: Jonas Aaberg 
> > > 
> > > Disable hardware if active when suspending if the hw can not
> > > wake the system from suspend.
> > 
> > How about below instead (needs the other patch I have just sent out)?
> 
> Sorry Dmitry, I'm a little confused. What does this mean?

The modified version of the patch I have sent depends on the other patch
to gpio-keys that introduces gpio_keys_report_state() that I believe you
have been CCed.

Thanks.

-- 
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1/2] input: gpio-keys: Disable hardware on suspend

2012-11-26 Thread Lee Jones
> On Thu, Nov 22, 2012 at 01:23:36PM +, Lee Jones wrote:
> > From: Jonas Aaberg 
> > 
> > Disable hardware if active when suspending if the hw can not
> > wake the system from suspend.
> 
> How about below instead (needs the other patch I have just sent out)?

Sorry Dmitry, I'm a little confused. What does this mean?

> Input: gpio-keys - disable hardware on suspend
> 
> From: Jonas Aaberg 
> 
> Disable hardware if active when suspending if the hw can not
> wake the system from suspend.
> 
> Signed-off-by: Jonas Aaberg 
> Signed-off-by: Philippe Langlais 
> Reviewed-by: Bengt Jonsson 
> Signed-off-by: Lee Jones 
> Signed-off-by: Dmitry Torokhov 
> ---
>  drivers/input/keyboard/gpio_keys.c |   27 ++-
>  1 file changed, 22 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/input/keyboard/gpio_keys.c 
> b/drivers/input/keyboard/gpio_keys.c
> index c7764ca..79435de 100644
> --- a/drivers/input/keyboard/gpio_keys.c
> +++ b/drivers/input/keyboard/gpio_keys.c
> @@ -803,6 +803,7 @@ static int gpio_keys_remove(struct platform_device *pdev)
>  static int gpio_keys_suspend(struct device *dev)
>  {
>   struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev);
> + struct input_dev *input = ddata->input;
>   int i;
>  
>   if (device_may_wakeup(dev)) {
> @@ -811,6 +812,11 @@ static int gpio_keys_suspend(struct device *dev)
>   if (bdata->button->wakeup)
>   enable_irq_wake(bdata->irq);
>   }
> + } else {
> + mutex_lock(&input->mutex);
> + if (input->users)
> + gpio_keys_close(input);
> + mutex_unlock(&input->mutex);
>   }
>  
>   return 0;
> @@ -819,16 +825,27 @@ static int gpio_keys_suspend(struct device *dev)
>  static int gpio_keys_resume(struct device *dev)
>  {
>   struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev);
> + struct input_dev *input = ddata->input;
> + int error = 0;
>   int i;
>  
> - for (i = 0; i < ddata->pdata->nbuttons; i++) {
> - struct gpio_button_data *bdata = &ddata->data[i];
> - if (bdata->button->wakeup && device_may_wakeup(dev))
> - disable_irq_wake(bdata->irq);
> + if (device_may_wakeup(dev)) {
> + for (i = 0; i < ddata->pdata->nbuttons; i++) {
> + struct gpio_button_data *bdata = &ddata->data[i];
> + if (bdata->button->wakeup)
> + disable_irq_wake(bdata->irq);
> + }
> + } else {
> + mutex_lock(&input->mutex);
> + if (input->users)
> + error = gpio_keys_open(input);
> + mutex_unlock(&input->mutex);
>   }
>  
> - gpio_keys_report_state(ddata);
> + if (error)
> + return error;
>  
> + gpio_keys_report_state(ddata);
>   return 0;
>  }
>  #endif

-- 
Lee Jones
Linaro ST-Ericsson Landing Team Lead
Linaro.org │ Open source software for ARM SoCs
Follow Linaro: Facebook | Twitter | Blog
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1/2] input: gpio-keys: Disable hardware on suspend

2012-11-25 Thread Dmitry Torokhov
On Thu, Nov 22, 2012 at 01:23:36PM +, Lee Jones wrote:
> From: Jonas Aaberg 
> 
> Disable hardware if active when suspending if the hw can not
> wake the system from suspend.

How about below instead (needs the other patch I have just sent out)?

Thanks.

-- 
Dmitry

Input: gpio-keys - disable hardware on suspend

From: Jonas Aaberg 

Disable hardware if active when suspending if the hw can not
wake the system from suspend.

Signed-off-by: Jonas Aaberg 
Signed-off-by: Philippe Langlais 
Reviewed-by: Bengt Jonsson 
Signed-off-by: Lee Jones 
Signed-off-by: Dmitry Torokhov 
---
 drivers/input/keyboard/gpio_keys.c |   27 ++-
 1 file changed, 22 insertions(+), 5 deletions(-)

diff --git a/drivers/input/keyboard/gpio_keys.c 
b/drivers/input/keyboard/gpio_keys.c
index c7764ca..79435de 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -803,6 +803,7 @@ static int gpio_keys_remove(struct platform_device *pdev)
 static int gpio_keys_suspend(struct device *dev)
 {
struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev);
+   struct input_dev *input = ddata->input;
int i;
 
if (device_may_wakeup(dev)) {
@@ -811,6 +812,11 @@ static int gpio_keys_suspend(struct device *dev)
if (bdata->button->wakeup)
enable_irq_wake(bdata->irq);
}
+   } else {
+   mutex_lock(&input->mutex);
+   if (input->users)
+   gpio_keys_close(input);
+   mutex_unlock(&input->mutex);
}
 
return 0;
@@ -819,16 +825,27 @@ static int gpio_keys_suspend(struct device *dev)
 static int gpio_keys_resume(struct device *dev)
 {
struct gpio_keys_drvdata *ddata = dev_get_drvdata(dev);
+   struct input_dev *input = ddata->input;
+   int error = 0;
int i;
 
-   for (i = 0; i < ddata->pdata->nbuttons; i++) {
-   struct gpio_button_data *bdata = &ddata->data[i];
-   if (bdata->button->wakeup && device_may_wakeup(dev))
-   disable_irq_wake(bdata->irq);
+   if (device_may_wakeup(dev)) {
+   for (i = 0; i < ddata->pdata->nbuttons; i++) {
+   struct gpio_button_data *bdata = &ddata->data[i];
+   if (bdata->button->wakeup)
+   disable_irq_wake(bdata->irq);
+   }
+   } else {
+   mutex_lock(&input->mutex);
+   if (input->users)
+   error = gpio_keys_open(input);
+   mutex_unlock(&input->mutex);
}
 
-   gpio_keys_report_state(ddata);
+   if (error)
+   return error;
 
+   gpio_keys_report_state(ddata);
return 0;
 }
 #endif
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 1/2] input: gpio-keys: Disable hardware on suspend

2012-11-22 Thread Lee Jones
From: Jonas Aaberg 

Disable hardware if active when suspending if the hw can not
wake the system from suspend.

Cc: Dmitry Torokhov 
Cc: linux-in...@vger.kernel.org
Signed-off-by: Lee Jones 
Signed-off-by: Jonas Aaberg 
Signed-off-by: Philippe Langlais 
Reviewed-by: Bengt Jonsson 
---
 drivers/input/keyboard/gpio_keys.c |   15 +++
 1 file changed, 15 insertions(+)

diff --git a/drivers/input/keyboard/gpio_keys.c 
b/drivers/input/keyboard/gpio_keys.c
index 6a68041..2cf6757 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -46,6 +46,8 @@ struct gpio_keys_drvdata {
const struct gpio_keys_platform_data *pdata;
struct input_dev *input;
struct mutex disable_lock;
+   bool enabled;
+   bool enable_after_suspend;
struct gpio_button_data data[0];
 };
 
@@ -531,6 +533,8 @@ static int gpio_keys_open(struct input_dev *input)
struct gpio_keys_drvdata *ddata = input_get_drvdata(input);
const struct gpio_keys_platform_data *pdata = ddata->pdata;
 
+   ddata->enabled = true;
+
return pdata->enable ? pdata->enable(input->dev.parent) : 0;
 }
 
@@ -539,6 +543,8 @@ static void gpio_keys_close(struct input_dev *input)
struct gpio_keys_drvdata *ddata = input_get_drvdata(input);
const struct gpio_keys_platform_data *pdata = ddata->pdata;
 
+   ddata->enabled = false;
+
if (pdata->disable)
pdata->disable(input->dev.parent);
 }
@@ -685,6 +691,7 @@ static int __devinit gpio_keys_probe(struct platform_device 
*pdev)
 
ddata->pdata = pdata;
ddata->input = input;
+   ddata->enabled = false;
mutex_init(&ddata->disable_lock);
 
platform_set_drvdata(pdev, ddata);
@@ -796,6 +803,10 @@ static int gpio_keys_suspend(struct device *dev)
if (bdata->button->wakeup)
enable_irq_wake(bdata->irq);
}
+   } else {
+   ddata->enable_after_suspend = ddata->enabled;
+   if (ddata->enabled)
+   gpio_keys_close(ddata->input);
}
 
return 0;
@@ -814,6 +825,10 @@ static int gpio_keys_resume(struct device *dev)
if (gpio_is_valid(bdata->button->gpio))
gpio_keys_gpio_report_event(bdata);
}
+
+   if (!device_may_wakeup(dev) && ddata->enable_after_suspend)
+   gpio_keys_open(ddata->input);
+
input_sync(ddata->input);
 
return 0;
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH 1/2] input: gpio-keys: Disable hardware on suspend

2012-10-12 Thread Dmitry Torokhov
Hi Lee,

On Thu, Oct 11, 2012 at 03:15:26PM +0100, Lee Jones wrote:
> From: Jonas Aaberg 
> 
> Disable hardware if active when suspending if the hw can not
> wake the system from suspend.
> 
> Cc: Dmitry Torokhov 
> Cc: linux-in...@vger.kernel.org
> Acked-by: Lee Jones 

If you are sending the patch then it should be signed-off-by, not
acked-by, and it should be the very last entry.

> Signed-off-by: Jonas Aaberg 
> Signed-off-by: Philippe Langlais 
> Reviewed-by: Bengt Jonsson 
> ---
>  drivers/input/keyboard/gpio_keys.c |   13 +
>  1 file changed, 13 insertions(+)
> 
> diff --git a/drivers/input/keyboard/gpio_keys.c 
> b/drivers/input/keyboard/gpio_keys.c
> index cbb1add..7947315 100644
> --- a/drivers/input/keyboard/gpio_keys.c
> +++ b/drivers/input/keyboard/gpio_keys.c
> @@ -46,6 +46,8 @@ struct gpio_keys_drvdata {
>   struct input_dev *input;
>   struct mutex disable_lock;
>   unsigned int n_buttons;
> + bool enabled;
> + bool enable_after_suspend;
>   int (*enable)(struct device *dev);
>   void (*disable)(struct device *dev);
>   struct gpio_button_data data[0];
> @@ -524,6 +526,7 @@ static int gpio_keys_open(struct input_dev *input)
>  {
>   struct gpio_keys_drvdata *ddata = input_get_drvdata(input);
>  
> + ddata->enabled = true;
>   return ddata->enable ? ddata->enable(input->dev.parent) : 0;
>  }
>  
> @@ -533,6 +536,7 @@ static void gpio_keys_close(struct input_dev *input)
>  
>   if (ddata->disable)
>   ddata->disable(input->dev.parent);
> + ddata->enabled = false;
>  }
>  
>  /*
> @@ -674,6 +678,7 @@ static int __devinit gpio_keys_probe(struct 
> platform_device *pdev)
>   ddata->n_buttons = pdata->nbuttons;
>   ddata->enable = pdata->enable;
>   ddata->disable = pdata->disable;
> + ddata->enabled = false;
>   mutex_init(&ddata->disable_lock);
>  
>   platform_set_drvdata(pdev, ddata);
> @@ -789,6 +794,10 @@ static int gpio_keys_suspend(struct device *dev)
>   if (bdata->button->wakeup)
>   enable_irq_wake(bdata->irq);
>   }
> + } else {
> + ddata->enable_after_suspend = ddata->enabled;
> + if (ddata->enabled)
> + gpio_keys_close(ddata->input);

I think it should take ddata->input->mutex to avoid races with
open/close and use ddata->input->users to figure out if device shoudl be
closed and re-opened later.

Thanks.

>   }
>  
>   return 0;
> @@ -807,6 +816,10 @@ static int gpio_keys_resume(struct device *dev)
>   if (gpio_is_valid(bdata->button->gpio))
>   gpio_keys_gpio_report_event(bdata);
>   }
> +
> + if (!device_may_wakeup(dev) && ddata->enable_after_suspend)
> + gpio_keys_open(ddata->input);
> +
>   input_sync(ddata->input);
>  
>   return 0;
> -- 
> 1.7.9.5
> 

-- 
Dmitry
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 1/2] input: gpio-keys: Disable hardware on suspend

2012-10-11 Thread Lee Jones
From: Jonas Aaberg 

Disable hardware if active when suspending if the hw can not
wake the system from suspend.

Cc: Dmitry Torokhov 
Cc: linux-in...@vger.kernel.org
Acked-by: Lee Jones 
Signed-off-by: Jonas Aaberg 
Signed-off-by: Philippe Langlais 
Reviewed-by: Bengt Jonsson 
---
 drivers/input/keyboard/gpio_keys.c |   13 +
 1 file changed, 13 insertions(+)

diff --git a/drivers/input/keyboard/gpio_keys.c 
b/drivers/input/keyboard/gpio_keys.c
index cbb1add..7947315 100644
--- a/drivers/input/keyboard/gpio_keys.c
+++ b/drivers/input/keyboard/gpio_keys.c
@@ -46,6 +46,8 @@ struct gpio_keys_drvdata {
struct input_dev *input;
struct mutex disable_lock;
unsigned int n_buttons;
+   bool enabled;
+   bool enable_after_suspend;
int (*enable)(struct device *dev);
void (*disable)(struct device *dev);
struct gpio_button_data data[0];
@@ -524,6 +526,7 @@ static int gpio_keys_open(struct input_dev *input)
 {
struct gpio_keys_drvdata *ddata = input_get_drvdata(input);
 
+   ddata->enabled = true;
return ddata->enable ? ddata->enable(input->dev.parent) : 0;
 }
 
@@ -533,6 +536,7 @@ static void gpio_keys_close(struct input_dev *input)
 
if (ddata->disable)
ddata->disable(input->dev.parent);
+   ddata->enabled = false;
 }
 
 /*
@@ -674,6 +678,7 @@ static int __devinit gpio_keys_probe(struct platform_device 
*pdev)
ddata->n_buttons = pdata->nbuttons;
ddata->enable = pdata->enable;
ddata->disable = pdata->disable;
+   ddata->enabled = false;
mutex_init(&ddata->disable_lock);
 
platform_set_drvdata(pdev, ddata);
@@ -789,6 +794,10 @@ static int gpio_keys_suspend(struct device *dev)
if (bdata->button->wakeup)
enable_irq_wake(bdata->irq);
}
+   } else {
+   ddata->enable_after_suspend = ddata->enabled;
+   if (ddata->enabled)
+   gpio_keys_close(ddata->input);
}
 
return 0;
@@ -807,6 +816,10 @@ static int gpio_keys_resume(struct device *dev)
if (gpio_is_valid(bdata->button->gpio))
gpio_keys_gpio_report_event(bdata);
}
+
+   if (!device_may_wakeup(dev) && ddata->enable_after_suspend)
+   gpio_keys_open(ddata->input);
+
input_sync(ddata->input);
 
return 0;
-- 
1.7.9.5

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/