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

Reply via email to