mirror of
https://github.com/openwrt/openwrt.git
synced 2024-12-27 01:11:14 +00:00
72 lines
2.6 KiB
Diff
72 lines
2.6 KiB
Diff
|
From 568981c881e20fccdbfffb073c3868dcdc012446 Mon Sep 17 00:00:00 2001
|
||
|
From: Andy Green <andy@openmoko.com>
|
||
|
Date: Fri, 25 Jul 2008 23:06:15 +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 <andy@openmoko.com>
|
||
|
---
|
||
|
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 33c4ef4..bbc8ae6 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);
|
||
|
|
||
|
--
|
||
|
1.5.6.3
|
||
|
|