summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcin Bukat <marcin.bukat@gmail.com>2010-06-11 11:41:29 +0000
committerMarcin Bukat <marcin.bukat@gmail.com>2010-06-11 11:41:29 +0000
commit2f7bd4d9938644a75afc5c13cf1ce3c702eb77ac (patch)
tree3bb3f35115cc6e4be58ad1753a54e23e7dba94d6
parentb45a2d433b81cd0087a75dec17190e0587734f1b (diff)
downloadrockbox-2f7bd4d9938644a75afc5c13cf1ce3c702eb77ac.tar.gz
rockbox-2f7bd4d9938644a75afc5c13cf1ce3c702eb77ac.zip
HD200 - power_init() rework based on latest power consumption measurements
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@26767 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--firmware/target/coldfire/mpio/hd200/power-hd200.c65
1 files changed, 41 insertions, 24 deletions
diff --git a/firmware/target/coldfire/mpio/hd200/power-hd200.c b/firmware/target/coldfire/mpio/hd200/power-hd200.c
index dd8576b9e4..4fc28e1436 100644
--- a/firmware/target/coldfire/mpio/hd200/power-hd200.c
+++ b/firmware/target/coldfire/mpio/hd200/power-hd200.c
@@ -30,15 +30,10 @@
30#if CONFIG_TUNER 30#if CONFIG_TUNER
31bool tuner_power(bool status) 31bool tuner_power(bool status)
32{ 32{
33 (void)status;
34 if (status) 33 if (status)
35 {
36 and_l(~(1<<17), &GPIO1_OUT); 34 and_l(~(1<<17), &GPIO1_OUT);
37 }
38 else 35 else
39 {
40 or_l((1<<17), &GPIO1_OUT); 36 or_l((1<<17), &GPIO1_OUT);
41 }
42 37
43 return status; 38 return status;
44} 39}
@@ -46,20 +41,39 @@ bool tuner_power(bool status)
46 41
47void power_init(void) 42void power_init(void)
48{ 43{
49 /* GPIO53 has to be high - low resets device */ 44 /* GPIO53 has to be high - low resets device
50 /* GPIO49 is FM related */ 45 * it is setup in crt0.S
51 or_l((1<<21)|(1<<17), &GPIO1_OUT); 46 */
52 or_l((1<<21)|(1<<17), &GPIO1_ENABLE);
53 or_l((1<<21)|(1<<17)|(1<<14), &GPIO1_FUNCTION);
54 47
55 and_l(~(1<<15), &GPIO_OUT); 48 /* GPIO50 is ATA power (default OFF) */
56 or_l((1<<15),&GPIO_ENABLE); 49 or_l((1<<18), &GPIO1_OUT);
57 or_l((1<<15),&GPIO_FUNCTION); 50 or_l((1<<18), &GPIO1_ENABLE);
51 or_l((1<<18), &GPIO1_FUNCTION);
58 52
53 /* GPIO49 is FM power (default OFF) */
54 or_l((1<<17), &GPIO1_OUT);
55 or_l((1<<17), &GPIO1_ENABLE);
56 or_l((1<<17), &GPIO1_FUNCTION);
57
58 /* GPIO46 is wall charger detect (input) */
59 and_l(~(1<<14), &GPIO1_ENABLE);
60 or_l((1<<14), &GPIO1_FUNCTION);
61
62 /* GPIO31 needs to be low */
63 and_l(~(1<<31), &GPIO_OUT);
64 or_l((1<<31),&GPIO_ENABLE);
65 or_l((1<<31),&GPIO_FUNCTION);
66
67 /* turn off charger by default*/
59 or_l((1<<23), &GPIO_OUT); 68 or_l((1<<23), &GPIO_OUT);
60 and_l(~(1<<23), &GPIO_ENABLE); 69 and_l(~(1<<23), &GPIO_ENABLE);
61 or_l((1<<23), &GPIO_FUNCTION); 70 or_l((1<<23), &GPIO_FUNCTION);
62 71
72 /* high current charge mode */
73 or_l((1<<15), &GPIO_OUT);
74 or_l((1<<15),&GPIO_ENABLE);
75 or_l((1<<15),&GPIO_FUNCTION);
76
63#ifndef BOOTLOADER 77#ifndef BOOTLOADER
64 /* The boot loader controls the power */ 78 /* The boot loader controls the power */
65 ide_power_enable(true); 79 ide_power_enable(true);
@@ -71,8 +85,16 @@ unsigned int power_input_status(void)
71 unsigned int status = POWER_INPUT_NONE; 85 unsigned int status = POWER_INPUT_NONE;
72/* GPIO46 is AC plug detect (low = AC plugged) */ 86/* GPIO46 is AC plug detect (low = AC plugged) */
73 if (!(GPIO1_READ & (1<<14))) 87 if (!(GPIO1_READ & (1<<14)))
74 status |= POWER_INPUT_MAIN_CHARGER; 88 {
75 89 status |= POWER_INPUT_MAIN_CHARGER;
90 /* tristate GPIO23 to start charging cycle */
91 and_l(~(1<<23), &GPIO_ENABLE);
92 }
93 else
94 {
95 /* drive GPIO23 high to enter LTC1733 shutdown mode */
96 or_l((1<<23), &GPIO_ENABLE);
97 }
76 return status; 98 return status;
77} 99}
78 100
@@ -87,20 +109,15 @@ bool charging_state(void)
87 109
88void ide_power_enable(bool on) 110void ide_power_enable(bool on)
89{ 111{
90 (void)on; 112 if (on)
91 if (on) 113 and_l(~(1<<18),&GPIO1_OUT);
92 and_l(~(1<<31),&GPIO_OUT);
93 else 114 else
94 or_l((1<<31),&GPIO_OUT); 115 or_l((1<<18),&GPIO1_OUT);
95
96 or_l((1<<31),&GPIO_ENABLE);
97 or_l((1<<31),&GPIO_FUNCTION);
98
99} 116}
100 117
101bool ide_powered(void) 118bool ide_powered(void)
102{ 119{
103 return true; 120 return (GPIO1_OUT & (1<<18))?false:true;
104} 121}
105 122
106void power_off(void) 123void power_off(void)