summaryrefslogtreecommitdiff
path: root/firmware
diff options
context:
space:
mode:
Diffstat (limited to 'firmware')
-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
4 files changed, 30 insertions, 18 deletions
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;}
659void backlight_set_brightness(int val) 659void backlight_set_brightness(int val)
660{ 660{
661#ifndef SIMULATOR 661#ifndef SIMULATOR
662 /* set H300 brightness by changing the PWM 662 /* set brightness by changing the PWM
663 accepts 0..15 but note that 0 and 1 give a black display! */ 663 * accepts 0..15 but note that 0 and 1 give a black display on H300!
664 * 0 is black on the X5.
665 */
664 666
665 /* disable IRQs while bitbanging */ 667 /* disable IRQs while bitbanging */
666 int old_irq_level = set_irq_level(HIGHEST_IRQ_LEVEL); 668 int old_irq_level = set_irq_level(HIGHEST_IRQ_LEVEL);
667 669
668 val &= 0x0F; 670 /* Clamp setting to range */
669 if(val<MIN_BRIGHTNESS_SETTING) 671 if(val<MIN_BRIGHTNESS_SETTING)
670 val=MIN_BRIGHTNESS_SETTING; 672 val=MIN_BRIGHTNESS_SETTING;
673 else if(val>MAX_BRIGHTNESS_SETTING)
674 val=MAX_BRIGHTNESS_SETTING;
671 675
672 /* shift one bit left */ 676 pcf50606_write(0x35, (val << 1) | 0x01); /* 512Hz, Enable PWM */
673 val <<= 1;
674
675 /* enable PWM */
676 val |= 0x01;
677
678 pcf50606_write(0x35, val);
679 677
680 /* enable IRQs again */ 678 /* enable IRQs again */
681 set_irq_level(old_irq_level); 679 set_irq_level(old_irq_level);
682#else 680#else
683 val=0; 681 val=0;
684#endif 682#endif
685} 683}
686#endif 684#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);
53#endif 53#endif
54 54
55#ifdef HAVE_BACKLIGHT_BRIGHTNESS 55#ifdef HAVE_BACKLIGHT_BRIGHTNESS
56#define MIN_BRIGHTNESS_SETTING 2 56#ifdef IAUDIO_X5
57#define MAX_BRIGHTNESS_SETTING 15 57/* PFC50506 can output 0%-100% duty cycle but D305A expects %15-100%. */
58#define MIN_BRIGHTNESS_SETTING 1 /* 15/16 (93.75%) */
59#define MAX_BRIGHTNESS_SETTING 13 /* 3/16 (18.75%) */
60#define DEFAULT_BRIGHTNESS_SETTING 8 /* 8/16 (50.00%) = x5 boot default */
61#else
62#define MIN_BRIGHTNESS_SETTING 2 /* 2/16 (12.50%) */
63#define MAX_BRIGHTNESS_SETTING 15 /* 15/16 (93.75%) */
64#define DEFAULT_BRIGHTNESS_SETTING 9 /* 9/16 (56.25%) */
65#endif /* HAVE_BACKLIGHT_BRIGHTNESS */
66
58void backlight_set_brightness(int val); 67void backlight_set_brightness(int val);
59#endif 68#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 @@
25void __backlight_on(void) 25void __backlight_on(void)
26{ 26{
27 int level = set_irq_level(HIGHEST_IRQ_LEVEL); 27 int level = set_irq_level(HIGHEST_IRQ_LEVEL);
28 pcf50606_write(0x38, 0x30); /* Backlight ON */ 28 pcf50606_write(0x38, 0xb0); /* Backlight ON, GPO1INV=1, GPO1ACT=011 */
29 set_irq_level(level); 29 set_irq_level(level);
30} 30}
31 31
32void __backlight_off(void) 32void __backlight_off(void)
33{ 33{
34 int level = set_irq_level(HIGHEST_IRQ_LEVEL); 34 int level = set_irq_level(HIGHEST_IRQ_LEVEL);
35 pcf50606_write(0x38, 0x70); /* Backlight OFF */ 35 pcf50606_write(0x38, 0x80); /* Backlight OFF, GPO1INV=1, GPO1ACT=000 */
36 set_irq_level(level); 36 set_irq_level(level);
37} 37}
38
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)
169 pcf50606_write(0x39, 0x00); /* GPOOD0 = green led OFF */ 169 pcf50606_write(0x39, 0x00); /* GPOOD0 = green led OFF */
170 pcf50606_write(0x3a, 0x00); /* GPOOD1 = red led OFF */ 170 pcf50606_write(0x3a, 0x00); /* GPOOD1 = red led OFF */
171 171
172 pcf50606_write(0x35, 0xf1); /* Backlight PWM = 7kHz 8/16 */ 172 /* D305A datasheet says PWM clock frequency should be 400Hz - 2000Hz so
173 pcf50606_write(0x38, 0x30); /* Backlight ON */ 173 * I changed it from 7kHz to 512Hz. The lower frequency looks the same.
174 * GPO1 is also inverted so that display brightness increases with PWM
175 * setting which also lets the X5 share the H300's
176 * set_backlight_brightness code.
177 */
178 pcf50606_write(0x35, 0x11); /* Backlight PWM = 512Hz, 8/16, Active */
179 pcf50606_write(0x38, 0xb0); /* Backlight ON, GPO1INV=1, GPO1ACT=011 */
174} 180}