diff options
author | Bertrik Sikken <bertrik@sikken.nl> | 2009-06-23 18:11:03 +0000 |
---|---|---|
committer | Bertrik Sikken <bertrik@sikken.nl> | 2009-06-23 18:11:03 +0000 |
commit | 743dcf7f69c4afa1efd2f84a2bd0b5e23d53b0b9 (patch) | |
tree | cbd5bb40837fb4ba624edd5ae768fd8e9aa8dfa7 /firmware | |
parent | d86cf998e887d6e1bac2754b3087710926c74a19 (diff) | |
download | rockbox-743dcf7f69c4afa1efd2f84a2bd0b5e23d53b0b9.tar.gz rockbox-743dcf7f69c4afa1efd2f84a2bd0b5e23d53b0b9.zip |
Implement PWM backlight driver for the Meizus. Update Meizu M3 bootloader to control brightness with the touch strip.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21478 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r-- | firmware/SOURCES | 1 | ||||
-rw-r--r-- | firmware/export/config-meizu-m3.h | 7 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/backlight-meizu.c | 111 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/backlight-target.h (renamed from firmware/target/arm/s5l8700/meizu-m3/backlight-target.h) | 0 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/meizu-m6sl/backlight-target.h | 29 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/meizu-m6sp/backlight-target.h | 29 | ||||
-rw-r--r-- | firmware/target/arm/s5l8700/system-s5l8700.c | 11 |
7 files changed, 121 insertions, 67 deletions
diff --git a/firmware/SOURCES b/firmware/SOURCES index a7741c1870..0eff012660 100644 --- a/firmware/SOURCES +++ b/firmware/SOURCES | |||
@@ -1241,6 +1241,7 @@ target/arm/s5l8700/meizu-m6sp/lcd-m6sp.c | |||
1241 | #endif /* MEIZU_M6SP */ | 1241 | #endif /* MEIZU_M6SP */ |
1242 | 1242 | ||
1243 | #ifdef MEIZU_M3 | 1243 | #ifdef MEIZU_M3 |
1244 | target/arm/s5l8700/backlight-meizu.c | ||
1244 | target/arm/s5l8700/meizu-m3/lcd-m3.c | 1245 | target/arm/s5l8700/meizu-m3/lcd-m3.c |
1245 | drivers/qt1106.c | 1246 | drivers/qt1106.c |
1246 | #ifndef SIMULATOR | 1247 | #ifndef SIMULATOR |
diff --git a/firmware/export/config-meizu-m3.h b/firmware/export/config-meizu-m3.h index 2ad20550d0..9e2d6cbf4e 100644 --- a/firmware/export/config-meizu-m3.h +++ b/firmware/export/config-meizu-m3.h | |||
@@ -178,8 +178,7 @@ | |||
178 | #define DEFAULT_CONTRAST_SETTING 19 /* Match boot contrast */ | 178 | #define DEFAULT_CONTRAST_SETTING 19 /* Match boot contrast */ |
179 | 179 | ||
180 | /* Main LCD backlight brightness range and defaults */ | 180 | /* Main LCD backlight brightness range and defaults */ |
181 | /* PCF50506 can output 0%-100% duty cycle but D305A expects %15-100%. */ | 181 | #define MIN_BRIGHTNESS_SETTING 0 |
182 | #define MIN_BRIGHTNESS_SETTING 1 /* 15/16 (93.75%) */ | 182 | #define MAX_BRIGHTNESS_SETTING 255 |
183 | #define MAX_BRIGHTNESS_SETTING 13 /* 3/16 (18.75%) */ | 183 | #define DEFAULT_BRIGHTNESS_SETTING 200 |
184 | #define DEFAULT_BRIGHTNESS_SETTING 8 /* 8/16 (50.00%) = x5 boot default */ | ||
185 | 184 | ||
diff --git a/firmware/target/arm/s5l8700/backlight-meizu.c b/firmware/target/arm/s5l8700/backlight-meizu.c new file mode 100644 index 0000000000..43cbb16a2d --- /dev/null +++ b/firmware/target/arm/s5l8700/backlight-meizu.c | |||
@@ -0,0 +1,111 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2009 by Bertrik Sikken | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | #include <stdbool.h> | ||
22 | |||
23 | #include "config.h" | ||
24 | #include "backlight.h" | ||
25 | #include "backlight-target.h" | ||
26 | #include "system.h" | ||
27 | |||
28 | /* | ||
29 | Interrupt-driven backlight driver using the PWM mode of a hardware timer. | ||
30 | |||
31 | Backlight brightness is implemented by configuring one of the timers in | ||
32 | the SoC for PWM mode. In this mode, two interrupts are generated for each | ||
33 | cycle, one at the start of the cycle and another one sometime between the | ||
34 | first interrupt and the start of the next cycle. The backlight is switched | ||
35 | on at the first interrupt and switched off at the second interrupt. This | ||
36 | way, the position in time of the second interrupt determines the duty cycle | ||
37 | and thereby the brightness of the backlight. | ||
38 | The backlight is switched on and off by means of a GPIO pin. | ||
39 | */ | ||
40 | |||
41 | void INT_TIMERA(void) | ||
42 | { | ||
43 | unsigned int tacon = TACON; | ||
44 | |||
45 | /* clear interrupts */ | ||
46 | TACON = tacon; | ||
47 | |||
48 | /* TA_INT1, start of PWM cycle: enable backlight */ | ||
49 | if (tacon & (1 << 17)) { | ||
50 | PDAT0 |= (1 << 2); | ||
51 | } | ||
52 | |||
53 | /* TA_INT0, disable backlight until next cycle */ | ||
54 | if (tacon & (1 << 16)) { | ||
55 | PDAT0 &= ~(1 << 2); | ||
56 | } | ||
57 | } | ||
58 | |||
59 | void _backlight_set_brightness(int brightness) | ||
60 | { | ||
61 | if (brightness == MIN_BRIGHTNESS_SETTING) { | ||
62 | /* turn backlight fully off and disable interrupt */ | ||
63 | PDAT0 &= ~(1 << 2); | ||
64 | INTMSK &= ~(1 << 5); | ||
65 | } | ||
66 | else if (brightness == MAX_BRIGHTNESS_SETTING) { | ||
67 | /* turn backlight fully on and disable interrupt */ | ||
68 | PDAT0 |= (1 << 2); | ||
69 | INTMSK &= ~(1 << 5); | ||
70 | } | ||
71 | else { | ||
72 | /* set PWM width and enable interrupt */ | ||
73 | TADATA0 = brightness; | ||
74 | INTMSK |= (1 << 5); | ||
75 | } | ||
76 | } | ||
77 | |||
78 | void _backlight_on(void) | ||
79 | { | ||
80 | _backlight_set_brightness(backlight_brightness); | ||
81 | } | ||
82 | |||
83 | void _backlight_off(void) | ||
84 | { | ||
85 | _backlight_set_brightness(MIN_BRIGHTNESS_SETTING); | ||
86 | } | ||
87 | |||
88 | bool _backlight_init(void) | ||
89 | { | ||
90 | /* enable backlight pin as GPIO */ | ||
91 | PCON0 = ((PCON0 & ~(3 << 4)) | (1 << 4)); | ||
92 | |||
93 | /* enable timer clock */ | ||
94 | PWRCON &= ~(1 << 4); | ||
95 | |||
96 | /* configure timer */ | ||
97 | TACMD = (1 << 1); /* TA_CLR */ | ||
98 | TACMD = (1 << 0); /* TA_EN */ | ||
99 | TACON = (1 << 13) | /* TA_INT1_EN */ | ||
100 | (1 << 12) | /* TA_INT0_EN */ | ||
101 | (1 << 11) | /* TA_START */ | ||
102 | (3 << 8) | /* TA_CS = PCLK / 64 */ | ||
103 | (1 << 4); /* TA_MODE_SEL = PWM mode */ | ||
104 | TADATA1 = MAX_BRIGHTNESS_SETTING; /* set PWM period */ | ||
105 | TAPRE = 100; /* prescaler */ | ||
106 | |||
107 | _backlight_on(); | ||
108 | |||
109 | return true; | ||
110 | } | ||
111 | |||
diff --git a/firmware/target/arm/s5l8700/meizu-m3/backlight-target.h b/firmware/target/arm/s5l8700/backlight-target.h index 91579b080d..91579b080d 100644 --- a/firmware/target/arm/s5l8700/meizu-m3/backlight-target.h +++ b/firmware/target/arm/s5l8700/backlight-target.h | |||
diff --git a/firmware/target/arm/s5l8700/meizu-m6sl/backlight-target.h b/firmware/target/arm/s5l8700/meizu-m6sl/backlight-target.h deleted file mode 100644 index 91579b080d..0000000000 --- a/firmware/target/arm/s5l8700/meizu-m6sl/backlight-target.h +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2008 by Marcoen Hirschberg | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | #ifndef BACKLIGHT_TARGET_H | ||
22 | #define BACKLIGHT_TARGET_H | ||
23 | |||
24 | bool _backlight_init(void); | ||
25 | void _backlight_on(void); | ||
26 | void _backlight_off(void); | ||
27 | void _backlight_set_brightness(int brightness); | ||
28 | |||
29 | #endif | ||
diff --git a/firmware/target/arm/s5l8700/meizu-m6sp/backlight-target.h b/firmware/target/arm/s5l8700/meizu-m6sp/backlight-target.h deleted file mode 100644 index 91579b080d..0000000000 --- a/firmware/target/arm/s5l8700/meizu-m6sp/backlight-target.h +++ /dev/null | |||
@@ -1,29 +0,0 @@ | |||
1 | /*************************************************************************** | ||
2 | * __________ __ ___. | ||
3 | * Open \______ \ ____ ____ | | _\_ |__ _______ ___ | ||
4 | * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / | ||
5 | * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < | ||
6 | * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ | ||
7 | * \/ \/ \/ \/ \/ | ||
8 | * $Id$ | ||
9 | * | ||
10 | * Copyright (C) 2008 by Marcoen Hirschberg | ||
11 | * | ||
12 | * This program is free software; you can redistribute it and/or | ||
13 | * modify it under the terms of the GNU General Public License | ||
14 | * as published by the Free Software Foundation; either version 2 | ||
15 | * of the License, or (at your option) any later version. | ||
16 | * | ||
17 | * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY | ||
18 | * KIND, either express or implied. | ||
19 | * | ||
20 | ****************************************************************************/ | ||
21 | #ifndef BACKLIGHT_TARGET_H | ||
22 | #define BACKLIGHT_TARGET_H | ||
23 | |||
24 | bool _backlight_init(void); | ||
25 | void _backlight_on(void); | ||
26 | void _backlight_off(void); | ||
27 | void _backlight_set_brightness(int brightness); | ||
28 | |||
29 | #endif | ||
diff --git a/firmware/target/arm/s5l8700/system-s5l8700.c b/firmware/target/arm/s5l8700/system-s5l8700.c index c535a0d955..48c50645e9 100644 --- a/firmware/target/arm/s5l8700/system-s5l8700.c +++ b/firmware/target/arm/s5l8700/system-s5l8700.c | |||
@@ -95,12 +95,13 @@ void irq_handler(void) | |||
95 | asm volatile( "stmfd sp!, {r0-r7, ip, lr} \n" /* Store context */ | 95 | asm volatile( "stmfd sp!, {r0-r7, ip, lr} \n" /* Store context */ |
96 | "sub sp, sp, #8 \n"); /* Reserve stack */ | 96 | "sub sp, sp, #8 \n"); /* Reserve stack */ |
97 | 97 | ||
98 | int irq_no = INTOFFSET; /* Read clears the corresponding IRQ status */ | 98 | int irq_no = INTOFFSET; |
99 | 99 | ||
100 | if ((irq_no & (1<<31)) == 0) /* Ensure invalid flag is not set */ | 100 | irqvector[irq_no](); |
101 | { | 101 | |
102 | irqvector[irq_no](); | 102 | /* clear interrupt */ |
103 | } | 103 | SRCPND = (1 << irq_no); |
104 | INTPND = INTPND; | ||
104 | 105 | ||
105 | asm volatile( "add sp, sp, #8 \n" /* Cleanup stack */ | 106 | asm volatile( "add sp, sp, #8 \n" /* Cleanup stack */ |
106 | "ldmfd sp!, {r0-r7, ip, lr} \n" /* Restore context */ | 107 | "ldmfd sp!, {r0-r7, ip, lr} \n" /* Restore context */ |