diff options
Diffstat (limited to 'firmware/target/arm')
-rw-r--r-- | firmware/target/arm/ipod/backlight-4g_color.c | 39 | ||||
-rw-r--r-- | firmware/target/arm/ipod/backlight-target.h | 1 |
2 files changed, 30 insertions, 10 deletions
diff --git a/firmware/target/arm/ipod/backlight-4g_color.c b/firmware/target/arm/ipod/backlight-4g_color.c index 656bef0e17..a0e14c99e3 100644 --- a/firmware/target/arm/ipod/backlight-4g_color.c +++ b/firmware/target/arm/ipod/backlight-4g_color.c | |||
@@ -34,28 +34,47 @@ | |||
34 | #include "backlight.h" | 34 | #include "backlight.h" |
35 | #include "backlight-target.h" | 35 | #include "backlight-target.h" |
36 | 36 | ||
37 | /* Index 0 is a dummy, 1..31 are used */ | ||
38 | static unsigned char log_brightness[32] = { | ||
39 | 0, 1, 2, 4, 6, 9, 12, 16, 20, 25, 30, 36, | ||
40 | 42, 49, 56, 64, 72, 81, 90, 100, 110, 121, 132, 144, | ||
41 | 156, 169, 182, 196, 210, 225, 240, 255 | ||
42 | }; | ||
43 | |||
44 | static unsigned brightness = 100; /* 1 to 255 */ | ||
45 | static bool enabled = false; | ||
46 | |||
47 | /* Handling B03 in _backlight_on() and _backlight_off() makes backlight go off | ||
48 | * without delay. Not doing that does a short (fixed) fade out. Opt for the | ||
49 | * latter. */ | ||
50 | |||
37 | void _backlight_on(void) | 51 | void _backlight_on(void) |
38 | { | 52 | { |
39 | /* brightness full */ | 53 | /* brightness full */ |
40 | outl(0x80000000 | (0xff << 16), 0x7000a010); | 54 | outl(0x80000000 | (brightness << 16), 0x7000a010); |
41 | 55 | /* GPIO_SET_BITWISE(GPIOB_OUTPUT_VAL, 0x08); */ | |
42 | /* set port b bit 3 on */ | 56 | enabled = true; |
43 | GPIO_SET_BITWISE(GPIOB_OUTPUT_VAL, 0x08); | ||
44 | } | 57 | } |
45 | 58 | ||
46 | void _backlight_off(void) | 59 | void _backlight_off(void) |
47 | { | 60 | { |
48 | /* fades backlight off on 4g */ | ||
49 | GPO32_ENABLE &= ~0x2000000; | ||
50 | outl(0x80000000, 0x7000a010); | 61 | outl(0x80000000, 0x7000a010); |
62 | /* GPIO_CLEAR_BITWISE(GPIOB_OUTPUT_VAL, 0x08); */ | ||
63 | enabled = false; | ||
64 | } | ||
65 | |||
66 | void _backlight_set_brightness(int val) | ||
67 | { | ||
68 | brightness = log_brightness[val]; | ||
69 | if (enabled) | ||
70 | outl(0x80000000 | (brightness << 16), 0x7000a010); | ||
51 | } | 71 | } |
52 | 72 | ||
53 | bool _backlight_init(void) | 73 | bool _backlight_init(void) |
54 | { | 74 | { |
55 | GPIOB_ENABLE |= 0x4; /* B02 enable */ | 75 | GPIO_SET_BITWISE(GPIOB_ENABLE, 0x0c); /* B02 and B03 enable */ |
56 | GPIOB_ENABLE |= 0x8; /* B03 enable */ | 76 | GPIO_SET_BITWISE(GPIOB_OUTPUT_VAL, 0x08); /* B03 = 1 */ |
57 | GPO32_ENABLE |= 0x2000000; /* D01 enable */ | 77 | GPO32_ENABLE &= ~0x2000000; /* D01 disable, so pwm takes over */ |
58 | GPO32_VAL |= 0x2000000; /* D01 =1 */ | ||
59 | DEV_EN |= DEV_PWM; /* PWM enable */ | 78 | DEV_EN |= DEV_PWM; /* PWM enable */ |
60 | 79 | ||
61 | _backlight_on(); | 80 | _backlight_on(); |
diff --git a/firmware/target/arm/ipod/backlight-target.h b/firmware/target/arm/ipod/backlight-target.h index 28c519e4c0..9b6a96b3cb 100644 --- a/firmware/target/arm/ipod/backlight-target.h +++ b/firmware/target/arm/ipod/backlight-target.h | |||
@@ -53,6 +53,7 @@ void lcd_awake(void); | |||
53 | bool _backlight_init(void); | 53 | bool _backlight_init(void); |
54 | void _backlight_on(void); | 54 | void _backlight_on(void); |
55 | void _backlight_off(void); | 55 | void _backlight_off(void); |
56 | void _backlight_set_brightness(int val); | ||
56 | 57 | ||
57 | #elif defined(IPOD_MINI) || defined(IPOD_MINI2G) | 58 | #elif defined(IPOD_MINI) || defined(IPOD_MINI2G) |
58 | 59 | ||