From f18f9a806142f96f435480473796e12b4a11e7b4 Mon Sep 17 00:00:00 2001 From: Linus Nielsen Feltzing Date: Tue, 25 Jul 2006 15:21:31 +0000 Subject: [PATCH] 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 --- apps/settings.c | 2 +- docs/CREDITS | 1 + firmware/backlight.c | 20 +++++++++---------- firmware/export/backlight.h | 13 ++++++++++-- .../target/coldfire/iaudio/x5/backlight-x5.c | 5 ++--- .../target/coldfire/iaudio/x5/pcf50606-x5.c | 10 ++++++++-- 6 files changed, 32 insertions(+), 19 deletions(-) diff --git a/apps/settings.c b/apps/settings.c index db3b45d155..b3623f233a 100644 --- a/apps/settings.c +++ b/apps/settings.c @@ -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 */ diff --git a/docs/CREDITS b/docs/CREDITS index fa6ec5d9ff..e71ae8ca11 100644 --- a/docs/CREDITS +++ b/docs/CREDITS @@ -216,3 +216,4 @@ Daniel Ankers Paul Louden Rainer Sinsch Plácido Revilla +Michael Sevakis diff --git a/firmware/backlight.c b/firmware/backlight.c index 8285ff894b..1e72c6a81d 100644 --- a/firmware/backlight.c +++ b/firmware/backlight.c @@ -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(valMAX_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 diff --git a/firmware/export/backlight.h b/firmware/export/backlight.h index c1a7ade38f..09960b7537 100644 --- a/firmware/export/backlight.h +++ b/firmware/export/backlight.h @@ -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 diff --git a/firmware/target/coldfire/iaudio/x5/backlight-x5.c b/firmware/target/coldfire/iaudio/x5/backlight-x5.c index e48e55d27b..2b09d14b55 100755 --- a/firmware/target/coldfire/iaudio/x5/backlight-x5.c +++ b/firmware/target/coldfire/iaudio/x5/backlight-x5.c @@ -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); } - diff --git a/firmware/target/coldfire/iaudio/x5/pcf50606-x5.c b/firmware/target/coldfire/iaudio/x5/pcf50606-x5.c index da13f1d65e..158e0fbbab 100644 --- a/firmware/target/coldfire/iaudio/x5/pcf50606-x5.c +++ b/firmware/target/coldfire/iaudio/x5/pcf50606-x5.c @@ -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 */ }