diff -Nur linux-2.6.19-g500-010/arch/arm/mach-s3c2410/devs.c linux-2.6.19-g500-011/arch/arm/mach-s3c2410/devs.c
--- linux-2.6.19-g500-010/arch/arm/mach-s3c2410/devs.c	2006-12-17 15:28:54.000000000 +0100
+++ linux-2.6.19-g500-011/arch/arm/mach-s3c2410/devs.c	2006-12-17 15:32:59.000000000 +0100
@@ -31,6 +31,7 @@
 #include <asm/arch/udc.h>
 #include <asm/arch/ts.h>
 #include <asm/arch/buttons.h>
+#include <asm/arch/lcd.h>
 
 #include "devs.h"
 #include "cpu.h"
@@ -603,6 +604,22 @@
 	}
 }
 
+struct platform_device s3c_device_bl = {
+	.name		  = "s3c2410-bl",
+	.id		  = -1,
+};
+
+EXPORT_SYMBOL(s3c_device_bl);
+
+static struct s3c2410_bl_mach_info s3c2410bl_info;
+
+void __init set_s3c2410bl_info(struct s3c2410_bl_mach_info *hard_s3c2410bl_info)
+{
+	memcpy(&s3c2410bl_info,hard_s3c2410bl_info,sizeof(struct s3c2410_bl_mach_info));
+	s3c_device_bl.dev.platform_data = &s3c2410bl_info;
+}
+EXPORT_SYMBOL(set_s3c2410bl_info);
+
 #ifdef CONFIG_CPU_S3C2440
 
 /* Camif Controller */
diff -Nur linux-2.6.19-g500-010/arch/arm/mach-s3c2410/devs.h linux-2.6.19-g500-011/arch/arm/mach-s3c2410/devs.h
--- linux-2.6.19-g500-010/arch/arm/mach-s3c2410/devs.h	2006-12-17 15:28:54.000000000 +0100
+++ linux-2.6.19-g500-011/arch/arm/mach-s3c2410/devs.h	2006-12-17 15:33:13.000000000 +0100
@@ -43,6 +43,7 @@
 extern struct platform_device s3c_device_usbgadget;
 extern struct platform_device s3c_device_ts;
 extern struct platform_device s3c_device_buttons;
+extern struct platform_device s3c_device_bl;
 
 /* s3c2440 specific devices */
 
diff -Nur linux-2.6.19-g500-010/arch/arm/mach-s3c2410/mach-g500.c linux-2.6.19-g500-011/arch/arm/mach-s3c2410/mach-g500.c
--- linux-2.6.19-g500-010/arch/arm/mach-s3c2410/mach-g500.c	2006-12-17 15:28:54.000000000 +0100
+++ linux-2.6.19-g500-011/arch/arm/mach-s3c2410/mach-g500.c	2006-12-17 15:37:22.000000000 +0100
@@ -41,6 +41,8 @@
 #include <asm/arch/fb.h>
 #include <asm/arch/mmc.h>
 #include <asm/arch/ts.h>
+#include <asm/arch/buttons.h>
+#include <asm/arch/lcd.h>
 
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/partitions.h>
@@ -214,6 +216,68 @@
 	.size = ARRAY_SIZE(g500_buttons),
 };
 
+static void g500_backlight_power(int on)
+{
+	s3c2410_gpio_setpin(S3C2410_GPB0, 0);
+	s3c2410_gpio_pullup(S3C2410_GPB0, 0);
+
+	s3c2410_gpio_cfgpin(S3C2410_GPB0,
+			(on) ? S3C2410_GPB0_TOUT0 : S3C2410_GPB0_OUTP);
+}
+
+static void g500_lcd_power(int on)
+{
+	s3c2410_gpio_setpin(S3C2410_GPC0, on);
+}
+
+static void g500_set_brightness(int tcmpb0)
+{
+	unsigned long tcfg0;
+	unsigned long tcfg1;
+	unsigned long tcon;
+
+	/* configure power on/off */
+	g500_backlight_power(tcmpb0 ? 1 : 0);
+
+
+	tcfg0=readl(S3C2410_TCFG0);
+	tcfg1=readl(S3C2410_TCFG1);
+
+	tcfg0 &= ~S3C2410_TCFG_PRESCALER0_MASK;
+	tcfg0 |= 0x18;
+
+	tcfg1 &= ~S3C2410_TCFG1_MUX0_MASK;
+	tcfg1 |= S3C2410_TCFG1_MUX0_DIV2;
+
+	writel(tcfg0, S3C2410_TCFG0);
+	writel(tcfg1, S3C2410_TCFG1);
+	writel(0x31, S3C2410_TCNTB(0));
+
+	tcon = readl(S3C2410_TCON);
+	tcon &= ~0x0F;
+	tcon |= S3C2410_TCON_T0RELOAD;
+	tcon |= S3C2410_TCON_T0MANUALUPD;
+
+	writel(tcon, S3C2410_TCON);
+	writel(0x31, S3C2410_TCNTB(0));
+	writel(tcmpb0, S3C2410_TCMPB(0));
+
+	/* start the timer running */
+	tcon |= S3C2410_TCON_T0START;
+	tcon &= ~S3C2410_TCON_T0MANUALUPD;
+	writel(tcon, S3C2410_TCON);
+}
+
+static struct s3c2410_bl_mach_info g500_bl_cfg __initdata = {
+
+	.backlight_max          = 0x2c,
+	.backlight_default      = 0x16,
+	.backlight_power	= g500_backlight_power,
+	.set_brightness		= g500_set_brightness,
+	.backlight_power	= g500_backlight_power,
+	.lcd_power		= g500_lcd_power
+};
+
 static struct platform_device *g500_devices[] __initdata = {
 	&s3c_device_usb,
 	&s3c_device_lcd,
@@ -225,6 +289,7 @@
 	&s3c_device_sdi,
 	&s3c_device_ts,
 	&s3c_device_buttons,
+	&s3c_device_bl,
 };
 
 static struct s3c24xx_board g500_board __initdata = {
@@ -247,6 +312,7 @@
   s3c_device_sdi.dev.platform_data = &g500_mmc_cfg;
 	set_s3c2410ts_info(&g500_ts_cfg);
 	s3c24xx_butt_set_platdata(&g500_bt_cfg);
+	set_s3c2410bl_info(&g500_bl_cfg);
 
 	s3c2410_pm_init();
 
diff -Nur linux-2.6.19-g500-010/include/asm-arm/arch-s3c2410/lcd.h linux-2.6.19-g500-011/include/asm-arm/arch-s3c2410/lcd.h
--- linux-2.6.19-g500-010/include/asm-arm/arch-s3c2410/lcd.h	1970-01-01 01:00:00.000000000 +0100
+++ linux-2.6.19-g500-011/include/asm-arm/arch-s3c2410/lcd.h	2006-12-17 15:38:08.000000000 +0100
@@ -0,0 +1,33 @@
+/* linux/include/asm/arch-s3c2410/lcd.h
+ *
+ * Copyright (c) 2005 Arnaud Patard <arnaud.patard@rtp-net.org>
+ *
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ *
+ *  Changelog:
+ *     14-Mar-2005     RTP     Created file
+ *     07-Apr-2005     RTP     Renamed to s3c2410_lcd.h
+ *     03-Aug-2005     RTP     Renamed to lcd.h
+ */
+
+#ifndef __ASM_ARM_LCD_H
+#define __ASM_ARM_LCD_H
+
+struct s3c2410_bl_mach_info {
+	int		lcd_power_value;
+	int		backlight_power_value;
+	int		brightness_value;
+	int             backlight_max;
+	int             backlight_default;
+	void            (*backlight_power)(int);
+	void            (*set_brightness)(int);
+	void		(*lcd_power)(int);
+};
+
+void __init set_s3c2410bl_info(struct s3c2410_bl_mach_info *hard_s3c2410bl_info);
+
+#endif /* __ASM_ARM_LCD_H */

