Hi all,
Michael Trimarchi wrote:
Hi all,
Michael Trimarchi wrote:
Michael Trimarchi wrote:
Hi,
Balaji Rao wrote:
On Wed, Jan 14, 2009 at 10:05:44AM +0100, Michael Trimarchi wrote:
Hi,
diff --git a/drivers/mfd/pcf50633-core.c
b/drivers/mfd/pcf50633-core.c
index f668b9a..a565542 100644
--- a/drivers/mfd/pcf50633-core.c
+++ b/drivers/mfd/pcf50633-core.c
@@ -428,6 +428,10 @@ static int pcf50633_suspend(struct device
*dev, pm_message_t state)
/* Make sure that an IRQ worker has quit */
cancel_work_sync(&pcf->irq_work);
+ /* Disable irq again, because it could be re-enabled by the
exiting
+ * worker we synced above */
+ disable_irq(pcf->irq);
+
/* Save the masks */
ret = pcf50633_read_block(pcf, PCF50633_REG_INT1M,
ARRAY_SIZE(pcf->suspend_irq_masks),
Sorry but I reverified the problem with me and your patch. I must
activate the console on the serial
during suspend and check what happened :(. I will do it.
Sure, that will be very helpful. When exactly does panic happen ?
During
resume ?
I wonder where was this bug hiding till now..
Thanks,
Balaji
It very simple to reproduce it on my phone. Say android go to the
suspend and press the light button when the display switch off and
the kernel go in panic.
But maybe it can be realeted to android/power stuff too. I must have
a console output but I can't for now
my torx t6 screwdriver is at the airport security :(. If you can
wait a try to test tommorow :)
Michael
static irqreturn_t neo1973kbd_aux_irq(int irq, void *dev)
{
int *p = NULL;
/* if you stall inside resume then AUX will force a panic,
which in turn forces a dump of the pending syslog */
if (global_inside_suspend)
printk(KERN_ERR "death %d\n", *p); <---- maybe can be
this one?
Michael
Can we disabled irq during suspend?
Michael
What do you think about the attached patch?
Michael
GTA02 suspend keyboard patch
Signed-off-by: Michael Trimarchi <[email protected]>
---
diff --git a/drivers/input/keyboard/neo1973kbd.c b/drivers/input/keyboard/neo1973kbd.c
index 20f0a34..929a2bb 100644
--- a/drivers/input/keyboard/neo1973kbd.c
+++ b/drivers/input/keyboard/neo1973kbd.c
@@ -143,11 +143,13 @@ static irqreturn_t neo1973kbd_aux_irq(int irq, void *dev)
{
int *p = NULL;
- /* if you stall inside resume then AUX will force a panic,
- which in turn forces a dump of the pending syslog */
+ if (machine_is_neo1973_gta01()) {
+ /* if you stall inside resume then AUX will force a panic,
+ which in turn forces a dump of the pending syslog */
- if (global_inside_suspend)
- printk(KERN_ERR "death %d\n", *p);
+ if (global_inside_suspend)
+ printk(KERN_ERR "death %d\n", *p);
+ }
mod_timer(&aux_key_timer, jiffies + AUX_TIMER_TIMEOUT);
@@ -275,11 +277,18 @@ static irqreturn_t neo1973kbd_headphone_irq(int irq, void *dev_id)
#ifdef CONFIG_PM
static int neo1973kbd_suspend(struct platform_device *dev, pm_message_t state)
{
+ if (machine_is_neo1973_gta02()) {
+ disable_irq(keys[NEO1973_KEY_AUX].irq);
+ del_timer_sync(&aux_key_timer);
+ }
return 0;
}
static int neo1973kbd_resume(struct platform_device *dev)
{
+ if (machine_is_neo1973_gta02())
+ enable_irq(keys[NEO1973_KEY_AUX].irq);
+
return 0;
}
#else