diff -Naur linux-2.6.25/drivers/video/backlight/Kconfig linux-2.6.25.ep93xx/drivers/video/backlight/Kconfig
--- linux-2.6.25/drivers/video/backlight/Kconfig	2008-04-16 21:49:44.000000000 -0500
+++ linux-2.6.25.ep93xx/drivers/video/backlight/Kconfig	2008-08-22 09:52:32.000000000 -0500
@@ -112,3 +112,28 @@
 	help
 	  If you have a Intel LE80578 (Carillo Ranch) say Y to enable the
 	  backlight driver.
+
+config BACKLIGHT_PPCE7
+	tristate "EMAC Inc. PPC-E7 SBC Backlight Driver"
+	depends on BACKLIGHT_CLASS_DEVICE && MACH_PPCE7
+	default y
+	help
+	  If you have a PPC-E7 SBC, say y to enable the
+	  backlight driver.
+
+config BACKLIGHT_THERMO
+	tristate "EMAC Inc. THERMO SBC Backlight Driver"
+	depends on BACKLIGHT_CLASS_DEVICE && MACH_THERMOTRON
+	default y
+	help
+	  If you have a Thermotron board, say y to enable the
+	  backlight driver.
+
+config BACKLIGHT_SOM9307
+	tristate "EMAC Inc. SoM-9307M Backlight Driver"
+	depends on BACKLIGHT_CLASS_DEVICE && MACH_SOM9307M
+	default y
+	help
+	  If you have a SoM-9307M, say y to enable the
+	  backlight driver.
+
diff -Naur linux-2.6.25/drivers/video/backlight/Makefile linux-2.6.25.ep93xx/drivers/video/backlight/Makefile
--- linux-2.6.25/drivers/video/backlight/Makefile	2008-04-16 21:49:44.000000000 -0500
+++ linux-2.6.25.ep93xx/drivers/video/backlight/Makefile	2008-08-22 09:52:32.000000000 -0500
@@ -10,3 +10,6 @@
 obj-$(CONFIG_BACKLIGHT_OMAP1)	+= omap1_bl.o
 obj-$(CONFIG_BACKLIGHT_PROGEAR) += progear_bl.o
 obj-$(CONFIG_BACKLIGHT_CARILLO_RANCH) += cr_bllcd.o
+obj-$(CONFIG_BACKLIGHT_PPCE7)	+= ppce7_bl.o
+obj-$(CONFIG_BACKLIGHT_THERMO)	+= thermo_bl.o
+obj-$(CONFIG_BACKLIGHT_SOM9307)	+= som9307_bl.o
diff -Naur linux-2.6.25/drivers/video/backlight/ppce7_bl.c linux-2.6.25.ep93xx/drivers/video/backlight/ppce7_bl.c
--- linux-2.6.25/drivers/video/backlight/ppce7_bl.c	1969-12-31 18:00:00.000000000 -0600
+++ linux-2.6.25.ep93xx/drivers/video/backlight/ppce7_bl.c	2008-08-18 14:05:42.000000000 -0500
@@ -0,0 +1,172 @@
+/*
+ *  Backlight Driver for the EMAC Inc. PPC-E7
+ *
+ *  Copyright (c) 2008 EMAC Inc.
+ *
+ *  Based on Sharp's Corgi Backlight Driver
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/mutex.h>
+#include <linux/fb.h>
+#include <linux/backlight.h>
+
+#include <asm/io.h>
+#include <asm/hardware.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/arch/ep93xx_util.h>
+
+static int ppce7bl_intensity;
+static struct backlight_properties ppce7bl_data;
+static struct backlight_device *ppce7_backlight_device;
+
+static DEFINE_SPINLOCK(bl_lock);
+
+static unsigned long ppce7bl_flags;
+#define PPCE7BL_SUSPENDED     0x01
+#define PPCE7BL_BATTLOW       0x02
+
+static int ppce7bl_send_intensity(struct backlight_device *bd)
+{
+	unsigned long flags;
+	int intensity = bd->props.brightness;
+
+	if (bd->props.power != FB_BLANK_UNBLANK)
+		intensity = 0;
+	if (bd->props.fb_blank != FB_BLANK_UNBLANK)
+		intensity = 0;
+	if (ppce7bl_flags & PPCE7BL_SUSPENDED)
+		intensity = 0;
+
+	spin_lock_irqsave(&bl_lock, flags);
+	if(intensity == 0)
+		outl(inl(GPIO_PFDR) & ~(0x20), GPIO_PFDR); //Shut off the backlight	
+	else
+	{
+		outl(inl(GPIO_PFDR) | 0x20, GPIO_PFDR); // Ding!
+		outl((( (255-(u8)intensity) << 8)+0xFF), BRIGHTNESS);
+	}
+
+	spin_unlock_irqrestore(&bl_lock, flags);	
+
+	ppce7bl_intensity = intensity;
+
+	return 0;
+}
+
+#ifdef CONFIG_PM
+static int ppce7bl_suspend(struct platform_device *pdev, pm_message_t state)
+{
+	struct backlight_device *bd = platform_get_drvdata(pdev);
+
+	ppce7bl_flags |= PPCE7BL_SUSPENDED;
+	backlight_update_status(bd);
+	return 0;
+}
+
+static int ppce7bl_resume(struct platform_device *pdev)
+{
+	struct backlight_device *bd = platform_get_drvdata(pdev);
+
+	ppce7bl_flags &= ~PPCE7BL_SUSPENDED;
+	backlight_update_status(bd);
+	return 0;
+}
+#else
+#define ppce7bl_suspend	NULL
+#define ppce7bl_resume	NULL
+#endif
+
+static int ppce7bl_get_intensity(struct backlight_device *bd)
+{
+	return ppce7bl_intensity;
+}
+
+/*
+ * Called when the battery is low to limit the backlight intensity.
+ * If limit==0 clear any limit, otherwise limit the intensity
+ */
+void ppce7bl_limit_intensity(int limit)
+{
+	if (limit)
+		ppce7bl_flags |= PPCE7BL_BATTLOW;
+	else
+		ppce7bl_flags &= ~PPCE7BL_BATTLOW;
+	backlight_update_status(ppce7_backlight_device);
+}
+EXPORT_SYMBOL(ppce7bl_limit_intensity);
+
+
+static struct backlight_ops ppce7bl_ops = {
+	.get_brightness = ppce7bl_get_intensity,
+	.update_status  = ppce7bl_send_intensity,
+};
+
+static int ppce7bl_probe(struct platform_device *pdev)
+{
+
+	ppce7_backlight_device = backlight_device_register ("ppce7-bl",
+		&pdev->dev, NULL, &ppce7bl_ops);
+	if (IS_ERR (ppce7_backlight_device))
+		return PTR_ERR (ppce7_backlight_device);
+
+	platform_set_drvdata(pdev, ppce7_backlight_device);
+
+	ppce7_backlight_device->props.max_brightness = 255;
+	ppce7_backlight_device->props.power = FB_BLANK_UNBLANK;
+	ppce7_backlight_device->props.brightness = 255;
+	backlight_update_status(ppce7_backlight_device);
+
+	printk("ppce7 Backlight Driver Initialized.\n");
+	return 0;
+}
+
+static int ppce7bl_remove(struct platform_device *pdev)
+{
+	struct backlight_device *bd = platform_get_drvdata(pdev);
+
+	ppce7bl_data.power = 0;
+	ppce7bl_data.brightness = 0;
+	backlight_update_status(bd);
+
+	backlight_device_unregister(bd);
+
+	printk("ppce7 Backlight Driver Unloaded\n");
+	return 0;
+}
+
+static struct platform_driver ppce7bl_driver = {
+	.probe		= ppce7bl_probe,
+	.remove		= ppce7bl_remove,
+	.suspend	= ppce7bl_suspend,
+	.resume		= ppce7bl_resume,
+	.driver		= {
+		.name	= "ppce7-bl",
+	},
+};
+
+static int __init ppce7bl_init(void)
+{
+	return platform_driver_register(&ppce7bl_driver);
+}
+
+static void __exit ppce7bl_exit(void)
+{
+	platform_driver_unregister(&ppce7bl_driver);
+}
+
+module_init(ppce7bl_init);
+module_exit(ppce7bl_exit);
+
+MODULE_AUTHOR("Michael Welling <mwelling@emacinc.com>");
+MODULE_DESCRIPTION("EMAC Inc. PPC-E7 Backlight Driver");
+MODULE_LICENSE("GPL");
+
diff -Naur linux-2.6.25/drivers/video/backlight/som9307_bl.c linux-2.6.25.ep93xx/drivers/video/backlight/som9307_bl.c
--- linux-2.6.25/drivers/video/backlight/som9307_bl.c	1969-12-31 18:00:00.000000000 -0600
+++ linux-2.6.25.ep93xx/drivers/video/backlight/som9307_bl.c	2008-12-08 12:37:17.000000000 -0600
@@ -0,0 +1,188 @@
+/*
+ *  Backlight Driver for the EMAC Inc. SOM-9307
+ *
+ *  Copyright (c) 2008 EMAC Inc.
+ *
+ *  Based on Sharp's Corgi Backlight Driver
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/mutex.h>
+#include <linux/fb.h>
+#include <linux/backlight.h>
+
+#include <asm/io.h>
+#include <asm/hardware.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/arch/ep93xx_util.h>
+
+static int som9307bl_intensity;
+static struct backlight_properties som9307bl_data;
+static struct backlight_device *som9307_backlight_device;
+
+static DEFINE_SPINLOCK(bl_lock);
+
+static unsigned long som9307bl_flags;
+#define SOM9307BL_SUSPENDED     0x01
+#define SOM9307BL_BATTLOW       0x02
+
+static int som9307bl_send_intensity(struct backlight_device *bd)
+{
+	unsigned long flags;
+	unsigned int   mask;
+
+	int intensity = bd->props.brightness;
+
+#ifdef CONFIG_MACH_SOM9307M_SMI
+	mask = 0x08;
+#else 
+	mask = 0x01;
+#endif
+
+	if (bd->props.power != FB_BLANK_UNBLANK)
+		intensity = 0;
+	if (bd->props.fb_blank != FB_BLANK_UNBLANK)
+		intensity = 0;
+	if (som9307bl_flags & SOM9307BL_SUSPENDED)
+		intensity = 0;
+
+	spin_lock_irqsave(&bl_lock, flags);
+
+	outl(inl(GPIO_PCDDR) | mask, GPIO_PCDDR);
+
+	if(intensity == 0)
+	{
+		//outl(inl(GPIO_PADR) & ~(CONFIG_FB_EP93XX_GPIO), GPIO_PADR); //Shut off the backlight
+		outl(inl(GPIO_PCDR) & ~(mask), GPIO_PCDR);
+
+	}
+	else
+	{
+		//outl(inl(GPIO_PADR) | CONFIG_FB_EP93XX_GPIO, GPIO_PADR); // Ding!
+		outl(inl(GPIO_PCDR)  | mask, GPIO_PCDR);
+		outl((( (u8)intensity << 8)+0xFF), BRIGHTNESS);
+	}
+
+	spin_unlock_irqrestore(&bl_lock, flags);	
+
+	som9307bl_intensity = intensity;
+
+	return 0;
+}
+
+#ifdef CONFIG_PM
+static int som9307bl_suspend(struct platform_device *pdev, pm_message_t state)
+{
+	struct backlight_device *bd = platform_get_drvdata(pdev);
+
+	som9307bl_flags |= SOM9307BL_SUSPENDED;
+	backlight_update_status(bd);
+	return 0;
+}
+
+static int som9307bl_resume(struct platform_device *pdev)
+{
+	struct backlight_device *bd = platform_get_drvdata(pdev);
+
+	som9307bl_flags &= ~SOM9307BL_SUSPENDED;
+	backlight_update_status(bd);
+	return 0;
+}
+#else
+#define som9307bl_suspend	NULL
+#define som9307bl_resume	NULL
+#endif
+
+static int som9307bl_get_intensity(struct backlight_device *bd)
+{
+	return som9307bl_intensity;
+}
+
+/*
+ * Called when the battery is low to limit the backlight intensity.
+ * If limit==0 clear any limit, otherwise limit the intensity
+ */
+void som9307bl_limit_intensity(int limit)
+{
+	if (limit)
+		som9307bl_flags |= SOM9307BL_BATTLOW;
+	else
+		som9307bl_flags &= ~SOM9307BL_BATTLOW;
+	backlight_update_status(som9307_backlight_device);
+}
+EXPORT_SYMBOL(som9307bl_limit_intensity);
+
+
+static struct backlight_ops som9307bl_ops = {
+	.get_brightness = som9307bl_get_intensity,
+	.update_status  = som9307bl_send_intensity,
+};
+
+static int som9307bl_probe(struct platform_device *pdev)
+{
+
+	som9307_backlight_device = backlight_device_register ("som9307-bl",
+		&pdev->dev, NULL, &som9307bl_ops);
+	if (IS_ERR (som9307_backlight_device))
+		return PTR_ERR (som9307_backlight_device);
+
+	platform_set_drvdata(pdev, som9307_backlight_device);
+
+	som9307_backlight_device->props.max_brightness = 255;
+	som9307_backlight_device->props.power = FB_BLANK_UNBLANK;
+	som9307_backlight_device->props.brightness = 255;
+	backlight_update_status(som9307_backlight_device);
+
+	printk("SOM-9307 Backlight Driver Initialized.\n");
+	return 0;
+}
+
+static int som9307bl_remove(struct platform_device *pdev)
+{
+	struct backlight_device *bd = platform_get_drvdata(pdev);
+
+	som9307bl_data.power = 0;
+	som9307bl_data.brightness = 0;
+	backlight_update_status(bd);
+
+	backlight_device_unregister(bd);
+
+	printk("som9307 Backlight Driver Unloaded\n");
+	return 0;
+}
+
+static struct platform_driver som9307bl_driver = {
+	.probe		= som9307bl_probe,
+	.remove		= som9307bl_remove,
+	.suspend	= som9307bl_suspend,
+	.resume		= som9307bl_resume,
+	.driver		= {
+		.name	= "som9307-bl",
+	},
+};
+
+static int __init som9307bl_init(void)
+{
+	return platform_driver_register(&som9307bl_driver);
+}
+
+static void __exit som9307bl_exit(void)
+{
+	platform_driver_unregister(&som9307bl_driver);
+}
+
+module_init(som9307bl_init);
+module_exit(som9307bl_exit);
+
+MODULE_AUTHOR("Michael Welling <mwelling@emacinc.com>");
+MODULE_DESCRIPTION("EMAC Inc. PPC-E7 Backlight Driver");
+MODULE_LICENSE("GPL");
+
diff -Naur linux-2.6.25/drivers/video/backlight/thermo_bl.c linux-2.6.25.ep93xx/drivers/video/backlight/thermo_bl.c
--- linux-2.6.25/drivers/video/backlight/thermo_bl.c	1969-12-31 18:00:00.000000000 -0600
+++ linux-2.6.25.ep93xx/drivers/video/backlight/thermo_bl.c	2008-08-22 09:52:32.000000000 -0500
@@ -0,0 +1,174 @@
+/*
+ *  Backlight Driver for the EMAC Inc. Thermotron Board.
+ *
+ *  Copyright (c) 2008 EMAC Inc.
+ *
+ *  Based on Sharp's Corgi Backlight Driver
+ *
+ * This file is subject to the terms and conditions of the GNU General Public
+ * License.  See the file "COPYING" in the main directory of this archive
+ * for more details.
+ */
+
+#include <linux/module.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/platform_device.h>
+#include <linux/mutex.h>
+#include <linux/fb.h>
+#include <linux/backlight.h>
+
+#include <asm/io.h>
+#include <asm/hardware.h>
+#include <asm/mach-types.h>
+#include <asm/mach/arch.h>
+#include <asm/arch/ep93xx_util.h>
+
+static int thermobl_intensity;
+static struct backlight_properties thermobl_data;
+static struct backlight_device *thermo_backlight_device;
+
+static DEFINE_SPINLOCK(bl_lock);
+
+static unsigned long thermobl_flags;
+#define THERMOBL_SUSPENDED     0x01
+#define THERMOBL_BATTLOW       0x02
+
+static int thermobl_send_intensity(struct backlight_device *bd)
+{
+	unsigned long flags;
+	int intensity = bd->props.brightness;
+
+	if (bd->props.power != FB_BLANK_UNBLANK)
+		intensity = 0;
+	if (bd->props.fb_blank != FB_BLANK_UNBLANK)
+		intensity = 0;
+	if (thermobl_flags & THERMOBL_SUSPENDED)
+		intensity = 0;
+
+	spin_lock_irqsave(&bl_lock, flags);
+	if(intensity == 0)
+		outl(inl(GPIO_PADR) & ~(0x01), GPIO_PADR); //Shut off the backlight	
+	else
+	{
+		//outl(inl(GPIO_PFDR) | 0x20, GPIO_PFDR); // Ding!
+		outl(inl(GPIO_PADR) | 0x01, GPIO_PADR); // Ding!
+		//outl((( (255-(u8)intensity) << 8)+0xFF), BRIGHTNESS);
+		outl((( ((u8)intensity) << 8)+0xFF), BRIGHTNESS);
+	}
+
+	spin_unlock_irqrestore(&bl_lock, flags);	
+
+	thermobl_intensity = intensity;
+
+	return 0;
+}
+
+#ifdef CONFIG_PM
+static int thermobl_suspend(struct platform_device *pdev, pm_message_t state)
+{
+	struct backlight_device *bd = platform_get_drvdata(pdev);
+
+	thermobl_flags |= THERMOBL_SUSPENDED;
+	backlight_update_status(bd);
+	return 0;
+}
+
+static int thermobl_resume(struct platform_device *pdev)
+{
+	struct backlight_device *bd = platform_get_drvdata(pdev);
+
+	thermobl_flags &= ~THERMOBL_SUSPENDED;
+	backlight_update_status(bd);
+	return 0;
+}
+#else
+#define thermobl_suspend	NULL
+#define thermobl_resume	NULL
+#endif
+
+static int thermobl_get_intensity(struct backlight_device *bd)
+{
+	return thermobl_intensity;
+}
+
+/*
+ * Called when the battery is low to limit the backlight intensity.
+ * If limit==0 clear any limit, otherwise limit the intensity
+ */
+void thermobl_limit_intensity(int limit)
+{
+	if (limit)
+		thermobl_flags |= THERMOBL_BATTLOW;
+	else
+		thermobl_flags &= ~THERMOBL_BATTLOW;
+	backlight_update_status(thermo_backlight_device);
+}
+EXPORT_SYMBOL(thermobl_limit_intensity);
+
+
+static struct backlight_ops thermobl_ops = {
+	.get_brightness = thermobl_get_intensity,
+	.update_status  = thermobl_send_intensity,
+};
+
+static int thermobl_probe(struct platform_device *pdev)
+{
+
+	thermo_backlight_device = backlight_device_register ("thermo-bl",
+		&pdev->dev, NULL, &thermobl_ops);
+	if (IS_ERR (thermo_backlight_device))
+		return PTR_ERR (thermo_backlight_device);
+
+	platform_set_drvdata(pdev, thermo_backlight_device);
+
+	thermo_backlight_device->props.max_brightness = 255;
+	thermo_backlight_device->props.power = FB_BLANK_UNBLANK;
+	thermo_backlight_device->props.brightness = 255;
+	backlight_update_status(thermo_backlight_device);
+
+	printk("thermo Backlight Driver Initialized.\n");
+	return 0;
+}
+
+static int thermobl_remove(struct platform_device *pdev)
+{
+	struct backlight_device *bd = platform_get_drvdata(pdev);
+
+	thermobl_data.power = 0;
+	thermobl_data.brightness = 0;
+	backlight_update_status(bd);
+
+	backlight_device_unregister(bd);
+
+	printk("thermo Backlight Driver Unloaded\n");
+	return 0;
+}
+
+static struct platform_driver thermobl_driver = {
+	.probe		= thermobl_probe,
+	.remove		= thermobl_remove,
+	.suspend	= thermobl_suspend,
+	.resume		= thermobl_resume,
+	.driver		= {
+		.name	= "thermo-bl",
+	},
+};
+
+static int __init thermobl_init(void)
+{
+	return platform_driver_register(&thermobl_driver);
+}
+
+static void __exit thermobl_exit(void)
+{
+	platform_driver_unregister(&thermobl_driver);
+}
+
+module_init(thermobl_init);
+module_exit(thermobl_exit);
+
+MODULE_AUTHOR("Michael Welling <mwelling@emacinc.com>");
+MODULE_DESCRIPTION("EMAC Inc. Thermotron Backlight Driver");
+MODULE_LICENSE("GPL");
+
