diff options
author | Jens Arnold <amiconn@rockbox.org> | 2007-11-12 18:49:53 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2007-11-12 18:49:53 +0000 |
commit | ef12b3b5c678e4fa44d60061b0c1bc312e589ba1 (patch) | |
tree | 4c2572d7bf3d995be16b33fa2e46ccccad34f4ee /firmware/target/arm/ipod | |
parent | 8537cbf091634efa57768dccff39049afdf6d288 (diff) | |
download | rockbox-ef12b3b5c678e4fa44d60061b0c1bc312e589ba1.tar.gz rockbox-ef12b3b5c678e4fa44d60061b0c1bc312e589ba1.zip |
Hardware controlled backlight brightness for iPod Video and Nano, retaining the software PWM fade in/ fade out. * Backlight handling cleanup, getting rid of one layer of 'lowlevelness'. * Use atomic GPIO bit manipulation for PP502x backlight handling.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@15599 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware/target/arm/ipod')
-rw-r--r-- | firmware/target/arm/ipod/1g2g/backlight-1g2g.c | 4 | ||||
-rw-r--r-- | firmware/target/arm/ipod/1g2g/backlight-target.h | 6 | ||||
-rw-r--r-- | firmware/target/arm/ipod/3g/backlight-3g.c | 4 | ||||
-rw-r--r-- | firmware/target/arm/ipod/backlight-4g_color.c | 6 | ||||
-rw-r--r-- | firmware/target/arm/ipod/backlight-mini1g_mini2g.c | 10 | ||||
-rw-r--r-- | firmware/target/arm/ipod/backlight-nano_video.c | 87 | ||||
-rw-r--r-- | firmware/target/arm/ipod/backlight-target.h | 36 |
7 files changed, 128 insertions, 25 deletions
diff --git a/firmware/target/arm/ipod/1g2g/backlight-1g2g.c b/firmware/target/arm/ipod/1g2g/backlight-1g2g.c index 88d638f4e3..688fc2a213 100644 --- a/firmware/target/arm/ipod/1g2g/backlight-1g2g.c +++ b/firmware/target/arm/ipod/1g2g/backlight-1g2g.c | |||
@@ -21,13 +21,13 @@ | |||
21 | #include "backlight.h" | 21 | #include "backlight.h" |
22 | #include "lcd.h" | 22 | #include "lcd.h" |
23 | 23 | ||
24 | void __backlight_on(void) | 24 | void _backlight_on(void) |
25 | { | 25 | { |
26 | outl(inl(0xc0001000) | 0x02, 0xc0001000); | 26 | outl(inl(0xc0001000) | 0x02, 0xc0001000); |
27 | lcd_set_backlight_inversion(true); | 27 | lcd_set_backlight_inversion(true); |
28 | } | 28 | } |
29 | 29 | ||
30 | void __backlight_off(void) | 30 | void _backlight_off(void) |
31 | { | 31 | { |
32 | outl(inl(0xc0001000) & ~0x02, 0xc0001000); | 32 | outl(inl(0xc0001000) & ~0x02, 0xc0001000); |
33 | lcd_set_backlight_inversion(false); | 33 | lcd_set_backlight_inversion(false); |
diff --git a/firmware/target/arm/ipod/1g2g/backlight-target.h b/firmware/target/arm/ipod/1g2g/backlight-target.h index a1a9785abc..31a21a4d27 100644 --- a/firmware/target/arm/ipod/1g2g/backlight-target.h +++ b/firmware/target/arm/ipod/1g2g/backlight-target.h | |||
@@ -19,8 +19,8 @@ | |||
19 | #ifndef BACKLIGHT_TARGET_H | 19 | #ifndef BACKLIGHT_TARGET_H |
20 | #define BACKLIGHT_TARGET_H | 20 | #define BACKLIGHT_TARGET_H |
21 | 21 | ||
22 | #define __backlight_init() false | 22 | #define _backlight_init() false |
23 | void __backlight_on(void); | 23 | void _backlight_on(void); |
24 | void __backlight_off(void); | 24 | void _backlight_off(void); |
25 | 25 | ||
26 | #endif | 26 | #endif |
diff --git a/firmware/target/arm/ipod/3g/backlight-3g.c b/firmware/target/arm/ipod/3g/backlight-3g.c index 251c722dae..41f8ba37cb 100644 --- a/firmware/target/arm/ipod/3g/backlight-3g.c +++ b/firmware/target/arm/ipod/3g/backlight-3g.c | |||
@@ -20,12 +20,12 @@ | |||
20 | #include "system.h" | 20 | #include "system.h" |
21 | #include "backlight.h" | 21 | #include "backlight.h" |
22 | 22 | ||
23 | inline void __backlight_on(void) | 23 | void _backlight_on(void) |
24 | { | 24 | { |
25 | outl(inl(0xc0001000) | 0x02, 0xc0001000); | 25 | outl(inl(0xc0001000) | 0x02, 0xc0001000); |
26 | } | 26 | } |
27 | 27 | ||
28 | inline void __backlight_off(void) | 28 | void _backlight_off(void) |
29 | { | 29 | { |
30 | outl(inl(0xc0001000) & ~0x02, 0xc0001000); | 30 | outl(inl(0xc0001000) & ~0x02, 0xc0001000); |
31 | } | 31 | } |
diff --git a/firmware/target/arm/ipod/backlight-4g_color.c b/firmware/target/arm/ipod/backlight-4g_color.c index 3097d8690b..28deba46b5 100644 --- a/firmware/target/arm/ipod/backlight-4g_color.c +++ b/firmware/target/arm/ipod/backlight-4g_color.c | |||
@@ -31,16 +31,16 @@ | |||
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 | void _backlight_on(void) |
35 | { | 35 | { |
36 | /* brightness full */ | 36 | /* brightness full */ |
37 | outl(0x80000000 | (0xff << 16), 0x7000a010); | 37 | outl(0x80000000 | (0xff << 16), 0x7000a010); |
38 | 38 | ||
39 | /* set port b bit 3 on */ | 39 | /* set port b bit 3 on */ |
40 | outl(((0x100 | 1) << 3), 0x6000d824); | 40 | GPIO_SET_BITWISE(GPIOB_OUTPUT_VAL, 0x08); |
41 | } | 41 | } |
42 | 42 | ||
43 | inline void __backlight_off(void) | 43 | void _backlight_off(void) |
44 | { | 44 | { |
45 | /* fades backlight off on 4g */ | 45 | /* fades backlight off on 4g */ |
46 | GPO32_ENABLE &= ~0x2000000; | 46 | GPO32_ENABLE &= ~0x2000000; |
diff --git a/firmware/target/arm/ipod/backlight-mini1g_mini2g.c b/firmware/target/arm/ipod/backlight-mini1g_mini2g.c index 6cfa8f889c..e513c27349 100644 --- a/firmware/target/arm/ipod/backlight-mini1g_mini2g.c +++ b/firmware/target/arm/ipod/backlight-mini1g_mini2g.c | |||
@@ -31,14 +31,12 @@ | |||
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 | void _backlight_hw_on(void) |
35 | { | 35 | { |
36 | /* set port B03 on */ | 36 | GPIO_SET_BITWISE(GPIOB_OUTPUT_VAL, 0x08); |
37 | outl(((0x100 | 1) << 3), 0x6000d824); | ||
38 | } | 37 | } |
39 | 38 | ||
40 | inline void __backlight_off(void) | 39 | void _backlight_hw_off(void) |
41 | { | 40 | { |
42 | /* set port B03 off */ | 41 | GPIO_CLEAR_BITWISE(GPIOB_OUTPUT_VAL, 0x08); |
43 | outl(((0x100 | 0) << 3), 0x6000d824); | ||
44 | } | 42 | } |
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 | } |
diff --git a/firmware/target/arm/ipod/backlight-target.h b/firmware/target/arm/ipod/backlight-target.h index f4e34cb53a..1a23ecf8be 100644 --- a/firmware/target/arm/ipod/backlight-target.h +++ b/firmware/target/arm/ipod/backlight-target.h | |||
@@ -19,8 +19,38 @@ | |||
19 | #ifndef BACKLIGHT_TARGET_H | 19 | #ifndef BACKLIGHT_TARGET_H |
20 | #define BACKLIGHT_TARGET_H | 20 | #define BACKLIGHT_TARGET_H |
21 | 21 | ||
22 | #define __backlight_init() true | 22 | #if defined(IPOD_VIDEO) || defined(IPOD_NANO) |
23 | void __backlight_on(void); | 23 | |
24 | void __backlight_off(void); | 24 | bool _backlight_init(void); |
25 | void _backlight_set_brightness(int val); | ||
26 | void _backlight_led_on(void); | ||
27 | void _backlight_led_off(void); | ||
28 | void _backlight_hw_enable(bool on); | ||
29 | |||
30 | #define _backlight_on_isr() _backlight_led_on() | ||
31 | #define _backlight_off_isr() _backlight_led_off() | ||
32 | #define _backlight_on_normal() do { _backlight_hw_enable(true); \ | ||
33 | _backlight_led_on(); } while(0) | ||
34 | #define _backlight_off_normal() do { _backlight_led_off(); \ | ||
35 | _backlight_hw_enable(false); } while(0) | ||
36 | #define _BACKLIGHT_FADE_ENABLE | ||
37 | |||
38 | #elif defined HAVE_BACKLIGHT_PWM_FADING | ||
39 | |||
40 | #define _backlight_init() true | ||
41 | void _backlight_hw_on(void); | ||
42 | void _backlight_hw_off(void); | ||
43 | |||
44 | #define _backlight_on_isr() _backlight_hw_on() | ||
45 | #define _backlight_off_isr() _backlight_hw_off() | ||
46 | #define _backlight_on_normal() _backlight_hw_on() | ||
47 | #define _backlight_off_normal() _backlight_hw_off() | ||
48 | |||
49 | #else | ||
50 | |||
51 | #define _backlight_init() true | ||
52 | void _backlight_on(void); | ||
53 | void _backlight_off(void); | ||
54 | #endif | ||
25 | 55 | ||
26 | #endif | 56 | #endif |