+ pr_info(LCD "Starting Flash burn\n");
+ for (i = 0; i < FLASH_SIZE; i = i + 128) {
+
+ if (copy_from_user
+ (rom, display.RomImage + i, 128)) {
+ kfree(rom);
+ return -EFAULT;
+ }
+ burn_addr = kFlashBase + i;
+ spin_lock_irqsave(&lcd_lock, flags);
+ for (index = 0; index < (128); index++) {
+
+ WRITE_FLASH(kFlash_Addr1,
+ kFlash_Data1);
+ WRITE_FLASH(kFlash_Addr2,
+ kFlash_Data2);
+ WRITE_FLASH(kFlash_Addr1,
+ kFlash_Prog);
+ *((volatile unsigned char *)burn_addr) =
+ (volatile unsigned char) rom[index];
+
+ while ((!dqpoll (burn_addr,
+ (volatile unsigned char)
+ rom[index])) &&
+ (!timeout(burn_addr))) { }
+ burn_addr++;
+ }
+ spin_unlock_irqrestore(&lcd_lock, flags);
+ if (* ((volatile unsigned char *)
+ (burn_addr - 1)) ==
+ (volatile unsigned char)
+ rom[index - 1]) {
+ } else if (timeout) {
+ pr_info(LCD "Flash burn timed out\n");
+ }