1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
diff --git a/firmware/target/arm/as3525/button-e200v2-fuze.c b/firmware/target/arm/as3525/button-e200v2-fuze.c
index 6a9f029..bf811ce 100644
--- a/firmware/target/arm/as3525/button-e200v2-fuze.c
+++ b/firmware/target/arm/as3525/button-e200v2-fuze.c
@@ -246,6 +246,9 @@ static int button_gpio(void)
     int btn = BUTTON_NONE;
     if(hold_button)
         return btn;
+        
+    DBOP_CTRL &= ~(1<<16);               /* disable output (1:write enabled) */
+    button_delay();
     /* set afsel, so that we can read our buttons */
     GPIOC_AFSEL &= ~(1<<2|1<<3|1<<4|1<<5|1<<6);
     /* set dir so we can read our buttons (but reset the C pins first) */
@@ -277,6 +280,7 @@ static int button_gpio(void)
     GPIOC_DIR |= (1<<2|1<<3|1<<4|1<<5|1<<6);
     GPIOC_AFSEL |= (1<<2|1<<3|1<<4|1<<5|1<<6);

+    DBOP_CTRL |= (1<<16);               /* disable output (1:write enabled) */
     return btn;
 }

diff --git a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
index e25494d..bc2cbf3 100644
--- a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
+++ b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
@@ -173,8 +173,10 @@ void lcd_write_data(const fb_data* p_bytes, int count)
         /* TODO: We should normally fill the fifo until it's full
        * instead of waiting after each word,
                     * but that causes blue lines on the display */                    
-        while ((DBOP_STAT & (1<<10)) == 0);
+        while ((DBOP_STAT & (1<<6)) != 0);
     }
+    /* While push fifo is not empty */
+    while ((DBOP_STAT & (1<<10)) == 0);
     
     /* due to the 32bit alignment requirement, we possibly need to do a
         * 16bit transfer at the end also */