From 0c734eb8a3a41ca9f9b452d0d1a7211de6c146dd Mon Sep 17 00:00:00 2001 From: Andy Green Date: Wed, 2 Jul 2008 22:42:07 +0100 Subject: [PATCH] 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 --- drivers/i2c/chips/pcf50633.c | 23 +++++++++++++++++------ 1 files changed, 17 insertions(+), 6 deletions(-) diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c index 120fdbc..875a5ee 100644 --- a/drivers/i2c/chips/pcf50633.c +++ b/drivers/i2c/chips/pcf50633.c @@ -2481,13 +2481,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); @@ -2498,6 +2499,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); @@ -2509,11 +2511,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); -- 1.5.6.5