--- firmware/target/arm/sandisk/sansa-e200/backlight-e200.c.orig 2007-06-07 02:30:15.000000000 -0400 +++ firmware/target/arm/sandisk/sansa-e200/backlight-e200.c 2007-06-15 22:47:52.000000000 -0400 @@ -23,6 +23,9 @@ #include "i2c-pp.h" static unsigned short backlight_brightness = DEFAULT_BRIGHTNESS_SETTING; +static short backlight_delay = 30000; +static bool backlight_is_on = false; +static unsigned short current_backlight_brightness; void __backlight_set_brightness(int brightness) { @@ -36,14 +39,30 @@ void __backlight_on(void) { - lcd_enable(true); /* power on lcd */ - pp_i2c_send( 0x46, 0x23, backlight_brightness); + 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 */ + 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; }