summaryrefslogtreecommitdiff
path: root/firmware/target
diff options
context:
space:
mode:
authorThomas Martitz <kugel@rockbox.org>2009-09-01 00:42:22 +0000
committerThomas Martitz <kugel@rockbox.org>2009-09-01 00:42:22 +0000
commitb9093b2b35310af1ea28a5a96d036818146783ab (patch)
tree3d01ab19875e7aa78356c4c1ad940abfa4b50cba /firmware/target
parentfb65077a18bd2f35b24b049aaa9cfb724a946c27 (diff)
downloadrockbox-b9093b2b35310af1ea28a5a96d036818146783ab.tar.gz
rockbox-b9093b2b35310af1ea28a5a96d036818146783ab.zip
Fuze/e200v2: Speed up the LCD further by letting the FIFO fill until it's full instead of keeping it almost empty.
The blue bars I previously had with this way are fixed by blocking DBOP output while reading buttons from GPIO. We reached the maximum fps even at unboosted now (100.0 fps at lcd_update(), DBOP can't do more). Optimisation to YUV stuff is still possible though. The e200v2 scrollwheel is very improved due to the this and the previous speedup since the chance of getting the wheel read blocked is greatly decreased with faster updates. git-svn-id: svn://svn.rockbox.org/rockbox/trunk@22578 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target')
-rw-r--r--firmware/target/arm/as3525/button-e200v2-fuze.c10
-rw-r--r--firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c10
-rw-r--r--firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c12
3 files changed, 19 insertions, 13 deletions
diff --git a/firmware/target/arm/as3525/button-e200v2-fuze.c b/firmware/target/arm/as3525/button-e200v2-fuze.c
index 6a9f02959c..5518f981e8 100644
--- a/firmware/target/arm/as3525/button-e200v2-fuze.c
+++ b/firmware/target/arm/as3525/button-e200v2-fuze.c
@@ -32,7 +32,7 @@
32#define WHEEL_COUNTER_DIV 4 32#define WHEEL_COUNTER_DIV 4
33#define ACCEL_INCREMENT 2 33#define ACCEL_INCREMENT 2
34#define ACCEL_SHIFT 2 34#define ACCEL_SHIFT 2
35#define BUTTON_DELAY 45 35#define BUTTON_DELAY 30
36#endif 36#endif
37 37
38#ifdef SANSA_E200V2 38#ifdef SANSA_E200V2
@@ -246,6 +246,11 @@ static int button_gpio(void)
246 int btn = BUTTON_NONE; 246 int btn = BUTTON_NONE;
247 if(hold_button) 247 if(hold_button)
248 return btn; 248 return btn;
249
250 /* disable DBOP output while changing GPIO pins that share lines with it */
251 DBOP_CTRL &= ~(1<<16);
252 button_delay();
253
249 /* set afsel, so that we can read our buttons */ 254 /* set afsel, so that we can read our buttons */
250 GPIOC_AFSEL &= ~(1<<2|1<<3|1<<4|1<<5|1<<6); 255 GPIOC_AFSEL &= ~(1<<2|1<<3|1<<4|1<<5|1<<6);
251 /* set dir so we can read our buttons (but reset the C pins first) */ 256 /* set dir so we can read our buttons (but reset the C pins first) */
@@ -276,7 +281,8 @@ static int button_gpio(void)
276 /* return to settings needed for lcd */ 281 /* return to settings needed for lcd */
277 GPIOC_DIR |= (1<<2|1<<3|1<<4|1<<5|1<<6); 282 GPIOC_DIR |= (1<<2|1<<3|1<<4|1<<5|1<<6);
278 GPIOC_AFSEL |= (1<<2|1<<3|1<<4|1<<5|1<<6); 283 GPIOC_AFSEL |= (1<<2|1<<3|1<<4|1<<5|1<<6);
279 284
285 DBOP_CTRL |= (1<<16); /* enable output again */
280 return btn; 286 return btn;
281} 287}
282 288
diff --git a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
index e25494dddd..b19f8ea65b 100644
--- a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
+++ b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
@@ -170,16 +170,16 @@ void lcd_write_data(const fb_data* p_bytes, int count)
170 DBOP_DOUT32 = *data++; 170 DBOP_DOUT32 = *data++;
171 count -= 2; 171 count -= 2;
172 172
173 /* TODO: We should normally fill the fifo until it's full 173 /* Wait if push fifo is full */
174 * instead of waiting after each word, 174 while ((DBOP_STAT & (1<<6)) != 0);
175 * but that causes blue lines on the display */
176 while ((DBOP_STAT & (1<<10)) == 0);
177 } 175 }
178
179 /* due to the 32bit alignment requirement, we possibly need to do a 176 /* due to the 32bit alignment requirement, we possibly need to do a
180 * 16bit transfer at the end also */ 177 * 16bit transfer at the end also */
181 if (count > 0) 178 if (count > 0)
182 lcd_write_single_data16(*(fb_data*)data); 179 lcd_write_single_data16(*(fb_data*)data);
180
181 /* While push fifo is not empty */
182 while ((DBOP_STAT & (1<<10)) == 0);
183} 183}
184 184
185static void lcd_write_reg(int reg, int value) 185static void lcd_write_reg(int reg, int value)
diff --git a/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c b/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c
index fc0fdaae10..2b7ce4888d 100644
--- a/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c
+++ b/firmware/target/arm/as3525/sansa-fuze/lcd-fuze.c
@@ -116,16 +116,16 @@ void lcd_write_data(const fb_data* p_bytes, int count)
116 DBOP_DOUT32 = *data++; 116 DBOP_DOUT32 = *data++;
117 count -= 2; 117 count -= 2;
118 118
119 /* Wait for fifo to empty */ 119 /* Wait if push fifo is full */
120 /* TODO: We should normally fill the fifo until it's full 120 while ((DBOP_STAT & (1<<6)) != 0);
121 * instead of waiting after each word,
122 * but that causes blue lines on the display */
123 while ((DBOP_STAT & (1<<10)) == 0);
124 } 121 }
125 /* due to the 32bit alignment requirement, we possibly need to do a 122 /* due to the 32bit alignment requirement, we possibly need to do a
126 * 16bit transfer at the end also */ 123 * 16bit transfer at the end also */
127 if (count > 0) 124 if (count > 0)
128 lcd_write_single_data16(*(fb_data*)data); 125 lcd_write_single_data16(*(fb_data*)data);
126
127 /* While push fifo is not empty */
128 while ((DBOP_STAT & (1<<10)) == 0);
129} 129}
130 130
131static void lcd_write_reg(int reg, int value) 131static void lcd_write_reg(int reg, int value)