1
0
Fork 0
forked from len0rd/rockbox

rk27xx: lcdif refactoring: make lcdif-rk27xx.c more generic

iomux_lcd now has parameter for display bit mode settings, so we doesn't need ifdef here.
lcd_init_device moved to target specific code
lcdif_init configure pins and lcd cotroller

Change-Id: I3a2d7fd38b08fe3bc5ebefa8c9f7288c21f58212
Reviewed-on: http://gerrit.rockbox.org/153
Reviewed-by: Marcin Bukat <marcin.bukat@gmail.com>
Tested-by: Marcin Bukat <marcin.bukat@gmail.com>
This commit is contained in:
Andrew Ryabinin 2012-02-28 20:53:52 +04:00 committed by Marcin Bukat
parent 4601a8b44a
commit b069562ef4
4 changed files with 27 additions and 11 deletions

View file

@ -29,7 +29,7 @@
static bool display_on = false; static bool display_on = false;
void lcd_display_init() static void lcd_display_init(void)
{ {
unsigned int x, y; unsigned int x, y;
@ -108,6 +108,12 @@ void lcd_display_init()
display_on = true; display_on = true;
} }
void lcd_init_device(void)
{
lcdif_init(LCDIF_16BIT);
lcd_display_init();
}
void lcd_enable (bool on) void lcd_enable (bool on)
{ {
if (on) if (on)

View file

@ -123,27 +123,26 @@ static void lcdctrl_init(void)
} }
/* configure pins to drive lcd in 18bit mode (16bit mode for HiFiMAN's) */ /* configure pins to drive lcd in 18bit mode (16bit mode for HiFiMAN's) */
static void iomux_lcd(void) static void iomux_lcd(enum lcdif_mode_t mode)
{ {
unsigned long muxa; unsigned long muxa;
muxa = SCU_IOMUXA_CON & ~(IOMUX_LCD_VSYNC|IOMUX_LCD_DEN|0xff); muxa = SCU_IOMUXA_CON & ~(IOMUX_LCD_VSYNC|IOMUX_LCD_DEN|0xff);
#if !defined(HM801) && !defined(HM60x) if (mode == LCDIF_18BIT)
muxa |= IOMUX_LCD_D18|IOMUX_LCD_D20|IOMUX_LCD_D22|IOMUX_LCD_D17|IOMUX_LCD_D16; {
#endif muxa |= IOMUX_LCD_D18|IOMUX_LCD_D20|IOMUX_LCD_D22|IOMUX_LCD_D17|IOMUX_LCD_D16;
}
SCU_IOMUXA_CON = muxa; SCU_IOMUXA_CON = muxa;
SCU_IOMUXB_CON |= IOMUX_LCD_D815; SCU_IOMUXB_CON |= IOMUX_LCD_D815;
} }
void lcd_init_device() void lcdif_init(enum lcdif_mode_t mode)
{ {
iomux_lcd(); /* setup pins for 16bit lcd interface */ iomux_lcd(mode); /* setup pins for lcd interface */
lcdctrl_init(); /* basic lcdc module configuration */ lcdctrl_init(); /* basic lcdc module configuration */
lcdctrl_bypass(1); /* run in bypass mode - all writes goes directly to lcd controller */ lcdctrl_bypass(1); /* run in bypass mode - all writes goes directly to lcd controller */
lcd_display_init();
} }
/* This is ugly hack. We drive lcd in bypass mode /* This is ugly hack. We drive lcd in bypass mode

View file

@ -1,11 +1,16 @@
#ifndef _LCDIF_RK27XX_H #ifndef _LCDIF_RK27XX_H
#define _LCDIF_RK27XX_H #define _LCDIF_RK27XX_H
enum lcdif_mode_t {
LCDIF_16BIT,
LCDIF_18BIT
};
unsigned int lcd_data_transform(unsigned int data); unsigned int lcd_data_transform(unsigned int data);
void lcd_cmd(unsigned int cmd); void lcd_cmd(unsigned int cmd);
void lcd_data(unsigned int data); void lcd_data(unsigned int data);
void lcd_write_reg(unsigned int reg, unsigned int val); void lcd_write_reg(unsigned int reg, unsigned int val);
void lcd_display_init(void); void lcdif_init(enum lcdif_mode_t mode);
#endif /* _LCDIF_RK27XX_H */ #endif /* _LCDIF_RK27XX_H */

View file

@ -71,7 +71,7 @@ static void lcd_sleep(bool sleep)
lcd_cmd(GRAM_WRITE); lcd_cmd(GRAM_WRITE);
} }
void lcd_display_init() static void lcd_display_init(void)
{ {
unsigned int x, y; unsigned int x, y;
@ -173,6 +173,12 @@ void lcd_display_init()
lcd_sleep(false); lcd_sleep(false);
} }
void lcd_init_device(void)
{
lcdif_init(LCDIF_18BIT);
lcd_display_init();
}
void lcd_update_rect(int x, int y, int width, int height) void lcd_update_rect(int x, int y, int width, int height)
{ {
int px = x, py = y; int px = x, py = y;