Patch FS#5712 by Michael Sevakis - X5 Backlight brightness improvement/fix

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@10322 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Linus Nielsen Feltzing 2006-07-25 15:21:31 +00:00
parent 8bb4bab54b
commit f18f9a8061
6 changed files with 32 additions and 19 deletions

View File

@ -349,7 +349,7 @@ static const struct bit_entry hd_bits[] =
"remote caption backlight", off_on },
#endif
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
{4, S_O(brightness), 9, "brightness", NULL },
{4, S_O(brightness), DEFAULT_BRIGHTNESS_SETTING, "brightness", NULL },
#endif
#ifdef HAVE_BACKLIGHT_PWM_FADING
/* backlight fading */

View File

@ -216,3 +216,4 @@ Daniel Ankers
Paul Louden
Rainer Sinsch
Plácido Revilla
Michael Sevakis

View File

@ -659,28 +659,26 @@ bool is_remote_backlight_on(void) {return true;}
void backlight_set_brightness(int val)
{
#ifndef SIMULATOR
/* set H300 brightness by changing the PWM
accepts 0..15 but note that 0 and 1 give a black display! */
/* set brightness by changing the PWM
* accepts 0..15 but note that 0 and 1 give a black display on H300!
* 0 is black on the X5.
*/
/* disable IRQs while bitbanging */
int old_irq_level = set_irq_level(HIGHEST_IRQ_LEVEL);
val &= 0x0F;
/* Clamp setting to range */
if(val<MIN_BRIGHTNESS_SETTING)
val=MIN_BRIGHTNESS_SETTING;
else if(val>MAX_BRIGHTNESS_SETTING)
val=MAX_BRIGHTNESS_SETTING;
/* shift one bit left */
val <<= 1;
/* enable PWM */
val |= 0x01;
pcf50606_write(0x35, val);
pcf50606_write(0x35, (val << 1) | 0x01); /* 512Hz, Enable PWM */
/* enable IRQs again */
set_irq_level(old_irq_level);
#else
val=0;
val=0;
#endif
}
#endif

View File

@ -53,7 +53,16 @@ void sim_remote_backlight(int value);
#endif
#ifdef HAVE_BACKLIGHT_BRIGHTNESS
#define MIN_BRIGHTNESS_SETTING 2
#define MAX_BRIGHTNESS_SETTING 15
#ifdef IAUDIO_X5
/* PFC50506 can output 0%-100% duty cycle but D305A expects %15-100%. */
#define MIN_BRIGHTNESS_SETTING 1 /* 15/16 (93.75%) */
#define MAX_BRIGHTNESS_SETTING 13 /* 3/16 (18.75%) */
#define DEFAULT_BRIGHTNESS_SETTING 8 /* 8/16 (50.00%) = x5 boot default */
#else
#define MIN_BRIGHTNESS_SETTING 2 /* 2/16 (12.50%) */
#define MAX_BRIGHTNESS_SETTING 15 /* 15/16 (93.75%) */
#define DEFAULT_BRIGHTNESS_SETTING 9 /* 9/16 (56.25%) */
#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
void backlight_set_brightness(int val);
#endif

View File

@ -25,14 +25,13 @@
void __backlight_on(void)
{
int level = set_irq_level(HIGHEST_IRQ_LEVEL);
pcf50606_write(0x38, 0x30); /* Backlight ON */
pcf50606_write(0x38, 0xb0); /* Backlight ON, GPO1INV=1, GPO1ACT=011 */
set_irq_level(level);
}
void __backlight_off(void)
{
int level = set_irq_level(HIGHEST_IRQ_LEVEL);
pcf50606_write(0x38, 0x70); /* Backlight OFF */
pcf50606_write(0x38, 0x80); /* Backlight OFF, GPO1INV=1, GPO1ACT=000 */
set_irq_level(level);
}

View File

@ -169,6 +169,12 @@ void pcf50606_init(void)
pcf50606_write(0x39, 0x00); /* GPOOD0 = green led OFF */
pcf50606_write(0x3a, 0x00); /* GPOOD1 = red led OFF */
pcf50606_write(0x35, 0xf1); /* Backlight PWM = 7kHz 8/16 */
pcf50606_write(0x38, 0x30); /* Backlight ON */
/* D305A datasheet says PWM clock frequency should be 400Hz - 2000Hz so
* I changed it from 7kHz to 512Hz. The lower frequency looks the same.
* GPO1 is also inverted so that display brightness increases with PWM
* setting which also lets the X5 share the H300's
* set_backlight_brightness code.
*/
pcf50606_write(0x35, 0x11); /* Backlight PWM = 512Hz, 8/16, Active */
pcf50606_write(0x38, 0xb0); /* Backlight ON, GPO1INV=1, GPO1ACT=011 */
}