diff options
author | Jens Arnold <amiconn@rockbox.org> | 2004-11-11 01:11:06 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2004-11-11 01:11:06 +0000 |
commit | 2e290d6cecea3a502f5ac94aa4eb24d59e4c60f1 (patch) | |
tree | 2e65d877c6c799c004f1a2b9cdb65817c4a1ab27 /firmware/drivers/lcd-player.c | |
parent | ca81ed218ad891a87ec5849d062a9cb10f983c22 (diff) | |
download | rockbox-2e290d6cecea3a502f5ac94aa4eb24d59e4c60f1.tar.gz rockbox-2e290d6cecea3a502f5ac94aa4eb24d59e4c60f1.zip |
Important step towards player flashing: LCD inits for both new LCD (confirmed working) and old LCD.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5397 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/drivers/lcd-player.c')
-rw-r--r-- | firmware/drivers/lcd-player.c | 111 |
1 files changed, 109 insertions, 2 deletions
diff --git a/firmware/drivers/lcd-player.c b/firmware/drivers/lcd-player.c index 8dd97cac0a..ca5c93a04b 100644 --- a/firmware/drivers/lcd-player.c +++ b/firmware/drivers/lcd-player.c | |||
@@ -43,9 +43,13 @@ | |||
43 | #define NEW_LCD_CRAM ((char)0x80) /* Characters */ | 43 | #define NEW_LCD_CRAM ((char)0x80) /* Characters */ |
44 | #define NEW_LCD_PRAM ((char)0xC0) /* Patterns */ | 44 | #define NEW_LCD_PRAM ((char)0xC0) /* Patterns */ |
45 | #define NEW_LCD_IRAM ((char)0x40) /* Icons */ | 45 | #define NEW_LCD_IRAM ((char)0x40) /* Icons */ |
46 | #define NEW_LCD_FUNCTION_SET ((char)0x10) | ||
47 | #define NEW_LCD_POWER_SAVE_MODE_OSC_CONTROL_SET ((char)0x0c) | ||
48 | #define NEW_LCD_POWER_CONTROL_REGISTER_SET ((char)0x20) | ||
49 | #define NEW_LCD_DISPLAY_CONTROL_SET ((char)0x28) | ||
46 | 50 | ||
47 | #define LCD_CURSOR(x,y) ((char)(lcd_cram+((y)*16+(x)))) | 51 | #define LCD_CURSOR(x,y) ((char)(lcd_cram+((y)*16+(x)))) |
48 | #define LCD_ICON(i) ((char)(lcd_iram+i)) | 52 | #define LCD_ICON(i) ((char)(lcd_iram+i)) |
49 | 53 | ||
50 | #define SCROLLABLE_LINES 2 | 54 | #define SCROLLABLE_LINES 2 |
51 | 55 | ||
@@ -488,6 +492,8 @@ void lcd_set_contrast(int val) | |||
488 | 492 | ||
489 | void lcd_init (void) | 493 | void lcd_init (void) |
490 | { | 494 | { |
495 | unsigned char data_vector[64]; | ||
496 | |||
491 | new_lcd = has_new_lcd(); | 497 | new_lcd = has_new_lcd(); |
492 | memset(extended_chars_mapped, NO_CHAR, sizeof(extended_chars_mapped)); | 498 | memset(extended_chars_mapped, NO_CHAR, sizeof(extended_chars_mapped)); |
493 | memset(extended_pattern_content, NO_CHAR,sizeof(extended_pattern_content)); | 499 | memset(extended_pattern_content, NO_CHAR,sizeof(extended_pattern_content)); |
@@ -500,6 +506,32 @@ void lcd_init (void) | |||
500 | lcd_pram = NEW_LCD_PRAM; | 506 | lcd_pram = NEW_LCD_PRAM; |
501 | lcd_iram = NEW_LCD_IRAM; | 507 | lcd_iram = NEW_LCD_IRAM; |
502 | pattern_size=7; /* Last pattern, 7 for new LCD */ | 508 | pattern_size=7; /* Last pattern, 7 for new LCD */ |
509 | |||
510 | /* LCD init for cold start */ | ||
511 | PBCR2 &= 0xff00; /* Set PB0..PB3 to GPIO */ | ||
512 | or_b(0x0f, &PBIORL); /* ... output */ | ||
513 | or_b(0x0f, &PBDRL); /* ... and high */ | ||
514 | |||
515 | lcd_write_command(NEW_LCD_FUNCTION_SET + 1); /* CGRAM selected */ | ||
516 | lcd_write_command(NEW_LCD_CONTRAST_SET); | ||
517 | lcd_data_byte = 0x08; | ||
518 | lcd_write_data(&lcd_data_byte, 1); | ||
519 | lcd_write_command(NEW_LCD_POWER_SAVE_MODE_OSC_CONTROL_SET + 2); | ||
520 | /* oscillator on */ | ||
521 | lcd_write_command(NEW_LCD_POWER_CONTROL_REGISTER_SET + 7); | ||
522 | /* opamp buffer + voltage booster on*/ | ||
523 | |||
524 | memset(data_vector, 0x20, 64); | ||
525 | lcd_write_command(NEW_LCD_CRAM); /* Set DDRAM address */ | ||
526 | lcd_write_data(data_vector, 64); /* all spaces */ | ||
527 | |||
528 | memset(data_vector, 0, 64); | ||
529 | lcd_write_command(NEW_LCD_PRAM); /* Set CGRAM address */ | ||
530 | lcd_write_data(data_vector, 64); /* zero out */ | ||
531 | lcd_write_command(NEW_LCD_IRAM); /* Set ICONRAM address */ | ||
532 | lcd_write_data(data_vector, 16); /* zero out */ | ||
533 | |||
534 | lcd_write_command(NEW_LCD_DISPLAY_CONTROL_SET + 1); /* display on */ | ||
503 | } | 535 | } |
504 | else { | 536 | else { |
505 | lcd_ascii = old_lcd_rocklatin1_to_xlcd; | 537 | lcd_ascii = old_lcd_rocklatin1_to_xlcd; |
@@ -508,6 +540,81 @@ void lcd_init (void) | |||
508 | lcd_pram = OLD_LCD_PRAM; | 540 | lcd_pram = OLD_LCD_PRAM; |
509 | lcd_iram = OLD_LCD_IRAM; | 541 | lcd_iram = OLD_LCD_IRAM; |
510 | pattern_size=3; /* Last pattern, 3 for old LCD */ | 542 | pattern_size=3; /* Last pattern, 3 for old LCD */ |
543 | |||
544 | #if 1 | ||
545 | /* LCD init for cold start */ | ||
546 | PBCR2 &= 0xff00; /* Set PB0..PB3 to GPIO */ | ||
547 | or_b(0x0f, &PBIORL); /* ... output */ | ||
548 | or_b(0x0f, &PBDRL); /* ... and high */ | ||
549 | |||
550 | lcd_write_command(0x61); | ||
551 | lcd_write_command(0x42); | ||
552 | lcd_write_command(0x57); | ||
553 | |||
554 | memset(data_vector, 0x24, 13); | ||
555 | lcd_write_command(OLD_LCD_CRAM); /* Set DDRAM address */ | ||
556 | lcd_write_data(data_vector, 13); /* all spaces */ | ||
557 | lcd_write_command(OLD_LCD_CRAM + 0x10); | ||
558 | lcd_write_data(data_vector, 13); | ||
559 | lcd_write_command(OLD_LCD_CRAM + 0x20); | ||
560 | lcd_write_data(data_vector, 13); | ||
561 | |||
562 | memset(data_vector, 0, 32); | ||
563 | lcd_write_command(OLD_LCD_PRAM); /* Set CGRAM address */ | ||
564 | lcd_write_data(data_vector, 32); /* zero out */ | ||
565 | lcd_write_command(OLD_LCD_IRAM); /* Set ICONRAM address */ | ||
566 | lcd_write_data(data_vector, 13); /* zero out */ | ||
567 | lcd_write_command(OLD_LCD_IRAM + 0x10); | ||
568 | lcd_write_data(data_vector, 13); | ||
569 | |||
570 | lcd_write_command(0x31); | ||
571 | #else | ||
572 | /* archos look-alike code, left here for reference. As soon as the | ||
573 | * rockbox version is confirmed working, this will go away */ | ||
574 | { | ||
575 | int i; | ||
576 | |||
577 | PBCR2 &= 0xc000; | ||
578 | PBIOR |= 0x000f; | ||
579 | PBDR |= 0x0002; | ||
580 | PBDR |= 0x0001; | ||
581 | PBDR |= 0x0004; | ||
582 | PBDR |= 0x0008; | ||
583 | |||
584 | for (i=0; i<200; i++) asm volatile ("nop"); /* wait 100 us */ | ||
585 | |||
586 | PBDR &= 0xfffd; /* CS low (assert) */ | ||
587 | |||
588 | for (i=0; i<100; i++) asm volatile ("nop"); /* wait 50 us */ | ||
589 | |||
590 | lcd_write_command(0x61); | ||
591 | lcd_write_command(0x42); | ||
592 | lcd_write_command(0x57); | ||
593 | |||
594 | memset(data_vector, 0x24, 13); | ||
595 | lcd_write_command(0xb0); /* Set DDRAM address */ | ||
596 | lcd_write_data(data_vector, 13); /* all spaces */ | ||
597 | lcd_write_command(0xc0); | ||
598 | lcd_write_data(data_vector, 13); | ||
599 | lcd_write_command(0xd0); | ||
600 | lcd_write_data(data_vector, 13); | ||
601 | |||
602 | memset(data_vector, 0, 32); | ||
603 | lcd_write_command(0x80); /* Set CGRAM address */ | ||
604 | lcd_write_data(data_vector, 32); /* zero out */ | ||
605 | lcd_write_command(0xe0); /* Set ICONRAM address */ | ||
606 | lcd_write_data(data_vector, 13); /* zero out */ | ||
607 | lcd_write_command(0xf0); | ||
608 | lcd_write_data(data_vector, 13); | ||
609 | |||
610 | for (i=0; i<300000; i++) asm volatile ("nop"); /* wait 150 ms */ | ||
611 | |||
612 | lcd_write_command(0x31); | ||
613 | lcd_write_command(0xa8); /* Set contrast control */ | ||
614 | lcd_data_byte = 0; | ||
615 | lcd_write_data(&lcd_data_byte, 1); /* 0 */ | ||
616 | } | ||
617 | #endif | ||
511 | } | 618 | } |
512 | 619 | ||
513 | lcd_set_contrast(lcd_default_contrast()); | 620 | lcd_set_contrast(lcd_default_contrast()); |