1
0
Fork 0
forked from len0rd/rockbox

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 }, "remote caption backlight", off_on },
#endif #endif
#ifdef HAVE_BACKLIGHT_BRIGHTNESS #ifdef HAVE_BACKLIGHT_BRIGHTNESS
{4, S_O(brightness), 9, "brightness", NULL }, {4, S_O(brightness), DEFAULT_BRIGHTNESS_SETTING, "brightness", NULL },
#endif #endif
#ifdef HAVE_BACKLIGHT_PWM_FADING #ifdef HAVE_BACKLIGHT_PWM_FADING
/* backlight fading */ /* backlight fading */

View file

@ -216,3 +216,4 @@ Daniel Ankers
Paul Louden Paul Louden
Rainer Sinsch Rainer Sinsch
Plácido Revilla 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) void backlight_set_brightness(int val)
{ {
#ifndef SIMULATOR #ifndef SIMULATOR
/* set H300 brightness by changing the PWM /* set brightness by changing the PWM
accepts 0..15 but note that 0 and 1 give a black display! */ * 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 */ /* disable IRQs while bitbanging */
int old_irq_level = set_irq_level(HIGHEST_IRQ_LEVEL); int old_irq_level = set_irq_level(HIGHEST_IRQ_LEVEL);
val &= 0x0F; /* Clamp setting to range */
if(val<MIN_BRIGHTNESS_SETTING) if(val<MIN_BRIGHTNESS_SETTING)
val=MIN_BRIGHTNESS_SETTING; val=MIN_BRIGHTNESS_SETTING;
else if(val>MAX_BRIGHTNESS_SETTING)
val=MAX_BRIGHTNESS_SETTING;
/* shift one bit left */ pcf50606_write(0x35, (val << 1) | 0x01); /* 512Hz, Enable PWM */
val <<= 1;
/* enable PWM */
val |= 0x01;
pcf50606_write(0x35, val);
/* enable IRQs again */ /* enable IRQs again */
set_irq_level(old_irq_level); set_irq_level(old_irq_level);
#else #else
val=0; val=0;
#endif #endif
} }
#endif #endif

View file

@ -53,7 +53,16 @@ void sim_remote_backlight(int value);
#endif #endif
#ifdef HAVE_BACKLIGHT_BRIGHTNESS #ifdef HAVE_BACKLIGHT_BRIGHTNESS
#define MIN_BRIGHTNESS_SETTING 2 #ifdef IAUDIO_X5
#define MAX_BRIGHTNESS_SETTING 15 /* 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); void backlight_set_brightness(int val);
#endif #endif

View file

@ -25,14 +25,13 @@
void __backlight_on(void) void __backlight_on(void)
{ {
int level = set_irq_level(HIGHEST_IRQ_LEVEL); 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); set_irq_level(level);
} }
void __backlight_off(void) void __backlight_off(void)
{ {
int level = set_irq_level(HIGHEST_IRQ_LEVEL); 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); set_irq_level(level);
} }

View file

@ -169,6 +169,12 @@ void pcf50606_init(void)
pcf50606_write(0x39, 0x00); /* GPOOD0 = green led OFF */ pcf50606_write(0x39, 0x00); /* GPOOD0 = green led OFF */
pcf50606_write(0x3a, 0x00); /* GPOOD1 = red led OFF */ pcf50606_write(0x3a, 0x00); /* GPOOD1 = red led OFF */
pcf50606_write(0x35, 0xf1); /* Backlight PWM = 7kHz 8/16 */ /* D305A datasheet says PWM clock frequency should be 400Hz - 2000Hz so
pcf50606_write(0x38, 0x30); /* Backlight ON */ * 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 */
} }