diff options
Diffstat (limited to 'firmware/target/arm/ipod/backlight-nano_video.c')
-rw-r--r-- | firmware/target/arm/ipod/backlight-nano_video.c | 87 |
1 files changed, 81 insertions, 6 deletions
diff --git a/firmware/target/arm/ipod/backlight-nano_video.c b/firmware/target/arm/ipod/backlight-nano_video.c index 92a54225d0..6d77e2bd03 100644 --- a/firmware/target/arm/ipod/backlight-nano_video.c +++ b/firmware/target/arm/ipod/backlight-nano_video.c | |||
@@ -31,14 +31,89 @@ | |||
31 | #include "timer.h" | 31 | #include "timer.h" |
32 | #include "backlight.h" | 32 | #include "backlight.h" |
33 | 33 | ||
34 | inline void __backlight_on(void) | 34 | static int brightness = 1; /* 1 to 32 */ |
35 | static int current_dim = 16; /* default after enabling the backlight dimmer */ | ||
36 | static bool enabled = false; | ||
37 | |||
38 | void _backlight_set_brightness(int val) | ||
39 | { | ||
40 | int oldlevel; | ||
41 | |||
42 | if (current_dim < val) | ||
43 | { | ||
44 | do | ||
45 | { | ||
46 | oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); | ||
47 | GPIO_CLEAR_BITWISE(GPIOD_OUTPUT_VAL, 0x80); | ||
48 | udelay(10); | ||
49 | GPIO_SET_BITWISE(GPIOD_OUTPUT_VAL, 0x80); | ||
50 | set_irq_level(oldlevel); | ||
51 | udelay(10); | ||
52 | } | ||
53 | while (++current_dim < val); | ||
54 | } | ||
55 | else if (current_dim > val) | ||
56 | { | ||
57 | do | ||
58 | { | ||
59 | oldlevel = set_irq_level(HIGHEST_IRQ_LEVEL); | ||
60 | GPIO_CLEAR_BITWISE(GPIOD_OUTPUT_VAL, 0x80); | ||
61 | udelay(200); | ||
62 | GPIO_SET_BITWISE(GPIOD_OUTPUT_VAL, 0x80); | ||
63 | set_irq_level(oldlevel); | ||
64 | udelay(10); | ||
65 | } | ||
66 | while (--current_dim > val); | ||
67 | } | ||
68 | brightness = val; | ||
69 | } | ||
70 | |||
71 | void _backlight_hw_enable(bool on) | ||
72 | { | ||
73 | if (on == enabled) | ||
74 | return; | ||
75 | |||
76 | if (on) | ||
77 | { | ||
78 | GPIO_SET_BITWISE(GPIOB_OUTPUT_VAL, 0x08); | ||
79 | GPIO_SET_BITWISE(GPIOD_OUTPUT_VAL, 0x80); | ||
80 | sleep(HZ/100); | ||
81 | current_dim = 16; | ||
82 | _backlight_set_brightness(brightness); | ||
83 | } | ||
84 | else | ||
85 | { | ||
86 | GPIO_CLEAR_BITWISE(GPIOD_OUTPUT_VAL, 0x80); | ||
87 | GPIO_CLEAR_BITWISE(GPIOB_OUTPUT_VAL, 0x08); | ||
88 | sleep(HZ/20); | ||
89 | } | ||
90 | enabled = on; | ||
91 | } | ||
92 | |||
93 | /* Switch the backlight on. Works only if the backlight circuit is enabled. | ||
94 | * Called in ISR context for fading, so it must be fast. */ | ||
95 | void _backlight_led_on(void) | ||
96 | { | ||
97 | GPIO_SET_BITWISE(GPIOL_OUTPUT_VAL, 0x80); | ||
98 | } | ||
99 | |||
100 | /* Switch the backlight off. Keeps the backlight circuit enabled. | ||
101 | * Called in ISR context for fading, so it must be fast. */ | ||
102 | void _backlight_led_off(void) | ||
35 | { | 103 | { |
36 | GPIO_SET_BITWISE(GPIOB_OUTPUT_VAL, 1<<3); | 104 | GPIO_CLEAR_BITWISE(GPIOL_OUTPUT_VAL, 0x80); |
37 | GPIO_SET_BITWISE(GPIOL_OUTPUT_VAL, 1<<7); | ||
38 | } | 105 | } |
39 | 106 | ||
40 | inline void __backlight_off(void) | 107 | bool _backlight_init(void) |
41 | { | 108 | { |
42 | GPIO_CLEAR_BITWISE(GPIOB_OUTPUT_VAL, 1<<3); | 109 | GPIO_SET_BITWISE(GPIOB_ENABLE, 0x08); |
43 | GPIO_CLEAR_BITWISE(GPIOL_OUTPUT_VAL, 1<<7); | 110 | GPIO_SET_BITWISE(GPIOB_OUTPUT_EN, 0x08); |
111 | GPIO_SET_BITWISE(GPIOD_ENABLE, 0x80); | ||
112 | GPIO_SET_BITWISE(GPIOD_OUTPUT_EN, 0x80); | ||
113 | _backlight_hw_enable(true); | ||
114 | GPIO_SET_BITWISE(GPIOL_ENABLE, 0x80); | ||
115 | GPIO_SET_BITWISE(GPIOL_OUTPUT_EN, 0x80); | ||
116 | GPIO_SET_BITWISE(GPIOL_OUTPUT_VAL, 0x80); | ||
117 | |||
118 | return true; | ||
44 | } | 119 | } |