diff options
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1145-fix-suspend-backlight-timing-pm-debug.patch.patch')
-rw-r--r-- | target/linux/s3c24xx/patches-2.6.24/1145-fix-suspend-backlight-timing-pm-debug.patch.patch | 269 |
1 files changed, 0 insertions, 269 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1145-fix-suspend-backlight-timing-pm-debug.patch.patch b/target/linux/s3c24xx/patches-2.6.24/1145-fix-suspend-backlight-timing-pm-debug.patch.patch deleted file mode 100644 index b6803b5d51..0000000000 --- a/target/linux/s3c24xx/patches-2.6.24/1145-fix-suspend-backlight-timing-pm-debug.patch.patch +++ /dev/null @@ -1,269 +0,0 @@ -From dcb5fd2c195981557237e3f91598a6b19f7fe929 Mon Sep 17 00:00:00 2001 -From: Andy Green <andy@openmoko.com> -Date: Tue, 13 May 2008 18:53:39 +0100 -Subject: [PATCH] fix-suspend-backlight-timing-pm-debug.patch - -This patch improves the smoothness of suspend and resume action. - -Taking out CONFIG_PM_DEBUG allows much more rapid resume (the low level -serial traffic appears to be synchronous) - -Added a platform callback in jbt driver and support in pcf50633 so we -can defer bringing up the backlight until the LCM is able to process -video again (which must happen after the glamo is up and producing -video beacuse the LCM is hooked to glamo SPI) - -GTA01 should not be affected by all this as the callback will default -to null and it is on pcf50606 - -Signed-off-by: Andy Green <andy@openmoko.com> ---- - arch/arm/mach-s3c2440/mach-gta02.c | 8 ++++++ - defconfig-2.6.24 | 4 +- - drivers/i2c/chips/pcf50633.c | 50 ++++++++++++++++++++++++++--------- - drivers/video/display/jbt6k74.c | 12 ++++++++- - include/linux/jbt6k74.h | 3 +- - include/linux/pcf50633.h | 6 ++++ - 6 files changed, 66 insertions(+), 17 deletions(-) - -diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c -index 1954121..e1984a9 100644 ---- a/arch/arm/mach-s3c2440/mach-gta02.c -+++ b/arch/arm/mach-s3c2440/mach-gta02.c -@@ -532,6 +532,7 @@ static struct pcf50633_platform_data gta02_pcf_pdata = { - }, - }, - }, -+ .defer_resume_backlight = 1, - }; - - #if 0 /* currently unused */ -@@ -828,9 +829,16 @@ void gta02_jbt6k74_reset(int devidx, int level) - glamo_lcm_reset(level); - } - -+/* finally bring up deferred backlight resume now LCM is resumed itself */ -+ -+void gta02_jbt6k74_resuming(int devidx) -+{ -+ pcf50633_backlight_resume(pcf50633_global); -+} - - const struct jbt6k74_platform_data jbt6k74_pdata = { - .reset = gta02_jbt6k74_reset, -+ .resuming = gta02_jbt6k74_resuming, - }; - - static struct spi_board_info gta02_spi_board_info[] = { -diff --git a/defconfig-2.6.24 b/defconfig-2.6.24 -index d091489..0bcf50a 100644 ---- a/defconfig-2.6.24 -+++ b/defconfig-2.6.24 -@@ -161,7 +161,7 @@ CONFIG_CPU_LLSERIAL_S3C2440=y - # - # Power management - # --CONFIG_S3C2410_PM_DEBUG=y -+# CONFIG_S3C2410_PM_DEBUG is not set - # CONFIG_S3C2410_PM_CHECK is not set - CONFIG_S3C_LOWLEVEL_UART_PORT=2 - -@@ -1754,7 +1754,7 @@ CONFIG_FORCED_INLINING=y - # CONFIG_SAMPLES is not set - # CONFIG_DEBUG_USER is not set - CONFIG_DEBUG_ERRORS=y --CONFIG_DEBUG_LL=y -+# CONFIG_DEBUG_LL is not set - # CONFIG_DEBUG_ICEDCC is not set - # CONFIG_DEBUG_S3C_PORT is not set - CONFIG_DEBUG_S3C_UART=2 -diff --git a/drivers/i2c/chips/pcf50633.c b/drivers/i2c/chips/pcf50633.c -index 09d5cfd..b7b4921 100644 ---- a/drivers/i2c/chips/pcf50633.c -+++ b/drivers/i2c/chips/pcf50633.c -@@ -1466,7 +1466,7 @@ static int pcf50633bl_set_intensity(struct backlight_device *bd) - 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; -+ u_int8_t ledena = 2; - int ret; - - if (bd->props.power != FB_BLANK_UNBLANK) -@@ -1474,16 +1474,19 @@ static int pcf50633bl_set_intensity(struct backlight_device *bd) - if (bd->props.fb_blank != FB_BLANK_UNBLANK) - intensity = 0; - -- /* The PCF50633 seems to have some kind of oddity (bug?) when -- * the intensity was 0, you need to completely switch it off -- * and re-enable it, before it produces any output voltage again */ -+ /* The PCF50633 cannot handle LEDOUT = 0 (datasheet p60) -+ * if seen, you have to re-enable the LED unit -+ */ - - if (intensity != 0 && old_intensity == 0) { - ledena = reg_read(pcf, PCF50633_REG_LEDENA); - reg_write(pcf, PCF50633_REG_LEDENA, 0x00); - } - -- ret = reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, -+ if (!intensity) /* illegal to set LEDOUT to 0 */ -+ ret = reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, 2); -+ else -+ ret = reg_set_bit_mask(pcf, PCF50633_REG_LEDOUT, 0x3f, - intensity); - - if (intensity != 0 && old_intensity == 0) -@@ -1921,6 +1924,8 @@ static int pcf50633_suspend(struct device *dev, pm_message_t state) - } - - /* turn off the backlight */ -+ __reg_write(pcf, PCF50633_REG_LEDDIM, 0); -+ __reg_write(pcf, PCF50633_REG_LEDOUT, 2); - __reg_write(pcf, PCF50633_REG_LEDENA, 0x00); - - pcf->standby_regs.int1m = __reg_read(pcf, PCF50633_REG_INT1M); -@@ -1939,17 +1944,30 @@ static int pcf50633_suspend(struct device *dev, pm_message_t state) - return 0; - } - -+/* -+ * if backlight resume is selected to be deferred by platform, then it -+ * can call this to finally reset backlight status (after LCM is resumed -+ * for example -+ */ -+ -+void pcf50633_backlight_resume(struct pcf50633_data *pcf) -+{ -+ __reg_write(pcf, PCF50633_REG_LEDOUT, pcf->standby_regs.ledout); -+ __reg_write(pcf, PCF50633_REG_LEDENA, pcf->standby_regs.ledena); -+ __reg_write(pcf, PCF50633_REG_LEDDIM, pcf->standby_regs.leddim); -+} -+EXPORT_SYMBOL_GPL(pcf50633_backlight_resume); -+ -+ - static int pcf50633_resume(struct device *dev) - { - struct i2c_client *client = to_i2c_client(dev); - struct pcf50633_data *pcf = i2c_get_clientdata(client); - int i; - -- printk(KERN_INFO"a\n"); - /* mutex_lock(&pcf->lock); */ /* resume in atomic context */ - - __reg_write(pcf, PCF50633_REG_LEDENA, 0x01); -- printk(KERN_INFO"b\n"); - - /* Resume all saved registers that don't "survive" standby state */ - __reg_write(pcf, PCF50633_REG_INT1M, pcf->standby_regs.int1m); -@@ -1957,7 +1975,6 @@ static int pcf50633_resume(struct device *dev) - __reg_write(pcf, PCF50633_REG_INT3M, pcf->standby_regs.int3m); - __reg_write(pcf, PCF50633_REG_INT4M, pcf->standby_regs.int4m); - __reg_write(pcf, PCF50633_REG_INT5M, pcf->standby_regs.int5m); -- printk(KERN_INFO"c\n"); - - __reg_write(pcf, PCF50633_REG_OOCTIM2, pcf->standby_regs.ooctim2); - __reg_write(pcf, PCF50633_REG_AUTOOUT, pcf->standby_regs.autoout); -@@ -1968,17 +1985,24 @@ static int pcf50633_resume(struct device *dev) - __reg_write(pcf, PCF50633_REG_DOWN2ENA, pcf->standby_regs.down2ena); - __reg_write(pcf, PCF50633_REG_MEMLDOOUT, pcf->standby_regs.memldoout); - __reg_write(pcf, PCF50633_REG_MEMLDOENA, pcf->standby_regs.memldoena); -- __reg_write(pcf, PCF50633_REG_LEDOUT, pcf->standby_regs.ledout); -- __reg_write(pcf, PCF50633_REG_LEDENA, pcf->standby_regs.ledena); -- __reg_write(pcf, PCF50633_REG_LEDDIM, pcf->standby_regs.leddim); -- printk(KERN_INFO"d\n"); -+ -+ /* platform can choose to defer backlight bringup */ -+ if (!pcf->pdata->defer_resume_backlight) { -+ __reg_write(pcf, PCF50633_REG_LEDOUT, pcf->standby_regs.ledout); -+ __reg_write(pcf, PCF50633_REG_LEDENA, pcf->standby_regs.ledena); -+ __reg_write(pcf, PCF50633_REG_LEDDIM, pcf->standby_regs.leddim); -+ } else { /* force backlight down, platform will restore later */ -+ __reg_write(pcf, PCF50633_REG_LEDOUT, 2); -+ __reg_write(pcf, PCF50633_REG_LEDENA, 0x20); -+ __reg_write(pcf, PCF50633_REG_LEDDIM, 1); -+ } -+ - /* FIXME: one big read? */ - for (i = 0; i < 7; i++) { - u_int8_t reg_out = PCF50633_REG_LDO1OUT + 2*i; - __reg_write(pcf, reg_out, pcf->standby_regs.ldo[i].out); - __reg_write(pcf, reg_out+1, pcf->standby_regs.ldo[i].ena); - } -- printk(KERN_INFO"e\n"); - - /* mutex_unlock(&pcf->lock); */ /* resume in atomic context */ - -diff --git a/drivers/video/display/jbt6k74.c b/drivers/video/display/jbt6k74.c -index 7e11da7..178e2da 100644 ---- a/drivers/video/display/jbt6k74.c -+++ b/drivers/video/display/jbt6k74.c -@@ -647,9 +647,14 @@ static int jbt_suspend(struct spi_device *spi, pm_message_t state) - static void jbt_resume_work(struct work_struct *work) - { - struct jbt_info *jbt = container_of(work, struct jbt_info, work); -+ struct jbt6k74_platform_data *jbt6k74_pdata = -+ jbt->spi_dev->dev.platform_data; - - printk(KERN_INFO"jbt_resume_work waiting...\n"); -- msleep(2000); -+ /* 100ms is not enough here 2008-05-08 andy@openmoko.com -+ * if CONFIG_PM_DEBUG is enabled 2000ms is required -+ */ -+ msleep(400); - printk(KERN_INFO"jbt_resume_work GO...\n"); - - jbt6k74_enter_state(jbt, JBT_STATE_DEEP_STANDBY); -@@ -665,6 +670,11 @@ static void jbt_resume_work(struct work_struct *work) - } - jbt6k74_display_onoff(jbt, 1); - -+ /* this gives the platform a chance to bring up backlight now */ -+ -+ if (jbt6k74_pdata->resuming) -+ (jbt6k74_pdata->resuming)(0); -+ - printk(KERN_INFO"jbt_resume_work done...\n"); - } - -diff --git a/include/linux/jbt6k74.h b/include/linux/jbt6k74.h -index 3fbe178..0ac9124 100644 ---- a/include/linux/jbt6k74.h -+++ b/include/linux/jbt6k74.h -@@ -2,7 +2,8 @@ - #define __JBT6K74_H__ - - struct jbt6k74_platform_data { -- void (* reset)(int devindex, int level); -+ void (*reset)(int devindex, int level); -+ void (*resuming)(int devindex); /* called when LCM is resumed */ - }; - - #endif -diff --git a/include/linux/pcf50633.h b/include/linux/pcf50633.h -index b6a67ee..f427985 100644 ---- a/include/linux/pcf50633.h -+++ b/include/linux/pcf50633.h -@@ -61,6 +61,9 @@ pcf50633_usb_curlim_set(struct pcf50633_data *pcf, int ma); - extern void - pcf50633_charge_enable(struct pcf50633_data *pcf, int on); - -+extern void -+pcf50633_backlight_resume(struct pcf50633_data *pcf); -+ - #define PCF50633_FEAT_EXTON 0x00000001 /* not yet supported */ - #define PCF50633_FEAT_MBC 0x00000002 - #define PCF50633_FEAT_BBC 0x00000004 /* not yet supported */ -@@ -89,6 +92,9 @@ struct pcf50633_platform_data { - u_int8_t mbcc3; /* charger voltage / current */ - } charger; - pmu_cb *cb; -+ -+ /* post-resume backlight bringup */ -+ int defer_resume_backlight; - }; - - #endif /* _PCF50633_H */ --- -1.5.6.5 - |