aboutsummaryrefslogtreecommitdiffstats
path: root/target/linux/s3c24xx/patches-2.6.26/1062-glamo-cmdqueue-bandaid.patch.patch
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/s3c24xx/patches-2.6.26/1062-glamo-cmdqueue-bandaid.patch.patch')
-rwxr-xr-xtarget/linux/s3c24xx/patches-2.6.26/1062-glamo-cmdqueue-bandaid.patch.patch81
1 files changed, 81 insertions, 0 deletions
diff --git a/target/linux/s3c24xx/patches-2.6.26/1062-glamo-cmdqueue-bandaid.patch.patch b/target/linux/s3c24xx/patches-2.6.26/1062-glamo-cmdqueue-bandaid.patch.patch
new file mode 100755
index 0000000000..96ec17c499
--- /dev/null
+++ b/target/linux/s3c24xx/patches-2.6.26/1062-glamo-cmdqueue-bandaid.patch.patch
@@ -0,0 +1,81 @@
+From 08f211e0775ee1e29993fd072968e17a51c5ec14 Mon Sep 17 00:00:00 2001
+From: mokopatches <mokopatches@openmoko.org>
+Date: Fri, 25 Jul 2008 23:05:22 +0100
+Subject: [PATCH] glamo-cmdqueue-bandaid.patch
+ [ Stop kernel from hanging every once in a while during Glamo
+ initialization. ]
+
+debug-glamo-fb-cmdqueue-wait-timeout.patch
+
+From: warmcat <andy@warmcat.com>
+---
+ drivers/mfd/glamo/glamo-fb.c | 30 +++++++++++++++++++++++++++---
+ 1 files changed, 27 insertions(+), 3 deletions(-)
+
+diff --git a/drivers/mfd/glamo/glamo-fb.c b/drivers/mfd/glamo/glamo-fb.c
+index 394a0ad..f0d7600 100644
+--- a/drivers/mfd/glamo/glamo-fb.c
++++ b/drivers/mfd/glamo/glamo-fb.c
+@@ -553,12 +553,20 @@ static inline int glamofb_cmdq_empty(struct glamofb_handle *gfb)
+
+ void glamofb_cmd_mode(struct glamofb_handle *gfb, int on)
+ {
++ int timeout = 2000;
++
+ dev_dbg(gfb->dev, "glamofb_cmd_mode(gfb=%p, on=%d)\n", gfb, on);
+ if (on) {
+ dev_dbg(gfb->dev, "%s: waiting for cmdq empty: ",
+ __FUNCTION__);
+- while (!glamofb_cmdq_empty(gfb))
++ while ((!glamofb_cmdq_empty(gfb)) && (timeout--))
+ yield();
++ if (timeout < 0) {
++ printk(KERN_ERR"*************"
++ "glamofb cmd_queue never got empty"
++ "*************\n");
++ return;
++ }
+ dev_dbg(gfb->dev, "empty!\n");
+
+ /* display the entire frame then switch to command */
+@@ -568,8 +576,16 @@ void glamofb_cmd_mode(struct glamofb_handle *gfb, int on)
+
+ /* wait until LCD is idle */
+ dev_dbg(gfb->dev, "waiting for LCD idle: ");
+- while (!reg_read(gfb, GLAMO_REG_LCD_STATUS2) & (1 << 12))
++ timeout = 2000;
++ while ((!reg_read(gfb, GLAMO_REG_LCD_STATUS2) & (1 << 12)) &&
++ (timeout--))
+ yield();
++ if (timeout < 0) {
++ printk(KERN_ERR"*************"
++ "glamofb lcd never idle"
++ "*************\n");
++ return;
++ }
+ dev_dbg(gfb->dev, "idle!\n");
+
+ msleep(90);
+@@ -589,10 +605,18 @@ EXPORT_SYMBOL_GPL(glamofb_cmd_mode);
+
+ int glamofb_cmd_write(struct glamofb_handle *gfb, u_int16_t val)
+ {
++ int timeout = 2000;
++
+ dev_dbg(gfb->dev, "%s: waiting for cmdq empty\n",
+ __FUNCTION__);
+- while (!glamofb_cmdq_empty(gfb))
++ while ((!glamofb_cmdq_empty(gfb)) && (timeout--))
+ yield();
++ if (timeout < 0) {
++ printk(KERN_ERR"*************"
++ "glamofb cmd_queue never got empty"
++ "*************\n");
++ return 1;
++ }
+ dev_dbg(gfb->dev, "idle, writing 0x%04x\n", val);
+
+ reg_write(gfb, GLAMO_REG_LCD_COMMAND1, val);
+--
+1.5.6.3
+