rendered paste bodyIndex: firmware/target/arm/iriver/h10/lcd-h10_20gb.c
===================================================================
--- firmware/target/arm/iriver/h10/lcd-h10_20gb.c (revision 15086)
+++ firmware/target/arm/iriver/h10/lcd-h10_20gb.c (working copy)
@@ -180,6 +180,9 @@
y_offset = 0;
disp_control_rev = 0x0004;
lcd_contrast = DEFAULT_CONTRAST_SETTING << 8;
+ outl(0x00000060,LCD2_BASE);
+// outl(0x00001f10, LCD2_BASE2);
+
}
static void lcd_power_on(void)
@@ -575,7 +578,7 @@
{
int x1, y1;
- unsigned short *addr = (unsigned short *)lcd_framebuffer;
+ unsigned long *addr;
if (!display_on)
return;
@@ -612,19 +615,41 @@
/* start drawing */
lcd_send_cmd(R_WRITE_DATA_2_GRAM);
- addr = (unsigned short*)&lcd_framebuffer[y0][x0];
+ addr = (unsigned long*)&lcd_framebuffer[y0][x0];
- int c, r;
+ while (height > 0) {
+ int c, r;
+ int h, pixels_to_write;
- /* for each row */
- for (r = 0; r < height; r++) {
- /* for each column */
- for (c = 0; c < width; c++) {
- /* output 1 pixel */
- lcd_send_data_swapped(*addr++);
+ pixels_to_write = (width * height) * 2;
+ h = height;
+
+ /* calculate how much we can do in one go */
+ if (pixels_to_write > 0x10000) {
+ h = (0x10000/2) / width;
+ pixels_to_write = (width * h) * 2;
}
- addr += LCD_WIDTH - width;
+ LCD2_BLOCK_CTRL = 0x10000080;
+ LCD2_BLOCK_CONFIG = 0xc0010000 | (pixels_to_write - 1);
+ LCD2_BLOCK_CTRL = 0x34000000;
+
+ /* for each row */
+ for (r = 0; r < h; r++) {
+ /* for each column */
+ for (c = 0; c < width; c += 2) {
+ while (!(LCD2_BLOCK_CTRL & LCD2_BLOCK_TXOK));
+
+ /* output 2 pixels */
+ LCD2_BLOCK_DATA = *addr++;
+ }
+ addr += (LCD_WIDTH - width)/2;
+ }
+
+ while (!(LCD2_BLOCK_CTRL & LCD2_BLOCK_READY));
+ LCD2_BLOCK_CONFIG = 0;
+
+ height -= h;
}
}
Index: firmware/target/arm/system-pp502x.c
===================================================================
--- firmware/target/arm/system-pp502x.c (revision 15086)
+++ firmware/target/arm/system-pp502x.c (working copy)
@@ -186,10 +186,18 @@
DEV_TIMING1 = 0x00000303;
PLL_CONTROL &= ~0x80000000; /* disable PLL */
cpu_frequency = CPUFREQ_DEFAULT;
+
break;
}
CLOCK_SOURCE = (CLOCK_SOURCE & ~0xf0000000) | 0x20000000; /* select source #2 */
+#ifdef IRIVER_H10
+if (frequency == CPUFREQ_MAX)
+ outl(0x00000060,LCD2_BASE);
+else
+ outl(0x00000000,LCD2_BASE);
+#endif
+
#if defined(HAVE_ADJUSTABLE_CPU_FREQ) && (NUM_CORES > 1)
boostctrl_mtx.locked = 0;
#endif