mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-12-09 05:05:20 -05:00
Moved archos power handling into target tree. * Tuner power handling cleaned up a bit.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@14345 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
360d951271
commit
8a177345ce
22 changed files with 397 additions and 342 deletions
|
|
@ -96,9 +96,6 @@ drivers/lcd-remote-2bit-vi.c
|
|||
/* Misc. */
|
||||
drivers/led.c
|
||||
drivers/button.c
|
||||
#ifndef TARGET_TREE
|
||||
drivers/power.c
|
||||
#endif /* TARGET_TREE */
|
||||
#ifndef SIMULATOR
|
||||
drivers/dac.c
|
||||
drivers/serial.c
|
||||
|
|
@ -340,6 +337,7 @@ target/sh/archos/player/button-player.c
|
|||
target/sh/archos/player/hwcompat-player.c
|
||||
target/sh/archos/player/lcd-as-player.S
|
||||
target/sh/archos/player/lcd-player.c
|
||||
target/sh/archos/player/power-player.c
|
||||
target/sh/archos/player/usb-player.c
|
||||
#endif /* SIMULATOR */
|
||||
#endif /* ARCHOS_PLAYER */
|
||||
|
|
@ -351,6 +349,7 @@ target/sh/archos/ata-as-archos.S
|
|||
target/sh/archos/lcd-archos-bitmap.c
|
||||
target/sh/archos/lcd-as-archos-bitmap.S
|
||||
target/sh/archos/recorder/button-recorder.c
|
||||
target/sh/archos/recorder/power-recorder.c
|
||||
target/sh/archos/recorder/usb-recorder.c
|
||||
#endif /* SIMULATOR */
|
||||
#endif /* ARCHOS_RECORDER */
|
||||
|
|
@ -362,6 +361,7 @@ target/sh/archos/ata-as-archos.S
|
|||
target/sh/archos/lcd-archos-bitmap.c
|
||||
target/sh/archos/lcd-as-archos-bitmap.S
|
||||
target/sh/archos/fm_v2/button-fm_v2.c
|
||||
target/sh/archos/fm_v2/power-fm_v2.c
|
||||
target/sh/archos/fm_v2/usb-fm_v2.c
|
||||
#endif /* SIMULATOR */
|
||||
#endif /* ARCHOS_FMRECORDER || ARCHOS_RECORDERV2 */
|
||||
|
|
@ -371,6 +371,7 @@ target/sh/archos/fm_v2/usb-fm_v2.c
|
|||
target/sh/archos/lcd-archos-bitmap.c
|
||||
target/sh/archos/lcd-as-archos-bitmap.S
|
||||
target/sh/archos/ondio/button-ondio.c
|
||||
target/sh/archos/ondio/power-ondio.c
|
||||
target/sh/archos/ondio/usb-ondio.c
|
||||
#endif /* SIMULATOR */
|
||||
#endif /* ARCHOS_ONDIOFM || ARCHOS_ONDIOFM */
|
||||
|
|
|
|||
|
|
@ -1,225 +0,0 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2002 by Linus Nielsen Feltzing
|
||||
*
|
||||
* All files in this archive are subject to the GNU General Public License.
|
||||
* See the file COPYING in the source tree root for full license agreement.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "config.h"
|
||||
#include "cpu.h"
|
||||
#include <stdbool.h>
|
||||
#include "adc.h"
|
||||
#include "kernel.h"
|
||||
#include "system.h"
|
||||
#include "power.h"
|
||||
#include "logf.h"
|
||||
#include "usb.h"
|
||||
#include "backlight-target.h"
|
||||
|
||||
#if CONFIG_CHARGING == CHARGING_CONTROL
|
||||
bool charger_enabled;
|
||||
#endif
|
||||
|
||||
|
||||
#if CONFIG_TUNER
|
||||
|
||||
static bool powered = false;
|
||||
|
||||
bool tuner_powered(void)
|
||||
{
|
||||
return powered;
|
||||
}
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool old_status = powered;
|
||||
powered = status;
|
||||
#ifdef HAVE_TUNER_PWR_CTRL
|
||||
if (status)
|
||||
{
|
||||
and_b(~0x04, &PADRL); /* drive PA2 low for tuner enable */
|
||||
sleep(1); /* let the voltage settle */
|
||||
}
|
||||
else
|
||||
or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */
|
||||
#endif
|
||||
return old_status;
|
||||
}
|
||||
|
||||
#endif /* #if CONFIG_TUNER */
|
||||
|
||||
#ifndef SIMULATOR
|
||||
|
||||
void power_init(void)
|
||||
{
|
||||
#ifdef HAVE_POWEROFF_ON_PB5
|
||||
PBCR2 &= ~0x0c00; /* GPIO for PB5 */
|
||||
or_b(0x20, &PBIORL);
|
||||
or_b(0x20, &PBDRL); /* hold power */
|
||||
#if defined(HAVE_MMC) && !defined(HAVE_BACKLIGHT)
|
||||
/* Disable backlight on backlight-modded Ondios when running
|
||||
* a standard build (always on otherwise). */
|
||||
PACR1 &= ~0x3000; /* Set PA14 (backlight control) to GPIO */
|
||||
and_b(~0x40, &PADRH); /* drive it low */
|
||||
or_b(0x40, &PAIORH); /* ..and output */
|
||||
#endif
|
||||
#endif
|
||||
#if CONFIG_CHARGING == CHARGING_CONTROL
|
||||
PBCR2 &= ~0x0c00; /* GPIO for PB5 */
|
||||
or_b(0x20, &PBIORL); /* Set charging control bit to output */
|
||||
charger_enable(false); /* Default to charger OFF */
|
||||
#endif
|
||||
#ifdef HAVE_TUNER_PWR_CTRL
|
||||
PACR2 &= ~0x0030; /* GPIO for PA2 */
|
||||
or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */
|
||||
or_b(0x04, &PAIORL); /* output for PA2 */
|
||||
#endif
|
||||
}
|
||||
|
||||
#if CONFIG_CHARGING
|
||||
bool charger_inserted(void)
|
||||
{
|
||||
#if CONFIG_CHARGING == CHARGING_CONTROL
|
||||
/* Recorder */
|
||||
return adc_read(ADC_EXT_POWER) > 0x100;
|
||||
#elif defined (HAVE_FMADC)
|
||||
/* FM or V2, can also charge from the USB port */
|
||||
return (adc_read(ADC_CHARGE_REGULATOR) < 0x1FF);
|
||||
#else
|
||||
/* Player */
|
||||
return (PADR & 1) == 0;
|
||||
#endif
|
||||
}
|
||||
#endif /* CONFIG_CHARGING */
|
||||
|
||||
#if CONFIG_CHARGING == CHARGING_CONTROL
|
||||
void charger_enable(bool on)
|
||||
{
|
||||
if(on)
|
||||
{
|
||||
and_b(~0x20, &PBDRL);
|
||||
charger_enabled = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
or_b(0x20, &PBDRL);
|
||||
charger_enabled = 0;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#if CONFIG_CHARGING == CHARGING_MONITOR
|
||||
/* Returns true if the unit is charging the batteries. */
|
||||
bool charging_state(void) {
|
||||
#if CONFIG_BATTERY == BATT_LIION2200
|
||||
/* We use the information from the ADC_EXT_POWER ADC channel, which
|
||||
tells us the charging current from the LTC1734. When DC is
|
||||
connected (either via the external adapter, or via USB), we try
|
||||
to determine if it is actively charging or only maintaining the
|
||||
charge. My tests show that ADC readings below about 0x80 means
|
||||
that the LTC1734 is only maintaining the charge. */
|
||||
return adc_read(ADC_EXT_POWER) >= 0x80;
|
||||
#endif
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifndef HAVE_MMC
|
||||
void ide_power_enable(bool on)
|
||||
{
|
||||
(void)on;
|
||||
|
||||
bool touched = false;
|
||||
#ifdef NEEDS_ATA_POWER_ON
|
||||
if(on)
|
||||
{
|
||||
#ifdef ATA_POWER_PLAYERSTYLE
|
||||
or_b(0x10, &PBDRL);
|
||||
#else
|
||||
or_b(0x20, &PADRL);
|
||||
#endif
|
||||
touched = true;
|
||||
}
|
||||
#endif /* NEEDS_ATA_POWER_ON */
|
||||
#ifdef HAVE_ATA_POWER_OFF
|
||||
if(!on)
|
||||
{
|
||||
#ifdef ATA_POWER_PLAYERSTYLE
|
||||
and_b(~0x10, &PBDRL);
|
||||
#else
|
||||
and_b(~0x20, &PADRL);
|
||||
#endif
|
||||
touched = true;
|
||||
}
|
||||
#endif /* HAVE_ATA_POWER_OFF */
|
||||
|
||||
/* late port preparation, else problems with read/modify/write
|
||||
of other bits on same port, while input and floating high */
|
||||
if (touched)
|
||||
{
|
||||
#ifdef ATA_POWER_PLAYERSTYLE
|
||||
or_b(0x10, &PBIORL); /* PB4 is an output */
|
||||
PBCR2 &= ~0x0300; /* GPIO for PB4 */
|
||||
#else
|
||||
or_b(0x20, &PAIORL); /* PA5 is an output */
|
||||
PACR2 &= 0xFBFF; /* GPIO for PA5 */
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool ide_powered(void)
|
||||
{
|
||||
#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
|
||||
* control hd power. However, driving the pin doesn't hurt, because it
|
||||
* is not connected anywhere */
|
||||
if ((PBCR2 & 0x0300) || !(PBIORL & 0x10)) /* not configured for output */
|
||||
return false; /* would be floating low, disk off */
|
||||
else
|
||||
return (PBDRL & 0x10) != 0;
|
||||
#else /* !ATA_POWER_PLAYERSTYLE */
|
||||
if ((PACR2 & 0x0400) || !(PAIORL & 0x20)) /* not configured for output */
|
||||
return true; /* would be floating high, disk on */
|
||||
else
|
||||
return (PADRL & 0x20) != 0;
|
||||
#endif /* !ATA_POWER_PLAYERSTYLE */
|
||||
#else /* !defined(NEEDS_ATA_POWER_ON) && !defined(HAVE_ATA_POWER_OFF) */
|
||||
return true; /* pretend always powered if not controlable */
|
||||
#endif
|
||||
}
|
||||
#endif /* !HAVE_MMC */
|
||||
|
||||
void power_off(void)
|
||||
{
|
||||
set_irq_level(HIGHEST_IRQ_LEVEL);
|
||||
#ifdef HAVE_POWEROFF_ON_PBDR
|
||||
and_b(~0x10, &PBDRL);
|
||||
or_b(0x10, &PBIORL);
|
||||
#elif defined(HAVE_POWEROFF_ON_PB5)
|
||||
#if defined(HAVE_MMC) && defined(HAVE_BACKLIGHT)
|
||||
/* Switch off the light on backlight-modded Ondios */
|
||||
__backlight_off();
|
||||
#endif
|
||||
and_b(~0x20, &PBDRL);
|
||||
or_b(0x20, &PBIORL);
|
||||
#else /* player */
|
||||
and_b(~0x08, &PADRH);
|
||||
or_b(0x08, &PAIORH);
|
||||
#endif
|
||||
while(1)
|
||||
yield();
|
||||
}
|
||||
|
||||
#endif /* SIMULATOR */
|
||||
|
|
@ -84,18 +84,12 @@
|
|||
/* Define this if you have a FM Recorder key system */
|
||||
#define HAVE_FMADC
|
||||
|
||||
/* Define this if you need to power on ATA */
|
||||
#define NEEDS_ATA_POWER_ON
|
||||
|
||||
/* Define this if battery voltage can only be measured with ATA powered */
|
||||
#define NEED_ATA_POWER_BATT_MEASURE
|
||||
|
||||
/* Define this to the CPU frequency */
|
||||
#define CPU_FREQ 11059200
|
||||
|
||||
/* Define this if you control power on PB5 (instead of the OFF button) */
|
||||
#define HAVE_POWEROFF_ON_PB5
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the file length */
|
||||
#define FIRMWARE_OFFSET_FILE_LENGTH 20
|
||||
|
||||
|
|
|
|||
|
|
@ -75,9 +75,6 @@
|
|||
/* Define this for different I2C pinout */
|
||||
#define CONFIG_I2C I2C_ONDIO
|
||||
|
||||
/* Define this if you control power on PB5 (instead of the OFF button) */
|
||||
#define HAVE_POWEROFF_ON_PB5
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the file length */
|
||||
#define FIRMWARE_OFFSET_FILE_LENGTH 20
|
||||
|
||||
|
|
|
|||
|
|
@ -61,9 +61,6 @@
|
|||
/* Define this to the CPU frequency */
|
||||
#define CPU_FREQ 12000000
|
||||
|
||||
/* Define this if you control power on PB5 (instead of the OFF button) */
|
||||
#define HAVE_POWEROFF_ON_PB5
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the file length */
|
||||
#define FIRMWARE_OFFSET_FILE_LENGTH 20
|
||||
|
||||
|
|
|
|||
|
|
@ -48,9 +48,6 @@
|
|||
* Attention, some players crash when ATA power-off is enabled! */
|
||||
//#define HAVE_ATA_POWER_OFF
|
||||
|
||||
/* Define this if you need to power on ATA */
|
||||
#define NEEDS_ATA_POWER_ON
|
||||
|
||||
/* Define this if you control ata power player style
|
||||
(with PB4, new player only) */
|
||||
#define ATA_POWER_PLAYERSTYLE
|
||||
|
|
@ -64,9 +61,6 @@
|
|||
|
||||
#define CONFIG_I2C I2C_PLAYREC
|
||||
|
||||
/* Define this if you control power on PADR (instead of PBDR) */
|
||||
#define HAVE_POWEROFF_ON_PADR
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the file length */
|
||||
#define FIRMWARE_OFFSET_FILE_LENGTH 0
|
||||
|
||||
|
|
|
|||
|
|
@ -71,15 +71,9 @@
|
|||
/* Define this if you have ATA power-off control */
|
||||
#define HAVE_ATA_POWER_OFF
|
||||
|
||||
/* Define this if you need to power on ATA */
|
||||
#define NEEDS_ATA_POWER_ON
|
||||
|
||||
/* Define this to the CPU frequency */
|
||||
#define CPU_FREQ 11059200
|
||||
|
||||
/* Define this if you control power on PBDR (instead of PADR) */
|
||||
#define HAVE_POWEROFF_ON_PBDR
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the file length */
|
||||
#define FIRMWARE_OFFSET_FILE_LENGTH 0
|
||||
|
||||
|
|
|
|||
|
|
@ -81,18 +81,12 @@
|
|||
/* Define this if you have a FM Recorder key system */
|
||||
#define HAVE_FMADC
|
||||
|
||||
/* Define this if you need to power on ATA */
|
||||
#define NEEDS_ATA_POWER_ON
|
||||
|
||||
/* Define this if battery voltage can only be measured with ATA powered */
|
||||
#define NEED_ATA_POWER_BATT_MEASURE
|
||||
|
||||
/* Define this to the CPU frequency */
|
||||
#define CPU_FREQ 11059200
|
||||
|
||||
/* Define this if you control power on PB5 (instead of the OFF button) */
|
||||
#define HAVE_POWEROFF_ON_PB5
|
||||
|
||||
/* Offset ( in the firmware file's header ) to the file length */
|
||||
#define FIRMWARE_OFFSET_FILE_LENGTH 20
|
||||
|
||||
|
|
|
|||
|
|
@ -48,9 +48,8 @@ bool spdif_powered(void);
|
|||
#endif
|
||||
|
||||
#if CONFIG_TUNER
|
||||
extern bool tuner_power(bool status);
|
||||
extern bool tuner_power_nolock(bool status);
|
||||
extern bool tuner_powered(void);
|
||||
bool tuner_power(bool status);
|
||||
bool tuner_power_nolock(bool status);
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
|
|
@ -127,7 +127,6 @@ enum
|
|||
|
||||
void tuner_init(void);
|
||||
bool tuner_power(bool power);
|
||||
bool tuner_powered(void);
|
||||
|
||||
#endif /* #if CONFIG_TUNER */
|
||||
|
||||
|
|
|
|||
|
|
@ -82,16 +82,8 @@ void ide_power_enable(bool on)
|
|||
|
||||
#endif /* SIMULATOR */
|
||||
|
||||
static bool powered = false;
|
||||
|
||||
bool tuner_powered()
|
||||
{
|
||||
return powered;
|
||||
}
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool old_status = powered;
|
||||
powered = status;
|
||||
return old_status;
|
||||
(void)status;
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -38,27 +38,11 @@ bool charger_enabled;
|
|||
#if 0
|
||||
#if CONFIG_TUNER
|
||||
|
||||
static bool powered = false;
|
||||
|
||||
bool tuner_powered()
|
||||
{
|
||||
return powered;
|
||||
}
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool old_status = powered;
|
||||
powered = status;
|
||||
#ifdef HAVE_TUNER_PWR_CTRL
|
||||
if (status)
|
||||
{
|
||||
and_b(~0x04, &PADRL); /* drive PA2 low for tuner enable */
|
||||
sleep(1); /* let the voltage settle */
|
||||
}
|
||||
else
|
||||
or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */
|
||||
#endif
|
||||
return old_status;
|
||||
(void)status;
|
||||
/* TODO: tuner power control */
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif /* #if CONFIG_TUNER */
|
||||
|
|
|
|||
|
|
@ -28,19 +28,10 @@
|
|||
|
||||
#if CONFIG_TUNER
|
||||
|
||||
static bool powered = false;
|
||||
|
||||
bool tuner_powered(void)
|
||||
{
|
||||
return powered;
|
||||
}
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool old_status = powered;
|
||||
powered = status;
|
||||
|
||||
return old_status;
|
||||
(void)status;
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif /* #if CONFIG_TUNER */
|
||||
|
|
|
|||
|
|
@ -125,8 +125,3 @@ bool tuner_power(bool status)
|
|||
lv24020lp_unlock();
|
||||
return old_status;
|
||||
}
|
||||
|
||||
bool tuner_powered(void)
|
||||
{
|
||||
return powered;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -67,16 +67,8 @@ void power_off(void)
|
|||
|
||||
#endif /* SIMULATOR */
|
||||
|
||||
static bool powered = false;
|
||||
|
||||
bool tuner_powered()
|
||||
{
|
||||
return powered;
|
||||
}
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool old_status = powered;
|
||||
powered = status;
|
||||
return old_status;
|
||||
(void)status;
|
||||
return true;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -27,18 +27,10 @@
|
|||
|
||||
#if CONFIG_TUNER
|
||||
|
||||
static bool powered = false;
|
||||
|
||||
bool tuner_powered(void)
|
||||
{
|
||||
return powered;
|
||||
}
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool old_status = powered;
|
||||
powered = status;
|
||||
return old_status;
|
||||
(void)status;
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif /* #if CONFIG_TUNER */
|
||||
|
|
|
|||
|
|
@ -27,18 +27,10 @@
|
|||
|
||||
#if CONFIG_TUNER
|
||||
|
||||
static bool powered = false;
|
||||
|
||||
bool tuner_powered(void)
|
||||
{
|
||||
return powered;
|
||||
}
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool old_status = powered;
|
||||
powered = status;
|
||||
return old_status;
|
||||
(void)status;
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif /* #if CONFIG_TUNER */
|
||||
|
|
|
|||
109
firmware/target/sh/archos/fm_v2/power-fm_v2.c
Normal file
109
firmware/target/sh/archos/fm_v2/power-fm_v2.c
Normal file
|
|
@ -0,0 +1,109 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2002 by Linus Nielsen Feltzing
|
||||
*
|
||||
* All files in this archive are subject to the GNU General Public License.
|
||||
* See the file COPYING in the source tree root for full license agreement.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "config.h"
|
||||
#include "cpu.h"
|
||||
#include <stdbool.h>
|
||||
#include "adc.h"
|
||||
#include "kernel.h"
|
||||
#include "system.h"
|
||||
#include "power.h"
|
||||
#include "usb.h"
|
||||
|
||||
#if CONFIG_TUNER
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
(void)status;
|
||||
return true;
|
||||
}
|
||||
|
||||
#endif /* #if CONFIG_TUNER */
|
||||
|
||||
void power_init(void)
|
||||
{
|
||||
PBCR2 &= ~0x0c00; /* GPIO for PB5 */
|
||||
or_b(0x20, &PBIORL);
|
||||
or_b(0x20, &PBDRL); /* hold power */
|
||||
}
|
||||
|
||||
bool charger_inserted(void)
|
||||
{
|
||||
/* FM or V2 can also charge from the USB port */
|
||||
return (adc_read(ADC_CHARGE_REGULATOR) < 0x1FF);
|
||||
}
|
||||
|
||||
/* Returns true if the unit is charging the batteries. */
|
||||
bool charging_state(void)
|
||||
{
|
||||
/* We use the information from the ADC_EXT_POWER ADC channel, which
|
||||
tells us the charging current from the LTC1734. When DC is
|
||||
connected (either via the external adapter, or via USB), we try
|
||||
to determine if it is actively charging or only maintaining the
|
||||
charge. My tests show that ADC readings below about 0x80 means
|
||||
that the LTC1734 is only maintaining the charge. */
|
||||
return adc_read(ADC_EXT_POWER) >= 0x80;
|
||||
}
|
||||
|
||||
void ide_power_enable(bool on)
|
||||
{
|
||||
bool touched = false;
|
||||
|
||||
if(on)
|
||||
{
|
||||
or_b(0x20, &PADRL);
|
||||
touched = true;
|
||||
}
|
||||
#ifdef HAVE_ATA_POWER_OFF
|
||||
if(!on)
|
||||
{
|
||||
and_b(~0x20, &PADRL);
|
||||
touched = true;
|
||||
}
|
||||
#endif /* HAVE_ATA_POWER_OFF */
|
||||
|
||||
/* late port preparation, else problems with read/modify/write
|
||||
of other bits on same port, while input and floating high */
|
||||
if (touched)
|
||||
{
|
||||
or_b(0x20, &PAIORL); /* PA5 is an output */
|
||||
PACR2 &= 0xFBFF; /* GPIO for PA5 */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool ide_powered(void)
|
||||
{
|
||||
#ifdef HAVE_ATA_POWER_OFF
|
||||
if ((PACR2 & 0x0400) || !(PAIORL & 0x20)) /* not configured for output */
|
||||
return true; /* would be floating high, disk on */
|
||||
else
|
||||
return (PADRL & 0x20) != 0;
|
||||
#else /* !defined(NEEDS_ATA_POWER_ON) && !defined(HAVE_ATA_POWER_OFF) */
|
||||
return true; /* pretend always powered if not controlable */
|
||||
#endif
|
||||
}
|
||||
|
||||
void power_off(void)
|
||||
{
|
||||
set_irq_level(HIGHEST_IRQ_LEVEL);
|
||||
and_b(~0x20, &PBDRL);
|
||||
or_b(0x20, &PBIORL);
|
||||
while(1)
|
||||
yield();
|
||||
}
|
||||
78
firmware/target/sh/archos/ondio/power-ondio.c
Normal file
78
firmware/target/sh/archos/ondio/power-ondio.c
Normal file
|
|
@ -0,0 +1,78 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2002 by Linus Nielsen Feltzing
|
||||
*
|
||||
* All files in this archive are subject to the GNU General Public License.
|
||||
* See the file COPYING in the source tree root for full license agreement.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "config.h"
|
||||
#include "cpu.h"
|
||||
#include <stdbool.h>
|
||||
#include "adc.h"
|
||||
#include "kernel.h"
|
||||
#include "system.h"
|
||||
#include "power.h"
|
||||
#include "usb.h"
|
||||
#include "backlight-target.h"
|
||||
|
||||
#if CONFIG_TUNER
|
||||
|
||||
static bool powered = false;
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool old_status = powered;
|
||||
|
||||
powered = status;
|
||||
if (status)
|
||||
{
|
||||
and_b(~0x04, &PADRL); /* drive PA2 low for tuner enable */
|
||||
sleep(1); /* let the voltage settle */
|
||||
}
|
||||
else
|
||||
or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */
|
||||
return old_status;
|
||||
}
|
||||
|
||||
#endif /* #if CONFIG_TUNER */
|
||||
|
||||
void power_init(void)
|
||||
{
|
||||
PBCR2 &= ~0x0c00; /* GPIO for PB5 */
|
||||
or_b(0x20, &PBIORL);
|
||||
or_b(0x20, &PBDRL); /* hold power */
|
||||
#ifndef HAVE_BACKLIGHT
|
||||
/* Disable backlight on backlight-modded Ondios when running
|
||||
* a standard build (always on otherwise). */
|
||||
PACR1 &= ~0x3000; /* Set PA14 (backlight control) to GPIO */
|
||||
and_b(~0x40, &PADRH); /* drive it low */
|
||||
or_b(0x40, &PAIORH); /* ..and output */
|
||||
#endif
|
||||
PACR2 &= ~0x0030; /* GPIO for PA2 */
|
||||
or_b(0x04, &PADRL); /* drive PA2 high for tuner disable */
|
||||
or_b(0x04, &PAIORL); /* output for PA2 */
|
||||
}
|
||||
|
||||
void power_off(void)
|
||||
{
|
||||
set_irq_level(HIGHEST_IRQ_LEVEL);
|
||||
#ifdef HAVE_BACKLIGHT
|
||||
/* Switch off the light on backlight-modded Ondios */
|
||||
__backlight_off();
|
||||
#endif
|
||||
and_b(~0x20, &PBDRL);
|
||||
or_b(0x20, &PBIORL);
|
||||
while(1)
|
||||
yield();
|
||||
}
|
||||
87
firmware/target/sh/archos/player/power-player.c
Normal file
87
firmware/target/sh/archos/player/power-player.c
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2002 by Linus Nielsen Feltzing
|
||||
*
|
||||
* All files in this archive are subject to the GNU General Public License.
|
||||
* See the file COPYING in the source tree root for full license agreement.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "config.h"
|
||||
#include "cpu.h"
|
||||
#include <stdbool.h>
|
||||
#include "adc.h"
|
||||
#include "kernel.h"
|
||||
#include "system.h"
|
||||
#include "power.h"
|
||||
#include "usb.h"
|
||||
|
||||
void power_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
bool charger_inserted(void)
|
||||
{
|
||||
/* Player */
|
||||
return (PADR & 1) == 0;
|
||||
}
|
||||
|
||||
void ide_power_enable(bool on)
|
||||
{
|
||||
bool touched = false;
|
||||
|
||||
if(on)
|
||||
{
|
||||
or_b(0x10, &PBDRL);
|
||||
touched = true;
|
||||
}
|
||||
#ifdef HAVE_ATA_POWER_OFF
|
||||
if(!on)
|
||||
{
|
||||
and_b(~0x10, &PBDRL);
|
||||
touched = true;
|
||||
}
|
||||
#endif /* HAVE_ATA_POWER_OFF */
|
||||
|
||||
/* late port preparation, else problems with read/modify/write
|
||||
of other bits on same port, while input and floating high */
|
||||
if (touched)
|
||||
{
|
||||
or_b(0x10, &PBIORL); /* PB4 is an output */
|
||||
PBCR2 &= ~0x0300; /* GPIO for PB4 */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool ide_powered(void)
|
||||
{
|
||||
#ifdef HAVE_ATA_POWER_OFF
|
||||
/* This is not correct for very old players, since these are unable to
|
||||
* control hd power. However, driving the pin doesn't hurt, because it
|
||||
* is not connected anywhere */
|
||||
if ((PBCR2 & 0x0300) || !(PBIORL & 0x10)) /* not configured for output */
|
||||
return false; /* would be floating low, disk off */
|
||||
else
|
||||
return (PBDRL & 0x10) != 0;
|
||||
#else /* !defined(NEEDS_ATA_POWER_ON) && !defined(HAVE_ATA_POWER_OFF) */
|
||||
return true; /* pretend always powered if not controlable */
|
||||
#endif
|
||||
}
|
||||
|
||||
void power_off(void)
|
||||
{
|
||||
set_irq_level(HIGHEST_IRQ_LEVEL);
|
||||
and_b(~0x08, &PADRH);
|
||||
or_b(0x08, &PAIORH);
|
||||
while(1)
|
||||
yield();
|
||||
}
|
||||
103
firmware/target/sh/archos/recorder/power-recorder.c
Normal file
103
firmware/target/sh/archos/recorder/power-recorder.c
Normal file
|
|
@ -0,0 +1,103 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2002 by Linus Nielsen Feltzing
|
||||
*
|
||||
* All files in this archive are subject to the GNU General Public License.
|
||||
* See the file COPYING in the source tree root for full license agreement.
|
||||
*
|
||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
||||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "config.h"
|
||||
#include "cpu.h"
|
||||
#include <stdbool.h>
|
||||
#include "adc.h"
|
||||
#include "kernel.h"
|
||||
#include "system.h"
|
||||
#include "power.h"
|
||||
#include "usb.h"
|
||||
|
||||
bool charger_enabled;
|
||||
|
||||
void power_init(void)
|
||||
{
|
||||
PBCR2 &= ~0x0c00; /* GPIO for PB5 */
|
||||
or_b(0x20, &PBIORL); /* Set charging control bit to output */
|
||||
charger_enable(false); /* Default to charger OFF */
|
||||
}
|
||||
|
||||
bool charger_inserted(void)
|
||||
{
|
||||
/* Recorder */
|
||||
return adc_read(ADC_EXT_POWER) > 0x100;
|
||||
}
|
||||
|
||||
void charger_enable(bool on)
|
||||
{
|
||||
if(on)
|
||||
{
|
||||
and_b(~0x20, &PBDRL);
|
||||
charger_enabled = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
or_b(0x20, &PBDRL);
|
||||
charger_enabled = 0;
|
||||
}
|
||||
}
|
||||
|
||||
void ide_power_enable(bool on)
|
||||
{
|
||||
bool touched = false;
|
||||
|
||||
if(on)
|
||||
{
|
||||
or_b(0x20, &PADRL);
|
||||
touched = true;
|
||||
}
|
||||
#ifdef HAVE_ATA_POWER_OFF
|
||||
if(!on)
|
||||
{
|
||||
and_b(~0x20, &PADRL);
|
||||
touched = true;
|
||||
}
|
||||
#endif /* HAVE_ATA_POWER_OFF */
|
||||
|
||||
/* late port preparation, else problems with read/modify/write
|
||||
of other bits on same port, while input and floating high */
|
||||
if (touched)
|
||||
{
|
||||
or_b(0x20, &PAIORL); /* PA5 is an output */
|
||||
PACR2 &= 0xFBFF; /* GPIO for PA5 */
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
bool ide_powered(void)
|
||||
{
|
||||
#ifdef HAVE_ATA_POWER_OFF
|
||||
if ((PACR2 & 0x0400) || !(PAIORL & 0x20)) /* not configured for output */
|
||||
return true; /* would be floating high, disk on */
|
||||
else
|
||||
return (PADRL & 0x20) != 0;
|
||||
#else /* !defined(NEEDS_ATA_POWER_ON) && !defined(HAVE_ATA_POWER_OFF) */
|
||||
return true; /* pretend always powered if not controlable */
|
||||
#endif
|
||||
}
|
||||
|
||||
void power_off(void)
|
||||
{
|
||||
set_irq_level(HIGHEST_IRQ_LEVEL);
|
||||
and_b(~0x10, &PBDRL);
|
||||
or_b(0x10, &PBIORL);
|
||||
while(1)
|
||||
yield();
|
||||
}
|
||||
|
|
@ -26,9 +26,7 @@
|
|||
static int frequency = 0;
|
||||
static bool mono = false;
|
||||
|
||||
#ifdef HAVE_TUNER_PWR_CTRL
|
||||
static bool powered = false;
|
||||
#endif
|
||||
|
||||
void tuner_init(void)
|
||||
{
|
||||
|
|
@ -89,13 +87,11 @@ int tuner_get(int setting)
|
|||
return val;
|
||||
}
|
||||
|
||||
#ifdef HAVE_TUNER_PWR_CTRL
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool oldstatus = powered;
|
||||
powered = status;
|
||||
return oldstatus;
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue