summaryrefslogtreecommitdiff
path: root/firmware/target/arm/olympus/mrobe-100
diff options
context:
space:
mode:
authorWilliam Wilgus <wilgus.william@gmail.com>2022-03-21 18:54:52 -0400
committerWilliam Wilgus <wilgus.william@gmail.com>2022-03-21 23:53:48 -0400
commitcfeeb7889d5346e2abaf9b198375df62c58b098f (patch)
treef9956033372abe7d8bffa4e04bef0662dfb0da02 /firmware/target/arm/olympus/mrobe-100
parent60e5786b481a26ca7c0c810d812bf5664a58cb44 (diff)
downloadrockbox-cfeeb7889d5346e2abaf9b198375df62c58b098f.tar.gz
rockbox-cfeeb7889d5346e2abaf9b198375df62c58b098f.zip
Lcd save function pointer to frame buffer get_address_fn before loops
Calling multiple levels of indirection in a loop slows things down Really these need to be rewritten to take a start and end address like most of the rest of the codebase But this is safer without having test hardware in hand Change-Id: Idae7b92ee779d020ed7fcc9334e2d5a9c710e64d
Diffstat (limited to 'firmware/target/arm/olympus/mrobe-100')
-rw-r--r--firmware/target/arm/olympus/mrobe-100/lcd-mr100.c6
1 files changed, 4 insertions, 2 deletions
diff --git a/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c b/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c
index d336ad7419..c10b4ca8f6 100644
--- a/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c
+++ b/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c
@@ -232,6 +232,7 @@ void lcd_update(void)
232 cmd1 = LCD_CNTL_HIGHCOL | (((xoffset) >> 4) & 0xf); 232 cmd1 = LCD_CNTL_HIGHCOL | (((xoffset) >> 4) & 0xf);
233 cmd2 = LCD_CNTL_LOWCOL | ((xoffset) & 0xf); 233 cmd2 = LCD_CNTL_LOWCOL | ((xoffset) & 0xf);
234 234
235 void* (*fbaddr)(int x, int y) = FB_CURRENTVP_BUFFER->get_address_fn;
235 /* Copy display bitmap to hardware */ 236 /* Copy display bitmap to hardware */
236 for (y = 0; y < LCD_FBHEIGHT; y++) 237 for (y = 0; y < LCD_FBHEIGHT; y++)
237 { 238 {
@@ -239,7 +240,7 @@ void lcd_update(void)
239 lcd_write_command(cmd1); 240 lcd_write_command(cmd1);
240 lcd_write_command(cmd2); 241 lcd_write_command(cmd2);
241 242
242 lcd_write_data (FBADDR(0, y), LCD_WIDTH); 243 lcd_write_data (fbaddr(0,y), LCD_WIDTH);
243 } 244 }
244} 245}
245 246
@@ -264,6 +265,7 @@ void lcd_update_rect(int x, int y, int width, int height)
264 cmd1 = LCD_CNTL_HIGHCOL | (((x + xoffset) >> 4) & 0xf); 265 cmd1 = LCD_CNTL_HIGHCOL | (((x + xoffset) >> 4) & 0xf);
265 cmd2 = LCD_CNTL_LOWCOL | ((x + xoffset) & 0xf); 266 cmd2 = LCD_CNTL_LOWCOL | ((x + xoffset) & 0xf);
266 267
268 void* (*fbaddr)(int x, int y) = FB_CURRENTVP_BUFFER->get_address_fn;
267 /* Copy specified rectange bitmap to hardware */ 269 /* Copy specified rectange bitmap to hardware */
268 for (; y <= ymax; y++) 270 for (; y <= ymax; y++)
269 { 271 {
@@ -271,6 +273,6 @@ void lcd_update_rect(int x, int y, int width, int height)
271 lcd_write_command(cmd1); 273 lcd_write_command(cmd1);
272 lcd_write_command(cmd2); 274 lcd_write_command(cmd2);
273 275
274 lcd_write_data (FBADDR(x,y), width); 276 lcd_write_data (fbaddr(x,y), width);
275 } 277 }
276} 278}