diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1032-pcf50633-suspend-hacks.patch.patch')
-rw-r--r-- | target/linux/s3c24xx/patches-2.6.24/1032-pcf50633-suspend-hacks.patch.patch | 45 |
1 files changed, 45 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1032-pcf50633-suspend-hacks.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1032-pcf50633-suspend-hacks.patch.patch new file mode 100644 index 0000000000..4c388994f1 --- /dev/null +++ b/target/linux/s3c24xx/patches-2.6.24/1032-pcf50633-suspend-hacks.patch.patch @@ -0,0 +1,45 @@ +From 56b25d1ddc3662594f9344bac89f08bcf993cc61 Mon Sep 17 00:00:00 2001 +From: mokopatches <mokopatches@openmoko.org> +Date: Fri, 4 Apr 2008 11:34:44 +0100 +Subject: [PATCH] pcf50633-suspend-hacks.patch + +--- + drivers/i2c/chips/pcf50633.c | 22 ++++++++++++++++++++-- + 1 files changed, 20 insertions(+), 2 deletions(-) + +diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c +index 5488084..0cf5e53 100644 +--- a/drivers/i2c/chips/pcf50633.c ++++ b/drivers/i2c/chips/pcf50633.c +@@ -567,8 +567,26 @@ static void pcf50633_work(struct work_struct *work) + */ + ret = i2c_smbus_read_i2c_block_data(&pcf->client, PCF50633_REG_INT1, 5, + pcfirq); +- if (ret != 5) +- DEBUGP("Oh crap PMU IRQ register read failed %d\n", ret); ++ if (ret != 5) { ++ DEBUGP("Oh crap PMU IRQ register read failed -- " ++ "retrying later %d\n", ret); ++ /* ++ * this situation can happen during resume, just defer ++ * handling the interrupt until enough I2C is up we can ++ * actually talk to the PMU. We can't just ignore this ++ * because we are on a falling edge interrupt and our ++ * PMU interrupt source does not clear until we read these ++ * interrupt source registers. ++ */ ++ if (!schedule_work(&pcf->work) && !pcf->working) ++ dev_dbg(&pcf->client.dev, "work item may be lost\n"); ++ ++ /* we don't put the device here, hold it for next time */ ++ mutex_unlock(&pcf->working_lock); ++ /* don't spew, delaying whatever else is happening */ ++ msleep(1); ++ return; ++ } + + if (!pcf->coldplug_done) { + DEBUGP("PMU Coldplug init\n"); +-- +1.5.6.5 + |