From 422e9e988f60a849bd69006d7a6d973a97c8a1c2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=BB=84=E6=B6=9B?= Date: Mon, 5 Sep 2011 10:12:39 +0800 Subject: [PATCH] input: eeti_egalax_i2c: fix unbalanced disable_irq/enable_irq --- drivers/input/touchscreen/eeti_egalax_i2c.c | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/drivers/input/touchscreen/eeti_egalax_i2c.c b/drivers/input/touchscreen/eeti_egalax_i2c.c index 65838a382435..9d165a4c3645 100755 --- a/drivers/input/touchscreen/eeti_egalax_i2c.c +++ b/drivers/input/touchscreen/eeti_egalax_i2c.c @@ -514,9 +514,8 @@ static void egalax_i2c_wq(struct work_struct *work) egalax_i2c->skip_packet = 0; mutex_unlock(&egalax_i2c->mutex_wq); - - if( egalax_i2c->work_state > 0 ) - enable_irq(p_egalax_i2c_dev->irq); + + enable_irq(p_egalax_i2c_dev->irq); TS_DEBUG("egalax_i2c_wq leave\n"); } @@ -562,9 +561,13 @@ static int egalax_i2c_suspend(struct i2c_client *client, pm_message_t mesg) i2c_master_normal_send(client, cmdbuf, MAX_I2C_LEN, EETI_I2C_RATE); - egalax_i2c->work_state = 0; disable_irq(p_egalax_i2c_dev->irq); - cancel_work_sync(&egalax_i2c->work); + egalax_i2c->work_state = 0; + if (cancel_work_sync(&egalax_i2c->work)) { + /* if work was pending disable-count is now 2 */ + pr_info("%s: work was pending\n", __func__); + enable_irq(p_egalax_i2c_dev->irq); + } printk(KERN_DEBUG "[egalax_i2c]: device suspend done\n"); -- 2.34.1