summaryrefslogtreecommitdiff
path: root/nuttx/arch/arm/src
diff options
context:
space:
mode:
authorpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-03-28 17:12:11 +0000
committerpatacongo <patacongo@42af7a65-404d-4744-a932-0658087f49c3>2013-03-28 17:12:11 +0000
commitfd7c0194d583e6f7d60e29f5fdd88b3a68b0d0de (patch)
tree66aa1997340b2fef132b29401f6bc33c0fe18857 /nuttx/arch/arm/src
parentff4412a0c33bfc12c87a98e354a092be5c0246a6 (diff)
downloadpx4-nuttx-fd7c0194d583e6f7d60e29f5fdd88b3a68b0d0de.tar.gz
px4-nuttx-fd7c0194d583e6f7d60e29f5fdd88b3a68b0d0de.tar.bz2
px4-nuttx-fd7c0194d583e6f7d60e29f5fdd88b3a68b0d0de.zip
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
Diffstat (limited to 'nuttx/arch/arm/src')
-rw-r--r--nuttx/arch/arm/src/lpc17xx/Kconfig13
-rw-r--r--nuttx/arch/arm/src/lpc17xx/lpc17_lcd.c37
-rw-r--r--nuttx/arch/arm/src/lpc17xx/lpc17_lcd.h20
3 files changed, 64 insertions, 6 deletions
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 <nuttx/config.h>
+
+#include <stdbool.h>
+
#include <nuttx/nx/nxglib.h>
#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 */