Index: firmware/target/coldfire/iaudio/x5/backlight-x5.c =================================================================== --- firmware/target/coldfire/iaudio/x5/backlight-x5.c (revision 17500) +++ firmware/target/coldfire/iaudio/x5/backlight-x5.c (working copy) @@ -28,10 +28,34 @@ { _backlight_set_brightness(DEFAULT_BRIGHTNESS_SETTING); _backlight_on(); - + return true; /* Backlight always ON after boot. */ } +static short saved_brightness=0; +static inline void save_brightness(short val) +{ + saved_brightness = val; +} + +static inline short load_brightness(void) +{ + return saved_brightness; +} + +static inline void __backlight_set_brightness(int val) +{ + /* disable IRQs while bitbanging */ + int old_irq_level = disable_irq_save(); + pcf50606_write(0x35, (val << 1) | 0x01); /* 512Hz, Enable PWM */ + /* enable IRQs again */ + restore_irq(old_irq_level); +} +static inline void _backlight_set_brightness_no_save(int val) +{ + __backlight_set_brightness(val); +} + void _backlight_on(void) { int level; @@ -42,10 +66,13 @@ level = disable_irq_save(); pcf50606_write(0x38, 0xb0); /* Backlight ON, GPO1INV=1, GPO1ACT=011 */ restore_irq(level); + _backlight_set_brightness_no_save(load_brightness()); } void _backlight_off(void) { + _backlight_set_brightness_no_save(0); +#if 0 int level = disable_irq_save(); pcf50606_write(0x38, 0x80); /* Backlight OFF, GPO1INV=1, GPO1ACT=000 */ restore_irq(level); @@ -60,16 +87,14 @@ else _lcd_sleep_timer = _lcd_sleep_timeout; #endif +#endif /* if 0 */ } /* set brightness by changing the PWM */ void _backlight_set_brightness(int val) { - /* disable IRQs while bitbanging */ - int old_irq_level = disable_irq_save(); - pcf50606_write(0x35, (val << 1) | 0x01); /* 512Hz, Enable PWM */ - /* enable IRQs again */ - restore_irq(old_irq_level); + save_brightness(val); + __backlight_set_brightness(val); } void _remote_backlight_on(void)