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
|
||||
#elif CONFIG_KEYPAD == IRIVER_H10_PAD
|
||||
keymaps/keymap-h10.c
|
||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
||||
keymaps/keymap-ifp7xx.c
|
||||
#elif CONFIG_KEYPAD == SANSA_E200_PAD
|
||||
keymaps/keymap-e200.c
|
||||
#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
|
||||
# H320/H340 iriverh300
|
||||
# H10 iriverh10
|
||||
# IFP 7XX iriverifp7xx
|
||||
# iaudio/Cowon
|
||||
# X5 iaudiox5
|
||||
# M5 iaudiom5
|
||||
|
@ -6069,12 +6068,10 @@
|
|||
<source>
|
||||
*: "Battery: %d%% %dh %dm"
|
||||
ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm"
|
||||
iriverifp7xx: "%d%% %dh %dm"
|
||||
</source>
|
||||
<dest>
|
||||
*: "Battery: %d%% %dh %dm"
|
||||
ipodmini1g,ipodmini2g,iriverh10: "Batt: %d%% %dh %dm"
|
||||
iriverifp7xx: "%d%% %dh %dm"
|
||||
</dest>
|
||||
<voice>
|
||||
*: "Battery level"
|
||||
|
|
|
@ -61,13 +61,6 @@
|
|||
#define BATTERY_ON_TXT "SELECT - start"
|
||||
#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) || \
|
||||
(CONFIG_KEYPAD == SANSA_C200_PAD) || \
|
||||
(CONFIG_KEYPAD == SANSA_CLIP_PAD) || \
|
||||
|
|
|
@ -104,22 +104,6 @@ enum {
|
|||
#define BJACK_RIGHT BUTTON_RIGHT
|
||||
#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
|
||||
#define BJACK_SELECT_NAME "SELECT"
|
||||
#define BJACK_STAY_NAME "VOL-"
|
||||
|
|
|
@ -68,16 +68,6 @@
|
|||
#define CALENDAR_NEXT_MONTH BUTTON_VOL_DOWN
|
||||
#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
|
||||
#define CALENDAR_QUIT BUTTON_POWER
|
||||
#define CALENDAR_SELECT BUTTON_SELECT
|
||||
|
|
|
@ -70,20 +70,6 @@
|
|||
#define CB_SCROLL_LEFT (BUTTON_LEFT|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)
|
||||
#define CB_SELECT BUTTON_SELECT
|
||||
#define CB_UP BUTTON_UP
|
||||
|
|
|
@ -46,16 +46,6 @@
|
|||
#define CHC_SETTINGS_OK BUTTON_SELECT
|
||||
#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
|
||||
#define CHC_QUIT BUTTON_REC
|
||||
#define CHC_STARTSTOP BUTTON_PLAY
|
||||
|
|
|
@ -62,16 +62,6 @@
|
|||
#define CUBE_HIGHSPEED_PRE BUTTON_SELECT
|
||||
#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)
|
||||
#define CUBE_QUIT BUTTON_POWER
|
||||
#define CUBE_NEXT BUTTON_RIGHT
|
||||
|
|
|
@ -155,20 +155,6 @@
|
|||
#define FRACTAL_PRECISION_DEC 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
|
||||
#define FRACTAL_QUIT BUTTON_BACK
|
||||
#define FRACTAL_UP BUTTON_UP
|
||||
|
|
|
@ -57,14 +57,6 @@
|
|||
#define GREYSCALE_RIGHT BUTTON_RIGHT
|
||||
#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
|
||||
#define GREYSCALE_SHIFT BUTTON_RC_PLAY /* somewhat dangerous... */
|
||||
#define GREYSCALE_UP BUTTON_RC_VOL_UP
|
||||
|
|
|
@ -63,16 +63,6 @@
|
|||
#define HK_SELECT "SELECT"
|
||||
#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
|
||||
#define JEWELS_UP BUTTON_UP
|
||||
#define JEWELS_DOWN BUTTON_DOWN
|
||||
|
|
|
@ -294,7 +294,6 @@ static const unsigned char lcdlinear[256] = {
|
|||
#define LCD_SCANRATE 73 /* Hz */
|
||||
|
||||
#else /* not yet calibrated targets - generic linear mapping */
|
||||
/* TODO: calibrate iFP7xx */
|
||||
static const unsigned char lcdlinear[256] = {
|
||||
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,
|
||||
|
|
|
@ -91,7 +91,6 @@ const struct button_mapping pla_main_ctx[] =
|
|||
|| (CONFIG_KEYPAD == IRIVER_H300_PAD) \
|
||||
|| (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) \
|
||||
|| (CONFIG_KEYPAD == GIGABEAT_PAD) \
|
||||
|| (CONFIG_KEYPAD == IRIVER_IFP7XX_PAD) \
|
||||
|| (CONFIG_KEYPAD == SANSA_C200_PAD) \
|
||||
|| (CONFIG_KEYPAD == GIGABEAT_S_PAD) \
|
||||
|| (CONFIG_KEYPAD == MROBE100_PAD) \
|
||||
|
@ -348,12 +347,6 @@ const struct button_mapping pla_main_ctx[] =
|
|||
{PLA_SELECT, BUTTON_PLAY, BUTTON_NONE},
|
||||
{PLA_SELECT_REL, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY},
|
||||
{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)
|
||||
{PLA_CANCEL, BUTTON_POWER|BUTTON_REL, BUTTON_POWER},
|
||||
{PLA_EXIT, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE},
|
||||
|
|
|
@ -95,23 +95,6 @@
|
|||
#define LVL_UP_TEXT "PLAY"
|
||||
#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
|
||||
#define PEGBOX_SELECT BUTTON_PLAY
|
||||
#define PEGBOX_QUIT BUTTON_POWER
|
||||
|
|
|
@ -128,8 +128,6 @@ const struct button_mapping pf_context_buttons[] =
|
|||
#endif
|
||||
#elif CONFIG_KEYPAD == SANSA_E200_PAD
|
||||
{PF_QUIT, BUTTON_POWER, BUTTON_NONE},
|
||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
||||
{PF_QUIT, BUTTON_EQ, BUTTON_NONE},
|
||||
#elif (CONFIG_KEYPAD == IPOD_1G2G_PAD) \
|
||||
|| (CONFIG_KEYPAD == IPOD_3G_PAD) \
|
||||
|| (CONFIG_KEYPAD == IPOD_4G_PAD) \
|
||||
|
|
|
@ -152,17 +152,6 @@
|
|||
#define ROCKBLOX_DROP BUTTON_SELECT
|
||||
#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
|
||||
#define ROCKBLOX_OFF BUTTON_POWER
|
||||
|
||||
|
|
|
@ -122,16 +122,6 @@ static void setoptions (void)
|
|||
options.SELECT = BUTTON_NONE;
|
||||
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
|
||||
options.UP = BUTTON_UP;
|
||||
options.DOWN = BUTTON_DOWN;
|
||||
|
|
|
@ -51,14 +51,6 @@
|
|||
#define STOPWATCH_SCROLL_UP BUTTON_SCROLL_FWD
|
||||
#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
|
||||
#define STOPWATCH_QUIT BUTTON_POWER
|
||||
#define STOPWATCH_START_STOP BUTTON_PLAY
|
||||
|
|
|
@ -75,17 +75,6 @@
|
|||
#define TV_AUTOSCROLL BUTTON_PLAY
|
||||
#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 */
|
||||
#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
|
||||
#define TV_QUIT BUTTON_POWER
|
||||
|
|
|
@ -47,14 +47,6 @@
|
|||
#define ZX_SELECT BUTTON_SELECT
|
||||
#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
|
||||
#define ZX_SELECT BUTTON_REW
|
||||
#define ZX_MENU BUTTON_FF
|
||||
|
|
|
@ -32,17 +32,6 @@
|
|||
#define KBD_UP BUTTON_SCROLL_BACK
|
||||
#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
|
||||
|
||||
/* TODO: Check keyboard mappings */
|
||||
|
|
|
@ -336,9 +336,6 @@ drivers/touchscreen.c
|
|||
|
||||
/* Storage */
|
||||
#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)
|
||||
target/arm/ata-nand-telechips.c
|
||||
#endif
|
||||
|
@ -1039,12 +1036,9 @@ target/coldfire/iaudio/audio-iaudio.c
|
|||
#endif
|
||||
#endif /* IAUDIO_M3 */
|
||||
|
||||
#ifdef IRIVER_IFP7XX_SERIES
|
||||
#ifdef STUB
|
||||
ifp_usb_serial.c
|
||||
libc/sscanf.c
|
||||
#endif /* STUB */
|
||||
#endif /* IRIVER_IFP7XX_SERIES */
|
||||
|
||||
#if defined(IRIVER_H300_SERIES) || defined(IRIVER_H100_SERIES)
|
||||
target/coldfire/iriver/ata-iriver.c
|
||||
|
@ -1349,19 +1343,6 @@ target/arm/ipod/button-mini1g.c
|
|||
target/arm/ipod/button-clickwheel.c
|
||||
#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
|
||||
target/arm/as3525/sansa-clipplus/lcd-clip-plus.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_3G_PAD 8
|
||||
#define IPOD_1G2G_PAD 9
|
||||
#define IRIVER_IFP7XX_PAD 10
|
||||
#define GIGABEAT_PAD 11
|
||||
#define IRIVER_H10_PAD 12
|
||||
#define SANSA_E200_PAD 13
|
||||
|
@ -222,7 +221,6 @@
|
|||
#define LCD_IPODVIDEO 8 /* as used by iPod Video */
|
||||
#define LCD_IPOD2BPP 9 /* as used by all fullsize greyscale iPods */
|
||||
#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_H10_20GB 13 /* as used by iriver H10 20Gb */
|
||||
#define LCD_H10_5GB 14 /* as used by iriver H10 5Gb */
|
||||
|
@ -322,7 +320,6 @@ Lyre prototype 1 */
|
|||
/* else HW controlled LED (iRiver H1x0) */
|
||||
|
||||
/* CONFIG_NAND */
|
||||
#define NAND_IFP7XX 1
|
||||
#define NAND_TCC 2
|
||||
#define NAND_SAMSUNG 3
|
||||
#define NAND_CC 4 /* ChinaChip */
|
||||
|
@ -410,8 +407,6 @@ Lyre prototype 1 */
|
|||
#include "config/ipodnano2g.h"
|
||||
#elif defined(IPOD_6G)
|
||||
#include "config/ipod6g.h"
|
||||
#elif defined(IRIVER_IFP7XX)
|
||||
#include "config/iriverifp7xx.h"
|
||||
#elif defined(GIGABEAT_F)
|
||||
#include "config/gigabeatfx.h"
|
||||
#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"
|
||||
|
||||
#define GDB_API_MAGIC 0x6db570b
|
||||
#ifdef IRIVER_IFP7XX_SERIES
|
||||
#define GDB_API_ADDRESS 0xc06000
|
||||
#endif
|
||||
|
||||
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"
|
||||
#endif
|
||||
|
||||
#if !defined(IRIVER_IFP7XX_SERIES)
|
||||
/* FIX: this doesn't work on iFP */
|
||||
|
||||
#define IRQ0_EDGE_TRIGGER 0x80
|
||||
|
||||
static int rolo_handle;
|
||||
|
@ -331,13 +328,3 @@ int rolo_load(const char* filename)
|
|||
/* never reached */
|
||||
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_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)
|
||||
#define UI_TITLE "Olympus M:Robe 100"
|
||||
#define UI_WIDTH 247 /* width of GUI window */
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
# $Id$
|
||||
#
|
||||
|
||||
ifeq ($(MODELNAME),ifp7xx)
|
||||
ifeq ($(MODELNAME),EXAMPLE)
|
||||
|
||||
INCLUDES= -I$(FIRMDIR)/include -I$(FIRMDIR)/export -I. -I$(OBJDIR) \
|
||||
-I$(BUILDDIR)
|
||||
|
|
|
@ -21,9 +21,7 @@
|
|||
|
||||
#include <stdbool.h>
|
||||
#include <string.h>
|
||||
#include "ifp_usb_serial.h"
|
||||
#include "sscanf.h"
|
||||
#include "pnx0101.h"
|
||||
#include "gdb_api.h"
|
||||
|
||||
#define BUFMAX 1024
|
||||
|
|
|
@ -8,7 +8,7 @@ OUTPUT_FORMAT(elf32-littlearm)
|
|||
#error "Unsupported CPU!"
|
||||
#endif
|
||||
|
||||
#ifdef IRIVER_IFP7XX_SERIES
|
||||
#ifdef EXAMPLE
|
||||
MEMORY
|
||||
{
|
||||
IRAM : ORIGIN = 0, LENGTH = 0x10000
|
||||
|
|
|
@ -187,10 +187,6 @@ $releasenotes="/wiki/ReleaseNotes315";
|
|||
name => 'iriver H320/340',
|
||||
status => 3,
|
||||
},
|
||||
'iriverifp7xx' => {
|
||||
name => 'iriver iFP-7xx',
|
||||
status => 1,
|
||||
},
|
||||
'lyreproto1' => {
|
||||
name => 'Lyre Prototype 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
|
||||
31) M5/M5L 11) H320/H340 21) Nano 1G
|
||||
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
|
||||
15) H10 5/6Gb 25) Mini 1G
|
||||
==Creative== 26) Mini 2G
|
||||
|
@ -1733,27 +1733,6 @@ fi
|
|||
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)
|
||||
target_id=22
|
||||
modelname="iriverh10"
|
||||
|
@ -4198,12 +4177,7 @@ fi
|
|||
# Figure out build "type"
|
||||
#
|
||||
|
||||
# the ifp7x0 is the only platform that supports building a gdb stub like
|
||||
# this
|
||||
case $modelname in
|
||||
iriverifp7xx)
|
||||
gdbstub=", (G)DB stub"
|
||||
;;
|
||||
sansae200r|sansae200)
|
||||
gdbstub=", (I)nstaller"
|
||||
;;
|
||||
|
@ -4280,19 +4254,6 @@ fi
|
|||
echo "Advanced build selected"
|
||||
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])
|
||||
uname=`uname`
|
||||
simcc "checkwps"
|
||||
|
|
Binary file not shown.
Before Width: | Height: | Size: 228 KiB |
|
@ -15,8 +15,6 @@ ipod.c
|
|||
iriver-h10.c
|
||||
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
|
||||
iriver-h100_h300.c
|
||||
#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
|
||||
iriver-ifp7xx.c
|
||||
#elif CONFIG_KEYPAD == SANSA_C200_PAD
|
||||
sansa-c200.c
|
||||
#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…
Reference in a new issue