aboutsummaryrefslogtreecommitdiff
path: root/drivers/video
diff options
context:
space:
mode:
authormerge <null@invalid>2008-12-05 11:10:06 +0000
committerAndy Green <agreen@pads.home.warmcat.com>2008-12-05 11:10:06 +0000
commit8dd1dc8bf69e964f3055b989e5f833810a670f5f (patch)
tree238fdacf705be134f0b2156b2dbc2cc5ffe6660f /drivers/video
parentb38e92ee2f5a0b00f84355a2dc5afdd90854e41f (diff)
MERGE-via-pending-tracking-hist-MERGE-via-stable-tracking-jbt6k74_cleanup_no_deep_sleep-1228475349
pending-tracking-hist top was MERGE-via-stable-tracking-jbt6k74_cleanup_no_deep_sleep-1228475349 / 7e4328b084323f8c35918bc2cb7a3afcf0ddf180 ... parent commitmessage: From: merge <null@invalid> MERGE-via-stable-tracking-hist-jbt6k74_cleanup_no_deep_sleep- stable-tracking-hist top was jbt6k74_cleanup_no_deep_sleep- / f5213710553fe7a94cc0b47740162b8a745fa277 ... parent commitmessage: From: nicolas dufresne <nicolas.dufresne@gmail.com> jbt6k74_cleanup_no_deep_sleep.patch Improve jbt6k74 driver changes to avoid WSOD so they don't stomp on QVGA / VGA mode situation
Diffstat (limited to 'drivers/video')
-rw-r--r--drivers/video/display/jbt6k74.c68
1 files changed, 24 insertions, 44 deletions
diff --git a/drivers/video/display/jbt6k74.c b/drivers/video/display/jbt6k74.c
index 3d87c736534..6beaea4caf6 100644
--- a/drivers/video/display/jbt6k74.c
+++ b/drivers/video/display/jbt6k74.c
@@ -252,36 +252,22 @@ static int jbt_init_regs(struct jbt_info *jbt, int qvga)
return rc ? -EIO : 0;
}
-int jbt6k74_display_onoff(struct jbt_info *jbt, int on)
-{
- if (on)
- return jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_ON);
- else
- return jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_OFF);
-}
-EXPORT_SYMBOL_GPL(jbt6k74_display_onoff);
-
static int standby_to_sleep(struct jbt_info *jbt)
{
- static int once = 0;
- if (!once++) {
- int rc;
-
- /* three times command zero */
- rc = jbt_reg_write_nodata(jbt, 0x00);
- mdelay(1);
- rc |= jbt_reg_write_nodata(jbt, 0x00);
- mdelay(1);
- rc |= jbt_reg_write_nodata(jbt, 0x00);
- mdelay(1);
-
- /* deep standby out */
- rc |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x17);
-
- return rc ? -EIO : 0;
- }
- else
- return 0;
+ int rc;
+
+ /* three times command zero */
+ rc = jbt_reg_write_nodata(jbt, 0x00);
+ mdelay(1);
+ rc |= jbt_reg_write_nodata(jbt, 0x00);
+ mdelay(1);
+ rc |= jbt_reg_write_nodata(jbt, 0x00);
+ mdelay(1);
+
+ /* deep standby out */
+ rc |= jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x17);
+
+ return rc ? -EIO : 0;
}
static int sleep_to_normal(struct jbt_info *jbt)
@@ -307,7 +293,7 @@ static int sleep_to_normal(struct jbt_info *jbt)
rc |= jbt_init_regs(jbt, 0);
/* Turn on display */
- rc |= jbt6k74_display_onoff(jbt, 1);
+ rc |= jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_ON);
return rc ? -EIO : 0;
}
@@ -335,7 +321,7 @@ static int sleep_to_qvga_normal(struct jbt_info *jbt)
rc |= jbt_init_regs(jbt, 1);
/* Turn on display */
- rc |= jbt6k74_display_onoff(jbt, 1);
+ rc |= jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_ON);
return rc ? -EIO : 0;
}
@@ -344,8 +330,7 @@ static int normal_to_sleep(struct jbt_info *jbt)
{
int rc;
- rc = jbt6k74_display_onoff(jbt, 0);
- rc |= jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_OFF);
+ rc = jbt_reg_write_nodata(jbt, JBT_REG_DISPLAY_OFF);
rc |= jbt_reg_write16(jbt, JBT_REG_OUTPUT_CONTROL, 0x8002);
rc |= jbt_reg_write_nodata(jbt, JBT_REG_SLEEP_IN);
@@ -354,11 +339,7 @@ static int normal_to_sleep(struct jbt_info *jbt)
static int sleep_to_standby(struct jbt_info *jbt)
{
-#if 0
return jbt_reg_write(jbt, JBT_REG_POWER_ON_OFF, 0x00);
-#else
- return 0;
-#endif
}
/* frontend function */
@@ -618,11 +599,10 @@ static int fb_notifier_callback(struct notifier_block *self,
switch (fb_blank) {
case FB_BLANK_UNBLANK:
dev_info(&jbt->spi_dev->dev, "**** jbt6k74 unblank\n");
+ jbt6k74_enter_state(jbt, JBT_STATE_NORMAL);
break;
case FB_BLANK_NORMAL:
dev_info(&jbt->spi_dev->dev, "**** jbt6k74 normal\n");
- /*jbt6k74_enter_state(jbt, JBT_STATE_NORMAL);
- jbt6k74_display_onoff(jbt, 1); */
break;
case FB_BLANK_VSYNC_SUSPEND:
dev_info(&jbt->spi_dev->dev, "**** jbt6k74 vsync suspend\n");
@@ -633,11 +613,12 @@ static int fb_notifier_callback(struct notifier_block *self,
* a visible artefact (white screen) before the backlight
* is dimmed to a dark enough level */
/* jbt6k74_enter_state(jbt, JBT_STATE_SLEEP); */
- /*jbt6k74_display_onoff(jbt, 0);*/
break;
case FB_BLANK_POWERDOWN:
dev_info(&jbt->spi_dev->dev, "**** jbt6k74 powerdown\n");
- /*jbt6k74_enter_state(jbt, JBT_STATE_DEEP_STANDBY);*/
+ /* FIXME: deep standby causes WSOD on certain devices. We use
+ * sleep as workaround */
+ jbt6k74_enter_state(jbt, JBT_STATE_SLEEP);
break;
}
@@ -745,13 +726,12 @@ static int jbt_suspend(struct spi_device *spi, pm_message_t state)
/* Save mode for resume */
jbt->last_state = jbt->state;
-
- jbt6k74_enter_state(jbt, JBT_STATE_DEEP_STANDBY);
+ /* FIXME: deep standby causes WSOD on certain devices. We use
+ * sleep as workaround */
+ jbt6k74_enter_state(jbt, JBT_STATE_SLEEP);
jbt->have_resumed = 0;
-/* (jbt6k74_pdata->reset)(0, 0); */
-
dev_info(&spi->dev, "**** jbt6k74 suspend end\n");
return 0;