summaryrefslogtreecommitdiff
path: root/target/linux/s3c24xx/patches-2.6.24/1328-.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.24/1328-.patch')
-rw-r--r--target/linux/s3c24xx/patches-2.6.24/1328-.patch152
1 files changed, 152 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.24/1328-.patch b/target/linux/s3c24xx/patches-2.6.24/1328-.patch
new file mode 100644
index 0000000000..115bcea113
--- /dev/null
+++ b/target/linux/s3c24xx/patches-2.6.24/1328-.patch
@@ -0,0 +1,152 @@
+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
+