diff --git a/configs/stm3210e-eval/README.txt b/configs/stm3210e-eval/README.txt
index 15d621d5b7f65f28d91b023a71a90babc5b1aa34..1f29ae66a40dda79b222ebc3eb1d08aae79dd52b 100755
--- a/configs/stm3210e-eval/README.txt
+++ b/configs/stm3210e-eval/README.txt
@@ -545,13 +545,25 @@ STM3210E-EVAL-specific Configuration Options
       portrait" orientation support.  In this orientation, the
       STM3210E-EVAL's LCD ribbon cable is at the top of the display.
       Default is 320x240 "landscape" orientation.
-    CONFIG_LCD_BACKLIGHT - Define to support an adjustable backlight
-      using timer 1.  The granularity of the settings is determined
-      by CONFIG_LCD_MAXPOWER.  Requires CONFIG_STM32_TIM1.
+    CONFIG_LCD_BACKLIGHT - Define to support a backlight.
+    CONFIG_LCD_PWM - If CONFIG_STM32_TIM1 is also defined, then an
+      adjustable backlight will be provided using timer 1 to generate
+      various pulse widthes.  The granularity of the settings is
+      determined by CONFIG_LCD_MAXPOWER.  If CONFIG_LCD_PWM (or
+      CONFIG_STM32_TIM1) is not defined, then a simple on/off backlight
+      is provided.
     CONFIG_LCD_RDSHIFT - When reading 16-bit gram data, there appears
       to be a shift in the returned data.  This value fixes the offset.
       Default 5.
 
+    The LCD driver dynamically selects the LCD based on the reported LCD
+    ID value.  However, code size can be reduced by suppressing support for
+    individual LCDs using:
+
+    CONFIG_STM32_AM240320_DISABLE
+    CONFIG_STM32_SPFD5408B_DISABLE
+    CONFIG_STM32_R61580_DISABLE
+
 Configurations
 ==============
 
diff --git a/configs/stm3210e-eval/nsh2/defconfig b/configs/stm3210e-eval/nsh2/defconfig
index 03cebdd1a450842f6035abb60e5ec085271ba95a..281fec5b713aae03c4059a65bad1a67858e20263 100644
--- a/configs/stm3210e-eval/nsh2/defconfig
+++ b/configs/stm3210e-eval/nsh2/defconfig
@@ -906,14 +906,19 @@ CONFIG_NX_MXCLIENTMSGS=16
 #   portrait" orientation support.  In this orientation, the
 #   STM3210E-EVAL's LCD ribbon cable is at the top of the display.
 #   Default is 320x240 "landscape" orientation.
-# CONFIG_LCD_BACKLIGHT - Define to support an adjustable backlight
-#   using timer 1.  The granularity of the settings is determined
-#   by CONFIG_LCD_MAXPOWER.  Requires CONFIG_STM32_TIM1.
+# CONFIG_LCD_BACKLIGHT - Define to support a backlight.
+# CONFIG_LCD_PWM - If CONFIG_STM32_TIM1 is also defined, then an
+#   adjustable backlight will be provided using timer 1 to generate
+#   various pulse widthes.  The granularity of the settings is
+#   determined by CONFIG_LCD_MAXPOWER.  If CONFIG_LCD_PWM (or
+#   CONFIG_STM32_TIM1) is not defined, then a simple on/off backlight
+#   is provided.
 #
 CONFIG_LCD_LANDSCAPE=n
 CONFIG_LCD_PORTRAIT=n
 CONFIG_LCD_RPORTRAIT=y
 CONFIG_LCD_BACKLIGHT=n
+CONFIG_LCD_PWM=n
 
 #
 # Settings for examples/uip
diff --git a/configs/stm3210e-eval/nx/defconfig b/configs/stm3210e-eval/nx/defconfig
index 6310407e2772ecb7e49bd01e175c750360471267..8381ae8f6d121c12618187c1f9c6088d4e5f956a 100644
--- a/configs/stm3210e-eval/nx/defconfig
+++ b/configs/stm3210e-eval/nx/defconfig
@@ -893,14 +893,19 @@ CONFIG_NX_MXCLIENTMSGS=16
 #   portrait" orientation support.  In this orientation, the
 #   STM3210E-EVAL's LCD ribbon cable is at the top of the display.
 #   Default is 320x240 "landscape" orientation.
-# CONFIG_LCD_BACKLIGHT - Define to support an adjustable backlight
-#   using timer 1.  The granularity of the settings is determined
-#   by CONFIG_LCD_MAXPOWER.  Requires CONFIG_STM32_TIM1.
+# CONFIG_LCD_BACKLIGHT - Define to support a backlight.
+# CONFIG_LCD_PWM - If CONFIG_STM32_TIM1 is also defined, then an
+#   adjustable backlight will be provided using timer 1 to generate
+#   various pulse widthes.  The granularity of the settings is
+#   determined by CONFIG_LCD_MAXPOWER.  If CONFIG_LCD_PWM (or
+#   CONFIG_STM32_TIM1) is not defined, then a simple on/off backlight
+#   is provided.
 #
 CONFIG_LCD_LANDSCAPE=n
 CONFIG_LCD_PORTRAIT=n
 CONFIG_LCD_RPORTRAIT=y
 CONFIG_LCD_BACKLIGHT=n
+CONFIG_LCD_PWM=n
 
 #
 # Settings for examples/uip
diff --git a/configs/stm3210e-eval/nxlines/defconfig b/configs/stm3210e-eval/nxlines/defconfig
index bbd6d20c104c67bb7d6a122fefb4a05746058dab..048476296ea3bf95531c2975a35942d98bb9e54c 100644
--- a/configs/stm3210e-eval/nxlines/defconfig
+++ b/configs/stm3210e-eval/nxlines/defconfig
@@ -892,14 +892,19 @@ CONFIG_NX_MXCLIENTMSGS=16
 #   portrait" orientation support.  In this orientation, the
 #   STM3210E-EVAL's LCD ribbon cable is at the top of the display.
 #   Default is 320x240 "landscape" orientation.
-# CONFIG_LCD_BACKLIGHT - Define to support an adjustable backlight
-#   using timer 1.  The granularity of the settings is determined
-#   by CONFIG_LCD_MAXPOWER.  Requires CONFIG_STM32_TIM1.
+# CONFIG_LCD_BACKLIGHT - Define to support a backlight.
+# CONFIG_LCD_PWM - If CONFIG_STM32_TIM1 is also defined, then an
+#   adjustable backlight will be provided using timer 1 to generate
+#   various pulse widthes.  The granularity of the settings is
+#   determined by CONFIG_LCD_MAXPOWER.  If CONFIG_LCD_PWM (or
+#   CONFIG_STM32_TIM1) is not defined, then a simple on/off backlight
+#   is provided.
 #
 CONFIG_LCD_LANDSCAPE=n
 CONFIG_LCD_PORTRAIT=n
 CONFIG_LCD_RPORTRAIT=y
 CONFIG_LCD_BACKLIGHT=n
+CONFIG_LCD_PWM=n
 
 #
 # Settings for examples/uip
diff --git a/configs/stm3210e-eval/nxtext/defconfig b/configs/stm3210e-eval/nxtext/defconfig
index e86d4ce9905b3c2726aaa9d20d2fe8507922492e..07ab05c7431b29487103330d5208394356e8e694 100644
--- a/configs/stm3210e-eval/nxtext/defconfig
+++ b/configs/stm3210e-eval/nxtext/defconfig
@@ -892,14 +892,19 @@ CONFIG_NX_MXCLIENTMSGS=16
 #   portrait" orientation support.  In this orientation, the
 #   STM3210E-EVAL's LCD ribbon cable is at the top of the display.
 #   Default is 320x240 "landscape" orientation.
-# CONFIG_LCD_BACKLIGHT - Define to support an adjustable backlight
-#   using timer 1.  The granularity of the settings is determined
-#   by CONFIG_LCD_MAXPOWER.  Requires CONFIG_STM32_TIM1.
+# CONFIG_LCD_BACKLIGHT - Define to support a backlight.
+# CONFIG_LCD_PWM - If CONFIG_STM32_TIM1 is also defined, then an
+#   adjustable backlight will be provided using timer 1 to generate
+#   various pulse widthes.  The granularity of the settings is
+#   determined by CONFIG_LCD_MAXPOWER.  If CONFIG_LCD_PWM (or
+#   CONFIG_STM32_TIM1) is not defined, then a simple on/off backlight
+#   is provided.
 #
 CONFIG_LCD_LANDSCAPE=n
 CONFIG_LCD_PORTRAIT=n
 CONFIG_LCD_RPORTRAIT=y
 CONFIG_LCD_BACKLIGHT=n
+CONFIG_LCD_PWM=n
 
 #
 # Settings for examples/uip
diff --git a/configs/stm3210e-eval/src/stm3210e-internal.h b/configs/stm3210e-eval/src/stm3210e-internal.h
index e86b9a66a3430c995ff449b5fe27de69a7a765de..0a953b5e67cdac37cc1f6afed629e128f3337048 100644
--- a/configs/stm3210e-eval/src/stm3210e-internal.h
+++ b/configs/stm3210e-eval/src/stm3210e-internal.h
@@ -101,6 +101,16 @@
 #define GPIO_FLASH_CS   (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|\
                          GPIO_OUTPUT_SET|GPIO_PORTB|GPIO_PIN2)
 
+/* Backlight control: PA.8
+ *
+ * If CONFIG_LCD_TIM1 (and CONFIG_STM32_TIM1) is defined, PA.8 will be
+ * configured as CH1OUT for variable backlight control.  Otherwise, the
+ * following definition will be used to support a discrete backlight control.
+ */
+ 
+#define GPIO_LCD_BACKLIGHT (GPIO_OUTPUT|GPIO_CNF_OUTPP|GPIO_MODE_50MHz|\
+                             GPIO_OUTPUT_CLEAR|GPIO_PORTA|GPIO_PIN8)
+
 /* USB Soft Connect Pullup: PB.14 */
 
 #define GPIO_USB_PULLUP (GPIO_OUTPUT|GPIO_CNF_OUTOD|GPIO_MODE_50MHz|\
diff --git a/configs/stm3210e-eval/src/up_lcd.c b/configs/stm3210e-eval/src/up_lcd.c
index 587d4092cf8f4a9e379d888d2806e6bd2530f711..481da54dd6ad667b8a343bf21f1ff13213a61c3f 100644
--- a/configs/stm3210e-eval/src/up_lcd.c
+++ b/configs/stm3210e-eval/src/up_lcd.c
@@ -84,11 +84,34 @@
 #  define CONFIG_LCD_MAXCONTRAST 1
 #endif
 
+/* Backlight */
+
+#ifndef CONFIG_LCD_BACKLIGHT
+#  undef CONFIG_LCD_PWM
+#endif
+
+#if defined(CONFIG_LCD_BACKLIGHT) && defined(CONFIG_LCD_PWM)
+#  if !defined(CONFIG_STM32_TIM1)
+#    warning "CONFIG_LCD_PWM requires CONFIG_STM32_TIM1"
+#    undef CONFIG_LCD_PWM
+#  endif
+#  if defined(CONFIG_STM32_TIM1_FULL_REMAP)
+#    warning "PA8 cannot be configured as TIM1 CH1 with full remap"
+#    undef CONFIG_LCD_PWM
+#  endif
+#endif
+
+#if defined(CONFIG_LCD_BACKLIGHT) && defined(CONFIG_LCD_PWM)
+#  if CONFIG_LCD_MAXPOWER < 2
+#    warning "A larger value of CONFIG_LCD_MAXPOWER is recommended"
+#  endif
+#endif
+
 /* Check power setting */
 
 #if !defined(CONFIG_LCD_MAXPOWER) || CONFIG_LCD_MAXPOWER < 1
 #  undef CONFIG_LCD_MAXPOWER
-#  ifdef CONFIG_LCD_BACKLIGHT
+#  if defined(CONFIG_LCD_BACKLIGHT) && defined(CONFIG_LCD_PWM)
 #    define CONFIG_LCD_MAXPOWER 100
 #  else
 #    define CONFIG_LCD_MAXPOWER 1
@@ -113,21 +136,6 @@
 #  define CONFIG_LCD_LANDSCAPE 1
 #endif
 
-/* Backlight */
-
-#ifdef CONFIG_LCD_BACKLIGHT
-#  ifndef CONFIG_STM32_TIM1
-#    error "CONFIG_STM32_TIM1 to use the LCD backlight controls"
-#  endif
-#  if CONFIG_LCD_MAXPOWER < 2
-#    warning "A larger value of CONFIG_LCD_MAXPOWER is recommended"
-#  endif
-#endif
-
-#if defined(CONFIG_STM32_TIM1_FULL_REMAP)
-#  error "PA8 cannot be configured as TIM1 CH1 with full remap"
-#endif
-
 /* When reading 16-bit gram data, there may some shifts in the returned data
  * and/or there may be some colors in the incorrect posisions:
  *
@@ -969,6 +977,7 @@ static int stm3210e_setpower(struct lcd_dev_s *dev, int power)
   if (power > 0)
     {
 #ifdef CONFIG_LCD_BACKLIGHT
+#ifdef CONFIG_LCD_PWM
       uint32_t duty;
 
       /* Caclulate the new backlight duty.  It is a faction of the timer1
@@ -982,6 +991,11 @@ static int stm3210e_setpower(struct lcd_dev_s *dev, int power)
           duty = LCD_BL_TIMER_PERIOD - 1;
         }
       putreg16((uint16_t)duty, STM32_TIM1_CCR1);
+#else
+      /* Turn the backlight on */
+
+      stm32_gpiowrite(GPIO_LCD_BACKLIGHT, true);
+#endif
 #endif
       /* Then turn the display on */
 
@@ -998,7 +1012,15 @@ static int stm3210e_setpower(struct lcd_dev_s *dev, int power)
     }
   else
     {
+      /* Turn the display off */
+
       stm3210e_writereg(LCD_REG_7, 0); 
+
+      /* Turn the backlight off */
+
+#if defined(CONFIG_LCD_BACKLIGHT) && !defined(CONFIG_LCD_PWM)
+      stm32_gpiowrite(GPIO_LCD_BACKLIGHT, true);
+#endif
       g_lcddev.power = 0;
     }
 
@@ -1279,6 +1301,7 @@ static inline void stm3210e_lcdinitialize(void)
 #ifdef CONFIG_LCD_BACKLIGHT
 static void stm3210e_backlight(void)
 {
+#ifdef CONFIG_LCD_PWM
   uint16_t ccmr;
   uint16_t ccer;
   uint16_t cr2;
@@ -1387,6 +1410,9 @@ static void stm3210e_backlight(void)
   lcddbg("CCR4:    %04x\n", getreg32(STM32_TIM1_CCR4));
   lcddbg("CCR4:    %04x\n", getreg32(STM32_TIM1_CCR4));
   lcddbg("DMAR:    %04x\n", getreg32(STM32_TIM1_DMAR));
+#else
+  stm32_configgpio(GPIO_LCD_BACKLIGHT);
+#endif
 }
 #endif