summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2004-11-11 01:11:06 +0000
committerJens Arnold <amiconn@rockbox.org>2004-11-11 01:11:06 +0000
commit2e290d6cecea3a502f5ac94aa4eb24d59e4c60f1 (patch)
tree2e65d877c6c799c004f1a2b9cdb65817c4a1ab27 /firmware
parentca81ed218ad891a87ec5849d062a9cb10f983c22 (diff)
downloadrockbox-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')
-rw-r--r--firmware/drivers/lcd-player.c111
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
489void lcd_init (void) 493void 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());