aboutsummaryrefslogtreecommitdiff
path: root/drivers/i2c
diff options
context:
space:
mode:
authorAndy Green <andy@openmoko.com>2008-11-19 17:09:56 +0000
committerAndy Green <agreen@pads.home.warmcat.com>2008-11-19 17:09:56 +0000
commite06346a8baf9c3340299930a8ea8586e1f0a729c (patch)
treeebad0aa77cad4093344c67def38318ae739dd580 /drivers/i2c
parent94a4decac11b8c88f74dc03992db4a562b1083f0 (diff)
change-backlight-level-not-forced-up-on-resume.patch
We at least always enabled backlight on resume, this patch changes us to set backlight back to last requested backlight brightness level on resume. Note it means that you can resume with screen blanked, but it should come back if that happened with touchscreen action as usual. /sys/class/backlight/pcf50633-bl/actual_brightness and /sys/class/backlight/pcf50633-bl/brightness seem to agree after resume when reportedly they didn't before. Signed-off-by: Andy Green <andy@openmoko.com>
Diffstat (limited to 'drivers/i2c')
-rw-r--r--drivers/i2c/chips/pcf50633.c28
1 files changed, 17 insertions, 11 deletions
diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c
index 1074b946d64..fea2f38d810 100644
--- a/drivers/i2c/chips/pcf50633.c
+++ b/drivers/i2c/chips/pcf50633.c
@@ -1874,16 +1874,12 @@ static int pcf50633bl_get_intensity(struct backlight_device *bd)
return intensity & 0x3f;
}
-static int pcf50633bl_set_intensity(struct backlight_device *bd)
+static int __pcf50633bl_set_intensity(struct pcf50633_data *pcf, int intensity)
{
- struct pcf50633_data *pcf = bl_get_data(bd);
- int intensity = bd->props.brightness;
int old_intensity = reg_read(pcf, PCF50633_REG_LEDOUT);
u_int8_t ledena = 2;
int ret;
- dev_info(&pcf->client.dev, "pcf50633bl_set_intensity\n");
-
if (!(reg_read(pcf, PCF50633_REG_LEDENA) & 1))
old_intensity = 0;
@@ -1891,7 +1887,8 @@ static int pcf50633bl_set_intensity(struct backlight_device *bd)
(bd->props.fb_blank != FB_BLANK_UNBLANK))
intensity = 0;
- /* The PCF50633 cannot handle LEDOUT = 0 (datasheet p60)
+ /*
+ * The PCF50633 cannot handle LEDOUT = 0 (datasheet p60)
* if seen, you have to re-enable the LED unit
*/
@@ -1912,6 +1909,18 @@ static int pcf50633bl_set_intensity(struct backlight_device *bd)
return ret;
}
+static int pcf50633bl_set_intensity(struct backlight_device *bd)
+{
+ struct pcf50633_data *pcf = bl_get_data(bd);
+ int intensity = bd->props.brightness;
+
+ if ((bd->props.power != FB_BLANK_UNBLANK) ||
+ (bd->props.fb_blank != FB_BLANK_UNBLANK))
+ intensity = 0;
+
+ return __pcf50633bl_set_intensity(pcf, intensity);
+}
+
static struct backlight_ops pcf50633bl_ops = {
.get_brightness = pcf50633bl_get_intensity,
.update_status = pcf50633bl_set_intensity,
@@ -2501,11 +2510,8 @@ void pcf50633_backlight_resume(struct pcf50633_data *pcf)
/* platform defines resume ramp speed */
reg_write(pcf, PCF50633_REG_LEDDIM,
pcf->pdata->resume_backlight_ramp_speed);
- reg_write(pcf, PCF50633_REG_LEDOUT, pcf->standby_regs.misc[
- PCF50633_REG_LEDOUT - PCF50633_REG_AUTOOUT]);
- /* we force the backlight on in fact */
- reg_write(pcf, PCF50633_REG_LEDENA, pcf->standby_regs.misc[
- PCF50633_REG_LEDENA - PCF50633_REG_AUTOOUT] | 1);
+
+ __pcf50633bl_set_intensity(pcf, pcf->backlight->props.brightness);
}
EXPORT_SYMBOL_GPL(pcf50633_backlight_resume);