aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndy Green <andy@openmoko.com>2008-11-19 17:09:50 +0000
committerAndy Green <agreen@pads.home.warmcat.com>2008-11-19 17:09:50 +0000
commit62f172db87f7b81bd67a316531e9467ba8de706f (patch)
tree4a4857434befa60a30f8b56b0d9abb7392550a92
parentcbdda98de3b3d57f22830e7932e52e4358e37a4e (diff)
fix-pcf50633-really-defer-backlight-on-resume.patch
Backlight wasn't off by default on resume, so it was never really deferred (until LCM is initialized). This fixes that and so removes the brief white screen between pcf50633 resume and LCM init. Signed-off-by: Andy Green <andy@openmoko.com>
-rw-r--r--drivers/i2c/chips/pcf50633.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c
index 33c4ef4fd88..bbc8ae6e745 100644
--- a/drivers/i2c/chips/pcf50633.c
+++ b/drivers/i2c/chips/pcf50633.c
@@ -2474,13 +2474,14 @@ EXPORT_SYMBOL_GPL(pcf50633_ready);
void pcf50633_backlight_resume(struct pcf50633_data *pcf)
{
+ dev_info(&pcf->client.dev, "pcf50633_backlight_resume\n");
+
/* we force the backlight on in fact */
- __reg_write(pcf, PCF50633_REG_LEDOUT, pcf->standby_regs.misc[
+ reg_write(pcf, PCF50633_REG_LEDDIM, 1);
+ reg_write(pcf, PCF50633_REG_LEDOUT, pcf->standby_regs.misc[
PCF50633_REG_LEDOUT - PCF50633_REG_AUTOOUT]);
- __reg_write(pcf, PCF50633_REG_LEDENA, pcf->standby_regs.misc[
+ reg_write(pcf, PCF50633_REG_LEDENA, pcf->standby_regs.misc[
PCF50633_REG_LEDENA - PCF50633_REG_AUTOOUT] | 1);
- __reg_write(pcf, PCF50633_REG_LEDDIM, pcf->standby_regs.misc[
- PCF50633_REG_LEDDIM - PCF50633_REG_AUTOOUT]);
}
EXPORT_SYMBOL_GPL(pcf50633_backlight_resume);
@@ -2491,6 +2492,7 @@ static int pcf50633_resume(struct device *dev)
struct pcf50633_data *pcf = i2c_get_clientdata(client);
int ret;
u8 res[5];
+ u8 misc[PCF50633_REG_LEDDIM - PCF50633_REG_AUTOOUT + 1];
dev_info(dev, "pcf50633_resume suspended on entry = %d\n",
(int)pcf->suspend_state);
@@ -2502,11 +2504,20 @@ static int pcf50633_resume(struct device *dev)
__reg_write(pcf, PCF50633_REG_OOCTIM2, pcf->standby_regs.ooctim2);
+ memcpy(misc, pcf->standby_regs.misc, sizeof(pcf->standby_regs.misc));
+
+ if (pcf->pdata->defer_resume_backlight) {
+ misc[PCF50633_REG_LEDOUT - PCF50633_REG_AUTOOUT] = 1;
+ misc[PCF50633_REG_LEDENA - PCF50633_REG_AUTOOUT] = 0x20;
+ misc[PCF50633_REG_LEDCTL - PCF50633_REG_AUTOOUT] = 1;
+ misc[PCF50633_REG_LEDDIM - PCF50633_REG_AUTOOUT] = 1;
+ }
+
/* regulator voltages and enable states */
ret = i2c_smbus_write_i2c_block_data(&pcf->client,
PCF50633_REG_AUTOOUT,
- sizeof(pcf->standby_regs.misc) - 4,
- &pcf->standby_regs.misc[0]);
+ sizeof(misc),
+ &misc[0]);
if (ret)
dev_err(dev, "Failed to restore misc :-( %d\n", ret);