mirror of
https://github.com/Rockbox/rockbox.git
synced 2025-10-13 10:07:38 -04:00
Nuke the never-functional iriver ifp-7xx port
It never worked, and hasn't compiled in something like a decade, Given the HW capabilities (limited onboard flash, no expandability) there's really no point in trying to fix/complete it. Change-Id: I7d175089840396f8891645bd10010d730dd5bfdc
This commit is contained in:
parent
3ba2f6e5c7
commit
7d0d32dbc6
58 changed files with 3 additions and 4087 deletions
|
@ -197,8 +197,6 @@ keymaps/keymap-gigabeat.c
|
||||||
keymaps/keymap-gigabeat-s.c
|
keymaps/keymap-gigabeat-s.c
|
||||||
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
|
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
|
||||||
keymaps/keymap-h10.c
|
keymaps/keymap-h10.c
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
keymaps/keymap-ifp7xx.c
|
|
||||||
#elif CONFIG_KEYPAD == SANSA_E200_PAD
|
#elif CONFIG_KEYPAD == SANSA_E200_PAD
|
||||||
keymaps/keymap-e200.c
|
keymaps/keymap-e200.c
|
||||||
#elif CONFIG_KEYPAD == SANSA_C200_PAD
|
#elif CONFIG_KEYPAD == SANSA_C200_PAD
|
||||||
|
|
|
@ -1,185 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 Tomasz Malesinski
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
/* Button Code Definitions for iriver iFP7xx target */
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include "action.h"
|
|
||||||
#include "button.h"
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The format of the list is as follows
|
|
||||||
* { Action Code, Button code, Prereq button code }
|
|
||||||
* if there's no need to check the previous button's value, use BUTTON_NONE
|
|
||||||
* Insert LAST_ITEM_IN_LIST at the end of each mapping
|
|
||||||
*/
|
|
||||||
static const struct button_mapping button_context_standard[] = {
|
|
||||||
{ ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
|
|
||||||
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
|
|
||||||
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
|
|
||||||
{ ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
|
|
||||||
{ ACTION_STD_CANCEL, BUTTON_PLAY, BUTTON_NONE },
|
|
||||||
{ ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT },
|
|
||||||
|
|
||||||
{ ACTION_STD_QUICKSCREEN, BUTTON_MODE|BUTTON_REPEAT, BUTTON_MODE },
|
|
||||||
{ ACTION_STD_MENU, BUTTON_MODE|BUTTON_REL, BUTTON_MODE },
|
|
||||||
{ ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
|
|
||||||
{ ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
|
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST
|
|
||||||
}; /* button_context_standard */
|
|
||||||
|
|
||||||
static const struct button_mapping button_context_wps[] = {
|
|
||||||
{ ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
|
|
||||||
{ ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
|
|
||||||
{ ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
|
||||||
{ ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
|
|
||||||
{ ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
|
|
||||||
{ ACTION_WPS_ABSETB_NEXTDIR, BUTTON_PLAY|BUTTON_RIGHT, BUTTON_PLAY },
|
|
||||||
{ ACTION_WPS_ABSETA_PREVDIR, BUTTON_PLAY|BUTTON_LEFT, BUTTON_PLAY },
|
|
||||||
{ ACTION_WPS_STOP, BUTTON_EQ, BUTTON_NONE },
|
|
||||||
{ ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
|
|
||||||
{ ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE },
|
|
||||||
{ ACTION_WPS_QUICKSCREEN, BUTTON_MODE|BUTTON_REPEAT, BUTTON_MODE },
|
|
||||||
{ ACTION_WPS_MENU, BUTTON_MODE|BUTTON_REL, BUTTON_MODE },
|
|
||||||
{ ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
|
|
||||||
{ ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
|
|
||||||
{ ACTION_WPS_ABRESET, BUTTON_PLAY|BUTTON_SELECT, BUTTON_PLAY },
|
|
||||||
{ ACTION_WPS_HOTKEY, BUTTON_PLAY|BUTTON_MODE, BUTTON_PLAY },
|
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST
|
|
||||||
}; /* button_context_wps */
|
|
||||||
|
|
||||||
static const struct button_mapping button_context_settings[] = {
|
|
||||||
{ ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
|
|
||||||
{ ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
|
|
||||||
{ ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
|
|
||||||
{ ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
|
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
|
||||||
}; /* button_context_settings */
|
|
||||||
|
|
||||||
static const struct button_mapping button_context_settings_r_is_inc[] = {
|
|
||||||
{ ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE },
|
|
||||||
{ ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE },
|
|
||||||
{ ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
|
|
||||||
{ ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
|
|
||||||
{ ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
|
||||||
}; /* button_context_settingsgraphical */
|
|
||||||
|
|
||||||
static const struct button_mapping button_context_yesno[] = {
|
|
||||||
{ ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE },
|
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
|
||||||
}; /* button_context_settings_yesno */
|
|
||||||
|
|
||||||
static const struct button_mapping button_context_bmark[] = {
|
|
||||||
{ ACTION_BMS_DELETE, BUTTON_MODE, BUTTON_NONE },
|
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
|
||||||
}; /* button_context_settings_bmark */
|
|
||||||
|
|
||||||
static const struct button_mapping button_context_quickscreen[] = {
|
|
||||||
{ ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE },
|
|
||||||
{ ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE },
|
|
||||||
{ ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
|
||||||
{ ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
|
||||||
{ ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
|
||||||
}; /* button_context_quickscreen */
|
|
||||||
|
|
||||||
static const struct button_mapping button_context_pitchscreen[] = {
|
|
||||||
{ ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_RESET, BUTTON_MODE, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_EXIT, BUTTON_PLAY, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_SLOWER, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_PS_FASTER, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
|
||||||
}; /* button_context_pitchcreen */
|
|
||||||
|
|
||||||
static const struct button_mapping button_context_keyboard[] = {
|
|
||||||
{ ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE },
|
|
||||||
{ ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
|
|
||||||
{ ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_KBD_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
|
|
||||||
{ ACTION_KBD_DONE, BUTTON_MODE, BUTTON_NONE },
|
|
||||||
{ ACTION_KBD_ABORT, BUTTON_PLAY, BUTTON_NONE },
|
|
||||||
{ ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE },
|
|
||||||
{ ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
{ ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE },
|
|
||||||
{ ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
|
||||||
|
|
||||||
LAST_ITEM_IN_LIST
|
|
||||||
}; /* button_context_keyboard */
|
|
||||||
|
|
||||||
/* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */
|
|
||||||
const struct button_mapping* get_context_mapping(int context)
|
|
||||||
{
|
|
||||||
switch (context)
|
|
||||||
{
|
|
||||||
case CONTEXT_STD:
|
|
||||||
return button_context_standard;
|
|
||||||
case CONTEXT_WPS:
|
|
||||||
return button_context_wps;
|
|
||||||
case CONTEXT_CUSTOM|CONTEXT_SETTINGS:
|
|
||||||
case CONTEXT_SETTINGS_EQ:
|
|
||||||
case CONTEXT_SETTINGS_COLOURCHOOSER:
|
|
||||||
case CONTEXT_SETTINGS_TIME:
|
|
||||||
return button_context_settings_r_is_inc;
|
|
||||||
case CONTEXT_SETTINGS:
|
|
||||||
return button_context_settings;
|
|
||||||
case CONTEXT_YESNOSCREEN:
|
|
||||||
return button_context_yesno;
|
|
||||||
case CONTEXT_BOOKMARKSCREEN:
|
|
||||||
return button_context_bmark;
|
|
||||||
case CONTEXT_QUICKSCREEN:
|
|
||||||
return button_context_quickscreen;
|
|
||||||
case CONTEXT_PITCHSCREEN:
|
|
||||||
return button_context_pitchscreen;
|
|
||||||
case CONTEXT_KEYBOARD:
|
|
||||||
return button_context_keyboard;
|
|
||||||
}
|
|
||||||
return button_context_standard;
|
|
||||||
}
|
|
|
@ -57,7 +57,6 @@
|
||||||
# H120/H140 iriverh120
|
# H120/H140 iriverh120
|
||||||
# H320/H340 iriverh300
|
# H320/H340 iriverh300
|
||||||
# H10 iriverh10
|
# H10 iriverh10
|
||||||
# IFP 7XX iriverifp7xx
|
|
||||||
# iaudio/Cowon
|
# iaudio/Cowon
|
||||||
# X5 iaudiox5
|
# X5 iaudiox5
|
||||||
# M5 iaudiom5
|
# M5 iaudiom5
|
||||||
|
@ -6069,12 +6068,10 @@
|
||||||
<source>
|
<source>
|
||||||
*: "Battery: %d%% %dh %dm"
|
*: "Battery: %d%% %dh %dm"
|
||||||
ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm"
|
ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm"
|
||||||
iriverifp7xx: "%d%% %dh %dm"
|
|
||||||
</source>
|
</source>
|
||||||
<dest>
|
<dest>
|
||||||
*: "Battery: %d%% %dh %dm"
|
*: "Battery: %d%% %dh %dm"
|
||||||
ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm"
|
ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm"
|
||||||
iriverifp7xx: "%d%% %dh %dm"
|
|
||||||
</dest>
|
</dest>
|
||||||
<voice>
|
<voice>
|
||||||
*: "Battery level"
|
*: "Battery level"
|
||||||
|
|
|
@ -61,13 +61,6 @@
|
||||||
#define BATTERY_ON_TXT "SELECT - start"
|
#define BATTERY_ON_TXT "SELECT - start"
|
||||||
#define BATTERY_OFF_TXT "POWER"
|
#define BATTERY_OFF_TXT "POWER"
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
|
|
||||||
#define BATTERY_ON BUTTON_SELECT
|
|
||||||
#define BATTERY_OFF BUTTON_PLAY
|
|
||||||
#define BATTERY_ON_TXT "SELECT - start"
|
|
||||||
#define BATTERY_OFF_TXT "PLAY"
|
|
||||||
|
|
||||||
#elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \
|
#elif (CONFIG_KEYPAD == SANSA_E200_PAD) || \
|
||||||
(CONFIG_KEYPAD == SANSA_C200_PAD) || \
|
(CONFIG_KEYPAD == SANSA_C200_PAD) || \
|
||||||
(CONFIG_KEYPAD == SANSA_CLIP_PAD) || \
|
(CONFIG_KEYPAD == SANSA_CLIP_PAD) || \
|
||||||
|
|
|
@ -104,22 +104,6 @@ enum {
|
||||||
#define BJACK_RIGHT BUTTON_RIGHT
|
#define BJACK_RIGHT BUTTON_RIGHT
|
||||||
#define BJACK_LEFT BUTTON_LEFT
|
#define BJACK_LEFT BUTTON_LEFT
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define BJACK_SELECT_NAME "MODE"
|
|
||||||
#define BJACK_STAY_NAME "MODE"
|
|
||||||
#define BJACK_QUIT_NAME "PLAY"
|
|
||||||
#define BJACK_DOUBLE_NAME "SELECT"
|
|
||||||
#define BJACK_SELECT BUTTON_MODE
|
|
||||||
#define BJACK_QUIT BUTTON_PLAY
|
|
||||||
#define BJACK_MAX (BUTTON_EQ|BUTTON_UP)
|
|
||||||
#define BJACK_MIN (BUTTON_EQ|BUTTON_DOWN)
|
|
||||||
#define BJACK_STAY BUTTON_MODE
|
|
||||||
#define BJACK_DOUBLEDOWN BUTTON_SELECT
|
|
||||||
#define BJACK_UP BUTTON_UP
|
|
||||||
#define BJACK_DOWN BUTTON_DOWN
|
|
||||||
#define BJACK_RIGHT BUTTON_RIGHT
|
|
||||||
#define BJACK_LEFT BUTTON_LEFT
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == GIGABEAT_PAD
|
#elif CONFIG_KEYPAD == GIGABEAT_PAD
|
||||||
#define BJACK_SELECT_NAME "SELECT"
|
#define BJACK_SELECT_NAME "SELECT"
|
||||||
#define BJACK_STAY_NAME "VOL-"
|
#define BJACK_STAY_NAME "VOL-"
|
||||||
|
|
|
@ -68,16 +68,6 @@
|
||||||
#define CALENDAR_NEXT_MONTH BUTTON_VOL_DOWN
|
#define CALENDAR_NEXT_MONTH BUTTON_VOL_DOWN
|
||||||
#define CALENDAR_PREV_MONTH BUTTON_VOL_UP
|
#define CALENDAR_PREV_MONTH BUTTON_VOL_UP
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define CALENDAR_QUIT BUTTON_PLAY
|
|
||||||
#define CALENDAR_SELECT BUTTON_SELECT
|
|
||||||
#define CALENDAR_NEXT_WEEK BUTTON_DOWN
|
|
||||||
#define CALENDAR_PREV_WEEK BUTTON_UP
|
|
||||||
#define CALENDAR_NEXT_DAY BUTTON_RIGHT
|
|
||||||
#define CALENDAR_PREV_DAY BUTTON_LEFT
|
|
||||||
#define CALENDAR_NEXT_MONTH BUTTON_MODE
|
|
||||||
#define CALENDAR_PREV_MONTH BUTTON_EQ
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == SANSA_E200_PAD
|
#elif CONFIG_KEYPAD == SANSA_E200_PAD
|
||||||
#define CALENDAR_QUIT BUTTON_POWER
|
#define CALENDAR_QUIT BUTTON_POWER
|
||||||
#define CALENDAR_SELECT BUTTON_SELECT
|
#define CALENDAR_SELECT BUTTON_SELECT
|
||||||
|
|
|
@ -70,20 +70,6 @@
|
||||||
#define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
|
#define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
|
||||||
#define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
|
#define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define CB_SELECT BUTTON_SELECT
|
|
||||||
#define CB_UP BUTTON_UP
|
|
||||||
#define CB_DOWN BUTTON_DOWN
|
|
||||||
#define CB_LEFT BUTTON_LEFT
|
|
||||||
#define CB_RIGHT BUTTON_RIGHT
|
|
||||||
#define CB_PLAY BUTTON_PLAY
|
|
||||||
#define CB_LEVEL BUTTON_EQ
|
|
||||||
#define CB_MENU BUTTON_MODE
|
|
||||||
#define CB_SCROLL_UP (BUTTON_UP|BUTTON_REPEAT)
|
|
||||||
#define CB_SCROLL_DOWN (BUTTON_DOWN|BUTTON_REPEAT)
|
|
||||||
#define CB_SCROLL_LEFT (BUTTON_LEFT|BUTTON_REPEAT)
|
|
||||||
#define CB_SCROLL_RIGHT (BUTTON_RIGHT|BUTTON_REPEAT)
|
|
||||||
|
|
||||||
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
|
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
|
||||||
#define CB_SELECT BUTTON_SELECT
|
#define CB_SELECT BUTTON_SELECT
|
||||||
#define CB_UP BUTTON_UP
|
#define CB_UP BUTTON_UP
|
||||||
|
|
|
@ -46,16 +46,6 @@
|
||||||
#define CHC_SETTINGS_OK BUTTON_SELECT
|
#define CHC_SETTINGS_OK BUTTON_SELECT
|
||||||
#define CHC_SETTINGS_CANCEL BUTTON_MENU
|
#define CHC_SETTINGS_CANCEL BUTTON_MENU
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define CHC_QUIT BUTTON_PLAY
|
|
||||||
#define CHC_STARTSTOP BUTTON_MODE
|
|
||||||
#define CHC_RESET BUTTON_EQ
|
|
||||||
#define CHC_MENU BUTTON_SELECT
|
|
||||||
#define CHC_SETTINGS_INC BUTTON_RIGHT
|
|
||||||
#define CHC_SETTINGS_DEC BUTTON_LEFT
|
|
||||||
#define CHC_SETTINGS_OK BUTTON_SELECT
|
|
||||||
#define CHC_SETTINGS_CANCEL BUTTON_PLAY
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
||||||
#define CHC_QUIT BUTTON_REC
|
#define CHC_QUIT BUTTON_REC
|
||||||
#define CHC_STARTSTOP BUTTON_PLAY
|
#define CHC_STARTSTOP BUTTON_PLAY
|
||||||
|
|
|
@ -62,16 +62,6 @@
|
||||||
#define CUBE_HIGHSPEED_PRE BUTTON_SELECT
|
#define CUBE_HIGHSPEED_PRE BUTTON_SELECT
|
||||||
#define CUBE_HIGHSPEED (BUTTON_SELECT | BUTTON_REL)
|
#define CUBE_HIGHSPEED (BUTTON_SELECT | BUTTON_REL)
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define CUBE_QUIT BUTTON_PLAY
|
|
||||||
#define CUBE_NEXT BUTTON_RIGHT
|
|
||||||
#define CUBE_PREV BUTTON_LEFT
|
|
||||||
#define CUBE_INC BUTTON_UP
|
|
||||||
#define CUBE_DEC BUTTON_DOWN
|
|
||||||
#define CUBE_MODE BUTTON_MODE
|
|
||||||
#define CUBE_PAUSE BUTTON_SELECT
|
|
||||||
#define CUBE_HIGHSPEED BUTTON_EQ
|
|
||||||
|
|
||||||
#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
|
#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
|
||||||
#define CUBE_QUIT BUTTON_POWER
|
#define CUBE_QUIT BUTTON_POWER
|
||||||
#define CUBE_NEXT BUTTON_RIGHT
|
#define CUBE_NEXT BUTTON_RIGHT
|
||||||
|
|
|
@ -155,20 +155,6 @@
|
||||||
#define FRACTAL_PRECISION_DEC BUTTON_REW
|
#define FRACTAL_PRECISION_DEC BUTTON_REW
|
||||||
#define FRACTAL_RESET (BUTTON_PLAY | BUTTON_REW)
|
#define FRACTAL_RESET (BUTTON_PLAY | BUTTON_REW)
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define FRACTAL_QUIT BUTTON_EQ
|
|
||||||
#define FRACTAL_UP BUTTON_UP
|
|
||||||
#define FRACTAL_DOWN BUTTON_DOWN
|
|
||||||
#define FRACTAL_LEFT BUTTON_LEFT
|
|
||||||
#define FRACTAL_RIGHT BUTTON_RIGHT
|
|
||||||
#define FRACTAL_ZOOM_IN_PRE BUTTON_SELECT
|
|
||||||
#define FRACTAL_ZOOM_IN (BUTTON_SELECT | BUTTON_REL)
|
|
||||||
#define FRACTAL_ZOOM_OUT_PRE BUTTON_SELECT
|
|
||||||
#define FRACTAL_ZOOM_OUT (BUTTON_SELECT | BUTTON_REPEAT)
|
|
||||||
#define FRACTAL_PRECISION_INC (BUTTON_PLAY | BUTTON_RIGHT)
|
|
||||||
#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_LEFT)
|
|
||||||
#define FRACTAL_RESET BUTTON_MODE
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
|
#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
|
||||||
#define FRACTAL_QUIT BUTTON_BACK
|
#define FRACTAL_QUIT BUTTON_BACK
|
||||||
#define FRACTAL_UP BUTTON_UP
|
#define FRACTAL_UP BUTTON_UP
|
||||||
|
|
|
@ -57,14 +57,6 @@
|
||||||
#define GREYSCALE_RIGHT BUTTON_RIGHT
|
#define GREYSCALE_RIGHT BUTTON_RIGHT
|
||||||
#define GREYSCALE_OFF BUTTON_MENU
|
#define GREYSCALE_OFF BUTTON_MENU
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define GREYSCALE_SHIFT BUTTON_PLAY
|
|
||||||
#define GREYSCALE_UP BUTTON_UP
|
|
||||||
#define GREYSCALE_DOWN BUTTON_DOWN
|
|
||||||
#define GREYSCALE_LEFT BUTTON_LEFT
|
|
||||||
#define GREYSCALE_RIGHT BUTTON_RIGHT
|
|
||||||
#define GREYSCALE_OFF BUTTON_EQ
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IAUDIO_M3_PAD
|
#elif CONFIG_KEYPAD == IAUDIO_M3_PAD
|
||||||
#define GREYSCALE_SHIFT BUTTON_RC_PLAY /* somewhat dangerous... */
|
#define GREYSCALE_SHIFT BUTTON_RC_PLAY /* somewhat dangerous... */
|
||||||
#define GREYSCALE_UP BUTTON_RC_VOL_UP
|
#define GREYSCALE_UP BUTTON_RC_VOL_UP
|
||||||
|
|
|
@ -63,16 +63,6 @@
|
||||||
#define HK_SELECT "SELECT"
|
#define HK_SELECT "SELECT"
|
||||||
#define HK_CANCEL "MENU"
|
#define HK_CANCEL "MENU"
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define JEWELS_UP BUTTON_UP
|
|
||||||
#define JEWELS_DOWN BUTTON_DOWN
|
|
||||||
#define JEWELS_LEFT BUTTON_LEFT
|
|
||||||
#define JEWELS_RIGHT BUTTON_RIGHT
|
|
||||||
#define JEWELS_SELECT BUTTON_SELECT
|
|
||||||
#define JEWELS_CANCEL BUTTON_PLAY
|
|
||||||
#define HK_SELECT "SELECT"
|
|
||||||
#define HK_CANCEL "PLAY"
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
||||||
#define JEWELS_UP BUTTON_UP
|
#define JEWELS_UP BUTTON_UP
|
||||||
#define JEWELS_DOWN BUTTON_DOWN
|
#define JEWELS_DOWN BUTTON_DOWN
|
||||||
|
|
|
@ -294,7 +294,6 @@ static const unsigned char lcdlinear[256] = {
|
||||||
#define LCD_SCANRATE 73 /* Hz */
|
#define LCD_SCANRATE 73 /* Hz */
|
||||||
|
|
||||||
#else /* not yet calibrated targets - generic linear mapping */
|
#else /* not yet calibrated targets - generic linear mapping */
|
||||||
/* TODO: calibrate iFP7xx */
|
|
||||||
static const unsigned char lcdlinear[256] = {
|
static const unsigned char lcdlinear[256] = {
|
||||||
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
|
||||||
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
|
16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
|
||||||
|
|
|
@ -91,7 +91,6 @@ const struct button_mapping pla_main_ctx[] =
|
||||||
|| (CONFIG_KEYPAD == IRIVER_H300_PAD) \
|
|| (CONFIG_KEYPAD == IRIVER_H300_PAD) \
|
||||||
|| (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \
|
|| (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \
|
||||||
|| (CONFIG_KEYPAD == GIGABEAT_PAD) \
|
|| (CONFIG_KEYPAD == GIGABEAT_PAD) \
|
||||||
|| (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \
|
|
||||||
|| (CONFIG_KEYPAD == SANSA_C200_PAD) \
|
|| (CONFIG_KEYPAD == SANSA_C200_PAD) \
|
||||||
|| (CONFIG_KEYPAD == GIGABEAT_S_PAD) \
|
|| (CONFIG_KEYPAD == GIGABEAT_S_PAD) \
|
||||||
|| (CONFIG_KEYPAD == MROBE100_PAD) \
|
|| (CONFIG_KEYPAD == MROBE100_PAD) \
|
||||||
|
@ -348,12 +347,6 @@ const struct button_mapping pla_main_ctx[] =
|
||||||
{PLA_SELECT, BUTTON_PLAY, BUTTON_NONE},
|
{PLA_SELECT, BUTTON_PLAY, BUTTON_NONE},
|
||||||
{PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY},
|
{PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY},
|
||||||
{PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE},
|
{PLA_SELECT_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE},
|
||||||
#elif (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD)
|
|
||||||
{PLA_CANCEL, BUTTON_EQ|BUTTON_REL, BUTTON_EQ},
|
|
||||||
{PLA_EXIT, BUTTON_EQ|BUTTON_REPEAT, BUTTON_NONE},
|
|
||||||
{PLA_SELECT, BUTTON_SELECT, BUTTON_NONE},
|
|
||||||
{PLA_SELECT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT},
|
|
||||||
{PLA_SELECT_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE},
|
|
||||||
#elif (CONFIG_KEYPAD == MROBE500_PAD)
|
#elif (CONFIG_KEYPAD == MROBE500_PAD)
|
||||||
{PLA_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_POWER},
|
{PLA_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_POWER},
|
||||||
{PLA_EXIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE},
|
{PLA_EXIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE},
|
||||||
|
|
|
@ -95,23 +95,6 @@
|
||||||
#define LVL_UP_TEXT "PLAY"
|
#define LVL_UP_TEXT "PLAY"
|
||||||
#define LVL_DOWN_TEXT "-"
|
#define LVL_DOWN_TEXT "-"
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define PEGBOX_SELECT BUTTON_MODE
|
|
||||||
#define PEGBOX_QUIT BUTTON_PLAY
|
|
||||||
#define PEGBOX_RESTART (BUTTON_EQ|BUTTON_MODE)
|
|
||||||
#define PEGBOX_LVL_UP (BUTTON_EQ|BUTTON_UP)
|
|
||||||
#define PEGBOX_LVL_DOWN (BUTTON_EQ|BUTTON_DOWN)
|
|
||||||
#define PEGBOX_UP BUTTON_UP
|
|
||||||
#define PEGBOX_DOWN BUTTON_DOWN
|
|
||||||
#define PEGBOX_RIGHT BUTTON_RIGHT
|
|
||||||
#define PEGBOX_LEFT BUTTON_LEFT
|
|
||||||
|
|
||||||
#define SELECT_TEXT "MODE"
|
|
||||||
#define QUIT_TEXT "PLAY"
|
|
||||||
#define RESTART_TEXT "EQ+MODE"
|
|
||||||
#define LVL_UP_TEXT "EQ+UP"
|
|
||||||
#define LVL_DOWN_TEXT "EQ+DOWN"
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
|
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
|
||||||
#define PEGBOX_SELECT BUTTON_PLAY
|
#define PEGBOX_SELECT BUTTON_PLAY
|
||||||
#define PEGBOX_QUIT BUTTON_POWER
|
#define PEGBOX_QUIT BUTTON_POWER
|
||||||
|
|
|
@ -128,8 +128,6 @@ const struct button_mapping pf_context_buttons[] =
|
||||||
#endif
|
#endif
|
||||||
#elif CONFIG_KEYPAD == SANSA_E200_PAD
|
#elif CONFIG_KEYPAD == SANSA_E200_PAD
|
||||||
{PF_QUIT, BUTTON_POWER, BUTTON_NONE},
|
{PF_QUIT, BUTTON_POWER, BUTTON_NONE},
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
{PF_QUIT, BUTTON_EQ, BUTTON_NONE},
|
|
||||||
#elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) \
|
#elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) \
|
||||||
|| (CONFIG_KEYPAD == IPOD_3G_PAD) \
|
|| (CONFIG_KEYPAD == IPOD_3G_PAD) \
|
||||||
|| (CONFIG_KEYPAD == IPOD_4G_PAD) \
|
|| (CONFIG_KEYPAD == IPOD_4G_PAD) \
|
||||||
|
|
|
@ -152,17 +152,6 @@
|
||||||
#define ROCKBLOX_DROP BUTTON_SELECT
|
#define ROCKBLOX_DROP BUTTON_SELECT
|
||||||
#define ROCKBLOX_RESTART BUTTON_A
|
#define ROCKBLOX_RESTART BUTTON_A
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
|
|
||||||
#define ROCKBLOX_OFF BUTTON_PLAY
|
|
||||||
#define ROCKBLOX_ROTATE_CCW BUTTON_UP
|
|
||||||
#define ROCKBLOX_ROTATE_CW BUTTON_SELECT
|
|
||||||
#define ROCKBLOX_DOWN BUTTON_DOWN
|
|
||||||
#define ROCKBLOX_LEFT BUTTON_LEFT
|
|
||||||
#define ROCKBLOX_RIGHT BUTTON_RIGHT
|
|
||||||
#define ROCKBLOX_DROP BUTTON_MODE
|
|
||||||
#define ROCKBLOX_RESTART BUTTON_EQ
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == MROBE500_PAD
|
#elif CONFIG_KEYPAD == MROBE500_PAD
|
||||||
#define ROCKBLOX_OFF BUTTON_POWER
|
#define ROCKBLOX_OFF BUTTON_POWER
|
||||||
|
|
||||||
|
|
|
@ -122,16 +122,6 @@ static void setoptions (void)
|
||||||
options.SELECT = BUTTON_NONE;
|
options.SELECT = BUTTON_NONE;
|
||||||
options.MENU = (BUTTON_SELECT | BUTTON_REPEAT);
|
options.MENU = (BUTTON_SELECT | BUTTON_REPEAT);
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
options.UP = BUTTON_UP;
|
|
||||||
options.DOWN = BUTTON_DOWN;
|
|
||||||
|
|
||||||
options.A = BUTTON_PLAY;
|
|
||||||
options.B = BUTTON_EQ;
|
|
||||||
options.START = BUTTON_MODE;
|
|
||||||
options.SELECT = (BUTTON_SELECT | BUTTON_REL);
|
|
||||||
options.MENU = (BUTTON_SELECT | BUTTON_REPEAT);
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == GIGABEAT_PAD
|
#elif CONFIG_KEYPAD == GIGABEAT_PAD
|
||||||
options.UP = BUTTON_UP;
|
options.UP = BUTTON_UP;
|
||||||
options.DOWN = BUTTON_DOWN;
|
options.DOWN = BUTTON_DOWN;
|
||||||
|
|
|
@ -51,14 +51,6 @@
|
||||||
#define STOPWATCH_SCROLL_UP BUTTON_SCROLL_FWD
|
#define STOPWATCH_SCROLL_UP BUTTON_SCROLL_FWD
|
||||||
#define STOPWATCH_SCROLL_DOWN BUTTON_SCROLL_BACK
|
#define STOPWATCH_SCROLL_DOWN BUTTON_SCROLL_BACK
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define STOPWATCH_QUIT BUTTON_PLAY
|
|
||||||
#define STOPWATCH_START_STOP BUTTON_MODE
|
|
||||||
#define STOPWATCH_RESET_TIMER BUTTON_EQ
|
|
||||||
#define STOPWATCH_LAP_TIMER BUTTON_SELECT
|
|
||||||
#define STOPWATCH_SCROLL_UP BUTTON_UP
|
|
||||||
#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
||||||
#define STOPWATCH_QUIT BUTTON_POWER
|
#define STOPWATCH_QUIT BUTTON_POWER
|
||||||
#define STOPWATCH_START_STOP BUTTON_PLAY
|
#define STOPWATCH_START_STOP BUTTON_PLAY
|
||||||
|
|
|
@ -75,17 +75,6 @@
|
||||||
#define TV_AUTOSCROLL BUTTON_PLAY
|
#define TV_AUTOSCROLL BUTTON_PLAY
|
||||||
#define TV_BOOKMARK BUTTON_SELECT
|
#define TV_BOOKMARK BUTTON_SELECT
|
||||||
|
|
||||||
/* iFP7xx keys */
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define TV_QUIT BUTTON_PLAY
|
|
||||||
#define TV_SCROLL_UP BUTTON_UP
|
|
||||||
#define TV_SCROLL_DOWN BUTTON_DOWN
|
|
||||||
#define TV_SCREEN_LEFT BUTTON_LEFT
|
|
||||||
#define TV_SCREEN_RIGHT BUTTON_RIGHT
|
|
||||||
#define TV_MENU BUTTON_MODE
|
|
||||||
#define TV_AUTOSCROLL BUTTON_SELECT
|
|
||||||
#define TV_BOOKMARK (BUTTON_LEFT|BUTTON_SELECT)
|
|
||||||
|
|
||||||
/* iAudio X5/M5 keys */
|
/* iAudio X5/M5 keys */
|
||||||
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
||||||
#define TV_QUIT BUTTON_POWER
|
#define TV_QUIT BUTTON_POWER
|
||||||
|
|
|
@ -47,14 +47,6 @@
|
||||||
#define ZX_SELECT BUTTON_SELECT
|
#define ZX_SELECT BUTTON_SELECT
|
||||||
#define ZX_MENU BUTTON_PLAY
|
#define ZX_MENU BUTTON_PLAY
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
#define ZX_SELECT BUTTON_SELECT
|
|
||||||
#define ZX_MENU BUTTON_PLAY
|
|
||||||
#define ZX_LEFT BUTTON_LEFT
|
|
||||||
#define ZX_RIGHT BUTTON_RIGHT
|
|
||||||
#define ZX_UP BUTTON_UP
|
|
||||||
#define ZX_DOWN BUTTON_DOWN
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
|
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
|
||||||
#define ZX_SELECT BUTTON_REW
|
#define ZX_SELECT BUTTON_REW
|
||||||
#define ZX_MENU BUTTON_FF
|
#define ZX_MENU BUTTON_FF
|
||||||
|
|
|
@ -32,17 +32,6 @@
|
||||||
#define KBD_UP BUTTON_SCROLL_BACK
|
#define KBD_UP BUTTON_SCROLL_BACK
|
||||||
#define KBD_DOWN BUTTON_SCROLL_FWD
|
#define KBD_DOWN BUTTON_SCROLL_FWD
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
|
|
||||||
/* TODO: Check keyboard mappings */
|
|
||||||
|
|
||||||
#define KBD_SELECT BUTTON_SELECT
|
|
||||||
#define KBD_ABORT BUTTON_PLAY
|
|
||||||
#define KBD_LEFT BUTTON_LEFT
|
|
||||||
#define KBD_RIGHT BUTTON_RIGHT
|
|
||||||
#define KBD_UP BUTTON_UP
|
|
||||||
#define KBD_DOWN BUTTON_DOWN
|
|
||||||
|
|
||||||
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
||||||
|
|
||||||
/* TODO: Check keyboard mappings */
|
/* TODO: Check keyboard mappings */
|
||||||
|
|
|
@ -336,9 +336,6 @@ drivers/touchscreen.c
|
||||||
|
|
||||||
/* Storage */
|
/* Storage */
|
||||||
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
|
#if (CONFIG_PLATFORM & PLATFORM_NATIVE)
|
||||||
#if (CONFIG_STORAGE & STORAGE_NAND) && (CONFIG_NAND == NAND_IFP7XX)
|
|
||||||
drivers/ata_flash.c
|
|
||||||
#endif
|
|
||||||
#if (CONFIG_STORAGE & STORAGE_NAND) && (CONFIG_NAND == NAND_TCC)
|
#if (CONFIG_STORAGE & STORAGE_NAND) && (CONFIG_NAND == NAND_TCC)
|
||||||
target/arm/ata-nand-telechips.c
|
target/arm/ata-nand-telechips.c
|
||||||
#endif
|
#endif
|
||||||
|
@ -1039,12 +1036,9 @@ target/coldfire/iaudio/audio-iaudio.c
|
||||||
#endif
|
#endif
|
||||||
#endif /* IAUDIO_M3 */
|
#endif /* IAUDIO_M3 */
|
||||||
|
|
||||||
#ifdef IRIVER_IFP7XX_SERIES
|
|
||||||
#ifdef STUB
|
#ifdef STUB
|
||||||
ifp_usb_serial.c
|
|
||||||
libc/sscanf.c
|
libc/sscanf.c
|
||||||
#endif /* STUB */
|
#endif /* STUB */
|
||||||
#endif /* IRIVER_IFP7XX_SERIES */
|
|
||||||
|
|
||||||
#if defined(IRIVER_H300_SERIES) || defined(IRIVER_H100_SERIES)
|
#if defined(IRIVER_H300_SERIES) || defined(IRIVER_H100_SERIES)
|
||||||
target/coldfire/iriver/ata-iriver.c
|
target/coldfire/iriver/ata-iriver.c
|
||||||
|
@ -1349,19 +1343,6 @@ target/arm/ipod/button-mini1g.c
|
||||||
target/arm/ipod/button-clickwheel.c
|
target/arm/ipod/button-clickwheel.c
|
||||||
#endif /* IPOD_MINI2G */
|
#endif /* IPOD_MINI2G */
|
||||||
|
|
||||||
#ifdef IRIVER_IFP7XX
|
|
||||||
target/arm/pnx0101/iriver-ifp7xx/adc-ifp7xx.c
|
|
||||||
target/arm/pnx0101/iriver-ifp7xx/backlight-ifp7xx.c
|
|
||||||
target/arm/pnx0101/iriver-ifp7xx/button-ifp7xx.c
|
|
||||||
target/arm/pnx0101/iriver-ifp7xx/lcd-ifp7xx.c
|
|
||||||
target/arm/pnx0101/iriver-ifp7xx/power-ifp7xx.c
|
|
||||||
target/arm/pnx0101/iriver-ifp7xx/powermgmt-ifp7xx.c
|
|
||||||
target/arm/pnx0101/iriver-ifp7xx/usb-ifp7xx.c
|
|
||||||
#ifndef BOOTLOADER
|
|
||||||
target/arm/pnx0101/pcm-pnx0101.c
|
|
||||||
#endif /* BOOTLOADER */
|
|
||||||
#endif /* IRIVER_IFP7XX */
|
|
||||||
|
|
||||||
#ifdef SANSA_CLIPPLUS
|
#ifdef SANSA_CLIPPLUS
|
||||||
target/arm/as3525/sansa-clipplus/lcd-clip-plus.c
|
target/arm/as3525/sansa-clipplus/lcd-clip-plus.c
|
||||||
target/arm/as3525/sansa-clipplus/button-clip.c
|
target/arm/as3525/sansa-clipplus/button-clip.c
|
||||||
|
|
|
@ -1,484 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2005 Tomasz Malesinski
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include "storage.h"
|
|
||||||
#include <stdbool.h>
|
|
||||||
#include <string.h>
|
|
||||||
|
|
||||||
#if CONFIG_CPU == PNX0101
|
|
||||||
#include "pnx0101.h"
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
#include "kernel.h"
|
|
||||||
#include "thread.h"
|
|
||||||
#include "led.h"
|
|
||||||
#include "cpu.h"
|
|
||||||
#include "system.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "panic.h"
|
|
||||||
#include "usb.h"
|
|
||||||
#include "power.h"
|
|
||||||
#include "string.h"
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define SECTOR_SIZE (512)
|
|
||||||
|
|
||||||
static long last_disk_activity = -1;
|
|
||||||
|
|
||||||
#if CONFIG_FLASH == FLASH_IFP7XX
|
|
||||||
static unsigned char flash_ce[4] = {0x20, 0x02, 0x10, 0x08};
|
|
||||||
|
|
||||||
#define FLASH_IO_BASE 0x28000000
|
|
||||||
#define FLASH_REG_DATA (*((volatile unsigned char*)(FLASH_IO_BASE)))
|
|
||||||
#define FLASH_REG_CMD (*((volatile unsigned char*)(FLASH_IO_BASE + 4)))
|
|
||||||
#define FLASH_REG_ADDR (*((volatile unsigned char*)(FLASH_IO_BASE + 8)))
|
|
||||||
|
|
||||||
#define SEGMENT_SIZE 1000
|
|
||||||
#define MAX_N_SEGMENTS 8
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define FLASH_MODEL_NONE 0
|
|
||||||
#define FLASH_MODEL_256 1
|
|
||||||
#define FLASH_MODEL_512 2
|
|
||||||
|
|
||||||
struct flash_disk
|
|
||||||
{
|
|
||||||
unsigned short block_map[MAX_N_SEGMENTS][SEGMENT_SIZE];
|
|
||||||
short cur_block;
|
|
||||||
int cur_phblock_start;
|
|
||||||
int n_chips;
|
|
||||||
unsigned char chip_no[4];
|
|
||||||
unsigned char model;
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct flash_disk flash_disk;
|
|
||||||
|
|
||||||
static void flash_select_chip(int no, int sel)
|
|
||||||
{
|
|
||||||
#if CONFIG_FLASH == FLASH_IFP7XX
|
|
||||||
if (sel)
|
|
||||||
GPIO5_CLR = flash_ce[no];
|
|
||||||
else
|
|
||||||
GPIO5_SET = flash_ce[no];
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline unsigned char flash_read_data(void)
|
|
||||||
{
|
|
||||||
return FLASH_REG_DATA;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void flash_write_data(unsigned char data)
|
|
||||||
{
|
|
||||||
FLASH_REG_DATA = data;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* TODO: these two doesn't work when inlined, probably some
|
|
||||||
delay is required */
|
|
||||||
|
|
||||||
static void flash_write_cmd(unsigned char cmd)
|
|
||||||
{
|
|
||||||
FLASH_REG_CMD = cmd;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void flash_write_addr(unsigned char addr)
|
|
||||||
{
|
|
||||||
FLASH_REG_ADDR = addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void flash_wait_ready(void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < 5; i++)
|
|
||||||
while ((GPIO6_READ & 8) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned char model_n_sectors_order[] = {0, 19, 20};
|
|
||||||
|
|
||||||
static int flash_map_sector(int sector, int* chip, int* chip_sector)
|
|
||||||
{
|
|
||||||
int ord, c;
|
|
||||||
if (flash_disk.model == FLASH_MODEL_NONE)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
ord = model_n_sectors_order[flash_disk.model];
|
|
||||||
c = sector >> ord;
|
|
||||||
*chip_sector = sector & ((1 << ord) - 1);
|
|
||||||
|
|
||||||
if (c >= flash_disk.n_chips)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
*chip = flash_disk.chip_no[c];
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flash_read_id(int no) {
|
|
||||||
int id;
|
|
||||||
|
|
||||||
flash_select_chip(no, 1);
|
|
||||||
flash_write_cmd(0x90);
|
|
||||||
flash_write_addr(0);
|
|
||||||
|
|
||||||
flash_read_data();
|
|
||||||
id = flash_read_data();
|
|
||||||
|
|
||||||
flash_select_chip(no, 0);
|
|
||||||
return id;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flash_read_sector(int sector, unsigned char* buf,
|
|
||||||
unsigned char* oob)
|
|
||||||
{
|
|
||||||
unsigned long *bufl = (unsigned long *)buf;
|
|
||||||
int chip, chip_sector;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (flash_map_sector(sector, &chip, &chip_sector) < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
flash_select_chip(chip, 1);
|
|
||||||
|
|
||||||
flash_write_cmd(0x00);
|
|
||||||
flash_write_addr(0);
|
|
||||||
flash_write_addr((chip_sector << 1) & 7);
|
|
||||||
flash_write_addr((chip_sector >> 2) & 0xff);
|
|
||||||
flash_write_addr((chip_sector >> 10) & 0xff);
|
|
||||||
flash_write_addr((chip_sector >> 18) & 0xff);
|
|
||||||
flash_write_cmd(0x30);
|
|
||||||
|
|
||||||
flash_wait_ready();
|
|
||||||
|
|
||||||
if ((unsigned long)buf & 3)
|
|
||||||
{
|
|
||||||
for (i = 0; i < 512; i++)
|
|
||||||
buf[i] = flash_read_data();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i = 0; i < 512 / 4; i++) {
|
|
||||||
unsigned long v;
|
|
||||||
#ifdef ROCKBOX_LITTLE_ENDIAN
|
|
||||||
v = flash_read_data();
|
|
||||||
v |= (unsigned long)flash_read_data() << 8;
|
|
||||||
v |= (unsigned long)flash_read_data() << 16;
|
|
||||||
v |= (unsigned long)flash_read_data() << 24;
|
|
||||||
#else
|
|
||||||
v = (unsigned long)flash_read_data() << 24;
|
|
||||||
v |= (unsigned long)flash_read_data() << 16;
|
|
||||||
v |= (unsigned long)flash_read_data() << 8;
|
|
||||||
v |= flash_read_data();
|
|
||||||
#endif
|
|
||||||
bufl[i] = v;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
flash_write_cmd(0x05);
|
|
||||||
flash_write_addr((chip_sector & 3) * 0x10);
|
|
||||||
flash_write_addr(8);
|
|
||||||
flash_write_cmd(0xe0);
|
|
||||||
|
|
||||||
for (i = 0; i < 16; i++)
|
|
||||||
oob[i] = flash_read_data();
|
|
||||||
|
|
||||||
flash_select_chip(chip, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flash_read_sector_oob(int sector, unsigned char* oob)
|
|
||||||
{
|
|
||||||
int chip, chip_sector;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (flash_map_sector(sector, &chip, &chip_sector) < 0)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
flash_select_chip(chip, 1);
|
|
||||||
|
|
||||||
flash_write_cmd(0x00);
|
|
||||||
flash_write_addr((chip_sector & 3) * 0x10);
|
|
||||||
flash_write_addr(8);
|
|
||||||
flash_write_addr((chip_sector >> 2) & 0xff);
|
|
||||||
flash_write_addr((chip_sector >> 10) & 0xff);
|
|
||||||
flash_write_addr((chip_sector >> 18) & 0xff);
|
|
||||||
flash_write_cmd(0x30);
|
|
||||||
|
|
||||||
flash_wait_ready();
|
|
||||||
|
|
||||||
for (i = 0; i < 16; i++)
|
|
||||||
oob[i] = flash_read_data();
|
|
||||||
|
|
||||||
flash_select_chip(chip, 0);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned char model_n_segments[] = {0, 2, 4};
|
|
||||||
|
|
||||||
static inline int flash_get_n_segments(void)
|
|
||||||
{
|
|
||||||
return model_n_segments[flash_disk.model] * flash_disk.n_chips;
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline int flash_get_n_phblocks(void)
|
|
||||||
{
|
|
||||||
return 1024;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int model_n_sectors_in_block[] = {0, 256, 256};
|
|
||||||
|
|
||||||
static int flash_get_n_sectors_in_block(void)
|
|
||||||
{
|
|
||||||
return model_n_sectors_in_block[flash_disk.model];
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flash_phblock_to_sector(int segment, int block)
|
|
||||||
{
|
|
||||||
return (segment * flash_get_n_phblocks() + block)
|
|
||||||
* flash_get_n_sectors_in_block();
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flash_is_bad_block(unsigned char* oob)
|
|
||||||
{
|
|
||||||
/* TODO: should we check two pages? (see datasheet) */
|
|
||||||
return oob[0] != 0xff;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int count_1(int n) {
|
|
||||||
int r = 0;
|
|
||||||
while (n != 0) {
|
|
||||||
r += (n & 1);
|
|
||||||
n >>= 1;
|
|
||||||
}
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flash_get_logical_block_no(unsigned char* oob)
|
|
||||||
{
|
|
||||||
int no1, no2;
|
|
||||||
no1 = oob[6] + (oob[7] << 8);
|
|
||||||
no2 = oob[11] + (oob[12] << 8);
|
|
||||||
|
|
||||||
if (no1 == no2 && (no1 & 0xf000) == 0x1000)
|
|
||||||
return (no1 & 0xfff) >> 1;
|
|
||||||
|
|
||||||
if (count_1(no1 ^ no2) > 1)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if ((no1 & 0xf000) == 0x1000
|
|
||||||
&& (count_1(no1) & 1) == 0)
|
|
||||||
return (no1 & 0xfff) >> 1;
|
|
||||||
|
|
||||||
if ((no2 & 0xf000) == 0x1000
|
|
||||||
&& (count_1(no2) & 1) == 0)
|
|
||||||
return (no2 & 0xfff) >> 1;
|
|
||||||
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flash_disk_scan(void)
|
|
||||||
{
|
|
||||||
int n_segments, n_phblocks;
|
|
||||||
unsigned char oob[16];
|
|
||||||
int s, b;
|
|
||||||
|
|
||||||
/* TODO: checking for double blocks */
|
|
||||||
|
|
||||||
n_segments = flash_get_n_segments();
|
|
||||||
n_phblocks = flash_get_n_phblocks();
|
|
||||||
|
|
||||||
flash_disk.cur_block = -1;
|
|
||||||
flash_disk.cur_phblock_start = -1;
|
|
||||||
|
|
||||||
for (s = 0; s < n_segments; s++)
|
|
||||||
{
|
|
||||||
for (b = 0; b < n_phblocks; b++)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
r = flash_read_sector_oob(flash_phblock_to_sector(s, b),
|
|
||||||
oob);
|
|
||||||
if (r >= 0 && !flash_is_bad_block(oob))
|
|
||||||
{
|
|
||||||
int lb;
|
|
||||||
lb = flash_get_logical_block_no(oob);
|
|
||||||
if (lb >= 0 && lb < SEGMENT_SIZE)
|
|
||||||
flash_disk.block_map[s][lb] = b;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flash_disk_find_block(int block)
|
|
||||||
{
|
|
||||||
int seg, bmod, phb;
|
|
||||||
unsigned char oob[16];
|
|
||||||
int r;
|
|
||||||
|
|
||||||
if (block >= SEGMENT_SIZE * flash_get_n_segments())
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
if (block == flash_disk.cur_block)
|
|
||||||
return flash_disk.cur_phblock_start;
|
|
||||||
|
|
||||||
seg = block / SEGMENT_SIZE;
|
|
||||||
bmod = block % SEGMENT_SIZE;
|
|
||||||
|
|
||||||
phb = flash_disk.block_map[seg][bmod];
|
|
||||||
r = flash_read_sector_oob(flash_phblock_to_sector(seg, phb), oob);
|
|
||||||
if (r < 0)
|
|
||||||
return -1;
|
|
||||||
if (flash_is_bad_block(oob))
|
|
||||||
return -1;
|
|
||||||
if (flash_get_logical_block_no(oob) != bmod)
|
|
||||||
return -1;
|
|
||||||
|
|
||||||
flash_disk.cur_block = block;
|
|
||||||
flash_disk.cur_phblock_start = flash_phblock_to_sector(seg, phb);
|
|
||||||
return flash_disk.cur_phblock_start;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int flash_disk_read_sectors(unsigned long start,
|
|
||||||
int count,
|
|
||||||
void* buf)
|
|
||||||
{
|
|
||||||
int block, secmod, done;
|
|
||||||
int phb;
|
|
||||||
char oob[16];
|
|
||||||
|
|
||||||
block = start / flash_get_n_sectors_in_block();
|
|
||||||
secmod = start % flash_get_n_sectors_in_block();
|
|
||||||
|
|
||||||
phb = flash_disk_find_block(block);
|
|
||||||
done = 0;
|
|
||||||
while (count > 0 && secmod < flash_get_n_sectors_in_block())
|
|
||||||
{
|
|
||||||
if (phb >= 0)
|
|
||||||
flash_read_sector(phb + secmod, buf, oob);
|
|
||||||
else
|
|
||||||
memset(buf, 0, SECTOR_SIZE);
|
|
||||||
|
|
||||||
buf += SECTOR_SIZE;
|
|
||||||
count--;
|
|
||||||
secmod++;
|
|
||||||
done++;
|
|
||||||
}
|
|
||||||
return done;
|
|
||||||
}
|
|
||||||
|
|
||||||
int nand_read_sectors(IF_MD(int drive,)
|
|
||||||
unsigned long start,
|
|
||||||
int incount,
|
|
||||||
void* inbuf)
|
|
||||||
{
|
|
||||||
while (incount > 0)
|
|
||||||
{
|
|
||||||
int done = flash_disk_read_sectors(start, incount, inbuf);
|
|
||||||
if (done < 0)
|
|
||||||
return -1;
|
|
||||||
start += done;
|
|
||||||
incount -= done;
|
|
||||||
inbuf += SECTOR_SIZE * done;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
int nand_write_sectors(IF_MD(int drive,)
|
|
||||||
unsigned long start,
|
|
||||||
int count,
|
|
||||||
const void* buf)
|
|
||||||
{
|
|
||||||
(void)start;
|
|
||||||
(void)count;
|
|
||||||
(void)buf;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
int nand_init(void)
|
|
||||||
{
|
|
||||||
int i, id, id2;
|
|
||||||
|
|
||||||
id = flash_read_id(0);
|
|
||||||
switch (id)
|
|
||||||
{
|
|
||||||
case 0xda:
|
|
||||||
flash_disk.model = FLASH_MODEL_256;
|
|
||||||
break;
|
|
||||||
case 0xdc:
|
|
||||||
flash_disk.model = FLASH_MODEL_512;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
flash_disk.model = FLASH_MODEL_NONE;
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
flash_disk.n_chips = 1;
|
|
||||||
flash_disk.chip_no[0] = 0;
|
|
||||||
for (i = 1; i < 4; i++)
|
|
||||||
{
|
|
||||||
id2 = flash_read_id(i);
|
|
||||||
if (id2 == id)
|
|
||||||
flash_disk.chip_no[flash_disk.n_chips++] = i;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (flash_disk_scan() < 0)
|
|
||||||
return -2;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
long nand_last_disk_activity(void)
|
|
||||||
{
|
|
||||||
return last_disk_activity;
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef STORAGE_GET_INFO
|
|
||||||
void nand_get_info(struct storage_info *info)
|
|
||||||
{
|
|
||||||
unsigned long blocks;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* firmware version */
|
|
||||||
info->revision="0.00";
|
|
||||||
|
|
||||||
/* vendor field, need better name? */
|
|
||||||
info->vendor="Rockbox";
|
|
||||||
/* model field, need better name? */
|
|
||||||
info->product="TNFL";
|
|
||||||
|
|
||||||
/* blocks count */
|
|
||||||
info->num_sectors = 0;
|
|
||||||
info->sector_size=SECTOR_SIZE;
|
|
||||||
|
|
||||||
info->serial=0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef CONFIG_STORAGE_MULTI
|
|
||||||
int nand_num_drives(int first_drive)
|
|
||||||
{
|
|
||||||
/* We don't care which logical drive number(s) we have been assigned */
|
|
||||||
(void)first_drive;
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
|
@ -101,7 +101,6 @@
|
||||||
#define IPOD_4G_PAD 7
|
#define IPOD_4G_PAD 7
|
||||||
#define IPOD_3G_PAD 8
|
#define IPOD_3G_PAD 8
|
||||||
#define IPOD_1G2G_PAD 9
|
#define IPOD_1G2G_PAD 9
|
||||||
#define IRIVER_IFP7XX_PAD 10
|
|
||||||
#define GIGABEAT_PAD 11
|
#define GIGABEAT_PAD 11
|
||||||
#define IRIVER_H10_PAD 12
|
#define IRIVER_H10_PAD 12
|
||||||
#define SANSA_E200_PAD 13
|
#define SANSA_E200_PAD 13
|
||||||
|
@ -222,7 +221,6 @@
|
||||||
#define LCD_IPODVIDEO 8 /* as used by iPod Video */
|
#define LCD_IPODVIDEO 8 /* as used by iPod Video */
|
||||||
#define LCD_IPOD2BPP 9 /* as used by all fullsize greyscale iPods */
|
#define LCD_IPOD2BPP 9 /* as used by all fullsize greyscale iPods */
|
||||||
#define LCD_IPODMINI 10 /* as used by iPod Mini g1/g2 */
|
#define LCD_IPODMINI 10 /* as used by iPod Mini g1/g2 */
|
||||||
#define LCD_IFP7XX 11 /* as used by iRiver iFP 7xx/8xx */
|
|
||||||
#define LCD_GIGABEAT 12
|
#define LCD_GIGABEAT 12
|
||||||
#define LCD_H10_20GB 13 /* as used by iriver H10 20Gb */
|
#define LCD_H10_20GB 13 /* as used by iriver H10 20Gb */
|
||||||
#define LCD_H10_5GB 14 /* as used by iriver H10 5Gb */
|
#define LCD_H10_5GB 14 /* as used by iriver H10 5Gb */
|
||||||
|
@ -322,7 +320,6 @@ Lyre prototype 1 */
|
||||||
/* else HW controlled LED (iRiver H1x0) */
|
/* else HW controlled LED (iRiver H1x0) */
|
||||||
|
|
||||||
/* CONFIG_NAND */
|
/* CONFIG_NAND */
|
||||||
#define NAND_IFP7XX 1
|
|
||||||
#define NAND_TCC 2
|
#define NAND_TCC 2
|
||||||
#define NAND_SAMSUNG 3
|
#define NAND_SAMSUNG 3
|
||||||
#define NAND_CC 4 /* ChinaChip */
|
#define NAND_CC 4 /* ChinaChip */
|
||||||
|
@ -410,8 +407,6 @@ Lyre prototype 1 */
|
||||||
#include "config/ipodnano2g.h"
|
#include "config/ipodnano2g.h"
|
||||||
#elif defined(IPOD_6G)
|
#elif defined(IPOD_6G)
|
||||||
#include "config/ipod6g.h"
|
#include "config/ipod6g.h"
|
||||||
#elif defined(IRIVER_IFP7XX)
|
|
||||||
#include "config/iriverifp7xx.h"
|
|
||||||
#elif defined(GIGABEAT_F)
|
#elif defined(GIGABEAT_F)
|
||||||
#include "config/gigabeatfx.h"
|
#include "config/gigabeatfx.h"
|
||||||
#elif defined(GIGABEAT_S)
|
#elif defined(GIGABEAT_S)
|
||||||
|
|
|
@ -1,129 +0,0 @@
|
||||||
/*
|
|
||||||
* This config file is for iriver iFP-799
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define IRIVER_IFP7XX_SERIES 1
|
|
||||||
|
|
||||||
#define MODEL_NAME "iriver iFP-799"
|
|
||||||
|
|
||||||
/* For Rolo and boot loader */
|
|
||||||
#define MODEL_NUMBER 6
|
|
||||||
|
|
||||||
/* define this if you have recording possibility */
|
|
||||||
/*#define HAVE_RECORDING*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* define this if you would like tagcache to build on this target */
|
|
||||||
/* #define HAVE_TAGCACHE */
|
|
||||||
|
|
||||||
/* LCD dimensions */
|
|
||||||
#define LCD_WIDTH 128
|
|
||||||
#define LCD_HEIGHT 64
|
|
||||||
/* sqrt(128^2 + 64^2) / 1.0 = 143.1 */
|
|
||||||
#define LCD_DPI 143
|
|
||||||
#define LCD_DEPTH 1
|
|
||||||
|
|
||||||
#define LCD_PIXELFORMAT VERTICAL_PACKING
|
|
||||||
|
|
||||||
/* Display colours, for screenshots and sim (0xRRGGBB) */
|
|
||||||
#define LCD_DARKCOLOR 0x000000
|
|
||||||
#define LCD_BRIGHTCOLOR 0x5e6854
|
|
||||||
#define LCD_BL_DARKCOLOR 0x000000
|
|
||||||
#define LCD_BL_BRIGHTCOLOR 0x3ca0e6
|
|
||||||
|
|
||||||
#define CONFIG_KEYPAD IRIVER_IFP7XX_PAD
|
|
||||||
|
|
||||||
#define CONFIG_STORAGE STORAGE_NAND
|
|
||||||
|
|
||||||
#define CONFIG_NAND NAND_IFP7XX
|
|
||||||
|
|
||||||
#define HAVE_FAT16SUPPORT
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/* Define this if you have a software controlled poweroff */
|
|
||||||
#define HAVE_SW_POWEROFF
|
|
||||||
|
|
||||||
/* The number of bytes reserved for loadable codecs */
|
|
||||||
#define CODEC_SIZE 0x38000
|
|
||||||
|
|
||||||
/* The number of bytes reserved for loadable plugins */
|
|
||||||
#define PLUGIN_BUFFER_SIZE 0x10000
|
|
||||||
|
|
||||||
/* Define this if you have the WM8975 audio codec */
|
|
||||||
/* #define HAVE_WM8975 */
|
|
||||||
|
|
||||||
#define HAVE_LCD_CONTRAST
|
|
||||||
|
|
||||||
#define MIN_CONTRAST_SETTING 5
|
|
||||||
#define MAX_CONTRAST_SETTING 63
|
|
||||||
#define DEFAULT_CONTRAST_SETTING 40
|
|
||||||
|
|
||||||
/* define this if you have a flash memory storage */
|
|
||||||
#define HAVE_FLASH_STORAGE
|
|
||||||
|
|
||||||
#define BATTERY_CAPACITY_DEFAULT 1000 /* default battery capacity */
|
|
||||||
#define BATTERY_CAPACITY_MIN 500 /* min. capacity selectable */
|
|
||||||
#define BATTERY_CAPACITY_MAX 2800 /* max. capacity selectable */
|
|
||||||
#define BATTERY_CAPACITY_INC 50 /* capacity increment */
|
|
||||||
#define BATTERY_TYPES_COUNT 2 /* Alkalines or NiMH */
|
|
||||||
|
|
||||||
#define CONFIG_BATTERY_MEASURE VOLTAGE_MEASURE
|
|
||||||
|
|
||||||
/* define this if the unit should not shut down on low battery. */
|
|
||||||
#define NO_LOW_BATTERY_SHUTDOWN
|
|
||||||
|
|
||||||
/* Define this if you have a Philips PNX0101 */
|
|
||||||
#define CONFIG_CPU PNX0101
|
|
||||||
|
|
||||||
/* Define this if you want to use the PNX0101 i2c interface */
|
|
||||||
#define CONFIG_I2C I2C_PNX0101
|
|
||||||
|
|
||||||
/* The start address index for ROM builds */
|
|
||||||
#define ROM_START 0x00000000
|
|
||||||
|
|
||||||
/* Define this for LCD backlight available */
|
|
||||||
#define HAVE_BACKLIGHT
|
|
||||||
|
|
||||||
/* Define this to the CPU frequency */
|
|
||||||
#define CPU_FREQ 48000000
|
|
||||||
|
|
||||||
#define CONFIG_LCD LCD_IFP7XX
|
|
||||||
|
|
||||||
/* Offset ( in the firmware file's header ) to the file length */
|
|
||||||
#define FIRMWARE_OFFSET_FILE_LENGTH 0
|
|
||||||
|
|
||||||
/* Offset ( in the firmware file's header ) to the file CRC */
|
|
||||||
#define FIRMWARE_OFFSET_FILE_CRC 0
|
|
||||||
|
|
||||||
/* Offset ( in the firmware file's header ) to the real data */
|
|
||||||
#define FIRMWARE_OFFSET_FILE_DATA 8
|
|
||||||
|
|
||||||
#define USB_ISP1582
|
|
||||||
|
|
||||||
#define HAVE_GDB_API
|
|
||||||
|
|
||||||
/* Define this if you have adjustable CPU frequency */
|
|
||||||
#define HAVE_ADJUSTABLE_CPU_FREQ
|
|
||||||
|
|
||||||
#define BOOTFILE_EXT "iriver"
|
|
||||||
#define BOOTFILE "rockbox." BOOTFILE_EXT
|
|
||||||
#define BOOTDIR "/.rockbox"
|
|
||||||
|
|
||||||
#define IBSS_ATTR_VOICE_STACK
|
|
||||||
#define ICODE_ATTR_TREMOR_NOT_MDCT
|
|
||||||
#define ICODE_ATTR_TREMOR_MDCT
|
|
||||||
#define ICODE_ATTR_FLAC
|
|
||||||
#define IBSS_ATTR_FLAC_DECODED0
|
|
||||||
#define ICONST_ATTR_MPA_HUFFMAN
|
|
||||||
#define IBSS_ATTR_MPC_SAMPLE_BUF
|
|
||||||
#define ICODE_ATTR_ALAC
|
|
||||||
#define IBSS_ATTR_SHORTEN_DECODED0
|
|
||||||
|
|
||||||
#define IRAM_LCDFRAMEBUFFER IBSS_ATTR /* put the lcd frame buffer in IRAM */
|
|
||||||
|
|
||||||
/* Define this if a programmable hotkey is mapped */
|
|
||||||
#define HAVE_HOTKEY
|
|
|
@ -25,9 +25,6 @@
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#define GDB_API_MAGIC 0x6db570b
|
#define GDB_API_MAGIC 0x6db570b
|
||||||
#ifdef IRIVER_IFP7XX_SERIES
|
|
||||||
#define GDB_API_ADDRESS 0xc06000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
struct gdb_api
|
struct gdb_api
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,30 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 by Tomasz Malesinski
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#ifndef _USB_SERIAL_H_
|
|
||||||
#define _USB_SERIAL_H_
|
|
||||||
|
|
||||||
void usb_serial_init(void);
|
|
||||||
void usb_serial_put_byte(int b);
|
|
||||||
int usb_serial_get_byte(void);
|
|
||||||
int usb_serial_try_put_byte(int b);
|
|
||||||
int usb_serial_try_get_byte(void);
|
|
||||||
|
|
||||||
#endif
|
|
File diff suppressed because it is too large
Load diff
|
@ -69,9 +69,6 @@ extern int write_bootdata(unsigned char* buf, int len, unsigned int boot_volume
|
||||||
#include "backlight-target.h"
|
#include "backlight-target.h"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if !defined(IRIVER_IFP7XX_SERIES)
|
|
||||||
/* FIX: this doesn't work on iFP */
|
|
||||||
|
|
||||||
#define IRQ0_EDGE_TRIGGER 0x80
|
#define IRQ0_EDGE_TRIGGER 0x80
|
||||||
|
|
||||||
static int rolo_handle;
|
static int rolo_handle;
|
||||||
|
@ -331,13 +328,3 @@ int rolo_load(const char* filename)
|
||||||
/* never reached */
|
/* never reached */
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
#else /* !defined(IRIVER_IFP7XX_SERIES) */
|
|
||||||
int rolo_load(const char* filename)
|
|
||||||
{
|
|
||||||
/* dummy */
|
|
||||||
(void)filename;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* !defined(IRIVER_IFP7XX_SERIES) */
|
|
||||||
|
|
|
@ -1,144 +0,0 @@
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
ENTRY(start)
|
|
||||||
|
|
||||||
OUTPUT_FORMAT(elf32-littlearm)
|
|
||||||
OUTPUT_ARCH(arm)
|
|
||||||
STARTUP(target/arm/pnx0101/crt0-pnx0101.o)
|
|
||||||
|
|
||||||
#define PLUGINSIZE PLUGIN_BUFFER_SIZE
|
|
||||||
#define CODECSIZE CODEC_SIZE
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
|
||||||
#define STUBOFFSET 0x10000
|
|
||||||
#else
|
|
||||||
#define STUBOFFSET 0
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE
|
|
||||||
|
|
||||||
#define DRAMORIG 0xc00000 + STUBOFFSET
|
|
||||||
#define IRAM0ORIG 0x000000
|
|
||||||
#define IRAM0SIZE 0x7000
|
|
||||||
#define IRAMORIG 0x400000
|
|
||||||
#define IRAMSIZE 0x7000
|
|
||||||
|
|
||||||
/* End of the audio buffer, where the codec buffer starts */
|
|
||||||
#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE)
|
|
||||||
|
|
||||||
/* Where the codec buffer ends, and the plugin buffer starts */
|
|
||||||
#define ENDADDR (ENDAUDIOADDR + CODECSIZE)
|
|
||||||
|
|
||||||
MEMORY
|
|
||||||
{
|
|
||||||
DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
|
|
||||||
IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
|
|
||||||
IRAM0 : ORIGIN = IRAM0ORIG, LENGTH = IRAM0SIZE
|
|
||||||
}
|
|
||||||
|
|
||||||
SECTIONS
|
|
||||||
{
|
|
||||||
.text :
|
|
||||||
{
|
|
||||||
loadaddress = .;
|
|
||||||
_loadaddress = .;
|
|
||||||
. = ALIGN(0x200);
|
|
||||||
*(.init.text)
|
|
||||||
*(.text*)
|
|
||||||
*(.glue_7)
|
|
||||||
*(.glue_7t)
|
|
||||||
. = ALIGN(0x4);
|
|
||||||
} > DRAM
|
|
||||||
|
|
||||||
.rodata :
|
|
||||||
{
|
|
||||||
*(.rodata) /* problems without this, dunno why */
|
|
||||||
*(.rodata*)
|
|
||||||
*(.rodata.str1.1)
|
|
||||||
*(.rodata.str1.4)
|
|
||||||
. = ALIGN(0x4);
|
|
||||||
} > DRAM
|
|
||||||
|
|
||||||
.data :
|
|
||||||
{
|
|
||||||
*(.data*)
|
|
||||||
. = ALIGN(0x4);
|
|
||||||
} > DRAM
|
|
||||||
|
|
||||||
/DISCARD/ :
|
|
||||||
{
|
|
||||||
*(.eh_frame)
|
|
||||||
}
|
|
||||||
|
|
||||||
.vectors 0x0 :
|
|
||||||
{
|
|
||||||
_vectorsstart = .;
|
|
||||||
KEEP(*(.vectors));
|
|
||||||
_vectorsend = .;
|
|
||||||
*(.dmabuf)
|
|
||||||
} >IRAM0 AT> DRAM
|
|
||||||
|
|
||||||
_vectorscopy = LOADADDR(.vectors);
|
|
||||||
|
|
||||||
.iram IRAMORIG + SIZEOF(.vectors) :
|
|
||||||
{
|
|
||||||
_iramstart = .;
|
|
||||||
*(.icode)
|
|
||||||
*(.irodata)
|
|
||||||
*(.idata)
|
|
||||||
. = ALIGN(0x4);
|
|
||||||
_iramend = .;
|
|
||||||
} > IRAM AT> DRAM
|
|
||||||
|
|
||||||
_iramcopy = LOADADDR(.iram);
|
|
||||||
|
|
||||||
.ibss (NOLOAD) :
|
|
||||||
{
|
|
||||||
_iedata = .;
|
|
||||||
*(.ibss)
|
|
||||||
. = ALIGN(0x4);
|
|
||||||
_iend = .;
|
|
||||||
} > IRAM
|
|
||||||
|
|
||||||
.stack :
|
|
||||||
{
|
|
||||||
*(.stack)
|
|
||||||
stackbegin = .;
|
|
||||||
. += 0x2000;
|
|
||||||
stackend = .;
|
|
||||||
} > IRAM
|
|
||||||
|
|
||||||
.bss ADDR(.data) + SIZEOF(.data) + SIZEOF(.iram) + SIZEOF(.vectors):
|
|
||||||
{
|
|
||||||
_edata = .;
|
|
||||||
*(.bss*)
|
|
||||||
*(COMMON)
|
|
||||||
. = ALIGN(0x4);
|
|
||||||
_end = .;
|
|
||||||
} > DRAM
|
|
||||||
|
|
||||||
.audiobuf ALIGN(4) :
|
|
||||||
{
|
|
||||||
_audiobuffer = .;
|
|
||||||
audiobuffer = .;
|
|
||||||
} > DRAM
|
|
||||||
|
|
||||||
.audiobufend ENDAUDIOADDR:
|
|
||||||
{
|
|
||||||
audiobufend = .;
|
|
||||||
_audiobufend = .;
|
|
||||||
} > DRAM
|
|
||||||
|
|
||||||
.codec ENDAUDIOADDR:
|
|
||||||
{
|
|
||||||
codecbuf = .;
|
|
||||||
_codecbuf = .;
|
|
||||||
}
|
|
||||||
|
|
||||||
.plugin ENDADDR:
|
|
||||||
{
|
|
||||||
_pluginbuf = .;
|
|
||||||
pluginbuf = .;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id: backlight-target.h 13136 2007-04-12 22:12:13Z amiconn $
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 by Barry Wardell
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#ifndef BACKLIGHT_TARGET_H
|
|
||||||
#define BACKLIGHT_TARGET_H
|
|
||||||
|
|
||||||
#define backlight_hw_init() true
|
|
||||||
void backlight_hw_on(void);
|
|
||||||
void backlight_hw_off(void);
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,225 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id: crt0.S 11850 2006-12-29 02:49:12Z markun $
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by Linus Nielsen Feltzing
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#define ASM /* do not include structure definitions from pnx0101.h */
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include "cpu.h"
|
|
||||||
|
|
||||||
.section .init.text,"ax",%progbits
|
|
||||||
|
|
||||||
.global start
|
|
||||||
start:
|
|
||||||
|
|
||||||
/* Arm bootloader and startup code based on startup.s from the iPodLinux loader
|
|
||||||
*
|
|
||||||
* Copyright (c) 2003, Daniel Palffy (dpalffy (at) rainstorm.org)
|
|
||||||
* Copyright (c) 2005, Bernard Leach <leachbj@bouncycastle.org>
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
msr cpsr_c, #0xd3 /* enter supervisor mode, disable IRQ */
|
|
||||||
|
|
||||||
#ifndef BOOTLOADER
|
|
||||||
#ifndef DEBUG
|
|
||||||
ldr r0, =0x80105000
|
|
||||||
mov r1, #1
|
|
||||||
str r1, [r0, #4]
|
|
||||||
mov r1, #0
|
|
||||||
str r1, [r0, #4]
|
|
||||||
1: ldr r1, [r0]
|
|
||||||
cmp r1, #0
|
|
||||||
bne 1b
|
|
||||||
mov r1, #0x74
|
|
||||||
str r1, [r0, #8]
|
|
||||||
mov r1, #2
|
|
||||||
str r1, [r0, #0x18]
|
|
||||||
mov r1, #2
|
|
||||||
str r1, [r0, #0x20]
|
|
||||||
mov r1, #82
|
|
||||||
str r1, [r0, #0x28]
|
|
||||||
mov r1, #100
|
|
||||||
str r1, [r0, #0x2c]
|
|
||||||
mov r1, #0x120
|
|
||||||
str r1, [r0, #0x30]
|
|
||||||
mov r1, #6
|
|
||||||
str r1, [r0, #4]
|
|
||||||
ldr r0, =1f
|
|
||||||
mov r15, r0
|
|
||||||
1:
|
|
||||||
#endif /* !DEBUG */
|
|
||||||
|
|
||||||
#ifndef DEBUG
|
|
||||||
/* Copy exception handler code to address 0 */
|
|
||||||
ldr r2, =_vectorsstart
|
|
||||||
ldr r3, =_vectorsend
|
|
||||||
ldr r4, =_vectorscopy
|
|
||||||
1:
|
|
||||||
cmp r3, r2
|
|
||||||
ldrhi r5, [r4], #4
|
|
||||||
strhi r5, [r2], #4
|
|
||||||
bhi 1b
|
|
||||||
#else
|
|
||||||
ldr r1, =vectors
|
|
||||||
ldr r0, =irq_handler
|
|
||||||
str r0, [r1, #24]
|
|
||||||
ldr r0, =fiq_handler
|
|
||||||
str r0, [r1, #28]
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef STUB
|
|
||||||
/* Zero out IBSS */
|
|
||||||
ldr r2, =_iedata
|
|
||||||
ldr r3, =_iend
|
|
||||||
mov r4, #0
|
|
||||||
1:
|
|
||||||
cmp r3, r2
|
|
||||||
strhi r4, [r2], #4
|
|
||||||
bhi 1b
|
|
||||||
|
|
||||||
/* Copy the IRAM */
|
|
||||||
ldr r2, =_iramcopy
|
|
||||||
ldr r3, =_iramstart
|
|
||||||
ldr r4, =_iramend
|
|
||||||
1:
|
|
||||||
cmp r4, r3
|
|
||||||
ldrhi r5, [r2], #4
|
|
||||||
strhi r5, [r3], #4
|
|
||||||
bhi 1b
|
|
||||||
#endif /* !STUB */
|
|
||||||
#endif /* !BOOTLOADER */
|
|
||||||
|
|
||||||
/* Initialise bss section to zero */
|
|
||||||
ldr r2, =_edata
|
|
||||||
ldr r3, =_end
|
|
||||||
mov r4, #0
|
|
||||||
1:
|
|
||||||
cmp r3, r2
|
|
||||||
strhi r4, [r2], #4
|
|
||||||
bhi 1b
|
|
||||||
|
|
||||||
/* Set up stack for IRQ mode */
|
|
||||||
msr cpsr_c, #0xd2
|
|
||||||
ldr sp, =irq_stack
|
|
||||||
/* Set up stack for FIQ mode */
|
|
||||||
msr cpsr_c, #0xd1
|
|
||||||
ldr sp, =fiq_stack
|
|
||||||
|
|
||||||
/* Let svc, abort and undefined modes use irq stack */
|
|
||||||
msr cpsr_c, #0xd3
|
|
||||||
ldr sp =irq_stack
|
|
||||||
msr cpsr_c, #0xd7
|
|
||||||
ldr sp, =irq_stack
|
|
||||||
msr cpsr_c, #0xdb
|
|
||||||
ldr sp, =irq_stack
|
|
||||||
|
|
||||||
/* Switch to sys mode */
|
|
||||||
msr cpsr_c, #0xdf
|
|
||||||
|
|
||||||
/* Set up some stack and munge it with 0xdeadbeef */
|
|
||||||
ldr sp, =stackend
|
|
||||||
mov r3, sp
|
|
||||||
ldr r2, =stackbegin
|
|
||||||
ldr r4, =0xdeadbeef
|
|
||||||
1:
|
|
||||||
cmp r3, r2
|
|
||||||
strhi r4, [r2], #4
|
|
||||||
bhi 1b
|
|
||||||
|
|
||||||
bl main
|
|
||||||
/* main() should never return */
|
|
||||||
|
|
||||||
/* Exception handlers. Will be copied to address 0 after memory remapping */
|
|
||||||
.section .vectors,"aw"
|
|
||||||
ldr pc, [pc, #24]
|
|
||||||
ldr pc, [pc, #24]
|
|
||||||
ldr pc, [pc, #24]
|
|
||||||
ldr pc, [pc, #24]
|
|
||||||
ldr pc, [pc, #24]
|
|
||||||
ldr pc, [pc, #24]
|
|
||||||
ldr pc, [pc, #24]
|
|
||||||
ldr pc, [pc, #24]
|
|
||||||
|
|
||||||
/* Exception vectors */
|
|
||||||
.global vectors
|
|
||||||
vectors:
|
|
||||||
.word start
|
|
||||||
.word undef_instr_handler
|
|
||||||
.word software_int_handler
|
|
||||||
.word prefetch_abort_handler
|
|
||||||
.word data_abort_handler
|
|
||||||
.word reserved_handler
|
|
||||||
.word irq_handler
|
|
||||||
.word fiq_handler
|
|
||||||
|
|
||||||
.text
|
|
||||||
|
|
||||||
/* All illegal exceptions call into UIE with exception address as first
|
|
||||||
parameter. This is calculated differently depending on which exception
|
|
||||||
we're in. Second parameter is exception number, used for a string lookup
|
|
||||||
in UIE.
|
|
||||||
*/
|
|
||||||
undef_instr_handler:
|
|
||||||
sub r0, lr, #4
|
|
||||||
mov r1, #0
|
|
||||||
b UIE
|
|
||||||
|
|
||||||
/* We run sys mode most of the time, and should never see a software
|
|
||||||
exception being thrown. Make it illegal and call UIE.
|
|
||||||
*/
|
|
||||||
software_int_handler:
|
|
||||||
reserved_handler:
|
|
||||||
sub r0, lr, #4
|
|
||||||
mov r1, #4
|
|
||||||
b UIE
|
|
||||||
|
|
||||||
prefetch_abort_handler:
|
|
||||||
sub r0, lr, #4
|
|
||||||
mov r1, #1
|
|
||||||
b UIE
|
|
||||||
|
|
||||||
fiq_handler:
|
|
||||||
@ Branch straight to FIQ handler in pcm_playback.c. This also handles the
|
|
||||||
@ the correct return sequence.
|
|
||||||
stmfd sp!, {r0-r7, r12, lr}
|
|
||||||
bl fiq
|
|
||||||
ldmfd sp!, {r0-r7, r12, lr}
|
|
||||||
subs pc, lr, #4
|
|
||||||
|
|
||||||
irq_handler:
|
|
||||||
#ifndef STUB
|
|
||||||
stmfd sp!, {r0-r11, r12, lr}
|
|
||||||
bl irq
|
|
||||||
ldmfd sp!, {r0-r11, r12, lr}
|
|
||||||
#endif
|
|
||||||
subs pc, lr, #4
|
|
||||||
|
|
||||||
#ifdef STUB
|
|
||||||
UIE:
|
|
||||||
b UIE
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* 256 words of IRQ stack */
|
|
||||||
.space 256*4
|
|
||||||
irq_stack:
|
|
||||||
|
|
||||||
/* 256 words of FIQ stack */
|
|
||||||
.space 256*4
|
|
||||||
fiq_stack:
|
|
|
@ -1,5 +0,0 @@
|
||||||
#include <stdbool.h>
|
|
||||||
bool dbg_ports()
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
|
@ -1,24 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2005 by Tomasz Malesinski
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
void i2c_init(void)
|
|
||||||
{
|
|
||||||
}
|
|
|
@ -1,59 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 by Barry Wardell
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 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 "system.h"
|
|
||||||
#include "kernel.h"
|
|
||||||
#include "thread.h"
|
|
||||||
#include "adc.h"
|
|
||||||
|
|
||||||
static unsigned short adcdata[NUM_ADC_CHANNELS];
|
|
||||||
|
|
||||||
unsigned short adc_read(int channel)
|
|
||||||
{
|
|
||||||
return adcdata[channel];
|
|
||||||
}
|
|
||||||
|
|
||||||
static void adc_tick(void)
|
|
||||||
{
|
|
||||||
if (ADCST & 0x10) {
|
|
||||||
adcdata[0] = ADCCH0 & 0x3ff;
|
|
||||||
adcdata[1] = ADCCH1 & 0x3ff;
|
|
||||||
adcdata[2] = ADCCH2 & 0x3ff;
|
|
||||||
adcdata[3] = ADCCH3 & 0x3ff;
|
|
||||||
adcdata[4] = ADCCH4 & 0x3ff;
|
|
||||||
ADCST = 0xa;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void adc_init(void)
|
|
||||||
{
|
|
||||||
ADCR24 = 0xaaaaa;
|
|
||||||
ADCR28 = 0;
|
|
||||||
ADCST = 2;
|
|
||||||
ADCST = 0xa;
|
|
||||||
|
|
||||||
while (!(ADCST & 0x10));
|
|
||||||
adc_tick();
|
|
||||||
|
|
||||||
tick_add_task(adc_tick);
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,31 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 by Barry Wardell
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#ifndef _ADC_TARGET_H_
|
|
||||||
#define _ADC_TARGET_H_
|
|
||||||
|
|
||||||
#define NUM_ADC_CHANNELS 5
|
|
||||||
|
|
||||||
#define ADC_BUTTONS 0
|
|
||||||
#define ADC_BATTERY 1
|
|
||||||
#define ADC_BUTTON_PLAY 2
|
|
||||||
#define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */
|
|
||||||
|
|
||||||
#endif
|
|
|
@ -1,35 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 by Barry Wardell
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 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 "system.h"
|
|
||||||
#include "backlight.h"
|
|
||||||
#include "lcd.h"
|
|
||||||
|
|
||||||
void backlight_hw_on(void)
|
|
||||||
{
|
|
||||||
GPIO3_SET = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void backlight_hw_off(void)
|
|
||||||
{
|
|
||||||
GPIO3_CLR = 1;
|
|
||||||
}
|
|
|
@ -1,90 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 by Barry Wardell
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "config.h"
|
|
||||||
#include "cpu.h"
|
|
||||||
#include "system.h"
|
|
||||||
#include "button.h"
|
|
||||||
#include "kernel.h"
|
|
||||||
#include "backlight.h"
|
|
||||||
#include "adc.h"
|
|
||||||
|
|
||||||
|
|
||||||
void button_init_device(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
bool button_hold(void)
|
|
||||||
{
|
|
||||||
return (GPIO5_READ & 4) ? false : true;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Get button pressed from hardware
|
|
||||||
*/
|
|
||||||
int button_read_device(void)
|
|
||||||
{
|
|
||||||
int btn = BUTTON_NONE;
|
|
||||||
int data;
|
|
||||||
static bool hold_button = false;
|
|
||||||
bool hold_button_old;
|
|
||||||
|
|
||||||
/* normal buttons */
|
|
||||||
hold_button_old = hold_button;
|
|
||||||
hold_button = button_hold();
|
|
||||||
|
|
||||||
if (hold_button != hold_button_old)
|
|
||||||
backlight_hold_changed(hold_button);
|
|
||||||
|
|
||||||
if (!button_hold())
|
|
||||||
{
|
|
||||||
data = adc_read(ADC_BUTTONS);
|
|
||||||
if (data < 0x35c)
|
|
||||||
{
|
|
||||||
if (data < 0x151)
|
|
||||||
if (data < 0xc7)
|
|
||||||
if (data < 0x41)
|
|
||||||
btn = BUTTON_LEFT;
|
|
||||||
else
|
|
||||||
btn = BUTTON_RIGHT;
|
|
||||||
else
|
|
||||||
btn = BUTTON_SELECT;
|
|
||||||
else
|
|
||||||
if (data < 0x268)
|
|
||||||
if (data < 0x1d7)
|
|
||||||
btn = BUTTON_UP;
|
|
||||||
else
|
|
||||||
btn = BUTTON_DOWN;
|
|
||||||
else
|
|
||||||
if (data < 0x2f9)
|
|
||||||
btn = BUTTON_EQ;
|
|
||||||
else
|
|
||||||
btn = BUTTON_MODE;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (adc_read(ADC_BUTTON_PLAY) < 0x64)
|
|
||||||
btn |= BUTTON_PLAY;
|
|
||||||
}
|
|
||||||
return btn;
|
|
||||||
}
|
|
|
@ -1,49 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 by Barry Wardell
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
/* Custom written for the ifp7xx */
|
|
||||||
|
|
||||||
#ifndef _BUTTON_TARGET_H_
|
|
||||||
#define _BUTTON_TARGET_H_
|
|
||||||
|
|
||||||
#define HAS_BUTTON_HOLD
|
|
||||||
|
|
||||||
/* iriver IFP7XX specific button codes */
|
|
||||||
|
|
||||||
#define BUTTON_PLAY 0x00000001
|
|
||||||
#define BUTTON_SELECT 0x00000002
|
|
||||||
|
|
||||||
#define BUTTON_LEFT 0x00000004
|
|
||||||
#define BUTTON_RIGHT 0x00000008
|
|
||||||
#define BUTTON_UP 0x00000010
|
|
||||||
#define BUTTON_DOWN 0x00000020
|
|
||||||
|
|
||||||
#define BUTTON_MODE 0x00000040
|
|
||||||
#define BUTTON_EQ 0x00000080
|
|
||||||
|
|
||||||
#define BUTTON_MAIN (BUTTON_PLAY|BUTTON_SELECT\
|
|
||||||
|BUTTON_LEFT|BUTTON_RIGHT|BUTTON_UP|BUTTON_DOWN\
|
|
||||||
|BUTTON_MODE|BUTTON_EQ)
|
|
||||||
|
|
||||||
#define POWEROFF_BUTTON BUTTON_PLAY
|
|
||||||
#define POWEROFF_COUNT 40
|
|
||||||
|
|
||||||
#endif /* _BUTTON_TARGET_H_ */
|
|
|
@ -1,224 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by Alan Korr
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#include "config.h"
|
|
||||||
|
|
||||||
#include "kernel.h"
|
|
||||||
#include "lcd.h"
|
|
||||||
#include "system.h"
|
|
||||||
|
|
||||||
/*** definitions ***/
|
|
||||||
|
|
||||||
#define LCD_SET_LOWER_COLUMN_ADDRESS ((char)0x00)
|
|
||||||
#define LCD_SET_HIGHER_COLUMN_ADDRESS ((char)0x10)
|
|
||||||
#define LCD_SET_INTERNAL_REGULATOR_RESISTOR_RATIO ((char)0x20)
|
|
||||||
#define LCD_SET_POWER_CONTROL_REGISTER ((char)0x28)
|
|
||||||
#define LCD_SET_DISPLAY_START_LINE ((char)0x40)
|
|
||||||
#define LCD_SET_CONTRAST_CONTROL_REGISTER ((char)0x81)
|
|
||||||
#define LCD_SET_SEGMENT_REMAP ((char)0xA0)
|
|
||||||
#define LCD_SET_LCD_BIAS ((char)0xA2)
|
|
||||||
#define LCD_SET_ENTIRE_DISPLAY_OFF ((char)0xA4)
|
|
||||||
#define LCD_SET_ENTIRE_DISPLAY_ON ((char)0xA5)
|
|
||||||
#define LCD_SET_NORMAL_DISPLAY ((char)0xA6)
|
|
||||||
#define LCD_SET_REVERSE_DISPLAY ((char)0xA7)
|
|
||||||
#define LCD_SET_MULTIPLEX_RATIO ((char)0xA8)
|
|
||||||
#define LCD_SET_BIAS_TC_OSC ((char)0xA9)
|
|
||||||
#define LCD_SET_1OVER4_BIAS_RATIO ((char)0xAA)
|
|
||||||
#define LCD_SET_INDICATOR_OFF ((char)0xAC)
|
|
||||||
#define LCD_SET_INDICATOR_ON ((char)0xAD)
|
|
||||||
#define LCD_SET_DISPLAY_OFF ((char)0xAE)
|
|
||||||
#define LCD_SET_DISPLAY_ON ((char)0xAF)
|
|
||||||
#define LCD_SET_PAGE_ADDRESS ((char)0xB0)
|
|
||||||
#define LCD_SET_COM_OUTPUT_SCAN_DIRECTION ((char)0xC0)
|
|
||||||
#define LCD_SET_TOTAL_FRAME_PHASES ((char)0xD2)
|
|
||||||
#define LCD_SET_DISPLAY_OFFSET ((char)0xD3)
|
|
||||||
#define LCD_SET_READ_MODIFY_WRITE_MODE ((char)0xE0)
|
|
||||||
#define LCD_SOFTWARE_RESET ((char)0xE2)
|
|
||||||
#define LCD_NOP ((char)0xE3)
|
|
||||||
#define LCD_SET_END_OF_READ_MODIFY_WRITE_MODE ((char)0xEE)
|
|
||||||
|
|
||||||
/* LCD command codes */
|
|
||||||
#define LCD_CNTL_RESET 0xe2 /* Software reset */
|
|
||||||
#define LCD_CNTL_POWER 0x2f /* Power control */
|
|
||||||
#define LCD_CNTL_CONTRAST 0x81 /* Contrast */
|
|
||||||
#define LCD_CNTL_OUTSCAN 0xc8 /* Output scan direction */
|
|
||||||
#define LCD_CNTL_SEGREMAP 0xa1 /* Segment remap */
|
|
||||||
#define LCD_CNTL_DISPON 0xaf /* Display on */
|
|
||||||
|
|
||||||
#define LCD_CNTL_PAGE 0xb0 /* Page address */
|
|
||||||
#define LCD_CNTL_HIGHCOL 0x10 /* Upper column address */
|
|
||||||
#define LCD_CNTL_LOWCOL 0x00 /* Lower column address */
|
|
||||||
|
|
||||||
/*** driver routines ***/
|
|
||||||
|
|
||||||
void lcd_write_command(int cmd)
|
|
||||||
{
|
|
||||||
while ((LCDSTAT & 3) != 3);
|
|
||||||
LCDCMD = cmd;
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_write_data( const unsigned char* data, int count )
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i=0; i < count; i++) {
|
|
||||||
while ((LCDSTAT & 3) != 3);
|
|
||||||
LCDDATA = data[i];
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** hardware configuration ***/
|
|
||||||
|
|
||||||
int lcd_default_contrast(void)
|
|
||||||
{
|
|
||||||
return 45;
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_set_contrast(int val)
|
|
||||||
{
|
|
||||||
lcd_write_command(LCD_CNTL_CONTRAST);
|
|
||||||
lcd_write_command(val);
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_set_invert_display(bool yesno)
|
|
||||||
{
|
|
||||||
if (yesno)
|
|
||||||
lcd_write_command(LCD_SET_REVERSE_DISPLAY);
|
|
||||||
else
|
|
||||||
lcd_write_command(LCD_SET_NORMAL_DISPLAY);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* turn the display upside down (call lcd_update() afterwards) */
|
|
||||||
void lcd_set_flip(bool yesno)
|
|
||||||
{
|
|
||||||
if (yesno)
|
|
||||||
{
|
|
||||||
lcd_write_command(LCD_SET_SEGMENT_REMAP);
|
|
||||||
lcd_write_command(LCD_SET_COM_OUTPUT_SCAN_DIRECTION);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
lcd_write_command(LCD_SET_SEGMENT_REMAP | 0x01);
|
|
||||||
lcd_write_command(LCD_SET_COM_OUTPUT_SCAN_DIRECTION | 0x08);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void lcd_init_device(void)
|
|
||||||
{
|
|
||||||
LCDREG10 = 0xf;
|
|
||||||
LCDREG04 = 0x4084;
|
|
||||||
|
|
||||||
/* inits like the original firmware */
|
|
||||||
lcd_write_command(LCD_SOFTWARE_RESET);
|
|
||||||
lcd_write_command(LCD_SET_INTERNAL_REGULATOR_RESISTOR_RATIO + 4);
|
|
||||||
lcd_write_command(LCD_SET_LCD_BIAS);
|
|
||||||
lcd_write_command(LCD_SET_POWER_CONTROL_REGISTER + 7);
|
|
||||||
/* power control register: op-amp=1, regulator=1, booster=1 */
|
|
||||||
lcd_write_command(LCD_SET_DISPLAY_ON);
|
|
||||||
lcd_write_command(LCD_SET_NORMAL_DISPLAY);
|
|
||||||
lcd_set_flip(false);
|
|
||||||
lcd_write_command(LCD_SET_DISPLAY_START_LINE + 0);
|
|
||||||
lcd_set_contrast(lcd_default_contrast());
|
|
||||||
lcd_write_command(LCD_SET_PAGE_ADDRESS);
|
|
||||||
lcd_write_command(LCD_SET_LOWER_COLUMN_ADDRESS + 0);
|
|
||||||
lcd_write_command(LCD_SET_HIGHER_COLUMN_ADDRESS + 0);
|
|
||||||
|
|
||||||
lcd_clear_display();
|
|
||||||
lcd_update();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*** Update functions ***/
|
|
||||||
|
|
||||||
/* Performance function that works with an external buffer
|
|
||||||
note that by and bheight are in 8-pixel units! */
|
|
||||||
void lcd_blit_mono(const unsigned char *data, int x, int by, int width,
|
|
||||||
int bheight, int stride)
|
|
||||||
{
|
|
||||||
/* Copy display bitmap to hardware */
|
|
||||||
while (bheight--)
|
|
||||||
{
|
|
||||||
lcd_write_command (LCD_CNTL_PAGE | (by++ & 0xf));
|
|
||||||
lcd_write_command (LCD_CNTL_HIGHCOL | (((x+4)>>4) & 0xf));
|
|
||||||
lcd_write_command (LCD_CNTL_LOWCOL | ((x+4) & 0xf));
|
|
||||||
|
|
||||||
lcd_write_data(data, width);
|
|
||||||
data += stride;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/* Performance function that works with an external buffer
|
|
||||||
note that by and bheight are in 8-pixel units! */
|
|
||||||
void lcd_blit_grey_phase(unsigned char *values, unsigned char *phases,
|
|
||||||
int x, int by, int width, int bheight, int stride)
|
|
||||||
{
|
|
||||||
(void)values;
|
|
||||||
(void)phases;
|
|
||||||
(void)x;
|
|
||||||
(void)by;
|
|
||||||
(void)width;
|
|
||||||
(void)bheight;
|
|
||||||
(void)stride;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Update the display.
|
|
||||||
This must be called after all other LCD functions that change the display. */
|
|
||||||
void lcd_update(void) ICODE_ATTR;
|
|
||||||
void lcd_update(void)
|
|
||||||
{
|
|
||||||
int y;
|
|
||||||
|
|
||||||
/* Copy display bitmap to hardware */
|
|
||||||
for (y = 0; y < LCD_FBHEIGHT; y++)
|
|
||||||
{
|
|
||||||
lcd_write_command (LCD_CNTL_PAGE | (y & 0xf));
|
|
||||||
lcd_write_command (LCD_CNTL_HIGHCOL);
|
|
||||||
lcd_write_command (LCD_CNTL_LOWCOL | 4);
|
|
||||||
|
|
||||||
lcd_write_data (FBADDR(0, y), LCD_WIDTH);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Update a fraction of the display. */
|
|
||||||
void lcd_update_rect(int, int, int, int) ICODE_ATTR;
|
|
||||||
void lcd_update_rect(int x, int y, int width, int height)
|
|
||||||
{
|
|
||||||
int ymax;
|
|
||||||
|
|
||||||
/* The Y coordinates have to work on even 8 pixel rows */
|
|
||||||
ymax = (y + height-1) >> 3;
|
|
||||||
y >>= 3;
|
|
||||||
|
|
||||||
if(x + width > LCD_WIDTH)
|
|
||||||
width = LCD_WIDTH - x;
|
|
||||||
if (width <= 0)
|
|
||||||
return; /* nothing left to do, 0 is harmful to lcd_write_data() */
|
|
||||||
if(ymax >= LCD_FBHEIGHT)
|
|
||||||
ymax = LCD_FBHEIGHT-1;
|
|
||||||
|
|
||||||
/* Copy specified rectange bitmap to hardware */
|
|
||||||
for (; y <= ymax; y++)
|
|
||||||
{
|
|
||||||
lcd_write_command (LCD_CNTL_PAGE | (y & 0xf));
|
|
||||||
lcd_write_command (LCD_CNTL_HIGHCOL | (((x+4) >> 4) & 0xf));
|
|
||||||
lcd_write_command (LCD_CNTL_LOWCOL | ((x+4) & 0xf));
|
|
||||||
|
|
||||||
lcd_write_data (FBADDR(x,y), width);
|
|
||||||
}
|
|
||||||
}
|
|
|
@ -1,76 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by Linus Nielsen Feltzing
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 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 "kernel.h"
|
|
||||||
#include "system.h"
|
|
||||||
#include "power.h"
|
|
||||||
#include "logf.h"
|
|
||||||
#include "usb.h"
|
|
||||||
|
|
||||||
#if CONFIG_TUNER
|
|
||||||
|
|
||||||
bool tuner_power(bool status)
|
|
||||||
{
|
|
||||||
(void)status;
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* #if CONFIG_TUNER */
|
|
||||||
|
|
||||||
#ifndef SIMULATOR
|
|
||||||
|
|
||||||
void power_init(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void ide_power_enable(bool on)
|
|
||||||
{
|
|
||||||
(void)on;
|
|
||||||
/* no ide controller */
|
|
||||||
}
|
|
||||||
|
|
||||||
bool ide_powered(void)
|
|
||||||
{
|
|
||||||
return true; /* pretend always powered if not controlable */
|
|
||||||
}
|
|
||||||
|
|
||||||
void power_off(void)
|
|
||||||
{
|
|
||||||
disable_interrupt(IRQ_FIQ_STATUS);
|
|
||||||
GPIO1_CLR = 1 << 16;
|
|
||||||
GPIO2_SET = 1;
|
|
||||||
while(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
void power_off(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void ide_power_enable(bool on)
|
|
||||||
{
|
|
||||||
(void)on;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* SIMULATOR */
|
|
|
@ -1,55 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by Heikki Hannikainen, Uwe Freese
|
|
||||||
* Revisions copyright (C) 2005 by Gerald Van Baren
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include "config.h"
|
|
||||||
#include "adc.h"
|
|
||||||
#include "powermgmt.h"
|
|
||||||
|
|
||||||
const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] =
|
|
||||||
{
|
|
||||||
1050, 1150
|
|
||||||
};
|
|
||||||
|
|
||||||
const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] =
|
|
||||||
{
|
|
||||||
1050, 1150 /* FIXME: just copied from above, was missing in powermgmt.c */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */
|
|
||||||
const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] =
|
|
||||||
{
|
|
||||||
/* These values are the same as for Ondio divided by 3. */
|
|
||||||
/* May need recalibration. */
|
|
||||||
{ 930, 1080, 1140, 1180, 1210, 1250, 1280, 1320, 1360, 1420, 1580 }, /* alkaline */
|
|
||||||
{ 1030, 1180, 1210, 1230, 1240, 1250, 1260, 1270, 1280, 1290, 1350 } /* NiMH */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* TODO: only roughly correct */
|
|
||||||
#define BATTERY_SCALE_FACTOR 3072
|
|
||||||
/* full-scale ADC readout (2^10) in millivolt */
|
|
||||||
|
|
||||||
/* Returns battery voltage from ADC [millivolts] */
|
|
||||||
int _battery_voltage(void)
|
|
||||||
{
|
|
||||||
return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10;
|
|
||||||
}
|
|
||||||
|
|
|
@ -1,36 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2002 by Alan Korr
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#ifndef SYSTEM_TARGET_H
|
|
||||||
#define SYSTEM_TARGET_H
|
|
||||||
|
|
||||||
#include "system-arm.h"
|
|
||||||
|
|
||||||
#define CPUFREQ_DEFAULT 12000000
|
|
||||||
#define CPUFREQ_NORMAL 48000000
|
|
||||||
#define CPUFREQ_MAX 60000000
|
|
||||||
|
|
||||||
typedef void (*interrupt_handler_t)(void);
|
|
||||||
|
|
||||||
void irq_set_int_handler(int n, interrupt_handler_t handler);
|
|
||||||
void irq_enable_int(int n);
|
|
||||||
void irq_disable_int(int n);
|
|
||||||
|
|
||||||
#endif /* SYSTEM_TARGET_H */
|
|
|
@ -1,49 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 by Barry Wardell
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* 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 "kernel.h"
|
|
||||||
#include "thread.h"
|
|
||||||
#include "system.h"
|
|
||||||
#include "debug.h"
|
|
||||||
#include "ata.h"
|
|
||||||
#include "disk.h"
|
|
||||||
#include "panic.h"
|
|
||||||
#include "lcd.h"
|
|
||||||
#include "usb.h"
|
|
||||||
#include "button.h"
|
|
||||||
#include "string.h"
|
|
||||||
|
|
||||||
void usb_init_device(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
int usb_detect(void)
|
|
||||||
{
|
|
||||||
/* TODO: Implement USB_ISP1582 */
|
|
||||||
return USB_EXTRACTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
void usb_enable(bool on)
|
|
||||||
{
|
|
||||||
/* TODO: Implement USB_ISP1582 */
|
|
||||||
(void)on;
|
|
||||||
}
|
|
|
@ -1,45 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 by Tomasz Malesinski
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#include "config.h"
|
|
||||||
#include "system.h"
|
|
||||||
#include "kernel.h"
|
|
||||||
|
|
||||||
void timer_handler(void)
|
|
||||||
{
|
|
||||||
/* Run through the list of tick tasks */
|
|
||||||
call_tick_tasks();
|
|
||||||
|
|
||||||
TIMER0.clr = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
void tick_start(unsigned int interval_in_ms)
|
|
||||||
{
|
|
||||||
TIMER0.ctrl &= ~0x80; /* Disable the counter */
|
|
||||||
TIMER0.ctrl |= 0x40; /* Reload after counting down to zero */
|
|
||||||
TIMER0.load = 3000000 * interval_in_ms / 1000;
|
|
||||||
TIMER0.ctrl &= ~0xc; /* No prescaler */
|
|
||||||
TIMER0.clr = 1; /* Clear the interrupt request */
|
|
||||||
|
|
||||||
irq_set_int_handler(IRQ_TIMER0, timer_handler);
|
|
||||||
irq_enable_int(IRQ_TIMER0);
|
|
||||||
|
|
||||||
TIMER0.ctrl |= 0x80; /* Enable the counter */
|
|
||||||
}
|
|
|
@ -1,207 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 by Tomek Malesinski
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
#include "system.h"
|
|
||||||
#include "audio.h"
|
|
||||||
#include "string.h"
|
|
||||||
#include "pcm-internal.h"
|
|
||||||
|
|
||||||
#define DMA_BUF_SAMPLES 0x100
|
|
||||||
|
|
||||||
short __attribute__((section(".dmabuf"))) dma_buf_left[DMA_BUF_SAMPLES];
|
|
||||||
short __attribute__((section(".dmabuf"))) dma_buf_right[DMA_BUF_SAMPLES];
|
|
||||||
|
|
||||||
const int16_t* p IBSS_ATTR;
|
|
||||||
size_t p_size IBSS_ATTR;
|
|
||||||
|
|
||||||
void pcm_play_lock(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void pcm_play_unlock(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void pcm_play_dma_start(const void *addr, size_t size)
|
|
||||||
{
|
|
||||||
p = addr;
|
|
||||||
p_size = size;
|
|
||||||
}
|
|
||||||
|
|
||||||
void pcm_play_dma_stop(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static inline void fill_dma_buf(int offset)
|
|
||||||
{
|
|
||||||
short *l, *r, *lend;
|
|
||||||
|
|
||||||
l = dma_buf_left + offset;
|
|
||||||
lend = l + DMA_BUF_SAMPLES / 2;
|
|
||||||
r = dma_buf_right + offset;
|
|
||||||
|
|
||||||
if (pcm_playing)
|
|
||||||
{
|
|
||||||
bool new_buffer =false;
|
|
||||||
|
|
||||||
do
|
|
||||||
{
|
|
||||||
int count;
|
|
||||||
const int16_t *tmp_p;
|
|
||||||
count = MIN(p_size / 4, (size_t)(lend - l));
|
|
||||||
tmp_p = p;
|
|
||||||
p_size -= count * 4;
|
|
||||||
|
|
||||||
if ((int)l & 3)
|
|
||||||
{
|
|
||||||
*l++ = *tmp_p++;
|
|
||||||
*r++ = *tmp_p++;
|
|
||||||
count--;
|
|
||||||
}
|
|
||||||
while (count >= 4)
|
|
||||||
{
|
|
||||||
asm("ldmia %0!, {r0, r1, r2, r3}\n\t"
|
|
||||||
"and r4, r0, %3\n\t"
|
|
||||||
"orr r4, r4, r1, lsl #16\n\t"
|
|
||||||
"and r5, r2, %3\n\t"
|
|
||||||
"orr r5, r5, r3, lsl #16\n\t"
|
|
||||||
"stmia %1!, {r4, r5}\n\t"
|
|
||||||
"bic r4, r1, %3\n\t"
|
|
||||||
"orr r4, r4, r0, lsr #16\n\t"
|
|
||||||
"bic r5, r3, %3\n\t"
|
|
||||||
"orr r5, r5, r2, lsr #16\n\t"
|
|
||||||
"stmia %2!, {r4, r5}"
|
|
||||||
: "+r" (tmp_p), "+r" (l), "+r" (r)
|
|
||||||
: "r" (0xffff)
|
|
||||||
: "r0", "r1", "r2", "r3", "r4", "r5", "memory");
|
|
||||||
count -= 4;
|
|
||||||
}
|
|
||||||
while (count > 0)
|
|
||||||
{
|
|
||||||
*l++ = *tmp_p++;
|
|
||||||
*r++ = *tmp_p++;
|
|
||||||
count--;
|
|
||||||
}
|
|
||||||
p = tmp_p;
|
|
||||||
|
|
||||||
if (new_buffer)
|
|
||||||
{
|
|
||||||
new_buffer = false;
|
|
||||||
pcm_play_dma_status_callback(PCM_DMAST_STARTED);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (l >= lend)
|
|
||||||
return;
|
|
||||||
|
|
||||||
new_buffer = pcm_play_dma_complete_callback(PCM_DMAST_OK,
|
|
||||||
&p, &p_size);
|
|
||||||
}
|
|
||||||
while (p_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (l < lend)
|
|
||||||
{
|
|
||||||
memset(l, 0, sizeof(short) * (lend - l));
|
|
||||||
memset(r, 0, sizeof(short) * (lend - l));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void audio_irq(void)
|
|
||||||
{
|
|
||||||
unsigned long st = DMAINTSTAT & ~DMAINTEN;
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < 2; i++)
|
|
||||||
if (st & (1 << i))
|
|
||||||
{
|
|
||||||
fill_dma_buf((i == 1) ? 0 : DMA_BUF_SAMPLES / 2);
|
|
||||||
DMAINTSTAT = 1 << i;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
unsigned long physical_address(void *p)
|
|
||||||
{
|
|
||||||
unsigned long adr = (unsigned long)p;
|
|
||||||
return (MMUBLOCK((adr >> 21) & 0xf) << 21) | (adr & ((1 << 21) - 1));
|
|
||||||
}
|
|
||||||
|
|
||||||
void pcm_init(void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
memset(dma_buf_left, 0, sizeof(dma_buf_left));
|
|
||||||
memset(dma_buf_right, 0, sizeof(dma_buf_right));
|
|
||||||
|
|
||||||
for (i = 0; i < 8; i++)
|
|
||||||
{
|
|
||||||
DMASRC(i) = 0;
|
|
||||||
DMADEST(i) = 0;
|
|
||||||
DMALEN(i) = 0x1ffff;
|
|
||||||
DMAR0C(i) = 0;
|
|
||||||
DMAR10(i) = 0;
|
|
||||||
DMAR1C(i) = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
DMAINTSTAT = 0xc000ffff;
|
|
||||||
DMAINTEN = 0xc000ffff;
|
|
||||||
|
|
||||||
DMASRC(0) = physical_address(dma_buf_left);
|
|
||||||
DMADEST(0) = 0x80200280;
|
|
||||||
DMALEN(0) = 0xff;
|
|
||||||
DMAR1C(0) = 0;
|
|
||||||
DMAR0C(0) = 0x40408;
|
|
||||||
|
|
||||||
DMASRC(1) = physical_address(dma_buf_right);
|
|
||||||
DMADEST(1) = 0x80200284;
|
|
||||||
DMALEN(1) = 0xff;
|
|
||||||
DMAR1C(1) = 0;
|
|
||||||
DMAR0C(1) = 0x40409;
|
|
||||||
|
|
||||||
irq_set_int_handler(0x1b, audio_irq);
|
|
||||||
irq_enable_int(0x1b);
|
|
||||||
|
|
||||||
DMAINTSTAT = 1;
|
|
||||||
DMAINTSTAT = 2;
|
|
||||||
DMAINTEN &= ~3;
|
|
||||||
DMAR10(0) |= 1;
|
|
||||||
DMAR10(1) |= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
void pcm_play_dma_postinit(void)
|
|
||||||
{
|
|
||||||
audiohw_postinit();
|
|
||||||
}
|
|
||||||
|
|
||||||
void pcm_dma_apply_settings(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
const void * pcm_play_dma_get_peak_buffer(int *count)
|
|
||||||
{
|
|
||||||
unsigned long addr = (unsigned long)p;
|
|
||||||
size_t cnt = p_size;
|
|
||||||
*count = cnt >> 2;
|
|
||||||
return (void *)((addr + 2) & ~3);
|
|
||||||
}
|
|
||||||
|
|
||||||
void audiohw_set_volume(int value)
|
|
||||||
{
|
|
||||||
int tmp = (60 - value * 4) & 0xff;
|
|
||||||
CODECVOL = tmp | (tmp << 8);
|
|
||||||
}
|
|
|
@ -1,317 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id: $
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 by Tomasz Malesinski
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include "pnx0101.h"
|
|
||||||
#include "system.h"
|
|
||||||
|
|
||||||
static struct
|
|
||||||
{
|
|
||||||
unsigned char freq;
|
|
||||||
unsigned char sys_mult;
|
|
||||||
unsigned char sys_div;
|
|
||||||
}
|
|
||||||
perf_modes[3] ICONST_ATTR =
|
|
||||||
{
|
|
||||||
{12, 4, 4},
|
|
||||||
{48, 4, 1},
|
|
||||||
{60, 5, 1}
|
|
||||||
};
|
|
||||||
|
|
||||||
static int performance_mode, bus_divider;
|
|
||||||
|
|
||||||
static void cgu_set_sel_stage_input(int clock, int input)
|
|
||||||
{
|
|
||||||
int s = CGU.base_ssr[clock];
|
|
||||||
if (s & 1)
|
|
||||||
CGU.base_fs2[clock] = input;
|
|
||||||
else
|
|
||||||
CGU.base_fs1[clock] = input;
|
|
||||||
CGU.base_scr[clock] = (s & 3) ^ 3;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cgu_reset_sel_stage_clocks(int first_esr, int n_esr,
|
|
||||||
int first_div, int n_div)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
for (i = 0; i < n_esr; i++)
|
|
||||||
CGU.clk_esr[first_esr + i] = 0;
|
|
||||||
for (i = 0; i < n_div; i++)
|
|
||||||
CGU.base_fdc[first_div + i] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cgu_configure_div(int div, int n, int m)
|
|
||||||
{
|
|
||||||
int msub, madd, div_size, max_n;
|
|
||||||
unsigned long cfg;
|
|
||||||
|
|
||||||
if (n == m)
|
|
||||||
{
|
|
||||||
CGU.base_fdc[div] = CGU.base_fdc[div] & ~1;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
msub = -n;
|
|
||||||
madd = m - n;
|
|
||||||
div_size = (div == PNX0101_HIPREC_FDC) ? 10 : 8;
|
|
||||||
max_n = 1 << div_size;
|
|
||||||
while ((madd << 1) < max_n && (msub << 1) >= -max_n)
|
|
||||||
{
|
|
||||||
madd <<= 1;
|
|
||||||
msub <<= 1;
|
|
||||||
}
|
|
||||||
cfg = (((msub << div_size) | madd) << 3) | 4;
|
|
||||||
CGU.base_fdc[div] = CGU.base_fdc[div] & ~1;
|
|
||||||
CGU.base_fdc[div] = cfg | 2;
|
|
||||||
CGU.base_fdc[div] = cfg;
|
|
||||||
CGU.base_fdc[div] = cfg | 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cgu_connect_div_to_clock(int rel_div, int esr)
|
|
||||||
{
|
|
||||||
CGU.clk_esr[esr] = (rel_div << 1) | 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cgu_enable_clock(int clock)
|
|
||||||
{
|
|
||||||
CGU.clk_pcr[clock] |= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cgu_start_sel_stage_dividers(int bcr)
|
|
||||||
{
|
|
||||||
CGU.base_bcr[bcr] = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Convert a pointer that points to IRAM (0x4xxxx) to a pointer that
|
|
||||||
points to the uncached page (0x0xxxx) that is also mapped to IRAM. */
|
|
||||||
static inline void *noncached(void *p)
|
|
||||||
{
|
|
||||||
return (void *)(((unsigned long)p) & 0xffff);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* To avoid SRAM accesses while changing memory controller settings we
|
|
||||||
run this routine from uncached copy of IRAM. All times are in CPU
|
|
||||||
cycles. At CPU frequencies lower than 60 MHz we could use faster
|
|
||||||
settings, but since DMA may access SRAM at any time, changing
|
|
||||||
memory timings together with CPU frequency would be tricky. */
|
|
||||||
static void do_set_mem_timings(void) ICODE_ATTR;
|
|
||||||
static void do_set_mem_timings(void)
|
|
||||||
{
|
|
||||||
int old_irq = disable_irq_save();
|
|
||||||
while ((EMC.status & 3) != 0);
|
|
||||||
EMC.control = 5;
|
|
||||||
EMCSTATIC0.waitrd = 6;
|
|
||||||
EMCSTATIC0.waitwr = 5;
|
|
||||||
EMCSTATIC1.waitrd = 5;
|
|
||||||
EMCSTATIC1.waitwr = 4; /* OF uses 5 here */
|
|
||||||
EMCSTATIC2.waitrd = 4;
|
|
||||||
EMCSTATIC2.waitwr = 3;
|
|
||||||
EMCSTATIC0.waitoen = 1;
|
|
||||||
EMCSTATIC1.waitoen = 1;
|
|
||||||
EMCSTATIC2.waitoen = 1;
|
|
||||||
/* Enable write buffers for SRAM. */
|
|
||||||
#ifndef DEBUG
|
|
||||||
EMCSTATIC1.config = 0x80081;
|
|
||||||
#endif
|
|
||||||
EMC.control = 1;
|
|
||||||
restore_irq(old_irq);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void emc_set_mem_timings(void)
|
|
||||||
{
|
|
||||||
void (*f)(void) = noncached(do_set_mem_timings);
|
|
||||||
(*f)();
|
|
||||||
}
|
|
||||||
|
|
||||||
static void cgu_set_sys_mult(int i)
|
|
||||||
{
|
|
||||||
cgu_set_sel_stage_input(PNX0101_SEL_STAGE_SYS, PNX0101_MAIN_CLOCK_FAST);
|
|
||||||
cgu_set_sel_stage_input(PNX0101_SEL_STAGE_APB3, PNX0101_MAIN_CLOCK_FAST);
|
|
||||||
|
|
||||||
PLL.lppdn = 1;
|
|
||||||
PLL.lpfin = 1;
|
|
||||||
PLL.lpmbyp = 0;
|
|
||||||
PLL.lpdbyp = 0;
|
|
||||||
PLL.lppsel = 1;
|
|
||||||
PLL.lpmsel = i - 1;
|
|
||||||
PLL.lppdn = 0;
|
|
||||||
while (!PLL.lplock);
|
|
||||||
|
|
||||||
cgu_configure_div(PNX0101_FIRST_DIV_SYS + 1, 1, (i == 5) ? 15 : 12);
|
|
||||||
cgu_connect_div_to_clock(1, 0x11);
|
|
||||||
cgu_enable_clock(0x11);
|
|
||||||
cgu_start_sel_stage_dividers(PNX0101_BCR_SYS);
|
|
||||||
|
|
||||||
cgu_set_sel_stage_input(PNX0101_SEL_STAGE_SYS,
|
|
||||||
PNX0101_MAIN_CLOCK_MAIN_PLL);
|
|
||||||
cgu_set_sel_stage_input(PNX0101_SEL_STAGE_APB3,
|
|
||||||
PNX0101_MAIN_CLOCK_MAIN_PLL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void pnx0101_set_performance_mode(int mode)
|
|
||||||
{
|
|
||||||
int old = performance_mode;
|
|
||||||
if (perf_modes[old].sys_mult != perf_modes[mode].sys_mult)
|
|
||||||
cgu_set_sys_mult(perf_modes[mode].sys_mult);
|
|
||||||
if (perf_modes[old].sys_div != perf_modes[mode].sys_div)
|
|
||||||
cgu_configure_div(bus_divider, 1, perf_modes[mode].sys_div);
|
|
||||||
performance_mode = mode;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void pnx0101_init_clocks(void)
|
|
||||||
{
|
|
||||||
bus_divider = PNX0101_FIRST_DIV_SYS + (CGU.clk_esr[0] >> 1);
|
|
||||||
performance_mode = 0;
|
|
||||||
emc_set_mem_timings();
|
|
||||||
pnx0101_set_performance_mode(2);
|
|
||||||
|
|
||||||
cgu_set_sel_stage_input(PNX0101_SEL_STAGE_APB1,
|
|
||||||
PNX0101_MAIN_CLOCK_FAST);
|
|
||||||
cgu_reset_sel_stage_clocks(PNX0101_FIRST_ESR_APB1, PNX0101_N_ESR_APB1,
|
|
||||||
PNX0101_FIRST_DIV_APB1, PNX0101_N_DIV_APB1);
|
|
||||||
cgu_configure_div(PNX0101_FIRST_DIV_APB1, 1, 4);
|
|
||||||
cgu_connect_div_to_clock(0, PNX0101_ESR_APB1);
|
|
||||||
cgu_connect_div_to_clock(0, PNX0101_ESR_T0);
|
|
||||||
cgu_connect_div_to_clock(0, PNX0101_ESR_T1);
|
|
||||||
cgu_connect_div_to_clock(0, PNX0101_ESR_I2C);
|
|
||||||
cgu_enable_clock(PNX0101_CLOCK_APB1);
|
|
||||||
cgu_enable_clock(PNX0101_CLOCK_T0);
|
|
||||||
cgu_enable_clock(PNX0101_CLOCK_T1);
|
|
||||||
cgu_enable_clock(PNX0101_CLOCK_I2C);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef HAVE_ADJUSTABLE_CPU_FREQ
|
|
||||||
void set_cpu_frequency(long frequency)
|
|
||||||
{
|
|
||||||
switch (frequency)
|
|
||||||
{
|
|
||||||
case CPUFREQ_MAX:
|
|
||||||
pnx0101_set_performance_mode(2);
|
|
||||||
cpu_frequency = CPUFREQ_MAX;
|
|
||||||
break;
|
|
||||||
case CPUFREQ_NORMAL:
|
|
||||||
pnx0101_set_performance_mode(1);
|
|
||||||
cpu_frequency = CPUFREQ_NORMAL;
|
|
||||||
break;
|
|
||||||
case CPUFREQ_DEFAULT:
|
|
||||||
default:
|
|
||||||
pnx0101_set_performance_mode(0);
|
|
||||||
cpu_frequency = CPUFREQ_DEFAULT;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
interrupt_handler_t interrupt_vector[0x1d] __attribute__ ((section(".idata")));
|
|
||||||
|
|
||||||
#define IRQ_READ(reg, dest) \
|
|
||||||
do { unsigned long v2; \
|
|
||||||
do { \
|
|
||||||
dest = (reg); \
|
|
||||||
v2 = (reg); \
|
|
||||||
} while ((dest != v2)); \
|
|
||||||
} while (0);
|
|
||||||
|
|
||||||
#define IRQ_WRITE_WAIT(reg, val, cond) \
|
|
||||||
do { unsigned long v, v2; \
|
|
||||||
do { \
|
|
||||||
(reg) = (val); \
|
|
||||||
v = (reg); \
|
|
||||||
v2 = (reg); \
|
|
||||||
} while ((v != v2) || !(cond)); \
|
|
||||||
} while (0);
|
|
||||||
|
|
||||||
static void undefined_int(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void irq(void)
|
|
||||||
{
|
|
||||||
unsigned long n;
|
|
||||||
IRQ_READ(INTVECTOR[0], n)
|
|
||||||
(*(interrupt_vector[n >> 3]))();
|
|
||||||
}
|
|
||||||
|
|
||||||
void fiq(void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
void irq_enable_int(int n)
|
|
||||||
{
|
|
||||||
IRQ_WRITE_WAIT(INTREQ[n], INTREQ_WEENABLE | INTREQ_ENABLE, v & 0x10000);
|
|
||||||
}
|
|
||||||
|
|
||||||
void irq_disable_int(int n)
|
|
||||||
{
|
|
||||||
IRQ_WRITE_WAIT(INTREQ[n], INTREQ_WEENABLE, (v & 0x10000) == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
void irq_set_int_handler(int n, interrupt_handler_t handler)
|
|
||||||
{
|
|
||||||
interrupt_vector[n] = handler;
|
|
||||||
}
|
|
||||||
|
|
||||||
void system_init(void)
|
|
||||||
{
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/* turn off watchdog */
|
|
||||||
(*(volatile unsigned long *)0x80002804) = 0;
|
|
||||||
|
|
||||||
/*
|
|
||||||
IRQ_WRITE_WAIT(INTVECTOR[0], 0, v == 0);
|
|
||||||
IRQ_WRITE_WAIT(INTVECTOR[1], 0, v == 0);
|
|
||||||
IRQ_WRITE_WAIT(INTPRIOMASK[0], 0, v == 0);
|
|
||||||
IRQ_WRITE_WAIT(INTPRIOMASK[1], 0, v == 0);
|
|
||||||
*/
|
|
||||||
|
|
||||||
for (i = 1; i <= 0x1c; i++)
|
|
||||||
{
|
|
||||||
IRQ_WRITE_WAIT(INTREQ[i],
|
|
||||||
INTREQ_WEPRIO | INTREQ_WETARGET |
|
|
||||||
INTREQ_WEENABLE | INTREQ_WEACTVLO | 1,
|
|
||||||
(v & 0x3010f) == 1);
|
|
||||||
IRQ_WRITE_WAIT(INTREQ[i], INTREQ_WEENABLE, (v & 0x10000) == 0);
|
|
||||||
IRQ_WRITE_WAIT(INTREQ[i], INTREQ_WEPRIO | 1, (v & 0xf) == 1);
|
|
||||||
interrupt_vector[i] = undefined_int;
|
|
||||||
}
|
|
||||||
interrupt_vector[0] = undefined_int;
|
|
||||||
pnx0101_init_clocks();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
void system_reboot(void)
|
|
||||||
{
|
|
||||||
(*(volatile unsigned long *)0x80002804) = 1;
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
void system_exception_wait(void)
|
|
||||||
{
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
|
|
||||||
int system_memory_guard(int newmode)
|
|
||||||
{
|
|
||||||
(void)newmode;
|
|
||||||
return 0;
|
|
||||||
}
|
|
|
@ -1,81 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2007 Tomasz Malesinski
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
#include "system.h"
|
|
||||||
#include "timer.h"
|
|
||||||
|
|
||||||
static long cycles_new = 0;
|
|
||||||
|
|
||||||
void TIMER1_ISR(void)
|
|
||||||
{
|
|
||||||
if (cycles_new > 0)
|
|
||||||
{
|
|
||||||
TIMER1.load = cycles_new - 1;
|
|
||||||
cycles_new = 0;
|
|
||||||
}
|
|
||||||
if (pfn_timer != NULL)
|
|
||||||
{
|
|
||||||
cycles_new = -1;
|
|
||||||
/* "lock" the variable, in case timer_set_period()
|
|
||||||
* is called within pfn_timer() */
|
|
||||||
pfn_timer();
|
|
||||||
cycles_new = 0;
|
|
||||||
}
|
|
||||||
TIMER1.clr = 1; /* clear the interrupt */
|
|
||||||
}
|
|
||||||
|
|
||||||
bool timer_set(long cycles, bool start)
|
|
||||||
{
|
|
||||||
if (start)
|
|
||||||
{
|
|
||||||
if (pfn_unregister != NULL)
|
|
||||||
{
|
|
||||||
pfn_unregister();
|
|
||||||
pfn_unregister = NULL;
|
|
||||||
}
|
|
||||||
TIMER1.ctrl &= ~0x80; /* disable the counter */
|
|
||||||
TIMER1.ctrl |= 0x40; /* reload after counting down to zero */
|
|
||||||
TIMER1.ctrl &= ~0xc; /* no prescaler */
|
|
||||||
TIMER1.clr = 1; /* clear an interrupt event */
|
|
||||||
}
|
|
||||||
if (start || (cycles_new == -1)) /* within isr, cycles_new is "locked" */
|
|
||||||
{ /* enable timer */
|
|
||||||
TIMER1.load = cycles - 1;
|
|
||||||
TIMER1.ctrl |= 0x80; /* enable the counter */
|
|
||||||
}
|
|
||||||
else
|
|
||||||
cycles_new = cycles;
|
|
||||||
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool timer_start(void)
|
|
||||||
{
|
|
||||||
irq_set_int_handler(IRQ_TIMER1, TIMER1_ISR);
|
|
||||||
irq_enable_int(IRQ_TIMER1);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
void timer_stop(void)
|
|
||||||
{
|
|
||||||
TIMER1.ctrl &= ~0x80; /* disable timer 1 */
|
|
||||||
irq_disable_int(IRQ_TIMER1);
|
|
||||||
}
|
|
|
@ -203,13 +203,6 @@
|
||||||
#define UI_LCD_POSX 42 /* x position of lcd */
|
#define UI_LCD_POSX 42 /* x position of lcd */
|
||||||
#define UI_LCD_POSY 35 /* y position of lcd */
|
#define UI_LCD_POSY 35 /* y position of lcd */
|
||||||
|
|
||||||
#elif defined(IRIVER_IFP7XX)
|
|
||||||
#define UI_TITLE "iriver iFP7xx"
|
|
||||||
#define UI_WIDTH 425 /* width of GUI window */
|
|
||||||
#define UI_HEIGHT 183 /* height of GUI window */
|
|
||||||
#define UI_LCD_POSX 115 /* x position of lcd */
|
|
||||||
#define UI_LCD_POSY 54 /* y position of lcd */
|
|
||||||
|
|
||||||
#elif defined(MROBE_100)
|
#elif defined(MROBE_100)
|
||||||
#define UI_TITLE "Olympus M:Robe 100"
|
#define UI_TITLE "Olympus M:Robe 100"
|
||||||
#define UI_WIDTH 247 /* width of GUI window */
|
#define UI_WIDTH 247 /* width of GUI window */
|
||||||
|
|
|
@ -7,7 +7,7 @@
|
||||||
# $Id$
|
# $Id$
|
||||||
#
|
#
|
||||||
|
|
||||||
ifeq ($(MODELNAME),ifp7xx)
|
ifeq ($(MODELNAME),EXAMPLE)
|
||||||
|
|
||||||
INCLUDES= -I$(FIRMDIR)/include -I$(FIRMDIR)/export -I. -I$(OBJDIR) \
|
INCLUDES= -I$(FIRMDIR)/include -I$(FIRMDIR)/export -I. -I$(OBJDIR) \
|
||||||
-I$(BUILDDIR)
|
-I$(BUILDDIR)
|
||||||
|
|
|
@ -21,9 +21,7 @@
|
||||||
|
|
||||||
#include <stdbool.h>
|
#include <stdbool.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "ifp_usb_serial.h"
|
|
||||||
#include "sscanf.h"
|
#include "sscanf.h"
|
||||||
#include "pnx0101.h"
|
|
||||||
#include "gdb_api.h"
|
#include "gdb_api.h"
|
||||||
|
|
||||||
#define BUFMAX 1024
|
#define BUFMAX 1024
|
||||||
|
|
|
@ -8,7 +8,7 @@ OUTPUT_FORMAT(elf32-littlearm)
|
||||||
#error "Unsupported CPU!"
|
#error "Unsupported CPU!"
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef IRIVER_IFP7XX_SERIES
|
#ifdef EXAMPLE
|
||||||
MEMORY
|
MEMORY
|
||||||
{
|
{
|
||||||
IRAM : ORIGIN = 0, LENGTH = 0x10000
|
IRAM : ORIGIN = 0, LENGTH = 0x10000
|
||||||
|
|
|
@ -187,10 +187,6 @@ $releasenotes="/wiki/ReleaseNotes315";
|
||||||
name => 'iriver H320/340',
|
name => 'iriver H320/340',
|
||||||
status => 3,
|
status => 3,
|
||||||
},
|
},
|
||||||
'iriverifp7xx' => {
|
|
||||||
name => 'iriver iFP-7xx',
|
|
||||||
status => 1,
|
|
||||||
},
|
|
||||||
'lyreproto1' => {
|
'lyreproto1' => {
|
||||||
name => 'Lyre Prototype 1',
|
name => 'Lyre Prototype 1',
|
||||||
status => 1,
|
status => 1,
|
||||||
|
|
41
tools/configure
vendored
41
tools/configure
vendored
|
@ -1554,7 +1554,7 @@ cat <<EOF
|
||||||
30) X5/X5V/X5L 10) H120/H140 20) Color/Photo
|
30) X5/X5V/X5L 10) H120/H140 20) Color/Photo
|
||||||
31) M5/M5L 11) H320/H340 21) Nano 1G
|
31) M5/M5L 11) H320/H340 21) Nano 1G
|
||||||
12) iHP-100/110/115 22) Video
|
12) iHP-100/110/115 22) Video
|
||||||
33) D2 13) iFP-790 23) 3G
|
33) D2 23) 3G
|
||||||
34) M3/M3L 14) H10 20Gb 24) 4G Grayscale
|
34) M3/M3L 14) H10 20Gb 24) 4G Grayscale
|
||||||
15) H10 5/6Gb 25) Mini 1G
|
15) H10 5/6Gb 25) Mini 1G
|
||||||
==Creative== 26) Mini 2G
|
==Creative== 26) Mini 2G
|
||||||
|
@ -1733,27 +1733,6 @@ fi
|
||||||
t_model="h100"
|
t_model="h100"
|
||||||
;;
|
;;
|
||||||
|
|
||||||
13|iriverifp7xx)
|
|
||||||
target_id=19
|
|
||||||
modelname="iriverifp7xx"
|
|
||||||
target="IRIVER_IFP7XX"
|
|
||||||
memory=1
|
|
||||||
arm7tdmicc short
|
|
||||||
tool="cp"
|
|
||||||
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
|
|
||||||
bmp2rb_native="$rootdir/tools/bmp2rb -f 0"
|
|
||||||
output="rockbox.wma"
|
|
||||||
appextra="recorder:gui:radio"
|
|
||||||
plugins="yes"
|
|
||||||
# toolset is the tools within the tools directory that we build for
|
|
||||||
# this particular target.
|
|
||||||
toolset=$genericbitmaptools
|
|
||||||
t_cpu="arm"
|
|
||||||
t_manufacturer="pnx0101"
|
|
||||||
t_model="iriver-ifp7xx"
|
|
||||||
sysfont="08-Rockfont"
|
|
||||||
;;
|
|
||||||
|
|
||||||
14|iriverh10)
|
14|iriverh10)
|
||||||
target_id=22
|
target_id=22
|
||||||
modelname="iriverh10"
|
modelname="iriverh10"
|
||||||
|
@ -4198,12 +4177,7 @@ fi
|
||||||
# Figure out build "type"
|
# Figure out build "type"
|
||||||
#
|
#
|
||||||
|
|
||||||
# the ifp7x0 is the only platform that supports building a gdb stub like
|
|
||||||
# this
|
|
||||||
case $modelname in
|
case $modelname in
|
||||||
iriverifp7xx)
|
|
||||||
gdbstub=", (G)DB stub"
|
|
||||||
;;
|
|
||||||
sansae200r|sansae200)
|
sansae200r|sansae200)
|
||||||
gdbstub=", (I)nstaller"
|
gdbstub=", (I)nstaller"
|
||||||
;;
|
;;
|
||||||
|
@ -4280,19 +4254,6 @@ fi
|
||||||
echo "Advanced build selected"
|
echo "Advanced build selected"
|
||||||
whichadvanced $btype
|
whichadvanced $btype
|
||||||
;;
|
;;
|
||||||
[Gg])
|
|
||||||
extradefines="$extradefines -DSTUB" # for target makefile symbol EXTRA_DEFINES
|
|
||||||
appsdir='$(ROOTDIR)/gdb'
|
|
||||||
apps="stub"
|
|
||||||
case $modelname in
|
|
||||||
iriverifp7xx)
|
|
||||||
output="stub.wma"
|
|
||||||
;;
|
|
||||||
*)
|
|
||||||
;;
|
|
||||||
esac
|
|
||||||
echo "GDB stub build selected"
|
|
||||||
;;
|
|
||||||
[Cc])
|
[Cc])
|
||||||
uname=`uname`
|
uname=`uname`
|
||||||
simcc "checkwps"
|
simcc "checkwps"
|
||||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 228 KiB |
|
@ -15,8 +15,6 @@ ipod.c
|
||||||
iriver-h10.c
|
iriver-h10.c
|
||||||
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
|
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
|
||||||
iriver-h100_h300.c
|
iriver-h100_h300.c
|
||||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
|
||||||
iriver-ifp7xx.c
|
|
||||||
#elif CONFIG_KEYPAD == SANSA_C200_PAD
|
#elif CONFIG_KEYPAD == SANSA_C200_PAD
|
||||||
sansa-c200.c
|
sansa-c200.c
|
||||||
#elif CONFIG_KEYPAD == SANSA_CLIP_PAD
|
#elif CONFIG_KEYPAD == SANSA_CLIP_PAD
|
||||||
|
|
|
@ -1,71 +0,0 @@
|
||||||
/***************************************************************************
|
|
||||||
* __________ __ ___.
|
|
||||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
|
||||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
|
||||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
|
||||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
|
||||||
* \/ \/ \/ \/ \/
|
|
||||||
* $Id$
|
|
||||||
*
|
|
||||||
* Copyright (C) 2006 Dan Everton
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License
|
|
||||||
* as published by the Free Software Foundation; either version 2
|
|
||||||
* of the License, or (at your option) any later version.
|
|
||||||
*
|
|
||||||
* This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
|
|
||||||
* KIND, either express or implied.
|
|
||||||
*
|
|
||||||
****************************************************************************/
|
|
||||||
|
|
||||||
|
|
||||||
#include <SDL.h>
|
|
||||||
#include "button.h"
|
|
||||||
#include "buttonmap.h"
|
|
||||||
|
|
||||||
int key_to_button(int keyboard_button)
|
|
||||||
{
|
|
||||||
int new_btn = BUTTON_NONE;
|
|
||||||
switch (keyboard_button)
|
|
||||||
{
|
|
||||||
case SDLK_KP4:
|
|
||||||
case SDLK_LEFT:
|
|
||||||
new_btn = BUTTON_LEFT;
|
|
||||||
break;
|
|
||||||
case SDLK_KP6:
|
|
||||||
case SDLK_RIGHT:
|
|
||||||
new_btn = BUTTON_RIGHT;
|
|
||||||
break;
|
|
||||||
case SDLK_KP8:
|
|
||||||
case SDLK_UP:
|
|
||||||
new_btn = BUTTON_UP;
|
|
||||||
break;
|
|
||||||
case SDLK_KP2:
|
|
||||||
case SDLK_DOWN:
|
|
||||||
new_btn = BUTTON_DOWN;
|
|
||||||
break;
|
|
||||||
case SDLK_KP_PLUS:
|
|
||||||
case SDLK_F8:
|
|
||||||
new_btn = BUTTON_PLAY;
|
|
||||||
break;
|
|
||||||
case SDLK_KP_ENTER:
|
|
||||||
case SDLK_RETURN:
|
|
||||||
case SDLK_a:
|
|
||||||
new_btn = BUTTON_EQ;
|
|
||||||
break;
|
|
||||||
case SDLK_KP5:
|
|
||||||
case SDLK_SPACE:
|
|
||||||
new_btn = BUTTON_SELECT;
|
|
||||||
break;
|
|
||||||
case SDLK_KP_PERIOD:
|
|
||||||
case SDLK_INSERT:
|
|
||||||
new_btn = BUTTON_MODE;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return new_btn;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct button_map bm[] = {
|
|
||||||
{ 0, 0, 0, 0, "None" }
|
|
||||||
};
|
|
Loading…
Add table
Add a link
Reference in a new issue