mirror of https://github.com/hak5/openwrt.git
153 lines
4.3 KiB
Diff
153 lines
4.3 KiB
Diff
From fb42ce6724576fc173faf8abfb04aa2c36d213b7 Mon Sep 17 00:00:00 2001
|
|
From: Andy Green <agreen@pads.home.warmcat.com>
|
|
Date: Fri, 5 Dec 2008 11:03:59 +0000
|
|
Subject: [PATCH]
|
|
|
|
---
|
|
drivers/video/display/jbt6k74.c | 68 ++++++++++++++-------------------------
|
|
1 files changed, 24 insertions(+), 44 deletions(-)
|
|
|
|
diff --git a/drivers/video/display/jbt6k74.c b/drivers/video/display/jbt6k74.c
|
|
index 0635823..b1b5b1e 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 */
|
|
@@ -576,11 +557,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");
|
|
@@ -591,11 +571,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;
|
|
}
|
|
|
|
@@ -692,13 +673,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;
|
|
--
|
|
1.5.6.5
|
|
|