All pastes #734124 Raw Edit

Stuff

public text v1 · immutable
#734124 ·published 2007-10-12 12:31 UTC
rendered paste body
Index: 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