Index: backlight-e200.c
===================================================================
--- backlight-e200.c	(revision 13373)
+++ backlight-e200.c	(working copy)
@@ -24,6 +24,8 @@
 
 static unsigned short backlight_brightness = DEFAULT_BRIGHTNESS_SETTING;
 static bool backlight_is_on = false;
+static short backlight_delay = 30000;
+static unsigned short current_backlight_brightness;
 
 int __backlight_is_on(void)
 {
@@ -37,23 +39,38 @@
 void __backlight_set_brightness(int brightness)
 {
     backlight_brightness = brightness;
-    pp_i2c_send( 0x46, 0x23, backlight_brightness);
-    backlight_is_on = true;
+	pp_i2c_send( 0x46, 0x23, backlight_brightness);
+	backlight_is_on = true;
+	current_backlight_brightness = backlight_brightness;
 }
 
 void __backlight_on(void)
 {
-    lcd_enable(true); /* power on lcd */
-    pp_i2c_send( 0x46, 0x23, backlight_brightness);
-    backlight_is_on = true;
+	int i;
+	if (current_backlight_brightness == backlight_brightness)
+		return;
+	lcd_enable(true); /* power on lcd */
+	for(i=0; i <= backlight_brightness; i++)
+	{
+		udelay(backlight_delay);
+		pp_i2c_send( 0x46, 0x23, i);
+	}
+	backlight_is_on = true;
+	current_backlight_brightness = backlight_brightness;
 }
 
-void __backlight_off(void)
-{
-    pp_i2c_send( 0x46, 0x23, 0x0);
-    lcd_enable(false); /* power off lcd */
-    backlight_is_on = false;
-}
+ void __backlight_off(void)
+ {
+	int i;
+	for(i=current_backlight_brightness; i >= 0; i--)
+	{
+		udelay(backlight_delay);
+		pp_i2c_send( 0x46, 0x23, i);
+	}
+	lcd_enable(false); /* power off lcd */
+	backlight_is_on = false;
+	current_backlight_brightness = 0;
+ }
 
 
 void __button_backlight_on(void)
