summaryrefslogtreecommitdiffstats
path: root/firmware
diff options
context:
space:
mode:
authorLinus Nielsen Feltzing <linus@haxx.se>2004-12-20 00:45:23 +0000
committerLinus Nielsen Feltzing <linus@haxx.se>2004-12-20 00:45:23 +0000
commit488061562b82dc44b94617fec79d01e157684c21 (patch)
tree4882ed27e456b93bc8f2dbf1dd2a19b5a7ed810a /firmware
parent66111fd9878a74bc46b2cfe1ffd983ce85147086 (diff)
downloadrockbox-488061562b82dc44b94617fec79d01e157684c21.tar.gz
rockbox-488061562b82dc44b94617fec79d01e157684c21.tar.bz2
rockbox-488061562b82dc44b94617fec79d01e157684c21.zip
Added power functions for iRiver H1xx
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5494 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'firmware')
-rw-r--r--firmware/drivers/power.c39
1 files changed, 36 insertions, 3 deletions
diff --git a/firmware/drivers/power.c b/firmware/drivers/power.c
index 3522ad4232..8117f12902 100644
--- a/firmware/drivers/power.c
+++ b/firmware/drivers/power.c
@@ -16,9 +16,9 @@
* KIND, either express or implied.
*
****************************************************************************/
-#include "sh7034.h"
-#include <stdbool.h>
#include "config.h"
+#include "cpu.h"
+#include <stdbool.h>
#include "adc.h"
#include "kernel.h"
#include "system.h"
@@ -36,6 +36,9 @@ static int fmstatus = 0;
void radio_set_status(int status)
{
+#ifdef IRIVER_H100
+ fmstatus = status;
+#else
fmstatus = status;
#ifdef HAVE_TUNER_PWR_CTRL
if (status)
@@ -46,6 +49,7 @@ void radio_set_status(int status)
else
or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */
#endif
+#endif
}
int radio_get_status(void)
@@ -59,6 +63,15 @@ int radio_get_status(void)
void power_init(void)
{
+#ifdef IRIVER_H100
+ GPIO1_OUT |= 0x00080000;
+ GPIO1_ENABLE |= 0x00080000;
+ GPIO1_FUNCTION |= 0x00080000;
+
+ GPIO_OUT |= 0x80000000;
+ GPIO_ENABLE |= 0x80000000;
+ GPIO_FUNCTION |= 0x80000000;
+#else
#ifdef HAVE_CHARGE_CTRL
or_b(0x20, &PBIORL); /* Set charging control bit to output */
charger_enable(false); /* Default to charger OFF */
@@ -68,10 +81,14 @@ void power_init(void)
or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */
or_b(0x04, &PAIORL); /* output for PA2 */
#endif
+#endif
}
bool charger_inserted(void)
{
+#ifdef IRIVER_H100
+ return (GPIO1_READ & 0x00400000)?true:false;
+#else
#ifdef HAVE_CHARGING
#ifdef HAVE_CHARGE_CTRL
/* Recorder */
@@ -90,6 +107,7 @@ bool charger_inserted(void)
/* Ondio */
return false;
#endif /* HAVE_CHARGING */
+#endif
}
void charger_enable(bool on)
@@ -113,8 +131,14 @@ void charger_enable(bool on)
void ide_power_enable(bool on)
{
(void)on;
- bool touched = false;
+#ifdef IRIVER_H100
+ if(on)
+ GPIO_OUT &= ~0x80000000;
+ else
+ GPIO_OUT |= 0x80000000;
+#else
+ bool touched = false;
#ifdef NEEDS_ATA_POWER_ON
if(on)
{
@@ -150,12 +174,16 @@ void ide_power_enable(bool on)
PACR2 &= 0xFBFF; /* GPIO for PA5 */
#endif
}
+#endif
}
#endif /* !HAVE_MMC */
bool ide_powered(void)
{
+#ifdef IRIVER_H100
+ return (GPIO_OUT & 0x80000000)?true:false;
+#else
#if defined(NEEDS_ATA_POWER_ON) || defined(HAVE_ATA_POWER_OFF)
#ifdef ATA_POWER_PLAYERSTYLE
/* This is not correct for very old players, since these are unable to
@@ -174,12 +202,16 @@ bool ide_powered(void)
#else
return true; /* pretend always powered if not controlable */
#endif
+#endif
}
void power_off(void)
{
set_irq_level(HIGHEST_IRQ_LEVEL);
+#ifdef IRIVER_H100
+ GPIO1_OUT &= ~0x00080000;
+#else
#ifdef HAVE_POWEROFF_ON_PBDR
and_b(~0x10, &PBDRL);
or_b(0x10, &PBIORL);
@@ -193,6 +225,7 @@ void power_off(void)
and_b(~0x08, &PADRH);
or_b(0x08, &PAIORH);
#endif
+#endif
while(1);
}