summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2006-07-25 15:21:31 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2006-07-25 15:21:31 +0000
commitf18f9a806142f96f435480473796e12b4a11e7b4 (patch)
treeea05323a5695ea0d4ff7cf5d3094dbf8a6a2b167
parent8bb4bab54b580b36d819e4e4fcc864a3335ef270 (diff)
downloadrockbox-f18f9a806142f96f435480473796e12b4a11e7b4.zip
rockbox-f18f9a806142f96f435480473796e12b4a11e7b4.tar.gz
rockbox-f18f9a806142f96f435480473796e12b4a11e7b4.tar.bz2
rockbox-f18f9a806142f96f435480473796e12b4a11e7b4.tar.xz
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
-rw-r--r--apps/settings.c2
-rw-r--r--docs/CREDITS1
-rw-r--r--firmware/backlight.c20
-rw-r--r--firmware/export/backlight.h13
-rwxr-xr-xfirmware/target/coldfire/iaudio/x5/backlight-x5.c5
-rw-r--r--firmware/target/coldfire/iaudio/x5/pcf50606-x5.c10
6 files changed, 32 insertions, 19 deletions
diff --git a/apps/settings.c b/apps/settings.c
index db3b45d..b3623f2 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 fa6ec5d..e71ae8c 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 8285ff8..1e72c6a 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(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
diff --git a/firmware/export/backlight.h b/firmware/export/backlight.h
index c1a7ade..09960b7 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 e48e55d..2b09d14 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 da13f1d..158e0fb 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 */
}