forked from len0rd/rockbox
Support for gmini100 series LCD
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5619 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
2f9bf25175
commit
cacc37d2e0
1 changed files with 54 additions and 0 deletions
|
|
@ -113,6 +113,37 @@ static const unsigned char zeros[8] = { 0, 0, 0, 0, 0, 0, 0, 0 };
|
|||
static const unsigned char ones[8] = { 0xff, 0xff, 0xff, 0xff,
|
||||
0xff, 0xff, 0xff, 0xff};
|
||||
|
||||
|
||||
#if CONFIG_CPU == TCC730
|
||||
/* Optimization opportunity:
|
||||
In the following I do exactly as in the archos firmware.
|
||||
There is probably is a better way (ie. do only one mask operation)
|
||||
*/
|
||||
void lcd_write_command(int cmd) {
|
||||
P2 &= 0xF7;
|
||||
P2 &= 0xDF;
|
||||
P2 &= 0xFB;
|
||||
P0 = cmd;
|
||||
P2 |= 0x04;
|
||||
P2 |= 0x08;
|
||||
P2 |= 0x20;
|
||||
}
|
||||
|
||||
void lcd_write_data( const unsigned char* data, int count ) {
|
||||
int i;
|
||||
for (i=0; i < count; i++) {
|
||||
P2 |= 0x08;
|
||||
P2 &= 0xDF;
|
||||
P2 &= 0xFB;
|
||||
P0 = data[i];
|
||||
P2 |= 0x04;
|
||||
P2 |= 0x08;
|
||||
P2 |= 0x20;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
int lcd_default_contrast(void)
|
||||
{
|
||||
#ifdef SIMULATOR
|
||||
|
|
@ -137,9 +168,19 @@ void lcd_init(void)
|
|||
*/
|
||||
void lcd_init (void)
|
||||
{
|
||||
#if CONFIG_CPU == TCC730
|
||||
/* Initialise P0 & some P2 output pins:
|
||||
P0 -> all pins normal cmos output
|
||||
P2 -> pins 1 to 5 normal cmos output. */
|
||||
P0CON = 0xff;
|
||||
P2CONL |= 0x5a;
|
||||
P2CONL &= 0x5b;
|
||||
P2CONH |= 1;
|
||||
#else
|
||||
/* Initialize PB0-3 as output pins */
|
||||
PBCR2 &= 0xff00; /* MD = 00 */
|
||||
PBIOR |= 0x000f; /* IOR = 1 */
|
||||
#endif
|
||||
|
||||
/* inits like the original firmware */
|
||||
lcd_write_command(LCD_SOFTWARE_RESET);
|
||||
|
|
@ -253,6 +294,18 @@ void lcd_set_flip(bool yesno)
|
|||
#else
|
||||
if (yesno)
|
||||
#endif
|
||||
#if CONFIG_LCD == LCD_GMINI100
|
||||
{
|
||||
lcd_write_command(LCD_SET_SEGMENT_REMAP | 0x01);
|
||||
lcd_write_command(LCD_SET_COM_OUTPUT_SCAN_DIRECTION | 0x08);
|
||||
xoffset = 132 - LCD_WIDTH;
|
||||
} else {
|
||||
lcd_write_command(LCD_SET_SEGMENT_REMAP);
|
||||
lcd_write_command(LCD_SET_COM_OUTPUT_SCAN_DIRECTION | 0x08);
|
||||
xoffset = 0;
|
||||
}
|
||||
#else
|
||||
|
||||
{
|
||||
lcd_write_command(LCD_SET_SEGMENT_REMAP);
|
||||
lcd_write_command(LCD_SET_COM_OUTPUT_SCAN_DIRECTION);
|
||||
|
|
@ -264,6 +317,7 @@ void lcd_set_flip(bool yesno)
|
|||
lcd_write_command(LCD_SET_COM_OUTPUT_SCAN_DIRECTION | 0x08);
|
||||
xoffset = 0;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue