summaryrefslogtreecommitdiff
path: root/firmware/target/arm
diff options
context:
space:
mode:
authorJonathan Gordon <rockbox@jdgordon.info>2012-02-22 21:18:05 +1100
committerJonathan Gordon <rockbox@jdgordon.info>2012-02-28 11:44:59 +1100
commitb37e6bc8c119289aca8740dd5e3b60d72f9d6b40 (patch)
tree7ee9d491811c950943f0fc068d2e2b460ff05c6d /firmware/target/arm
parent15c69b8bafc3e89e1a825b5bbefef4a97f0001b1 (diff)
downloadrockbox-b37e6bc8c119289aca8740dd5e3b60d72f9d6b40.tar.gz
rockbox-b37e6bc8c119289aca8740dd5e3b60d72f9d6b40.zip
lcd drivers: Convert lcd_[remote_]framebuffer to a pointer
Change all lcd drivers to using a pointer to the static framebuffer instead of directly accessing the static array. This will let us later do fun things like dynamic framebuffer sizes (RaaA) or ability to use different buffers for different layers (dynamic skin backdrops!) Change-Id: I0a4d58a9d7b55e6c932131b929e5d4c9f9414b06
Diffstat (limited to 'firmware/target/arm')
-rw-r--r--firmware/target/arm/as3525/lcd-fuze.c2
-rw-r--r--firmware/target/arm/as3525/lcd-ssd1303.c4
-rw-r--r--firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c2
-rw-r--r--firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c2
-rw-r--r--firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c8
-rw-r--r--firmware/target/arm/ipod/lcd-color_nano.c2
-rw-r--r--firmware/target/arm/ipod/lcd-gray.c4
-rw-r--r--firmware/target/arm/ipod/video/lcd-video.c2
-rw-r--r--firmware/target/arm/iriver/h10/lcd-h10_20gb.c2
-rw-r--r--firmware/target/arm/iriver/h10/lcd-h10_5gb.c2
-rw-r--r--firmware/target/arm/lcd-c200_c200v2.c2
-rw-r--r--firmware/target/arm/lcd-ssd1815.c4
-rw-r--r--firmware/target/arm/olympus/mrobe-100/lcd-mr100.c4
-rw-r--r--firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c2
-rw-r--r--firmware/target/arm/pbell/vibe500/lcd-vibe500.c2
-rw-r--r--firmware/target/arm/philips/hdd1630/lcd-hdd1630.c2
-rw-r--r--firmware/target/arm/philips/hdd6330/lcd-hdd6330.c2
-rw-r--r--firmware/target/arm/philips/sa9200/lcd-sa9200.c6
-rw-r--r--firmware/target/arm/pnx0101/iriver-ifp7xx/lcd-ifp7xx.c4
-rw-r--r--firmware/target/arm/rk27xx/lcd-hifiman.c2
-rw-r--r--firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c2
-rw-r--r--firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c2
-rw-r--r--firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c2
-rw-r--r--firmware/target/arm/s5l8700/meizu-m6sp/lcd-m6sp.c4
-rw-r--r--firmware/target/arm/s5l8700/yps3/lcd-yps3.c4
-rw-r--r--firmware/target/arm/s5l8702/ipod6g/lcd-ipod6g.c2
-rw-r--r--firmware/target/arm/samsung/yh820/lcd-yh820.c2
-rw-r--r--firmware/target/arm/samsung/yh920/lcd-yh920.c2
-rw-r--r--firmware/target/arm/samsung/yh925/lcd-yh925.c2
-rw-r--r--firmware/target/arm/sandisk/sansa-view/lcd-view.c2
-rw-r--r--firmware/target/arm/tcc77x/c100/lcd-S6B33B2.c2
-rw-r--r--firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c2
-rw-r--r--firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c6
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c8
-rw-r--r--firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c2
-rw-r--r--firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c2
36 files changed, 53 insertions, 53 deletions
diff --git a/firmware/target/arm/as3525/lcd-fuze.c b/firmware/target/arm/as3525/lcd-fuze.c
index 2acc7b3bf9..b2033738b6 100644
--- a/firmware/target/arm/as3525/lcd-fuze.c
+++ b/firmware/target/arm/as3525/lcd-fuze.c
@@ -332,7 +332,7 @@ void lcd_update_rect(int x, int y, int width, int height)
332 332
333 lcd_write_cmd(R_WRITE_DATA_2_GRAM); 333 lcd_write_cmd(R_WRITE_DATA_2_GRAM);
334 334
335 ptr = &lcd_framebuffer[y][x]; 335 ptr = FBADDR(x,y);
336 336
337 do 337 do
338 { 338 {
diff --git a/firmware/target/arm/as3525/lcd-ssd1303.c b/firmware/target/arm/as3525/lcd-ssd1303.c
index 213f12a424..9fcc85d243 100644
--- a/firmware/target/arm/as3525/lcd-ssd1303.c
+++ b/firmware/target/arm/as3525/lcd-ssd1303.c
@@ -273,7 +273,7 @@ void lcd_update(void)
273 lcd_write_command (LCD_CNTL_HIGHCOL | ((offset >> 4) & 0xf)); 273 lcd_write_command (LCD_CNTL_HIGHCOL | ((offset >> 4) & 0xf));
274 lcd_write_command (LCD_CNTL_LOWCOL | (offset & 0xf)); 274 lcd_write_command (LCD_CNTL_LOWCOL | (offset & 0xf));
275 275
276 lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); 276 lcd_write_data (FBADDR(0, y), LCD_WIDTH);
277 } 277 }
278} 278}
279 279
@@ -304,6 +304,6 @@ void lcd_update_rect(int x, int y, int width, int height)
304 lcd_write_command (LCD_CNTL_HIGHCOL | (((x+offset) >> 4) & 0xf)); 304 lcd_write_command (LCD_CNTL_HIGHCOL | (((x+offset) >> 4) & 0xf));
305 lcd_write_command (LCD_CNTL_LOWCOL | ((x+offset) & 0xf)); 305 lcd_write_command (LCD_CNTL_LOWCOL | ((x+offset) & 0xf));
306 306
307 lcd_write_data (&lcd_framebuffer[y][x], width); 307 lcd_write_data (FBADDR(x,y), width);
308 } 308 }
309} 309}
diff --git a/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c b/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c
index 3952171e7e..7673b529cc 100644
--- a/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c
+++ b/firmware/target/arm/as3525/sansa-clipzip/lcd-clipzip.c
@@ -426,7 +426,7 @@ void lcd_update_rect(int x, int y, int width, int height)
426 426
427 /* write to GRAM */ 427 /* write to GRAM */
428 for (row = y; row < y_end; row++) { 428 for (row = y; row < y_end; row++) {
429 lcd_write_data(&lcd_framebuffer[row][x], width); 429 lcd_write_data(FBADDR(x,row), width);
430 } 430 }
431} 431}
432 432
diff --git a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
index f875b40c05..2c80f89ff7 100644
--- a/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
+++ b/firmware/target/arm/as3525/sansa-e200v2/lcd-e200v2.c
@@ -488,7 +488,7 @@ void lcd_update_rect(int x, int y, int width, int height)
488 lcd_window(x, y, x+width-1, y+height-1); 488 lcd_window(x, y, x+width-1, y+height-1);
489 lcd_write_cmd(R_WRITE_DATA_2_GRAM); 489 lcd_write_cmd(R_WRITE_DATA_2_GRAM);
490 490
491 ptr = &lcd_framebuffer[y][x]; 491 ptr = FBADDR(x,y);
492 492
493 do 493 do
494 { 494 {
diff --git a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c
index c2e80ad1fc..b25fff8c3b 100644
--- a/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c
+++ b/firmware/target/arm/imx233/sansa-fuzeplus/lcd-fuzeplus.c
@@ -533,12 +533,12 @@ void lcd_update_rect(int x, int y, int w, int h)
533 */ 533 */
534 if(w == LCD_WIDTH) 534 if(w == LCD_WIDTH)
535 { 535 {
536 memcpy((void *)FRAME, &lcd_framebuffer[y][x], w * h * sizeof(fb_data)); 536 memcpy((void *)FRAME, FBADDR(x,y), w * h * sizeof(fb_data));
537 } 537 }
538 else 538 else
539 { 539 {
540 for(int i = 0; i < h; i++) 540 for(int i = 0; i < h; i++)
541 memcpy((fb_data *)FRAME + i * w, &lcd_framebuffer[y + i][x], w * sizeof(fb_data)); 541 memcpy((fb_data *)FRAME + i * w, FBADDR(x,y + i), w * sizeof(fb_data));
542 } 542 }
543 /* WARNING The LCDIF has a limitation on the vertical count ! In 16-bit packed mode 543 /* WARNING The LCDIF has a limitation on the vertical count ! In 16-bit packed mode
544 * (which we used, ie 16-bit per pixel, 2 pixels per 32-bit words), the v_count 544 * (which we used, ie 16-bit per pixel, 2 pixels per 32-bit words), the v_count
@@ -599,10 +599,10 @@ void lcd_blit_yuv(unsigned char * const src[3],
599 linecounter = height >> 1; 599 linecounter = height >> 1;
600 600
601 #if LCD_WIDTH >= LCD_HEIGHT 601 #if LCD_WIDTH >= LCD_HEIGHT
602 dst = &lcd_framebuffer[y][x]; 602 dst = FBADDR(x,y);
603 row_end = dst + width; 603 row_end = dst + width;
604 #else 604 #else
605 dst = &lcd_framebuffer[x][LCD_WIDTH - y - 1]; 605 dst = FBADDR(LCD_WIDTH - y - 1,x);
606 row_end = dst + LCD_WIDTH * width; 606 row_end = dst + LCD_WIDTH * width;
607 #endif 607 #endif
608 608
diff --git a/firmware/target/arm/ipod/lcd-color_nano.c b/firmware/target/arm/ipod/lcd-color_nano.c
index 589e8654ae..c7676fa721 100644
--- a/firmware/target/arm/ipod/lcd-color_nano.c
+++ b/firmware/target/arm/ipod/lcd-color_nano.c
@@ -280,7 +280,7 @@ void lcd_update_rect(int x, int y, int width, int height)
280 280
281 lcd_setup_drawing_region(x, y, width, height); 281 lcd_setup_drawing_region(x, y, width, height);
282 282
283 addr = (unsigned long*)&lcd_framebuffer[y][x]; 283 addr = (unsigned long*)FBADDR(x, y);
284 284
285 while (height > 0) { 285 while (height > 0) {
286 int r, h, pixels_to_write; 286 int r, h, pixels_to_write;
diff --git a/firmware/target/arm/ipod/lcd-gray.c b/firmware/target/arm/ipod/lcd-gray.c
index 11d4cba2f5..d8695cdb10 100644
--- a/firmware/target/arm/ipod/lcd-gray.c
+++ b/firmware/target/arm/ipod/lcd-gray.c
@@ -340,10 +340,10 @@ void lcd_update_rect(int x, int y, int width, int height)
340 340
341#if defined(IPOD_MINI) || defined(IPOD_MINI2G) 341#if defined(IPOD_MINI) || defined(IPOD_MINI2G)
342 if (pix_offset == -2) 342 if (pix_offset == -2)
343 lcd_write_data_shifted(&lcd_framebuffer[y][2*x], width); 343 lcd_write_data_shifted(FBADDR(2*x, y), width);
344 else 344 else
345#endif 345#endif
346 lcd_write_data(&lcd_framebuffer[y][2*x], width); 346 lcd_write_data(FBADDR(2*x, y), width);
347 } 347 }
348} 348}
349 349
diff --git a/firmware/target/arm/ipod/video/lcd-video.c b/firmware/target/arm/ipod/video/lcd-video.c
index c499e9f745..27d889aafa 100644
--- a/firmware/target/arm/ipod/video/lcd-video.c
+++ b/firmware/target/arm/ipod/video/lcd-video.c
@@ -410,7 +410,7 @@ void lcd_update_rect(int x, int y, int width, int height)
410 /* Prevent the tick from triggering BCM updates while we're writing. */ 410 /* Prevent the tick from triggering BCM updates while we're writing. */
411 lcd_block_tick(); 411 lcd_block_tick();
412 412
413 addr = &lcd_framebuffer[y][x]; 413 addr = FBADDR(x, y);
414 bcmaddr = BCMA_CMDPARAM + (LCD_WIDTH*2) * y + (x << 1); 414 bcmaddr = BCMA_CMDPARAM + (LCD_WIDTH*2) * y + (x << 1);
415 415
416 if (width == LCD_WIDTH) 416 if (width == LCD_WIDTH)
diff --git a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c
index df748a74fb..c7e339295d 100644
--- a/firmware/target/arm/iriver/h10/lcd-h10_20gb.c
+++ b/firmware/target/arm/iriver/h10/lcd-h10_20gb.c
@@ -527,7 +527,7 @@ void lcd_update_rect(int x0, int y0, int width, int height)
527 /* start drawing */ 527 /* start drawing */
528 lcd_send_cmd(R_WRITE_DATA_2_GRAM); 528 lcd_send_cmd(R_WRITE_DATA_2_GRAM);
529 529
530 addr = (unsigned short*)&lcd_framebuffer[y0][x0]; 530 addr = (unsigned short*)FBADDR(x0,y0);
531 531
532 int c, r; 532 int c, r;
533 533
diff --git a/firmware/target/arm/iriver/h10/lcd-h10_5gb.c b/firmware/target/arm/iriver/h10/lcd-h10_5gb.c
index ce57af14d5..5e1ad9ce23 100644
--- a/firmware/target/arm/iriver/h10/lcd-h10_5gb.c
+++ b/firmware/target/arm/iriver/h10/lcd-h10_5gb.c
@@ -327,7 +327,7 @@ void lcd_update_rect(int x0, int y0, int width, int height)
327 /* start drawing */ 327 /* start drawing */
328 lcd_send_cmd(R_WRITE_DATA_2_GRAM); 328 lcd_send_cmd(R_WRITE_DATA_2_GRAM);
329 329
330 addr = (unsigned long*)&lcd_framebuffer[y0][x0]; 330 addr = (unsigned long*)FBADDR(x0,y0);
331 331
332 while (height > 0) { 332 while (height > 0) {
333 int c, r; 333 int c, r;
diff --git a/firmware/target/arm/lcd-c200_c200v2.c b/firmware/target/arm/lcd-c200_c200v2.c
index f82f8a809e..38877ccac9 100644
--- a/firmware/target/arm/lcd-c200_c200v2.c
+++ b/firmware/target/arm/lcd-c200_c200v2.c
@@ -395,7 +395,7 @@ void lcd_update_rect(int x, int y, int width, int height)
395 if ((width <= 0) || (height <= 0)) 395 if ((width <= 0) || (height <= 0))
396 return; /* Nothing left to do. */ 396 return; /* Nothing left to do. */
397 397
398 addr = &lcd_framebuffer[y][x]; 398 addr = FBADDR(x,y);
399 399
400 if (width <= 1) { 400 if (width <= 1) {
401 /* The X end address must be larger than the X start address, so we 401 /* The X end address must be larger than the X start address, so we
diff --git a/firmware/target/arm/lcd-ssd1815.c b/firmware/target/arm/lcd-ssd1815.c
index 35d8cf2275..891d4ef64d 100644
--- a/firmware/target/arm/lcd-ssd1815.c
+++ b/firmware/target/arm/lcd-ssd1815.c
@@ -303,7 +303,7 @@ void lcd_update(void)
303 lcd_write_command (LCD_CNTL_HIGHCOL | ((xoffset >> 4) & 0xf)); 303 lcd_write_command (LCD_CNTL_HIGHCOL | ((xoffset >> 4) & 0xf));
304 lcd_write_command (LCD_CNTL_LOWCOL | (xoffset & 0xf)); 304 lcd_write_command (LCD_CNTL_LOWCOL | (xoffset & 0xf));
305 305
306 lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); 306 lcd_write_data (FBADDR(0, y), LCD_WIDTH);
307 } 307 }
308} 308}
309 309
@@ -331,6 +331,6 @@ void lcd_update_rect(int x, int y, int width, int height)
331 lcd_write_command (LCD_CNTL_HIGHCOL | (((x+xoffset) >> 4) & 0xf)); 331 lcd_write_command (LCD_CNTL_HIGHCOL | (((x+xoffset) >> 4) & 0xf));
332 lcd_write_command (LCD_CNTL_LOWCOL | ((x+xoffset) & 0xf)); 332 lcd_write_command (LCD_CNTL_LOWCOL | ((x+xoffset) & 0xf));
333 333
334 lcd_write_data (&lcd_framebuffer[y][x], width); 334 lcd_write_data (FBADDR(x,y), width);
335 } 335 }
336} 336}
diff --git a/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c b/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c
index a0ea2a6aab..d336ad7419 100644
--- a/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c
+++ b/firmware/target/arm/olympus/mrobe-100/lcd-mr100.c
@@ -239,7 +239,7 @@ void lcd_update(void)
239 lcd_write_command(cmd1); 239 lcd_write_command(cmd1);
240 lcd_write_command(cmd2); 240 lcd_write_command(cmd2);
241 241
242 lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); 242 lcd_write_data (FBADDR(0, y), LCD_WIDTH);
243 } 243 }
244} 244}
245 245
@@ -271,6 +271,6 @@ void lcd_update_rect(int x, int y, int width, int height)
271 lcd_write_command(cmd1); 271 lcd_write_command(cmd1);
272 lcd_write_command(cmd2); 272 lcd_write_command(cmd2);
273 273
274 lcd_write_data (&lcd_framebuffer[y][x], width); 274 lcd_write_data (FBADDR(x,y), width);
275 } 275 }
276} 276}
diff --git a/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c b/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c
index aa3d228952..edcdde7253 100644
--- a/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c
+++ b/firmware/target/arm/olympus/mrobe-100/lcd-remote-mr100.c
@@ -255,7 +255,7 @@ static void remote_update_lcd(void)
255 data[6] = (y + 1) << 3; /* y2 */ 255 data[6] = (y + 1) << 3; /* y2 */
256 256
257 for (x = 0; x < RC_WIDTH; x++) 257 for (x = 0; x < RC_WIDTH; x++)
258 data[x + 7] = lcd_remote_framebuffer[y][x]; 258 data[x + 7] = FBREMOTEADDR(x,y);
259 259
260 remote_tx(data, RC_WIDTH + 7); 260 remote_tx(data, RC_WIDTH + 7);
261 261
diff --git a/firmware/target/arm/pbell/vibe500/lcd-vibe500.c b/firmware/target/arm/pbell/vibe500/lcd-vibe500.c
index 4cb073db7b..4dd2ec1206 100644
--- a/firmware/target/arm/pbell/vibe500/lcd-vibe500.c
+++ b/firmware/target/arm/pbell/vibe500/lcd-vibe500.c
@@ -483,7 +483,7 @@ void lcd_update_rect(int x0, int y0, int width, int height)
483 /* start drawing */ 483 /* start drawing */
484 lcd_send_cmd(R_WRITE_DATA_2_GRAM); 484 lcd_send_cmd(R_WRITE_DATA_2_GRAM);
485 485
486 addr = &lcd_framebuffer[y0][x0]; 486 addr = FBADDR(x0, y0)
487 487
488 int c, r; 488 int c, r;
489 for (r = 0; r < height; r++) 489 for (r = 0; r < height; r++)
diff --git a/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c b/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c
index 500120a432..28bef09463 100644
--- a/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c
+++ b/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c
@@ -373,7 +373,7 @@ void lcd_update_rect(int x, int y, int width, int height)
373 if ((width <= 0) || (height <= 0)) 373 if ((width <= 0) || (height <= 0))
374 return; /* Nothing left to do. */ 374 return; /* Nothing left to do. */
375 375
376 addr = &lcd_framebuffer[y][x]; 376 addr = FBADDR(x,y);
377 377
378 lcd_send_cmd(CASET); 378 lcd_send_cmd(CASET);
379 lcd_send_data(x); 379 lcd_send_data(x);
diff --git a/firmware/target/arm/philips/hdd6330/lcd-hdd6330.c b/firmware/target/arm/philips/hdd6330/lcd-hdd6330.c
index 328c270b5e..cdd3064bba 100644
--- a/firmware/target/arm/philips/hdd6330/lcd-hdd6330.c
+++ b/firmware/target/arm/philips/hdd6330/lcd-hdd6330.c
@@ -285,7 +285,7 @@ void lcd_update_rect(int x, int y, int width, int height)
285 285
286 lcd_send_reg(LCD_REG_WRITE_DATA_2_GRAM); 286 lcd_send_reg(LCD_REG_WRITE_DATA_2_GRAM);
287 287
288 addr = (unsigned long*)&lcd_framebuffer[y][x]; 288 addr = (unsigned long*)FBADDR(x,y);
289 289
290 while (height > 0) 290 while (height > 0)
291 { 291 {
diff --git a/firmware/target/arm/philips/sa9200/lcd-sa9200.c b/firmware/target/arm/philips/sa9200/lcd-sa9200.c
index 3db308ed09..e30a298045 100644
--- a/firmware/target/arm/philips/sa9200/lcd-sa9200.c
+++ b/firmware/target/arm/philips/sa9200/lcd-sa9200.c
@@ -495,8 +495,8 @@ void lcd_update(void)
495 if (!display_on) 495 if (!display_on)
496 return; 496 return;
497 497
498 addr = &lcd_framebuffer[0][0]; 498 addr = FBADDR(0,0);
499 end = &lcd_framebuffer[LCD_HEIGHT - 1][LCD_WIDTH]; 499 end = FBADDR(LCD_WIDTH,LCD_HEIGHT - 1);
500 500
501 lcd_write_reg(R_HORIZ_RAM_ADDR_POS, (LCD_WIDTH - 1) << 8); 501 lcd_write_reg(R_HORIZ_RAM_ADDR_POS, (LCD_WIDTH - 1) << 8);
502 lcd_write_reg(R_VERT_RAM_ADDR_POS, (LCD_HEIGHT - 1) << 8); 502 lcd_write_reg(R_VERT_RAM_ADDR_POS, (LCD_HEIGHT - 1) << 8);
@@ -533,7 +533,7 @@ void lcd_update_rect(int x, int y, int width, int height)
533 if (height <= 0) 533 if (height <= 0)
534 return; /* Nothing left to do. */ 534 return; /* Nothing left to do. */
535 535
536 addr = &lcd_framebuffer[y][x]; 536 addr = FBADDR(x,y);
537 537
538 lcd_write_reg(R_HORIZ_RAM_ADDR_POS, ((x + width - 1) << 8) | x); 538 lcd_write_reg(R_HORIZ_RAM_ADDR_POS, ((x + width - 1) << 8) | x);
539 lcd_write_reg(R_VERT_RAM_ADDR_POS, ((y + height - 1) << 8) | y); 539 lcd_write_reg(R_VERT_RAM_ADDR_POS, ((y + height - 1) << 8) | y);
diff --git a/firmware/target/arm/pnx0101/iriver-ifp7xx/lcd-ifp7xx.c b/firmware/target/arm/pnx0101/iriver-ifp7xx/lcd-ifp7xx.c
index c71e8fd6fb..1ad604d50c 100644
--- a/firmware/target/arm/pnx0101/iriver-ifp7xx/lcd-ifp7xx.c
+++ b/firmware/target/arm/pnx0101/iriver-ifp7xx/lcd-ifp7xx.c
@@ -191,7 +191,7 @@ void lcd_update(void)
191 lcd_write_command (LCD_CNTL_HIGHCOL); 191 lcd_write_command (LCD_CNTL_HIGHCOL);
192 lcd_write_command (LCD_CNTL_LOWCOL | 4); 192 lcd_write_command (LCD_CNTL_LOWCOL | 4);
193 193
194 lcd_write_data (lcd_framebuffer[y], LCD_WIDTH); 194 lcd_write_data (FBADDR(0, y), LCD_WIDTH);
195 } 195 }
196} 196}
197 197
@@ -219,6 +219,6 @@ void lcd_update_rect(int x, int y, int width, int height)
219 lcd_write_command (LCD_CNTL_HIGHCOL | (((x+4) >> 4) & 0xf)); 219 lcd_write_command (LCD_CNTL_HIGHCOL | (((x+4) >> 4) & 0xf));
220 lcd_write_command (LCD_CNTL_LOWCOL | ((x+4) & 0xf)); 220 lcd_write_command (LCD_CNTL_LOWCOL | ((x+4) & 0xf));
221 221
222 lcd_write_data (&lcd_framebuffer[y][x], width); 222 lcd_write_data (FBADDR(x,y), width);
223 } 223 }
224} 224}
diff --git a/firmware/target/arm/rk27xx/lcd-hifiman.c b/firmware/target/arm/rk27xx/lcd-hifiman.c
index 91e55894e5..21ca321d1f 100644
--- a/firmware/target/arm/rk27xx/lcd-hifiman.c
+++ b/firmware/target/arm/rk27xx/lcd-hifiman.c
@@ -162,7 +162,7 @@ void lcd_update_rect(int x, int y, int width, int height)
162 162
163 for (px=x; px<pxmax; px++) 163 for (px=x; px<pxmax; px++)
164 for (py=y; py<pymax; py++) 164 for (py=y; py<pymax; py++)
165 lcd_data(lcd_framebuffer[py][px]); 165 lcd_data(FBADDR(px, py));
166} 166}
167 167
168/* Blit a YUV bitmap directly to the LCD */ 168/* Blit a YUV bitmap directly to the LCD */
diff --git a/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c b/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c
index b184630ebe..6b989a6dd7 100644
--- a/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c
+++ b/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c
@@ -191,7 +191,7 @@ void lcd_update_rect(int x, int y, int width, int height)
191 for (py=y; py<pymax; py++) 191 for (py=y; py<pymax; py++)
192 { 192 {
193 for (px=x; px<pxmax; px++) 193 for (px=x; px<pxmax; px++)
194 LCD_DATA = lcd_pixel_transform(lcd_framebuffer[py][px]); 194 LCD_DATA = lcd_pixel_transform(FBADDR(px,py));
195 } 195 }
196} 196}
197 197
diff --git a/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c b/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c
index 6434469881..13e5c5c1d4 100644
--- a/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c
+++ b/firmware/target/arm/s5l8700/ipodnano2g/lcd-nano2g.c
@@ -394,7 +394,7 @@ void lcd_update_rect(int x, int y, int width, int height)
394 lcd_setup_drawing_region(x, y, width, height); 394 lcd_setup_drawing_region(x, y, width, height);
395 395
396 /* Copy display bitmap to hardware */ 396 /* Copy display bitmap to hardware */
397 p = &lcd_framebuffer[y][x]; 397 p = FBADDR(x,y);
398 if (LCD_WIDTH == width) { 398 if (LCD_WIDTH == width) {
399 /* Write all lines at once */ 399 /* Write all lines at once */
400 lcd_write_line(p, height*LCD_WIDTH, LCD_BASE); 400 lcd_write_line(p, height*LCD_WIDTH, LCD_BASE);
diff --git a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c
index 3420e92d62..5ed6c752b7 100644
--- a/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c
+++ b/firmware/target/arm/s5l8700/meizu-m3/lcd-m3.c
@@ -295,7 +295,7 @@ void lcd_update(void)
295 LCD_WCMD = 0; 295 LCD_WCMD = 0;
296 LCD_WCMD = 0x22; 296 LCD_WCMD = 0x22;
297 } 297 }
298 for(p=&lcd_framebuffer[0][0], i=0;i<LCD_WIDTH*LCD_FBHEIGHT;++i, ++p) { 298 for(p=FBADDR(0,0), i=0;i<LCD_WIDTH*LCD_FBHEIGHT;++i, ++p) {
299 while (LCD_STATUS & STAT_FULL); 299 while (LCD_STATUS & STAT_FULL);
300 LCD_WDATA = RGB_UNPACK_RED(*p); 300 LCD_WDATA = RGB_UNPACK_RED(*p);
301 while (LCD_STATUS & STAT_FULL); 301 while (LCD_STATUS & STAT_FULL);
diff --git a/firmware/target/arm/s5l8700/meizu-m6sp/lcd-m6sp.c b/firmware/target/arm/s5l8700/meizu-m6sp/lcd-m6sp.c
index 6ab5c08a50..5e722d5a87 100644
--- a/firmware/target/arm/s5l8700/meizu-m6sp/lcd-m6sp.c
+++ b/firmware/target/arm/s5l8700/meizu-m6sp/lcd-m6sp.c
@@ -438,8 +438,8 @@ void lcd_init_device(void)
438 lcd_controller_init(); 438 lcd_controller_init();
439 439
440 /* set framebuffer addresses */ 440 /* set framebuffer addresses */
441 fb = (uint32_t) &lcd_framebuffer[0][0]; 441 fb = (uint32_t) FBADDR(0,0);
442 fb_end = (uint32_t) &lcd_framebuffer[LCD_HEIGHT][0]; 442 fb_end = (uint32_t) FBADDR(0,LCD_HEIGHT);
443 window = 2 * LCD_WIDTH; 443 window = 2 * LCD_WIDTH;
444 444
445 LCDB1SADDR1 = fb; 445 LCDB1SADDR1 = fb;
diff --git a/firmware/target/arm/s5l8700/yps3/lcd-yps3.c b/firmware/target/arm/s5l8700/yps3/lcd-yps3.c
index 3b57a50ec0..a9830bca57 100644
--- a/firmware/target/arm/s5l8700/yps3/lcd-yps3.c
+++ b/firmware/target/arm/s5l8700/yps3/lcd-yps3.c
@@ -306,7 +306,7 @@ void lcd_update_rect(int x, int y, int width, int height)
306 lcd_set_position1(x, y); 306 lcd_set_position1(x, y);
307 307
308 for (h = 0; h < height; h++) { 308 for (h = 0; h < height; h++) {
309 p = &lcd_framebuffer[y][0]; 309 p = FBADDR(0,y);
310 for (w = 0; w < LCD_WIDTH; w++) { 310 for (w = 0; w < LCD_WIDTH; w++) {
311 while (LCD_STATUS & 0x10); 311 while (LCD_STATUS & 0x10);
312 LCD_WDATA = *p++; 312 LCD_WDATA = *p++;
@@ -319,7 +319,7 @@ void lcd_update_rect(int x, int y, int width, int height)
319 lcd_set_position2(x, y); 319 lcd_set_position2(x, y);
320 320
321 for (h = 0; h < height; h++) { 321 for (h = 0; h < height; h++) {
322 p = &lcd_framebuffer[y][x]; 322 p = FBADDR(x,y);
323 for (w = 0; w < width; w++) { 323 for (w = 0; w < width; w++) {
324 while (LCD_STATUS & 0x10); 324 while (LCD_STATUS & 0x10);
325 LCD_WDATA = *p++; 325 LCD_WDATA = *p++;
diff --git a/firmware/target/arm/s5l8702/ipod6g/lcd-ipod6g.c b/firmware/target/arm/s5l8702/ipod6g/lcd-ipod6g.c
index 84443551b9..f9dbab6180 100644
--- a/firmware/target/arm/s5l8702/ipod6g/lcd-ipod6g.c
+++ b/firmware/target/arm/s5l8702/ipod6g/lcd-ipod6g.c
@@ -428,7 +428,7 @@ void lcd_update_rect(int, int, int, int) ICODE_ATTR;
428void lcd_update_rect(int x, int y, int width, int height) 428void lcd_update_rect(int x, int y, int width, int height)
429{ 429{
430 int pixels = width * height; 430 int pixels = width * height;
431 fb_data* p = &lcd_framebuffer[y][x]; 431 fb_data* p = FBADDR(x,y);
432 uint16_t* out = lcd_dblbuf[0]; 432 uint16_t* out = lcd_dblbuf[0];
433 433
434#ifdef HAVE_LCD_SLEEP 434#ifdef HAVE_LCD_SLEEP
diff --git a/firmware/target/arm/samsung/yh820/lcd-yh820.c b/firmware/target/arm/samsung/yh820/lcd-yh820.c
index 4773e27185..10934621d7 100644
--- a/firmware/target/arm/samsung/yh820/lcd-yh820.c
+++ b/firmware/target/arm/samsung/yh820/lcd-yh820.c
@@ -347,7 +347,7 @@ void lcd_update_rect(int x, int y, int width, int height)
347 if ((width <= 0) || (height <= 0)) 347 if ((width <= 0) || (height <= 0))
348 return; /* Nothing left to do. */ 348 return; /* Nothing left to do. */
349 349
350 addr = &lcd_framebuffer[y][x]; 350 addr = FBADDR(x,y);
351 351
352 if (width <= 1) { 352 if (width <= 1) {
353 lcd_send_command(R_ENTRY_MODE); /* The X end address must be larger */ 353 lcd_send_command(R_ENTRY_MODE); /* The X end address must be larger */
diff --git a/firmware/target/arm/samsung/yh920/lcd-yh920.c b/firmware/target/arm/samsung/yh920/lcd-yh920.c
index d24396050a..5563c13f53 100644
--- a/firmware/target/arm/samsung/yh920/lcd-yh920.c
+++ b/firmware/target/arm/samsung/yh920/lcd-yh920.c
@@ -259,7 +259,7 @@ void lcd_update_rect(int x, int y, int width, int height)
259 lcd_write_reg(LCD_CNTL_PAGE, y); 259 lcd_write_reg(LCD_CNTL_PAGE, y);
260 lcd_write_reg(LCD_CNTL_COLUMN, x); 260 lcd_write_reg(LCD_CNTL_COLUMN, x);
261 261
262 addr = &lcd_framebuffer[y][x]; 262 addr = FBADDR(x,y);
263 263
264 lcd_send_cmd(LCD_CNTL_DATA_WRITE); 264 lcd_send_cmd(LCD_CNTL_DATA_WRITE);
265 lcd_write_data(addr, width); 265 lcd_write_data(addr, width);
diff --git a/firmware/target/arm/samsung/yh925/lcd-yh925.c b/firmware/target/arm/samsung/yh925/lcd-yh925.c
index ceed443654..93bfb3a5f2 100644
--- a/firmware/target/arm/samsung/yh925/lcd-yh925.c
+++ b/firmware/target/arm/samsung/yh925/lcd-yh925.c
@@ -639,7 +639,7 @@ void lcd_update_rect(int x0, int y0, int width, int height)
639 /* start drawing */ 639 /* start drawing */
640 lcd_send_cmd(R_WRITE_DATA_2_GRAM); 640 lcd_send_cmd(R_WRITE_DATA_2_GRAM);
641 641
642 addr = (unsigned short*)&lcd_framebuffer[y0][x0]; 642 addr = (unsigned short*)FBADDR(x0,y0);
643 643
644 int c, r; 644 int c, r;
645 645
diff --git a/firmware/target/arm/sandisk/sansa-view/lcd-view.c b/firmware/target/arm/sandisk/sansa-view/lcd-view.c
index 99c972704d..cc67e838f9 100644
--- a/firmware/target/arm/sandisk/sansa-view/lcd-view.c
+++ b/firmware/target/arm/sandisk/sansa-view/lcd-view.c
@@ -363,7 +363,7 @@ void lcd_update(void)
363{ 363{
364 const fb_data *addr; 364 const fb_data *addr;
365 365
366 addr = &lcd_framebuffer[LCD_HEIGHT][LCD_WIDTH]; 366 addr = FBADDR(LCD_WIDTH,LCD_HEIGHT);
367 367
368 lcd_write_reg(0x20, 0x0); 368 lcd_write_reg(0x20, 0x0);
369 lcd_write_reg(0x21, 0x0); 369 lcd_write_reg(0x21, 0x0);
diff --git a/firmware/target/arm/tcc77x/c100/lcd-S6B33B2.c b/firmware/target/arm/tcc77x/c100/lcd-S6B33B2.c
index 4abd17741b..c53aadaf30 100644
--- a/firmware/target/arm/tcc77x/c100/lcd-S6B33B2.c
+++ b/firmware/target/arm/tcc77x/c100/lcd-S6B33B2.c
@@ -252,7 +252,7 @@ void lcd_update_rect(int x, int y, int width, int height)
252 if ((width <= 0) || (height <= 0)) 252 if ((width <= 0) || (height <= 0))
253 return; /* Nothing left to do. */ 253 return; /* Nothing left to do. */
254 254
255 addr = &lcd_framebuffer[y][x]; 255 addr = FBADDR(x,y);
256 256
257 if (width <= 1) { 257 if (width <= 1) {
258 lcd_send_command(R_ENTRY_MODE); /* The X end address must be larger */ 258 lcd_send_command(R_ENTRY_MODE); /* The X end address must be larger */
diff --git a/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c b/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c
index 5d2a2b8194..8b9a9bda83 100644
--- a/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c
+++ b/firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c
@@ -211,7 +211,7 @@ void lcd_update_rect(int sx, int sy, int width, int height)
211 fb_data c; 211 fb_data c;
212 unsigned long color; 212 unsigned long color;
213 213
214 c = lcd_framebuffer[y][x]; 214 c = FBADDR(x,y);
215 color = 215 color =
216 ((c & 0x1f) << 1) | ((c & 0x7e0) << 1) | ((c & 0xf800) << 216 ((c & 0x1f) << 1) | ((c & 0x7e0) << 1) | ((c & 0xf800) <<
217 2); 217 2);
diff --git a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c
index 204a99f87c..5f623dc239 100644
--- a/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c
+++ b/firmware/target/arm/tms320dm320/creative-zvm/lcd-creativezvm.c
@@ -380,7 +380,7 @@ void lcd_update_rect(int x, int y, int width, int height)
380 380
381#if CONFIG_ORIENTATION == SCREEN_PORTRAIT 381#if CONFIG_ORIENTATION == SCREEN_PORTRAIT
382 dst = (fb_data *)FRAME + LCD_WIDTH*y + x; 382 dst = (fb_data *)FRAME + LCD_WIDTH*y + x;
383 src = &lcd_framebuffer[y][x]; 383 src = FBADDR(x,y);
384 384
385 /* Copy part of the Rockbox framebuffer to the second framebuffer */ 385 /* Copy part of the Rockbox framebuffer to the second framebuffer */
386 if (width < LCD_WIDTH) 386 if (width < LCD_WIDTH)
@@ -394,7 +394,7 @@ void lcd_update_rect(int x, int y, int width, int height)
394 lcd_copy_buffer_rect(dst, src, LCD_WIDTH*height, 1); 394 lcd_copy_buffer_rect(dst, src, LCD_WIDTH*height, 1);
395 } 395 }
396#else 396#else
397 src = &lcd_framebuffer[y][x]; 397 src = FBADDR(x,y);
398 398
399 register int xc, yc; 399 register int xc, yc;
400 register fb_data *start=FRAME + LCD_HEIGHT*(LCD_WIDTH-x-1) + y + 1; 400 register fb_data *start=FRAME + LCD_HEIGHT*(LCD_WIDTH-x-1) + y + 1;
@@ -419,7 +419,7 @@ void lcd_update(void)
419 if (!lcd_on || direct_fb_access) 419 if (!lcd_on || direct_fb_access)
420 return; 420 return;
421#if CONFIG_ORIENTATION == SCREEN_PORTRAIT 421#if CONFIG_ORIENTATION == SCREEN_PORTRAIT
422 lcd_copy_buffer_rect((fb_data *)FRAME, &lcd_framebuffer[0][0], 422 lcd_copy_buffer_rect((fb_data *)FRAME, FBADDR(0,0),
423 LCD_WIDTH*LCD_HEIGHT, 1); 423 LCD_WIDTH*LCD_HEIGHT, 1);
424#else 424#else
425 lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT); 425 lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT);
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
index 38631401f9..c3a96a3efd 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-mr500.c
@@ -500,12 +500,12 @@ void lcd_update_rect(int x, int y, int width, int height)
500 if (width < LCD_WIDTH) 500 if (width < LCD_WIDTH)
501 { 501 {
502 /* Not full width - do line-by-line */ 502 /* Not full width - do line-by-line */
503 lcd_copy_buffer_rect(dst, &lcd_framebuffer[y][x], width, height); 503 lcd_copy_buffer_rect(dst, FBADDR(x,y), width, height);
504 } 504 }
505 else 505 else
506 { 506 {
507 /* Full width - copy as one line */ 507 /* Full width - copy as one line */
508 lcd_copy_buffer_rect(dst, &lcd_framebuffer[y][x], LCD_WIDTH*height, 1); 508 lcd_copy_buffer_rect(dst, FBADDR(x,y), LCD_WIDTH*height, 1);
509 } 509 }
510#endif 510#endif
511 511
@@ -519,7 +519,7 @@ void lcd_update_rect(int x, int y, int width, int height)
519#else 519#else
520 fb_data *src; 520 fb_data *src;
521 fb_data *dst; 521 fb_data *dst;
522 src = &lcd_framebuffer[0][0] + (x*LCD_HEIGHT + y); 522 src = FBADDR(0,0) + (x*LCD_HEIGHT + y);
523 dst = FRAME + (LCD_HEIGHT*(LCD_WIDTH-1) - x * LCD_HEIGHT + y); 523 dst = FRAME + (LCD_HEIGHT*(LCD_WIDTH-1) - x * LCD_HEIGHT + y);
524 524
525 while(width > 0) { 525 while(width > 0) {
@@ -532,7 +532,7 @@ void lcd_update_rect(int x, int y, int width, int height)
532 532
533#else 533#else
534 register fb_data *dst, *src; 534 register fb_data *dst, *src;
535 src = &lcd_framebuffer[y][x]; 535 src = FBADDR(x,y);
536 536
537 dst=FRAME + (LCD_NATIVE_WIDTH*(LCD_NATIVE_HEIGHT-1)) 537 dst=FRAME + (LCD_NATIVE_WIDTH*(LCD_NATIVE_HEIGHT-1))
538 - LCD_NATIVE_WIDTH*x + y ; 538 - LCD_NATIVE_WIDTH*x + y ;
diff --git a/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c b/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c
index d8f55ee63d..5b8b2f9437 100644
--- a/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c
+++ b/firmware/target/arm/tms320dm320/mrobe-500/lcd-remote-mr500.c
@@ -246,7 +246,7 @@ static void remote_tick(void)
246 for(i=7; i<remote_payload_size; i++) 246 for(i=7; i<remote_payload_size; i++)
247 { 247 {
248 remote_payload[i]= 248 remote_payload[i]=
249 lcd_remote_framebuffer[remote_payload[4]>>3][i+remote_draw_x-7]; 249 FBREMOTEADDR(i+remote_draw_x-7, remote_payload[4]>>3);
250 } 250 }
251 } 251 }
252 252
diff --git a/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c b/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c
index 403ce182be..27eb0b407a 100644
--- a/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c
+++ b/firmware/target/arm/tms320dm320/sansa-connect/lcd-sansaconnect.c
@@ -167,7 +167,7 @@ static void dma_lcd_copy_buffer_rect(int x, int y, int width, int height)
167 167
168 /* Set source and destination addresses */ 168 /* Set source and destination addresses */
169 dst = (char*)(FRAME + LCD_WIDTH*y + x); 169 dst = (char*)(FRAME + LCD_WIDTH*y + x);
170 src = (char*)(&lcd_framebuffer[y][x]); 170 src = (char*)(FBADDR(x,y));
171 171
172 /* Flush cache to memory */ 172 /* Flush cache to memory */
173 commit_dcache(); 173 commit_dcache();