diff options
-rw-r--r-- | 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 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); |