summaryrefslogtreecommitdiff
path: root/firmware/drivers/power.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/drivers/power.c')
-rw-r--r--firmware/drivers/power.c68
1 files changed, 4 insertions, 64 deletions
diff --git a/firmware/drivers/power.c b/firmware/drivers/power.c
index af70ac8ef2..e48993c2aa 100644
--- a/firmware/drivers/power.c
+++ b/firmware/drivers/power.c
@@ -65,26 +65,6 @@ bool radio_power(bool status)
65 65
66void power_init(void) 66void power_init(void)
67{ 67{
68#if CONFIG_CPU == MCF5249
69#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
70 or_l(0x00080000, &GPIO1_OUT);
71 or_l(0x00080000, &GPIO1_ENABLE);
72 or_l(0x00080000, &GPIO1_FUNCTION);
73
74#ifndef BOOTLOADER
75 /* The boot loader controls the power */
76 ide_power_enable(true);
77#endif
78 or_l(0x80000000, &GPIO_ENABLE);
79 or_l(0x80000000, &GPIO_FUNCTION);
80#ifdef HAVE_SPDIF_POWER
81 spdif_power_enable(false);
82#endif
83#ifdef IRIVER_H300_SERIES
84 pcf50606_init();
85#endif
86#endif
87#else
88#ifdef HAVE_POWEROFF_ON_PB5 68#ifdef HAVE_POWEROFF_ON_PB5
89 PBCR2 &= ~0x0c00; /* GPIO for PB5 */ 69 PBCR2 &= ~0x0c00; /* GPIO for PB5 */
90 or_b(0x20, &PBIORL); 70 or_b(0x20, &PBIORL);
@@ -100,19 +80,14 @@ void power_init(void)
100 or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */ 80 or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */
101 or_b(0x04, &PAIORL); /* output for PA2 */ 81 or_b(0x04, &PAIORL); /* output for PA2 */
102#endif 82#endif
103#endif
104} 83}
105 84
106 85
107#ifdef CONFIG_CHARGING 86#ifdef CONFIG_CHARGING
108bool charger_inserted(void) 87bool charger_inserted(void)
109{ 88{
110#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES) 89#if defined(GMINI_ARCH)
111 return (GPIO1_READ & 0x00400000)?true:false;
112#elif defined(GMINI_ARCH)
113 return (P7 & 0x80) == 0; 90 return (P7 & 0x80) == 0;
114#elif defined(IAUDIO_X5)
115 return (GPIO1_READ & 0x01000000)?true:false;
116#elif CONFIG_CHARGING == CHARGING_CONTROL 91#elif CONFIG_CHARGING == CHARGING_CONTROL
117 /* Recorder */ 92 /* Recorder */
118 return adc_read(ADC_EXT_POWER) > 0x100; 93 return adc_read(ADC_EXT_POWER) > 0x100;
@@ -155,28 +130,7 @@ bool charging_state(void) {
155 charge. My tests show that ADC readings below about 0x80 means 130 charge. My tests show that ADC readings below about 0x80 means
156 that the LTC1734 is only maintaining the charge. */ 131 that the LTC1734 is only maintaining the charge. */
157 return adc_read(ADC_EXT_POWER) >= 0x80; 132 return adc_read(ADC_EXT_POWER) >= 0x80;
158#elif defined(IRIVER_H100_SERIES) /* FIXME */
159 return charger_inserted();
160#elif defined IRIVER_H300_SERIES
161 return (GPIO_READ & 0x00800000)?true:false;
162#endif
163}
164#endif
165
166#ifdef HAVE_SPDIF_POWER
167void spdif_power_enable(bool on)
168{
169 or_l(0x01000000, &GPIO1_FUNCTION);
170 or_l(0x01000000, &GPIO1_ENABLE);
171
172#ifdef SPDIF_POWER_INVERTED
173 if(!on)
174#else
175 if(on)
176#endif 133#endif
177 and_l(~0x01000000, &GPIO1_OUT);
178 else
179 or_l(0x01000000, &GPIO1_OUT);
180} 134}
181#endif 135#endif
182 136
@@ -185,14 +139,7 @@ void ide_power_enable(bool on)
185{ 139{
186 (void)on; 140 (void)on;
187 141
188#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES) 142#if defined(GMINI_ARCH)
189 if(on)
190 and_l(~0x80000000, &GPIO_OUT);
191 else
192 or_l(0x80000000, &GPIO_OUT);
193#elif defined(IAUDIO_X5)
194 /* X5 TODO */
195#elif defined(GMINI_ARCH)
196 if(on) 143 if(on)
197 P1 |= 0x08; 144 P1 |= 0x08;
198 else 145 else
@@ -244,11 +191,7 @@ void ide_power_enable(bool on)
244 191
245bool ide_powered(void) 192bool ide_powered(void)
246{ 193{
247#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES) 194#if defined(GMINI_ARCH)
248 return (GPIO_OUT & 0x80000000)?false:true;
249#elif defined(IAUDIO_X5)
250 return false; /* X5 TODO */
251#elif defined(GMINI_ARCH)
252 return (P1 & 0x08?true:false); 195 return (P1 & 0x08?true:false);
253#elif defined(TOSHIBA_GIGABEAT_F) 196#elif defined(TOSHIBA_GIGABEAT_F)
254 return false; 197 return false;
@@ -279,10 +222,7 @@ bool ide_powered(void)
279void power_off(void) 222void power_off(void)
280{ 223{
281 set_irq_level(HIGHEST_IRQ_LEVEL); 224 set_irq_level(HIGHEST_IRQ_LEVEL);
282#if defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES) 225#if CONFIG_CPU == PNX0101
283 and_l(~0x00080000, &GPIO1_OUT);
284 asm("halt");
285#elif CONFIG_CPU == PNX0101
286 GPIO1_CLR = 1 << 16; 226 GPIO1_CLR = 1 << 16;
287 GPIO2_SET = 1; 227 GPIO2_SET = 1;
288#elif defined(GMINI_ARCH) 228#elif defined(GMINI_ARCH)