Index: backlight-e200.c
===================================================================
--- backlight-e200.c	(revision 13308)
+++ backlight-e200.c	(working copy)
@@ -24,6 +24,8 @@
 
 static unsigned short backlight_brightness;
 static bool backlight_is_on;
+static short backlight_delay = 30000;
+static unsigned short current_backlight_brightness;
 
 int __backlight_is_on(void)
 {
@@ -35,20 +37,35 @@
     backlight_brightness = brightness;
     pp_i2c_send( 0x46, 0x23, backlight_brightness);
     backlight_is_on = true;
+	current_backlight_brightness = backlight_brightness;
 }
 
 void __backlight_on(void)
 {
+	int i;
+	if (current_backlight_brightness == backlight_brightness) /* why is backlight on called on every button press?? */
+		return;
     lcd_enable(true); /* power on lcd */
-    pp_i2c_send( 0x46, 0x23, backlight_brightness);
+	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);
+	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;
 }
 
 
