diff options
author | William Wilgus <wilgus.william@gmail.com> | 2022-03-21 18:54:52 -0400 |
---|---|---|
committer | William Wilgus <wilgus.william@gmail.com> | 2022-03-21 23:53:48 -0400 |
commit | cfeeb7889d5346e2abaf9b198375df62c58b098f (patch) | |
tree | f9956033372abe7d8bffa4e04bef0662dfb0da02 /firmware/target/arm/olympus/mrobe-100 | |
parent | 60e5786b481a26ca7c0c810d812bf5664a58cb44 (diff) | |
download | rockbox-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.c | 6 |
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 | } |