diff options
Diffstat (limited to 'firmware/target/arm/s5l8700/yps3')
-rw-r--r-- | firmware/target/arm/s5l8700/yps3/backlight-yps3.c | 34 |
1 files changed, 18 insertions, 16 deletions
diff --git a/firmware/target/arm/s5l8700/yps3/backlight-yps3.c b/firmware/target/arm/s5l8700/yps3/backlight-yps3.c index 7fda82a29c..1fdcc8347d 100644 --- a/firmware/target/arm/s5l8700/yps3/backlight-yps3.c +++ b/firmware/target/arm/s5l8700/yps3/backlight-yps3.c | |||
@@ -37,22 +37,27 @@ | |||
37 | 37 | ||
38 | void _backlight_set_brightness(int brightness) | 38 | void _backlight_set_brightness(int brightness) |
39 | { | 39 | { |
40 | /* pwm = (sqrt(2)**x)-1, where brightness level x = 0..16 */ | 40 | /* pwm = round(sqrt(2)**x), where brightness level x = 1..16 */ |
41 | static const unsigned char logtable[] = | 41 | static const unsigned int logtable[] = |
42 | {0, 1, 2, 3, 5, 7, 10, 15, 22, 31, 44, 63, 90, 127, 180, 255}; | 42 | {1, 2, 3, 4, 6, 8, 11, 16, 23, 32, 45, 64, 91, 128, 181, 256}; |
43 | 43 | ||
44 | /* set PWM width */ | 44 | /* set PWM width */ |
45 | TADATA0 = 255 - logtable[brightness]; | 45 | TADATA0 = logtable[brightness]; |
46 | } | 46 | } |
47 | 47 | ||
48 | void _backlight_on(void) | 48 | void _backlight_on(void) |
49 | { | 49 | { |
50 | /* configure backlight pin P0.0 as timer PWM output */ | ||
51 | PCON0 = ((PCON0 & ~(3 << 0)) | (2 << 0)); | ||
52 | |||
50 | _backlight_set_brightness(backlight_brightness); | 53 | _backlight_set_brightness(backlight_brightness); |
51 | } | 54 | } |
52 | 55 | ||
53 | void _backlight_off(void) | 56 | void _backlight_off(void) |
54 | { | 57 | { |
55 | _backlight_set_brightness(MIN_BRIGHTNESS_SETTING); | 58 | /* configure backlight pin P0.0 as GPIO and switch off */ |
59 | PCON0 = ((PCON0 & ~(3 << 0)) | (1 << 0)); | ||
60 | PDAT0 &= ~(1 << 0); | ||
56 | } | 61 | } |
57 | 62 | ||
58 | void _buttonlight_on(void) | 63 | void _buttonlight_on(void) |
@@ -73,22 +78,19 @@ bool _backlight_init(void) | |||
73 | PCON3 = (PCON3 & ~0x0000FF00) | 0x00001100; | 78 | PCON3 = (PCON3 & ~0x0000FF00) | 0x00001100; |
74 | PCON4 = (PCON4 & ~0x00000F00) | 0x00000100; | 79 | PCON4 = (PCON4 & ~0x00000F00) | 0x00000100; |
75 | 80 | ||
76 | /* enable backlight pin as timer output */ | ||
77 | PCON0 = ((PCON0 & ~(3 << 0)) | (2 << 0)); | ||
78 | |||
79 | /* enable timer clock */ | 81 | /* enable timer clock */ |
80 | PWRCON &= ~(1 << 4); | 82 | PWRCON &= ~(1 << 4); |
81 | 83 | ||
82 | /* configure timer */ | 84 | /* configure timer */ |
83 | TACMD = (1 << 1); /* TC_CLR */ | 85 | TACMD = (1 << 1); /* TA_CLR */ |
84 | TACON = (0 << 13) | /* TC_INT1_EN */ | 86 | TACON = (0 << 13) | /* TA_INT1_EN */ |
85 | (0 << 12) | /* TC_INT0_EN */ | 87 | (0 << 12) | /* TA_INT0_EN */ |
86 | (0 << 11) | /* TC_START */ | 88 | (1 << 11) | /* TA_START */ |
87 | (3 << 8) | /* TC_CS = PCLK / 64 */ | 89 | (3 << 8) | /* TA_CS = PCLK / 64 */ |
88 | (1 << 4); /* TC_MODE_SEL = PWM mode */ | 90 | (1 << 4); /* TA_MODE_SEL = PWM mode */ |
89 | TADATA1 = 255; /* set PWM period */ | 91 | TADATA1 = 256; /* set PWM period */ |
90 | TAPRE = 20; /* prescaler */ | 92 | TAPRE = 20; /* prescaler */ |
91 | TACMD = (1 << 0); /* TC_EN */ | 93 | TACMD = (1 << 0); /* TA_EN */ |
92 | 94 | ||
93 | _backlight_on(); | 95 | _backlight_on(); |
94 | 96 | ||