From fd7c0194d583e6f7d60e29f5fdd88b3a68b0d0de Mon Sep 17 00:00:00 2001 From: patacongo Date: Thu, 28 Mar 2013 17:12:11 +0000 Subject: In LPC1788 24-bit color mode, we need to tell NX that the resolution if 32 bpp; Add interfaces to control Open1788 backlight git-svn-id: svn://svn.code.sf.net/p/nuttx/code/trunk@5798 42af7a65-404d-4744-a932-0658087f49c3 --- nuttx/arch/arm/src/lpc17xx/Kconfig | 13 ++++++++++++ nuttx/arch/arm/src/lpc17xx/lpc17_lcd.c | 37 ++++++++++++++++++++++++++++++---- nuttx/arch/arm/src/lpc17xx/lpc17_lcd.h | 20 ++++++++++++++++-- 3 files changed, 64 insertions(+), 6 deletions(-) (limited to 'nuttx/arch/arm') diff --git a/nuttx/arch/arm/src/lpc17xx/Kconfig b/nuttx/arch/arm/src/lpc17xx/Kconfig index 7f7da0be6..cad80ac7e 100644 --- a/nuttx/arch/arm/src/lpc17xx/Kconfig +++ b/nuttx/arch/arm/src/lpc17xx/Kconfig @@ -639,6 +639,19 @@ config LPC17_LCD_REFRESH_FREQ ---help--- LCD refesh rate (Hz) +config LPC17_LCD_BACKLIGHT + bool "Enable backlight" + default y + ---help--- + Enable backlight support. If LPC17_LCD_BACKLIGHT is selected, then + the board-specific logic must provide this lpc17_backlight() + interface so that the LCD driver can turn the backlight on and off + as necessary. You should select this option and implement + lpc17_backlight() if your board provides GPIO control over the + backlight. This interface provides only ON/OFF control of the + backlight. If you want finer control over the backlight level (for + example, using PWM), then this interface would need to be extended. + config LPC17_LCD_TFTPANEL bool "TFT Panel" default y diff --git a/nuttx/arch/arm/src/lpc17xx/lpc17_lcd.c b/nuttx/arch/arm/src/lpc17xx/lpc17_lcd.c index f1d2ea501..b4086ce0b 100644 --- a/nuttx/arch/arm/src/lpc17xx/lpc17_lcd.c +++ b/nuttx/arch/arm/src/lpc17xx/lpc17_lcd.c @@ -523,9 +523,7 @@ int up_fbinitialize(void) /* Turn on LCD clock */ - regval = getreg32(LPC17_SYSCON_PCONP); - regval |= SYSCON_PCONP_PCLCD; - putreg32(regval, LPC17_SYSCON_PCONP); + modifyreg32(LPC17_SYSCON_PCONP, 0, SYSCON_PCONP_PCLCD); /* Disable the cursor */ @@ -699,6 +697,11 @@ int up_fbinitialize(void) regval |= LCD_CTRL_LCDPWR; putreg32(regval, LPC17_LCD_CTRL); +#ifdef CONFIG_LPC17_LCD_BACKLIGHT + /* Turn on the back light */ + + lpc17_backlight(true); +#endif return OK; } @@ -740,7 +743,33 @@ FAR struct fb_vtable_s *up_fbgetvplane(int vplane) void fb_uninitialize(void) { - gdbg("Not implemented!\n"); + uint32_t regval; + int i; + + /* We assume there is only one use of the LCD and so we do not need to + * worry about mutually exclusive access to the LCD hardware. + */ + +#ifdef CONFIG_LPC17_LCD_BACKLIGHT + /* Turn off the back light */ + + lpc17_backlight(false); +#endif + + /* Disable the LCD controller */ + + regval = getreg32(LPC17_LCD_CTRL); + regval &= ~LCD_CTRL_LCDPWR; + putreg32(regval, LPC17_LCD_CTRL); + + for (i = LPC17_LCD_PWRDIS_DELAY; i; i--); + + regval &= ~LCD_CTRL_LCDEN; + putreg32(regval, LPC17_LCD_CTRL); + + /* Turn off clocking to the LCD. modifyreg32() can do this atomically. */ + + modifyreg32(LPC17_SYSCON_PCONP, SYSCON_PCONP_PCLCD, 0); return OK; } diff --git a/nuttx/arch/arm/src/lpc17xx/lpc17_lcd.h b/nuttx/arch/arm/src/lpc17xx/lpc17_lcd.h index 1545a7a56..2b560bb47 100644 --- a/nuttx/arch/arm/src/lpc17xx/lpc17_lcd.h +++ b/nuttx/arch/arm/src/lpc17xx/lpc17_lcd.h @@ -41,6 +41,9 @@ ************************************************************************************/ #include + +#include + #include #include "chip/lpc17_lcd.h" @@ -81,7 +84,7 @@ # define LPC17_BPP 16 # define LPC17_COLOR_FMT FB_FMT_Y16 #elif defined(CONFIG_LPC17_LCD_BPP24) -# define LPC17_BPP 24 +# define LPC17_BPP 32 /* Only 24 of 32 bits used for RGB */ # define LPC17_COLOR_FMT FB_FMT_RGB24 # ifndef CONFIG_LPC17_LCD_TFTPANEL # error "24 BPP is only available for a TFT panel" @@ -164,7 +167,7 @@ */ /************************************************************************************ - * Name: lpc17_lcdclear + * Name: lpc17_lcdclear * * Description: * This is a non-standard LCD interface just for the LPC17xx. Clearing the display @@ -176,4 +179,17 @@ void lpc17_lcdclear(nxgl_mxpixel_t color); +/************************************************************************************ + * Name: lpc17_backlight + * + * Description: + * If CONFIG_LPC17_LCD_BACKLIGHT is defined, then the board-specific logic must + * provide this interface to turn the backlight on and off. + * + ************************************************************************************/ + +#ifdef CONFIG_LPC17_LCD_BACKLIGHT +void lpc17_backlight(bool blon); +#endif + #endif /* __ARCH_ARM_SRC_LPC17XX_LPC17_LCD_H */ -- cgit v1.2.3