From b069562ef4146c2b377d14bbe6cb35f0ff4fd043 Mon Sep 17 00:00:00 2001 From: Andrew Ryabinin Date: Tue, 28 Feb 2012 20:53:52 +0400 Subject: 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 Tested-by: Marcin Bukat --- firmware/target/arm/rk27xx/lcd-hifiman.c | 8 +++++++- firmware/target/arm/rk27xx/lcdif-rk27xx.c | 15 +++++++-------- firmware/target/arm/rk27xx/lcdif-rk27xx.h | 7 ++++++- firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c | 8 +++++++- 4 files changed, 27 insertions(+), 11 deletions(-) diff --git a/firmware/target/arm/rk27xx/lcd-hifiman.c b/firmware/target/arm/rk27xx/lcd-hifiman.c index dba6accd1d..d98ed5a1c3 100644 --- a/firmware/target/arm/rk27xx/lcd-hifiman.c +++ b/firmware/target/arm/rk27xx/lcd-hifiman.c @@ -29,7 +29,7 @@ static bool display_on = false; -void lcd_display_init() +static void lcd_display_init(void) { unsigned int x, y; @@ -108,6 +108,12 @@ void lcd_display_init() display_on = true; } +void lcd_init_device(void) +{ + lcdif_init(LCDIF_16BIT); + lcd_display_init(); +} + void lcd_enable (bool on) { if (on) diff --git a/firmware/target/arm/rk27xx/lcdif-rk27xx.c b/firmware/target/arm/rk27xx/lcdif-rk27xx.c index ff60279315..affc49b213 100644 --- a/firmware/target/arm/rk27xx/lcdif-rk27xx.c +++ b/firmware/target/arm/rk27xx/lcdif-rk27xx.c @@ -123,27 +123,26 @@ static void lcdctrl_init(void) } /* 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; muxa = SCU_IOMUXA_CON & ~(IOMUX_LCD_VSYNC|IOMUX_LCD_DEN|0xff); -#if !defined(HM801) && !defined(HM60x) - muxa |= IOMUX_LCD_D18|IOMUX_LCD_D20|IOMUX_LCD_D22|IOMUX_LCD_D17|IOMUX_LCD_D16; -#endif + if (mode == LCDIF_18BIT) + { + muxa |= IOMUX_LCD_D18|IOMUX_LCD_D20|IOMUX_LCD_D22|IOMUX_LCD_D17|IOMUX_LCD_D16; + } SCU_IOMUXA_CON = muxa; 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_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 diff --git a/firmware/target/arm/rk27xx/lcdif-rk27xx.h b/firmware/target/arm/rk27xx/lcdif-rk27xx.h index caf97c8e94..1d7b810fa2 100644 --- a/firmware/target/arm/rk27xx/lcdif-rk27xx.h +++ b/firmware/target/arm/rk27xx/lcdif-rk27xx.h @@ -1,11 +1,16 @@ #ifndef _LCDIF_RK27XX_H #define _LCDIF_RK27XX_H +enum lcdif_mode_t { + LCDIF_16BIT, + LCDIF_18BIT +}; + unsigned int lcd_data_transform(unsigned int data); void lcd_cmd(unsigned int cmd); void lcd_data(unsigned int data); 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 */ diff --git a/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c b/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c index e15262398b..5eca87c6d8 100644 --- a/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c +++ b/firmware/target/arm/rk27xx/rk27generic/lcd-rk27generic.c @@ -71,7 +71,7 @@ static void lcd_sleep(bool sleep) lcd_cmd(GRAM_WRITE); } -void lcd_display_init() +static void lcd_display_init(void) { unsigned int x, y; @@ -173,6 +173,12 @@ void lcd_display_init() 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) { int px = x, py = y; -- cgit v1.2.3