diff options
Diffstat (limited to 'drivers/char/lcd.c')
-rw-r--r-- | drivers/char/lcd.c | 173 |
1 files changed, 0 insertions, 173 deletions
diff --git a/drivers/char/lcd.c b/drivers/char/lcd.c index d649abbf0857..1f0962616ee5 100644 --- a/drivers/char/lcd.c +++ b/drivers/char/lcd.c | |||
@@ -11,9 +11,6 @@ | |||
11 | * March 2001: Ported from 2.0.34 by Liam Davies | 11 | * March 2001: Ported from 2.0.34 by Liam Davies |
12 | * | 12 | * |
13 | */ | 13 | */ |
14 | |||
15 | #define RTC_IO_EXTENT 0x10 /*Only really two ports, but... */ | ||
16 | |||
17 | #include <linux/types.h> | 14 | #include <linux/types.h> |
18 | #include <linux/errno.h> | 15 | #include <linux/errno.h> |
19 | #include <linux/miscdevice.h> | 16 | #include <linux/miscdevice.h> |
@@ -32,8 +29,6 @@ | |||
32 | 29 | ||
33 | #include "lcd.h" | 30 | #include "lcd.h" |
34 | 31 | ||
35 | static DEFINE_SPINLOCK(lcd_lock); | ||
36 | |||
37 | static int lcd_ioctl(struct inode *inode, struct file *file, | 32 | static int lcd_ioctl(struct inode *inode, struct file *file, |
38 | unsigned int cmd, unsigned long arg); | 33 | unsigned int cmd, unsigned long arg); |
39 | 34 | ||
@@ -409,138 +404,6 @@ static int lcd_ioctl(struct inode *inode, struct file *file, | |||
409 | break; | 404 | break; |
410 | } | 405 | } |
411 | 406 | ||
412 | // Erase the flash | ||
413 | |||
414 | case FLASH_Erase:{ | ||
415 | |||
416 | int ctr = 0; | ||
417 | |||
418 | if ( !capable(CAP_SYS_ADMIN) ) return -EPERM; | ||
419 | |||
420 | pr_info(LCD "Erasing Flash\n"); | ||
421 | |||
422 | // Chip Erase Sequence | ||
423 | WRITE_FLASH(kFlash_Addr1, kFlash_Data1); | ||
424 | WRITE_FLASH(kFlash_Addr2, kFlash_Data2); | ||
425 | WRITE_FLASH(kFlash_Addr1, kFlash_Erase3); | ||
426 | WRITE_FLASH(kFlash_Addr1, kFlash_Data1); | ||
427 | WRITE_FLASH(kFlash_Addr2, kFlash_Data2); | ||
428 | WRITE_FLASH(kFlash_Addr1, kFlash_Erase6); | ||
429 | |||
430 | while ((!dqpoll(0x00000000, 0xFF)) | ||
431 | && (!timeout(0x00000000))) { | ||
432 | ctr++; | ||
433 | } | ||
434 | |||
435 | if (READ_FLASH(0x07FFF0) == 0xFF) { | ||
436 | pr_info(LCD "Erase Successful\n"); | ||
437 | } else if (timeout) { | ||
438 | pr_info(LCD "Erase Timed Out\n"); | ||
439 | } | ||
440 | |||
441 | break; | ||
442 | } | ||
443 | |||
444 | // burn the flash | ||
445 | |||
446 | case FLASH_Burn:{ | ||
447 | |||
448 | volatile unsigned long burn_addr; | ||
449 | unsigned long flags; | ||
450 | unsigned int i, index; | ||
451 | unsigned char *rom; | ||
452 | |||
453 | |||
454 | struct lcd_display display; | ||
455 | |||
456 | if ( !capable(CAP_SYS_ADMIN) ) return -EPERM; | ||
457 | |||
458 | if (copy_from_user | ||
459 | (&display, (struct lcd_display *) arg, | ||
460 | sizeof(struct lcd_display))) | ||
461 | return -EFAULT; | ||
462 | rom = kmalloc((128), GFP_ATOMIC); | ||
463 | if (rom == NULL) { | ||
464 | printk(KERN_ERR LCD "kmalloc() failed in %s\n", | ||
465 | __FUNCTION__); | ||
466 | return -ENOMEM; | ||
467 | } | ||
468 | |||
469 | pr_info(LCD "Starting Flash burn\n"); | ||
470 | for (i = 0; i < FLASH_SIZE; i = i + 128) { | ||
471 | |||
472 | if (copy_from_user | ||
473 | (rom, display.RomImage + i, 128)) { | ||
474 | kfree(rom); | ||
475 | return -EFAULT; | ||
476 | } | ||
477 | burn_addr = kFlashBase + i; | ||
478 | spin_lock_irqsave(&lcd_lock, flags); | ||
479 | for (index = 0; index < (128); index++) { | ||
480 | |||
481 | WRITE_FLASH(kFlash_Addr1, | ||
482 | kFlash_Data1); | ||
483 | WRITE_FLASH(kFlash_Addr2, | ||
484 | kFlash_Data2); | ||
485 | WRITE_FLASH(kFlash_Addr1, | ||
486 | kFlash_Prog); | ||
487 | *((volatile unsigned char *)burn_addr) = | ||
488 | (volatile unsigned char) rom[index]; | ||
489 | |||
490 | while ((!dqpoll (burn_addr, | ||
491 | (volatile unsigned char) | ||
492 | rom[index])) && | ||
493 | (!timeout(burn_addr))) { } | ||
494 | burn_addr++; | ||
495 | } | ||
496 | spin_unlock_irqrestore(&lcd_lock, flags); | ||
497 | if (* ((volatile unsigned char *) | ||
498 | (burn_addr - 1)) == | ||
499 | (volatile unsigned char) | ||
500 | rom[index - 1]) { | ||
501 | } else if (timeout) { | ||
502 | pr_info(LCD "Flash burn timed out\n"); | ||
503 | } | ||
504 | |||
505 | |||
506 | } | ||
507 | kfree(rom); | ||
508 | |||
509 | pr_info(LCD "Flash successfully burned\n"); | ||
510 | |||
511 | break; | ||
512 | } | ||
513 | |||
514 | // read the flash all at once | ||
515 | |||
516 | case FLASH_Read:{ | ||
517 | |||
518 | unsigned char *user_bytes; | ||
519 | volatile unsigned long read_addr; | ||
520 | unsigned int i; | ||
521 | |||
522 | user_bytes = | ||
523 | &(((struct lcd_display *) arg)->RomImage[0]); | ||
524 | |||
525 | if (!access_ok | ||
526 | (VERIFY_WRITE, user_bytes, FLASH_SIZE)) | ||
527 | return -EFAULT; | ||
528 | |||
529 | pr_info(LCD "Reading Flash"); | ||
530 | for (i = 0; i < FLASH_SIZE; i++) { | ||
531 | unsigned char tmp_byte; | ||
532 | read_addr = kFlashBase + i; | ||
533 | tmp_byte = | ||
534 | *((volatile unsigned char *) | ||
535 | read_addr); | ||
536 | if (__put_user(tmp_byte, &user_bytes[i])) | ||
537 | return -EFAULT; | ||
538 | } | ||
539 | |||
540 | |||
541 | break; | ||
542 | } | ||
543 | |||
544 | default: | 407 | default: |
545 | return -EINVAL; | 408 | return -EINVAL; |
546 | 409 | ||
@@ -644,42 +507,6 @@ static void __exit lcd_exit(void) | |||
644 | misc_deregister(&lcd_dev); | 507 | misc_deregister(&lcd_dev); |
645 | } | 508 | } |
646 | 509 | ||
647 | // | ||
648 | // Function: dqpoll | ||
649 | // | ||
650 | // Description: Polls the data lines to see if the flash is busy | ||
651 | // | ||
652 | // In: address, byte data | ||
653 | // | ||
654 | // Out: 0 = busy, 1 = write or erase complete | ||
655 | // | ||
656 | // | ||
657 | |||
658 | static int dqpoll(volatile unsigned long address, volatile unsigned char data) | ||
659 | { | ||
660 | volatile unsigned char dq7; | ||
661 | |||
662 | dq7 = data & 0x80; | ||
663 | |||
664 | return ((READ_FLASH(address) & 0x80) == dq7); | ||
665 | } | ||
666 | |||
667 | // | ||
668 | // Function: timeout | ||
669 | // | ||
670 | // Description: Checks to see if erase or write has timed out | ||
671 | // By polling dq5 | ||
672 | // | ||
673 | // In: address | ||
674 | // | ||
675 | // | ||
676 | // Out: 0 = not timed out, 1 = timed out | ||
677 | |||
678 | static int timeout(volatile unsigned long address) | ||
679 | { | ||
680 | return (READ_FLASH(address) & 0x20) == 0x20; | ||
681 | } | ||
682 | |||
683 | module_init(lcd_init); | 510 | module_init(lcd_init); |
684 | module_exit(lcd_exit); | 511 | module_exit(lcd_exit); |
685 | 512 | ||