Initial commit of iaudio 7 port by Vitja Makarov (FS#9245). Port is at quite an advanced stage, but is troubled by the lack of a reliable NAND driver (similar to the Cowon D2 port) and is not yet suitable for non-developers.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18435 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
b87715f670
commit
d462a64a91
36 changed files with 1889 additions and 158 deletions
|
@ -198,4 +198,6 @@ keymaps/keymap-creativezv.c
|
|||
keymaps/keymap-sa9200.c
|
||||
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
|
||||
keymaps/keymap-hdd1630.c
|
||||
#elif CONFIG_KEYPAD == IAUDIO67_PAD
|
||||
keymaps/keymap-iaudio67.c
|
||||
#endif
|
||||
|
|
325
apps/keymaps/keymap-iaudio67.c
Normal file
325
apps/keymaps/keymap-iaudio67.c
Normal file
|
@ -0,0 +1,325 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2007 Mark Arigo
|
||||
*
|
||||
* 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 Iaudio[67] target */
|
||||
|
||||
#include "config.h"
|
||||
#include "action.h"
|
||||
#include "button.h"
|
||||
#include "settings.h"
|
||||
|
||||
/* {Action Code, Button code, Prereq button code } */
|
||||
|
||||
/*
|
||||
* 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_RIGHT, BUTTON_NONE },
|
||||
{ ACTION_STD_PREVREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
{ ACTION_STD_NEXT, BUTTON_LEFT, BUTTON_NONE },
|
||||
{ ACTION_STD_NEXTREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
{ ACTION_STD_OK, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
|
||||
{ ACTION_STD_OK, BUTTON_PLAY, BUTTON_NONE },
|
||||
{ ACTION_STD_CANCEL, BUTTON_STOP, BUTTON_NONE },
|
||||
|
||||
{ ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
|
||||
{ ACTION_STD_CONTEXT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
|
||||
// { ACTION_STD_QUICKSCREEN, BUTTON_REC|BUTTON_PLAY, BUTTON_NONE },
|
||||
|
||||
LAST_ITEM_IN_LIST
|
||||
}; /* button_context_standard */
|
||||
|
||||
|
||||
static const struct button_mapping button_context_wps[] = {
|
||||
|
||||
{ ACTION_WPS_VOLDOWN, BUTTON_VOLDOWN, BUTTON_NONE },
|
||||
{ ACTION_WPS_VOLDOWN, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||
{ ACTION_WPS_VOLUP, BUTTON_VOLUP, BUTTON_NONE },
|
||||
{ ACTION_WPS_VOLUP, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE },
|
||||
{ ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
|
||||
{ ACTION_WPS_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
|
||||
|
||||
{ ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
||||
{ ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
{ ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
|
||||
|
||||
{ ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
|
||||
{ ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
{ ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
|
||||
|
||||
{ ACTION_WPS_STOP, BUTTON_STOP, BUTTON_NONE },
|
||||
|
||||
LAST_ITEM_IN_LIST
|
||||
}; /* button_context_wps */
|
||||
|
||||
static const struct button_mapping button_context_settings[] = {
|
||||
{ ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE },
|
||||
// { ACTION_SETTINGS_RESET, BUTTON_PLAY, BUTTON_NONE },
|
||||
|
||||
{ ACTION_SETTINGS_INC, BUTTON_VOLUP, BUTTON_NONE },
|
||||
{ ACTION_SETTINGS_INCREPEAT,BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
{ ACTION_SETTINGS_DEC, BUTTON_VOLDOWN, BUTTON_NONE },
|
||||
{ ACTION_SETTINGS_DECREPEAT,BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
{ ACTION_STD_PREV, BUTTON_RIGHT, BUTTON_NONE },
|
||||
{ ACTION_STD_PREVREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
{ ACTION_STD_NEXT, BUTTON_LEFT, BUTTON_NONE },
|
||||
{ ACTION_STD_NEXTREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
|
||||
}; /* button_context_settings */
|
||||
|
||||
static const struct button_mapping button_context_list[] = {
|
||||
#ifdef HAVE_VOLUME_IN_LIST
|
||||
{ ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
|
||||
{ ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
|
||||
|
||||
{ ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
|
||||
{ ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||
#endif
|
||||
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
||||
}; /* button_context_list */
|
||||
|
||||
static const struct button_mapping button_context_tree[] = {
|
||||
// { ACTION_TREE_WPS, BUTTON_REC|BUTTON_VOLUP, BUTTON_REC },
|
||||
// { ACTION_TREE_STOP, BUTTON_REC|BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_REC|BUTTON_VOLUP },
|
||||
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
||||
}; /* button_context_tree */
|
||||
|
||||
static const struct button_mapping button_context_listtree_scroll_without_combo[] = {
|
||||
#if 0
|
||||
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
|
||||
{ ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
|
||||
{ ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
|
||||
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
{ ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
|
||||
|
||||
{ ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
|
||||
{ ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
|
||||
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
{ ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
|
||||
#endif
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
|
||||
}; /* button_context_listtree_scroll_without_combo */
|
||||
|
||||
static const struct button_mapping button_context_listtree_scroll_with_combo[] = {
|
||||
// { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
// { ACTION_TREE_PGLEFT, BUTTON_REC|BUTTON_LEFT, BUTTON_REC },
|
||||
// { ACTION_TREE_PGLEFT, BUTTON_REC|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
// { ACTION_TREE_PGRIGHT, BUTTON_REC|BUTTON_RIGHT, BUTTON_REC },
|
||||
// { ACTION_TREE_PGRIGHT, BUTTON_REC|BUTTON_RIGHT|BUTTON_REPEAT,BUTTON_NONE },
|
||||
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
|
||||
}; /* button_context_listtree_scroll_with_combo */
|
||||
|
||||
static const struct button_mapping button_context_yesno[] = {
|
||||
// { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE },
|
||||
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
|
||||
}; /* button_context_settings_yesno */
|
||||
|
||||
static const struct button_mapping button_context_quickscreen[] = {
|
||||
#if 0
|
||||
{ ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
|
||||
{ ACTION_STD_CANCEL, BUTTON_MENU|BUTTON_REL, BUTTON_NONE },
|
||||
|
||||
{ ACTION_QS_DOWNINV, BUTTON_VOLUP|BUTTON_REL, BUTTON_NONE },
|
||||
{ ACTION_QS_DOWNINV, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
{ ACTION_QS_DOWN, BUTTON_VOLDOWN|BUTTON_REL, BUTTON_NONE },
|
||||
{ ACTION_QS_DOWN, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
{ ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
|
||||
{ ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
{ ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE },
|
||||
{ ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
#endif
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
|
||||
}; /* button_context_quickscreen */
|
||||
|
||||
static const struct button_mapping button_context_settings_right_is_inc[] = {
|
||||
#if 0
|
||||
{ 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_CANCEL, BUTTON_MENU, BUTTON_NONE },
|
||||
#endif
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
|
||||
}; /* button_context_settings_right_is_inc */
|
||||
|
||||
static const struct button_mapping button_context_pitchscreen[] = {
|
||||
#if 0
|
||||
{ ACTION_PS_INC_SMALL, BUTTON_VOLUP, BUTTON_NONE },
|
||||
{ ACTION_PS_INC_BIG, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
{ ACTION_PS_DEC_SMALL, BUTTON_VOLDOWN, BUTTON_NONE },
|
||||
{ ACTION_PS_DEC_BIG, BUTTON_VOLDOWN|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_PLAY, BUTTON_NONE },
|
||||
{ ACTION_PS_EXIT, BUTTON_MENU, BUTTON_NONE },
|
||||
#endif
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD),
|
||||
}; /* button_context_pitchscreen */
|
||||
|
||||
/** Recording Screen **/
|
||||
#ifdef HAVE_RECORDING
|
||||
static const struct button_mapping button_context_recscreen[] = {
|
||||
{ ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
|
||||
{ ACTION_REC_PAUSE, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY },
|
||||
{ ACTION_STD_CANCEL, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE },
|
||||
// { ACTION_REC_NEWFILE, BUTTON_REC|BUTTON_REL, BUTTON_REC },
|
||||
|
||||
{ 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 },
|
||||
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
|
||||
}; /* button_context_recscreen */
|
||||
#endif
|
||||
|
||||
/** FM Radio Screen **/
|
||||
#if CONFIG_TUNER
|
||||
static const struct button_mapping button_context_radio[] = {
|
||||
{ ACTION_NONE, BUTTON_VOLUP, BUTTON_NONE },
|
||||
{ ACTION_FM_MENU, BUTTON_VOLDOWN, BUTTON_NONE },
|
||||
{ ACTION_FM_PRESET, BUTTON_PLAY, BUTTON_NONE },
|
||||
{ ACTION_FM_STOP, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_VOLUP },
|
||||
// { ACTION_FM_MODE, BUTTON_REC, BUTTON_NONE },
|
||||
{ ACTION_FM_EXIT, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
|
||||
{ ACTION_FM_PLAY, BUTTON_VOLUP|BUTTON_REL, BUTTON_VOLUP },
|
||||
{ ACTION_SETTINGS_INC, BUTTON_LEFT, BUTTON_NONE },
|
||||
{ ACTION_SETTINGS_INCREPEAT,BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
{ ACTION_SETTINGS_DEC, BUTTON_RIGHT, BUTTON_NONE },
|
||||
{ ACTION_SETTINGS_DECREPEAT,BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS)
|
||||
}; /* button_context_radio */
|
||||
#endif
|
||||
|
||||
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_CURSOR_LEFT, BUTTON_REC|BUTTON_LEFT, BUTTON_NONE },
|
||||
// { ACTION_KBD_CURSOR_LEFT, BUTTON_REC|BUTTON_LEFT|BUTTON_REPEAT,BUTTON_NONE },
|
||||
// { ACTION_KBD_CURSOR_RIGHT, BUTTON_REC|BUTTON_RIGHT, BUTTON_NONE },
|
||||
// { ACTION_KBD_CURSOR_RIGHT, BUTTON_REC|BUTTON_RIGHT|BUTTON_REPEAT,BUTTON_NONE },
|
||||
|
||||
{ ACTION_KBD_UP, BUTTON_VOLUP, BUTTON_NONE },
|
||||
{ ACTION_KBD_UP, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE },
|
||||
{ ACTION_KBD_DOWN, BUTTON_VOLDOWN, BUTTON_NONE },
|
||||
{ ACTION_KBD_DOWN, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE },
|
||||
|
||||
// { ACTION_KBD_BACKSPACE, BUTTON_REC|BUTTON_VOLDOWN, BUTTON_NONE },
|
||||
// { ACTION_KBD_BACKSPACE, BUTTON_REC|BUTTON_VOLDOWN|BUTTON_REPEAT,BUTTON_NONE },
|
||||
|
||||
// { ACTION_KBD_PAGE_FLIP, BUTTON_REC|BUTTON_PLAY, BUTTON_REC },
|
||||
|
||||
{ ACTION_KBD_SELECT, BUTTON_PLAY, BUTTON_NONE },
|
||||
{ ACTION_KBD_DONE, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY },
|
||||
{ ACTION_KBD_ABORT, BUTTON_MENU, BUTTON_NONE },
|
||||
|
||||
LAST_ITEM_IN_LIST
|
||||
}; /* button_context_keyboard */
|
||||
|
||||
static const struct button_mapping button_context_bmark[] = {
|
||||
// { ACTION_BMS_DELETE, BUTTON_REC, BUTTON_NONE },
|
||||
|
||||
LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
|
||||
}; /* button_context_bmark */
|
||||
|
||||
/* 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_LIST:
|
||||
return button_context_list;
|
||||
case CONTEXT_TREE:
|
||||
case CONTEXT_MAINMENU:
|
||||
if (global_settings.hold_lr_for_scroll_in_list)
|
||||
return button_context_listtree_scroll_without_combo;
|
||||
else
|
||||
return button_context_listtree_scroll_with_combo;
|
||||
case CONTEXT_CUSTOM|CONTEXT_TREE:
|
||||
return button_context_tree;
|
||||
|
||||
case CONTEXT_SETTINGS:
|
||||
case CONTEXT_SETTINGS_TIME:
|
||||
return button_context_settings;
|
||||
case CONTEXT_CUSTOM|CONTEXT_SETTINGS:
|
||||
case CONTEXT_SETTINGS_COLOURCHOOSER:
|
||||
case CONTEXT_SETTINGS_EQ:
|
||||
return button_context_settings_right_is_inc;
|
||||
|
||||
case CONTEXT_YESNOSCREEN:
|
||||
return button_context_yesno;
|
||||
#if CONFIG_TUNER
|
||||
case CONTEXT_FM:
|
||||
return button_context_radio;
|
||||
#endif
|
||||
case CONTEXT_BOOKMARKSCREEN:
|
||||
return button_context_bmark;
|
||||
case CONTEXT_QUICKSCREEN:
|
||||
return button_context_quickscreen;
|
||||
case CONTEXT_PITCHSCREEN:
|
||||
return button_context_pitchscreen;
|
||||
#ifdef HAVE_RECORDING
|
||||
case CONTEXT_RECSCREEN:
|
||||
return button_context_recscreen;
|
||||
#endif
|
||||
case CONTEXT_KEYBOARD:
|
||||
return button_context_keyboard;
|
||||
|
||||
default:
|
||||
return button_context_standard;
|
||||
}
|
||||
return button_context_standard;
|
||||
}
|
|
@ -150,6 +150,12 @@ PLUGIN_HEADER
|
|||
#define BATTERY_OFF BUTTON_POWER
|
||||
#define BATTERY_OFF_TXT "POWER - quit"
|
||||
|
||||
#elif CONFIG_KEYPAD == IAUDIO67_PAD
|
||||
|
||||
#define BATTERY_OFF BUTTON_POWER
|
||||
#define BATTERY_OFF_TXT "POWER - quit"
|
||||
#define BATTERY_ON BUTTON_PLAY
|
||||
#define BATTERY_ON_TXT "PLAY - start"
|
||||
#else
|
||||
#error No keymap defined!
|
||||
#endif
|
||||
|
|
|
@ -154,6 +154,15 @@ const struct button_mapping generic_directions[] =
|
|||
{ PLA_DOWN_REPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE},
|
||||
{ PLA_LEFT_REPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE},
|
||||
{ PLA_RIGHT_REPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE},
|
||||
#elif (CONFIG_KEYPAD == IAUDIO67_PAD)
|
||||
{ PLA_UP, BUTTON_STOP, BUTTON_NONE},
|
||||
{ PLA_DOWN, BUTTON_PLAY, BUTTON_NONE},
|
||||
{ PLA_LEFT, BUTTON_LEFT, BUTTON_NONE},
|
||||
{ PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE},
|
||||
{ PLA_UP_REPEAT, BUTTON_STOP|BUTTON_REPEAT, BUTTON_NONE},
|
||||
{ PLA_DOWN_REPEAT, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_NONE},
|
||||
{ PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE},
|
||||
{ PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE},
|
||||
#else
|
||||
#error pluginlib_actions: Unsupported keypad
|
||||
#endif
|
||||
|
@ -257,6 +266,13 @@ const struct button_mapping generic_left_right_fire[] =
|
|||
{ PLA_RIGHT_REPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE},
|
||||
{ PLA_FIRE, BUTTON_RC_MODE, BUTTON_NONE},
|
||||
{ PLA_FIRE_REPEAT, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_NONE},
|
||||
#elif (CONFIG_KEYPAD == IAUDIO67_PAD)
|
||||
{ PLA_LEFT, BUTTON_LEFT, BUTTON_NONE},
|
||||
{ PLA_RIGHT, BUTTON_RIGHT, BUTTON_NONE},
|
||||
{ PLA_LEFT_REPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE},
|
||||
{ PLA_RIGHT_REPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE},
|
||||
{ PLA_FIRE, BUTTON_MENU, BUTTON_NONE},
|
||||
{ PLA_FIRE_REPEAT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE},
|
||||
#else
|
||||
#error pluginlib_actions: Unsupported keypad
|
||||
#endif
|
||||
|
@ -391,6 +407,12 @@ const struct button_mapping generic_actions[] =
|
|||
{PLA_MENU, BUTTON_MENU, BUTTON_NONE},
|
||||
{PLA_FIRE, BUTTON_SELECT, BUTTON_NONE},
|
||||
{PLA_FIRE_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE},
|
||||
#elif (CONFIG_KEYPAD == IAUDIO67_PAD)
|
||||
{PLA_QUIT, BUTTON_POWER, BUTTON_NONE},
|
||||
{PLA_START, BUTTON_PLAY, BUTTON_NONE},
|
||||
{PLA_MENU, BUTTON_MENU, BUTTON_NONE},
|
||||
{PLA_FIRE, BUTTON_VOLUP, BUTTON_NONE},
|
||||
{PLA_FIRE_REPEAT, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE},
|
||||
#else
|
||||
#error pluginlib_actions: Unsupported keypad
|
||||
#endif
|
||||
|
@ -456,6 +478,11 @@ const struct button_mapping generic_increase_decrease[] =
|
|||
{PLA_DEC, BUTTON_MINUS, BUTTON_NONE},
|
||||
{PLA_INC_REPEAT, BUTTON_PLUS|BUTTON_REPEAT, BUTTON_NONE},
|
||||
{PLA_DEC_REPEAT, BUTTON_MINUS|BUTTON_REPEAT, BUTTON_NONE},
|
||||
#elif CONFIG_KEYPAD == IAUDIO67_PAD
|
||||
{PLA_INC, BUTTON_VOLUP, BUTTON_NONE},
|
||||
{PLA_DEC, BUTTON_VOLDOWN, BUTTON_NONE},
|
||||
{PLA_INC_REPEAT, BUTTON_VOLUP|BUTTON_REPEAT, BUTTON_NONE},
|
||||
{PLA_DEC_REPEAT, BUTTON_VOLDOWN|BUTTON_REPEAT, BUTTON_NONE},
|
||||
#else
|
||||
#error pluginlib_actions: Unsupported keypad
|
||||
#endif
|
||||
|
|
|
@ -80,7 +80,7 @@ OUTPUT_FORMAT(elf32-sh)
|
|||
#define IRAMORIG DRAMORIG
|
||||
#define IRAMSIZE 0x4000
|
||||
#define IRAM DRAM
|
||||
#elif defined(CPU_TCC780X)
|
||||
#elif defined(CPU_TCC780X) || defined(CPU_TCC77X)
|
||||
#define DRAMORIG 0x20000000
|
||||
/*#define IRAMORIG 0x1000c000
|
||||
#define IRAMSIZE 0xc000*/
|
||||
|
|
|
@ -44,9 +44,15 @@
|
|||
#include "file.h"
|
||||
#include "common.h"
|
||||
|
||||
#if defined(COWON_D2)
|
||||
#include "pcf50606.h"
|
||||
#define LOAD_ADDRESS 0x20000000 /* DRAM_START */
|
||||
#if defined(COWON_D2) || defined(IAUDIO_7) && defined(TCCBOOT)
|
||||
# define REAL_BOOT
|
||||
#endif
|
||||
|
||||
#ifdef REAL_BOOT
|
||||
# if defined(COWON_D2) || defined(IAUDIO_7)
|
||||
# include "pcf50606.h"
|
||||
# endif
|
||||
# define LOAD_ADDRESS 0x20000000 /* DRAM_START */
|
||||
#endif
|
||||
|
||||
char version[] = APPSVERSION;
|
||||
|
@ -80,14 +86,14 @@ void show_debug_screen(void)
|
|||
} else {
|
||||
power_count = 0;
|
||||
}
|
||||
|
||||
#ifdef BUTTON_SELECT
|
||||
if (button & BUTTON_SELECT){
|
||||
_backlight_off();
|
||||
_backlight_off();
|
||||
}
|
||||
else{
|
||||
_backlight_on();
|
||||
}
|
||||
|
||||
#endif
|
||||
/*printf("Btn: 0x%08x",button);
|
||||
printf("Tick: %d",current_tick);
|
||||
printf("GPIOA: 0x%08x",GPIOA);
|
||||
|
@ -172,13 +178,13 @@ void show_debug_screen(void)
|
|||
|
||||
void* main(void)
|
||||
{
|
||||
#if defined(COWON_D2) && defined(TCCBOOT)
|
||||
#ifdef REAL_BOOT
|
||||
int rc;
|
||||
unsigned char* loadbuffer = (unsigned char*)LOAD_ADDRESS;
|
||||
#endif
|
||||
|
||||
power_init();
|
||||
system_init();
|
||||
power_init();
|
||||
#ifndef COWON_D2
|
||||
/* The D2 doesn't enable threading or interrupts */
|
||||
kernel_init();
|
||||
|
@ -197,7 +203,7 @@ void* main(void)
|
|||
|
||||
/* Only load the firmware if TCCBOOT is defined - this ensures SDRAM_START is
|
||||
available for loading the firmware. Otherwise display the debug screen. */
|
||||
#if defined(COWON_D2) && defined(TCCBOOT)
|
||||
#ifdef REAL_BOOT
|
||||
printf("Rockbox boot loader");
|
||||
printf("Version %s", version);
|
||||
|
||||
|
|
|
@ -416,6 +416,7 @@ Tadeusz Pyś
|
|||
Rostislav Chekan
|
||||
Florin Popescu
|
||||
Volker Mische
|
||||
Vitja Makarov
|
||||
|
||||
The libmad team
|
||||
The wavpack team
|
||||
|
|
|
@ -988,7 +988,7 @@ target/arm/tcc77x/logikdax/button-logikdax.c
|
|||
target/arm/tcc77x/logikdax/power-logikdax.c
|
||||
#ifndef BOOTLOADER
|
||||
target/arm/tcc77x/debug-tcc77x.c
|
||||
target/arm/tcc77x/pcm-tcc77x.c
|
||||
target/arm/pcm-telechips.c
|
||||
#endif /* BOOTLOADER */
|
||||
#endif /* SIMULATOR */
|
||||
#endif /* LOGIK_DAX */
|
||||
|
@ -1008,7 +1008,7 @@ target/arm/tcc77x/m200/button-m200.c
|
|||
target/arm/tcc77x/m200/power-m200.c
|
||||
#ifndef BOOTLOADER
|
||||
target/arm/tcc77x/debug-tcc77x.c
|
||||
target/arm/tcc77x/pcm-tcc77x.c
|
||||
target/arm/pcm-telechips.c
|
||||
#endif /* BOOTLOADER */
|
||||
#endif /* SIMULATOR */
|
||||
#endif /* SANSA_M200 */
|
||||
|
@ -1028,7 +1028,7 @@ target/arm/tcc77x/c100/button-c100.c
|
|||
target/arm/tcc77x/c100/power-c100.c
|
||||
#ifndef BOOTLOADER
|
||||
target/arm/tcc77x/debug-tcc77x.c
|
||||
target/arm/tcc77x/pcm-tcc77x.c
|
||||
target/arm/pcm-telechips.c
|
||||
#endif /* BOOTLOADER */
|
||||
#endif /* SIMULATOR */
|
||||
#endif /* SANSA_C100 */
|
||||
|
@ -1036,11 +1036,24 @@ target/arm/tcc77x/pcm-tcc77x.c
|
|||
#ifdef IAUDIO_7
|
||||
#ifndef SIMULATOR
|
||||
drivers/nand_id.c
|
||||
drivers/pcf50606.c
|
||||
target/arm/ata-nand-telechips.c
|
||||
target/arm/tcc77x/adc-tcc77x.c
|
||||
target/arm/tcc77x/system-tcc77x.c
|
||||
target/arm/tcc77x/kernel-tcc77x.c
|
||||
target/arm/tcc77x/timer-tcc77x.c
|
||||
target/arm/tcc77x/adc-tcc77x.c
|
||||
target/arm/tcc77x/powermgmt-tcc77x.c
|
||||
target/arm/tcc77x/usb-tcc77x.c
|
||||
target/arm/tcc77x/iaudio7/lcd-iaudio7.c
|
||||
target/arm/tcc77x/iaudio7/power-iaudio7.c
|
||||
target/arm/tcc77x/iaudio7/button-iaudio7.c
|
||||
target/arm/tcc77x/iaudio7/ata2501.c
|
||||
#ifndef BOOTLOADER
|
||||
target/arm/wmcodec-telechips.c
|
||||
target/arm/pcm-telechips.c
|
||||
target/arm/tcc77x/debug-tcc77x.c
|
||||
target/arm/tcc77x/iaudio7/audio-iaudio7.c
|
||||
#endif /* BOOTLOADER */
|
||||
#endif /* SIMULATOR */
|
||||
#endif /* IAUDIO_7 */
|
||||
|
||||
|
@ -1063,7 +1076,7 @@ target/arm/tcc780x/kernel-tcc780x.c
|
|||
target/arm/tcc780x/timer-tcc780x.c
|
||||
target/arm/wmcodec-telechips.c
|
||||
target/arm/tcc780x/debug-tcc780x.c
|
||||
target/arm/tcc780x/pcm-tcc780x.c
|
||||
target/arm/pcm-telechips.c
|
||||
target/arm/tcc780x/cowond2/audio-cowond2.c
|
||||
#endif /* BOOTLOADER */
|
||||
#endif /* SIMULATOR */
|
||||
|
|
|
@ -167,7 +167,11 @@ void audiohw_preinit(void)
|
|||
|
||||
/* 3) Set required values in all other registers except 12h (Active). */
|
||||
wmcodec_write(AINTFCE, AINTFCE_FORMAT_I2S | AINTFCE_IWL_16BIT |
|
||||
#ifdef CODEC_SLAVE
|
||||
0);
|
||||
#else
|
||||
AINTFCE_MS);
|
||||
#endif
|
||||
wm8731_write(AAPCTRL, wm8731_regs[AAPCTRL]);
|
||||
wm8731_write(DAPCTRL, wm8731_regs[DAPCTRL]);
|
||||
wmcodec_write(SAMPCTRL, WM8731_USB24_44100HZ);
|
||||
|
|
|
@ -67,6 +67,21 @@ static int fd_log = -1;
|
|||
#define FM_NRW_PIN 3
|
||||
#define FM_CLOCK_PIN 4
|
||||
#define FM_DATA_PIN 5
|
||||
#elif defined(IAUDIO_7)
|
||||
#define GPIO_OUTPUT_EN GPIOA_DIR
|
||||
#define GPIO_OUTPUT_VAL GPIOA
|
||||
#define GPIO_INPUT_VAL GPIOA
|
||||
#define FM_CLOCK_PIN 5
|
||||
#define FM_DATA_PIN 6
|
||||
#define FM_NRW_PIN 7
|
||||
//#define udelay(x) /* Remove hack when D2 has udelay */
|
||||
|
||||
static void udelay(int usecs)
|
||||
{
|
||||
while (usecs--)
|
||||
asm("nop;nop;");
|
||||
}
|
||||
|
||||
#elif defined(COWON_D2)
|
||||
#define GPIO_OUTPUT_EN GPIOC_DIR
|
||||
#define GPIO_OUTPUT_VAL GPIOC
|
||||
|
|
163
firmware/export/config-iaudio7.h
Normal file
163
firmware/export/config-iaudio7.h
Normal file
|
@ -0,0 +1,163 @@
|
|||
/*
|
||||
* This config file is for the Iaudio7 series
|
||||
*/
|
||||
#define TARGET_TREE /* this target is using the target tree system */
|
||||
|
||||
/* For Rolo and boot loader */
|
||||
#define MODEL_NUMBER 32
|
||||
|
||||
/* define this if you have recording possibility */
|
||||
#define HAVE_RECORDING
|
||||
|
||||
/* Define bitmask of input sources - recordable bitmask can be defined
|
||||
explicitly if different */
|
||||
#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN | SRC_CAP_FMRADIO)
|
||||
|
||||
/* define hardware samples rate caps mask */
|
||||
#define HW_SAMPR_CAPS (/*SAMPR_CAP_88 | */SAMPR_CAP_44/* | SAMPR_CAP_22 | SAMPR_CAP_11*/)
|
||||
|
||||
/* define the bitmask of recording sample rates */
|
||||
#define REC_SAMPR_CAPS (SAMPR_CAP_44/* | SAMPR_CAP_22 | SAMPR_CAP_11*/)
|
||||
|
||||
/* define this if you have a bitmap LCD display */
|
||||
#define HAVE_LCD_BITMAP
|
||||
|
||||
/* define this if you have a colour LCD */
|
||||
#define HAVE_LCD_COLOR
|
||||
|
||||
/* define this if you can flip your LCD */
|
||||
//#define HAVE_LCD_FLIP
|
||||
|
||||
/* define this if you can invert the colours on your LCD */
|
||||
//#define HAVE_LCD_INVERT
|
||||
|
||||
/* define this if you have access to the quickscreen */
|
||||
#define HAVE_QUICKSCREEN
|
||||
|
||||
/* define this if you have access to the pitchscreen */
|
||||
#define HAVE_PITCHSCREEN
|
||||
|
||||
/* define this if you have LCD enable function */
|
||||
#define HAVE_LCD_ENABLE
|
||||
|
||||
/* define this if you would like tagcache to build on this target */
|
||||
#define HAVE_TAGCACHE
|
||||
|
||||
#define HAVE_FAT16SUPPORT
|
||||
|
||||
#if 0 /* Enable for USB driver test */
|
||||
#define HAVE_USBSTACK
|
||||
#define USE_HIGH_SPEED
|
||||
#define USB_VENDOR_ID 0x0e21
|
||||
#define USB_PRODUCT_ID 0x0750
|
||||
|
||||
#define USB_STORAGE
|
||||
#define USB_SERIAL
|
||||
#endif
|
||||
|
||||
/* define this if you have a flash memory storage */
|
||||
#define HAVE_FLASH_STORAGE
|
||||
|
||||
/* LCD dimensions */
|
||||
#define LCD_WIDTH 160
|
||||
#define LCD_HEIGHT 128
|
||||
/* 16bits for now... */
|
||||
#define LCD_DEPTH 16 /* 262144 colours */
|
||||
#define LCD_PIXELFORMAT RGB565 /*rgb565*/
|
||||
|
||||
/*#define LCD_PIXELFORMAT VERTICAL_PACKING*/
|
||||
|
||||
/* define this to indicate your device's keypad */
|
||||
#define CONFIG_KEYPAD IAUDIO67_PAD
|
||||
|
||||
/* #define HAVE_BUTTON_DATA */
|
||||
|
||||
/* define this if you have a real-time clock */
|
||||
#define CONFIG_RTC RTC_PCF50606
|
||||
|
||||
/* define this if you have RTC RAM available for settings */
|
||||
//#define HAVE_RTC_RAM
|
||||
|
||||
/* Define this if you have a software controlled poweroff */
|
||||
#define HAVE_SW_POWEROFF
|
||||
|
||||
/* Reduce Tremor's ICODE usage */
|
||||
#define ICODE_ATTR_TREMOR_NOT_MDCT
|
||||
|
||||
/* The number of bytes reserved for loadable codecs */
|
||||
#define CODEC_SIZE 0x80000
|
||||
|
||||
/* The number of bytes reserved for loadable plugins */
|
||||
#define PLUGIN_BUFFER_SIZE 0x80000
|
||||
|
||||
#define AB_REPEAT_ENABLE 1
|
||||
|
||||
/* Define this if you do software codec */
|
||||
#define CONFIG_CODEC SWCODEC
|
||||
|
||||
/* The iaudio7 uses built-in WM8731 codec */
|
||||
#define HAVE_WM8731
|
||||
/* Codec is slave on serial bus */
|
||||
#define CODEC_SLAVE
|
||||
|
||||
/* Define this if you have the TLV320 audio codec */
|
||||
//#define HAVE_TLV320
|
||||
|
||||
/* TLV320 has no tone controls, so we use the software ones */
|
||||
//#define HAVE_SW_TONE_CONTROLS
|
||||
|
||||
/* Define this for LCD backlight available */
|
||||
#define HAVE_BACKLIGHT
|
||||
|
||||
#define CONFIG_I2C I2C_TCC77X
|
||||
|
||||
#define BATTERY_CAPACITY_DEFAULT 540 /* default battery capacity */
|
||||
#define BATTERY_CAPACITY_MIN 540 /* min. capacity selectable */
|
||||
#define BATTERY_CAPACITY_MAX 540 /* max. capacity selectable */
|
||||
#define BATTERY_CAPACITY_INC 50 /* capacity increment */
|
||||
#define BATTERY_TYPES_COUNT 1 /* only one type */
|
||||
|
||||
/* define this if the unit should not shut down on low battery. */
|
||||
#define NO_LOW_BATTERY_SHUTDOWN
|
||||
#define CONFIG_CHARGING CHARGING_SIMPLE
|
||||
|
||||
#ifndef SIMULATOR
|
||||
|
||||
/* Define this if you have a TCC770 */
|
||||
#define CONFIG_CPU TCC770
|
||||
|
||||
/* Define this if you have ATA power-off control */
|
||||
#define HAVE_ATA_POWER_OFF
|
||||
|
||||
/* Define this to the CPU frequency */
|
||||
#define CPU_FREQ 120000000
|
||||
|
||||
/* 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
|
||||
|
||||
/* Software controlled LED */
|
||||
#define CONFIG_LED LED_VIRTUAL
|
||||
|
||||
#define CONFIG_LCD LCD_IAUDIO67
|
||||
|
||||
/* FM Tuner */
|
||||
#define CONFIG_TUNER LV24020LP
|
||||
#define HAVE_TUNER_PWR_CTRL
|
||||
|
||||
/* Define this for FM radio input available */
|
||||
#define HAVE_FMRADIO_IN
|
||||
|
||||
#define BOOTFILE_EXT "iaudio"
|
||||
#define BOOTFILE "rockbox." BOOTFILE_EXT
|
||||
#define BOOTDIR "/"
|
||||
|
||||
#ifdef BOOTLOADER
|
||||
#define TCCBOOT
|
||||
#endif
|
||||
#endif /* SIMULATOR */
|
|
@ -481,7 +481,6 @@
|
|||
(((CONFIG_CPU == SH7034) && !defined(PLUGIN)) || /* SH1 archos: core only */ \
|
||||
defined(CPU_COLDFIRE) || /* Coldfire: core, plugins, codecs */ \
|
||||
defined(CPU_PP) || /* PortalPlayer: core, plugins, codecs */ \
|
||||
defined(CPU_TCC77X) || /* Telechips: core, plugins, codecs */ \
|
||||
(CONFIG_CPU == PNX0101) || \
|
||||
(CONFIG_CPU == S5L8700)) /* Samsung S5L8700: core, plugins, codecs */
|
||||
#define ICODE_ATTR __attribute__ ((section(".icode")))
|
||||
|
|
68
firmware/export/hd66789r.h
Normal file
68
firmware/export/hd66789r.h
Normal file
|
@ -0,0 +1,68 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2008 Vitja Makarov
|
||||
*
|
||||
* 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 _HD66789R_H_
|
||||
#define _HD66789R_H_
|
||||
|
||||
/* HD66789R registers */
|
||||
#define R_START_OSC 0x00
|
||||
#define R_DRV_OUTPUT_CONTROL 0x01
|
||||
#define R_DRV_WAVEFORM_CONTROL 0x02
|
||||
#define R_ENTRY_MODE 0x03
|
||||
#define R_COMPARE_REG1 0x04
|
||||
#define R_COMPARE_REG2 0x05
|
||||
|
||||
#define R_DISP_CONTROL1 0x07
|
||||
#define R_DISP_CONTROL2 0x08
|
||||
#define R_DISP_CONTROL3 0x09
|
||||
|
||||
#define R_FRAME_CYCLE_CONTROL 0x0b
|
||||
#define R_EXT_DISP_IF_CONTROL 0x0c
|
||||
|
||||
#define R_POWER_CONTROL1 0x10
|
||||
#define R_POWER_CONTROL2 0x11
|
||||
#define R_POWER_CONTROL3 0x12
|
||||
#define R_POWER_CONTROL4 0x13
|
||||
|
||||
#define R_RAM_ADDR_SET 0x21
|
||||
#define R_WRITE_DATA_2_GRAM 0x22
|
||||
|
||||
#define R_GAMMA_FINE_ADJ_POS1 0x30
|
||||
#define R_GAMMA_FINE_ADJ_POS2 0x31
|
||||
#define R_GAMMA_FINE_ADJ_POS3 0x32
|
||||
#define R_GAMMA_GRAD_ADJ_POS 0x33
|
||||
|
||||
#define R_GAMMA_FINE_ADJ_NEG1 0x34
|
||||
#define R_GAMMA_FINE_ADJ_NEG2 0x35
|
||||
#define R_GAMMA_FINE_ADJ_NEG3 0x36
|
||||
#define R_GAMMA_GRAD_ADJ_NEG 0x37
|
||||
|
||||
#define R_GAMMA_AMP_ADJ_RES_POS 0x38
|
||||
#define R_GAMMA_AMP_AVG_ADJ_RES_NEG 0x39
|
||||
|
||||
#define R_GATE_SCAN_POS 0x40
|
||||
#define R_VERT_SCROLL_CONTROL 0x41
|
||||
#define R_1ST_SCR_DRV_POS 0x42
|
||||
#define R_2ND_SCR_DRV_POS 0x43
|
||||
#define R_HORIZ_RAM_ADDR_POS 0x44
|
||||
#define R_VERT_RAM_ADDR_POS 0x45
|
||||
|
||||
#endif /* _HD66789R_H_ */
|
|
@ -59,8 +59,13 @@
|
|||
#define PCLKCFG5 (*(volatile unsigned long *)0x80000430)
|
||||
#define PCLKCFG6 (*(volatile unsigned long *)0x80000434)
|
||||
|
||||
#define PCLK_DAI PCLKCFG6
|
||||
|
||||
/* Device bits for SWRESET & BCLKCTR */
|
||||
|
||||
#define DEV_DAI (1<<0)
|
||||
#define DEV_USBD (1<<4)
|
||||
#define DEV_ECC (1<<9)
|
||||
#define DEV_NAND (1<<16)
|
||||
|
||||
/* ADC */
|
||||
|
@ -86,9 +91,23 @@
|
|||
|
||||
|
||||
/* IRQ Controller */
|
||||
#define EXT0_IRQ_MASK (1<<0)
|
||||
#define EXT1_IRQ_MASK (1<<1)
|
||||
#define EXT2_IRQ_MASK (1<<2)
|
||||
#define EXT3_IRQ_MASK (1<<3)
|
||||
#define I2SR_IRQ_MASK (1<<4)
|
||||
#define I2ST_IRQ_MASK (1<<5)
|
||||
#define TIMER0_IRQ_MASK (1<<6)
|
||||
#define USBD_IRQ_MASK (1<<8) /* USB 2.0 device */
|
||||
#define USBH_IRQ_MASK (1<<10) /* USB 1.1 host */
|
||||
#define ADC_IRQ_MASK (1<<16)
|
||||
#define USB_DMA_IRQ_MASK (1<<26) /* USB DMA */
|
||||
#define ECC_IRQ_MASK (1<<27)
|
||||
|
||||
#define TIMER0_IRQ_MASK (1<<6)
|
||||
#define ADC_IRQ_MASK (1<<16)
|
||||
#define DAI_RX_IRQ_MASK I2SR_IRQ_MASK
|
||||
#define DAI_TX_IRQ_MASK I2ST_IRQ_MASK
|
||||
|
||||
#define USB_DMA_IRQ_MASK (1<<26) /* USB DMA */
|
||||
|
||||
#define IEN (*(volatile unsigned long *)0x80000100)
|
||||
#define CREQ (*(volatile unsigned long *)0x80000104)
|
||||
|
@ -160,4 +179,83 @@
|
|||
#define NFC_IREQ (*(volatile unsigned long *)0x90000060)
|
||||
#define NFC_RST (*(volatile unsigned long *)0x90000064)
|
||||
|
||||
|
||||
/* ECC controller */
|
||||
|
||||
#define ECC_CTRL (*(volatile unsigned long *)0x80000900)
|
||||
#define ECC_DMA_REQ (1<<28)
|
||||
#define ECC_ENC (1<<27) /* MLC ECC3/4 */
|
||||
#define ECC_FLG (1<<26)
|
||||
#define ECC_IEN (1<<25)
|
||||
#define ECC_MANUAL (1<<22)
|
||||
#define ECC_WCNT (1<<12) /* [21:12] */
|
||||
#define ECC_HOLD (1<<7)
|
||||
#define ECC_M4EN (1<<6)
|
||||
#define ECC_ZERO (1<<5)
|
||||
#define ECC_M3EN (1<<4)
|
||||
#define ECC_CNT_MASK (7<<1)
|
||||
#define ECC_CNT (1<<1)
|
||||
#define ECC_SLC (1<<0)
|
||||
|
||||
#define ECC_BASE (*(volatile unsigned long *)0x80000904)
|
||||
#define ECC_MASK (*(volatile unsigned long *)0x80000908)
|
||||
#define ECC_CLR (*(volatile unsigned long *)0x8000090c)
|
||||
#define SLC_ECC0 (*(volatile unsigned long *)0x80000910)
|
||||
#define SLC_ECC1 (*(volatile unsigned long *)0x80000914)
|
||||
#define SLC_ECC2 (*(volatile unsigned long *)0x80000918)
|
||||
#define SLC_ECC3 (*(volatile unsigned long *)0x8000091c)
|
||||
#define SLC_ECC4 (*(volatile unsigned long *)0x80000920)
|
||||
#define SLC_ECC5 (*(volatile unsigned long *)0x80000924)
|
||||
#define SLC_ECC6 (*(volatile unsigned long *)0x80000928)
|
||||
#define SLC_ECC7 (*(volatile unsigned long *)0x8000092c)
|
||||
#define MLC_ECC0W (*(volatile unsigned long *)0x80000930)
|
||||
#define MLC_ECC1W (*(volatile unsigned long *)0x80000934)
|
||||
#define MLC_ECC2W (*(volatile unsigned long *)0x80000938)
|
||||
#define MLC_ECC0R (*(volatile unsigned long *)0x80000940)
|
||||
#define MLC_ECC1R (*(volatile unsigned long *)0x80000944)
|
||||
#define MLC_ECC2R (*(volatile unsigned long *)0x80000948)
|
||||
#define ECC_CORR_START (*(volatile unsigned long *)0x8000094c)
|
||||
#define ECC_ERRADDR1 (*(volatile unsigned long *)0x80000950)
|
||||
#define ECC_ERRADDR2 (*(volatile unsigned long *)0x80000954)
|
||||
#define ECC_ERRADDR3 (*(volatile unsigned long *)0x80000958)
|
||||
#define ECC_ERRADDR4 (*(volatile unsigned long *)0x8000095c)
|
||||
#define ECC_ERRDATA1 (*(volatile unsigned long *)0x80000960)
|
||||
#define ECC_ERRDATA2 (*(volatile unsigned long *)0x80000964)
|
||||
#define ECC_ERRDATA3 (*(volatile unsigned long *)0x80000968)
|
||||
#define ECC_ERRDATA4 (*(volatile unsigned long *)0x8000096c)
|
||||
#define ECC_ERR_NUM (*(volatile unsigned long *)0x80000970)
|
||||
|
||||
#define ECC_ERRDATA(x) (*(volatile unsigned long *)(0x80000960 + (x) * 4))
|
||||
#define ECC_ERRADDR(x) (*(volatile unsigned long *)(0x80000950 + (x) * 4))
|
||||
|
||||
/* Digital Audio Interface */
|
||||
#define DADI_L0 (*(volatile unsigned long *)0x80000000)
|
||||
#define DADI_R0 (*(volatile unsigned long *)0x80000004)
|
||||
#define DADI_L1 (*(volatile unsigned long *)0x80000008)
|
||||
#define DADI_R1 (*(volatile unsigned long *)0x8000000C)
|
||||
#define DADI_L2 (*(volatile unsigned long *)0x80000010)
|
||||
#define DADI_R2 (*(volatile unsigned long *)0x80000014)
|
||||
#define DADI_L3 (*(volatile unsigned long *)0x80000018)
|
||||
#define DADI_R3 (*(volatile unsigned long *)0x8000001c)
|
||||
|
||||
#define DADO_L0 (*(volatile unsigned long *)0x80000020)
|
||||
#define DADO_R0 (*(volatile unsigned long *)0x80000024)
|
||||
#define DADO_L1 (*(volatile unsigned long *)0x80000028)
|
||||
#define DADO_R1 (*(volatile unsigned long *)0x8000002C)
|
||||
#define DADO_L2 (*(volatile unsigned long *)0x80000030)
|
||||
#define DADO_R2 (*(volatile unsigned long *)0x80000034)
|
||||
#define DADO_L3 (*(volatile unsigned long *)0x80000038)
|
||||
#define DADO_R3 (*(volatile unsigned long *)0x8000003c)
|
||||
|
||||
#define DAMR (*(volatile unsigned long *)0x80000040)
|
||||
#define DAVC (*(volatile unsigned long *)0x80000044)
|
||||
|
||||
#define DADI_L(x) (*(volatile unsigned long *)(0x80000000 + (x) * 8))
|
||||
#define DADI_R(x) (*(volatile unsigned long *)(0x80000004 + (x) * 8))
|
||||
#define DADO_L(x) (*(volatile unsigned long *)(0x80000020 + (x) * 8))
|
||||
#define DADO_R(x) (*(volatile unsigned long *)(0x80000024 + (x) * 8))
|
||||
|
||||
/* USB 2.0 device system MMR base address */
|
||||
#define USB_BASE 0x90000b00
|
||||
|
||||
#endif
|
||||
|
|
104
firmware/export/usb-tcc7xx.h
Normal file
104
firmware/export/usb-tcc7xx.h
Normal file
|
@ -0,0 +1,104 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2008 Vitja Makarov
|
||||
*
|
||||
* 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_TCC7XX_H
|
||||
#define USB_TCC7XX_H
|
||||
|
||||
#define MMR_REG16(base, x) (*(volatile unsigned short *) ((base) + (x)))
|
||||
|
||||
/* USB PHY registers */
|
||||
#define TCC7xx_USB_PHY_CFG MMR_REG16(USB_BASE, 0xc4)
|
||||
#define TCC7xx_USB_PHY_CFG_XSEL (1<<13) /* FS/HS Transceiver enable */
|
||||
#define TCC7xx_USB_PHY_CFG_DWS (1<<6) /* Host mode */
|
||||
#define TCC7xx_USB_PHY_XO (1<<5) /* Enable XO_OUT */
|
||||
#define TCC7xx_USB_PHY_CKSEL_12 0
|
||||
#define TCC7xx_USB_PHY_CKSEL_24 1
|
||||
#define TCC7xx_USB_PHY_CKSEL_48 2
|
||||
|
||||
/* USB 2.0 device registers */
|
||||
#define TCC7xx_USB_INDEX MMR_REG16(USB_BASE, 0x00) /* Endpoint Index register */
|
||||
#define TCC7xx_USB_EPIF MMR_REG16(USB_BASE, 0x04) /* Endpoint interrupt flag register */
|
||||
#define TCC7xx_USB_EPIE MMR_REG16(USB_BASE, 0x08) /* Endpoint interrupt enable register */
|
||||
#define TCC7xx_USB_FUNC MMR_REG16(USB_BASE, 0x0c) /* Function address register */
|
||||
#define TCC7xx_USB_EP_DIR MMR_REG16(USB_BASE, 0x14) /* Endpoint direction register */
|
||||
#define TCC7xx_USB_TST MMR_REG16(USB_BASE, 0x14) /* Test registerregister */
|
||||
#define TCC7xx_USB_SYS_STAT MMR_REG16(USB_BASE, 0x1c) /* System status register */
|
||||
#define TCC7xx_USB_SYS_STAT_RESET (1<<0) /* Host forced reced */
|
||||
#define TCC7xx_USB_SYS_STAT_SUSPEND (1<<1) /* Host forced suspend */
|
||||
#define TCC7xx_USB_SYS_STAT_RESUME (1<<2) /* Host forced resume */
|
||||
#define TCC7xx_USB_SYS_STAT_HIGH (1<<4) /* High speed */
|
||||
#define TCC7xx_USB_SYS_STAT_VBON (1<<8)
|
||||
#define TCC7xx_USB_SYS_STAT_VBOF (1<<9)
|
||||
#define TCC7xx_USB_SYS_STAT_EOERR (1<<10) /* overrun error */
|
||||
#define TCC7xx_USB_SYS_STAT_DCERR (1<<11) /* Data CRC error */
|
||||
#define TCC7xx_USB_SYS_STAT_TCERR (1<<12) /* Token CRC error */
|
||||
#define TCC7xx_USB_SYS_STAT_BSERR (1<<13) /* Bit-stuff error */
|
||||
#define TCC7xx_USB_SYS_STAT_TMERR (1<<14) /* Timeout error */
|
||||
#define TCC7xx_USB_SYS_STAT_BAERR (1<<15) /* Byte align error */
|
||||
|
||||
#define TCC7xx_USB_SYS_STAT_ERRORS (TCC7xx_USB_SYS_STAT_EOERR | \
|
||||
TCC7xx_USB_SYS_STAT_DCERR | \
|
||||
TCC7xx_USB_SYS_STAT_TCERR | \
|
||||
TCC7xx_USB_SYS_STAT_BSERR | \
|
||||
TCC7xx_USB_SYS_STAT_TMERR | \
|
||||
TCC7xx_USB_SYS_STAT_BAERR)
|
||||
|
||||
#define TCC7xx_USB_SYS_CTRL MMR_REG16(USB_BASE, 0x20) /* System control register */
|
||||
#define TCC7xx_USB_SYS_CTRL_RESET (1<<0) /* Reset enable */
|
||||
#define TCC7xx_USB_SYS_CTRL_SUSPEND (1<<1) /* Suspend enable */
|
||||
#define TCC7xx_USB_SYS_CTRL_RESUME (1<<2) /* Resume enable */
|
||||
#define TCC7xx_USB_SYS_CTRL_IPS (1<<4) /* Interrupt polarity */
|
||||
#define TCC7xx_USB_SYS_CTRL_RFRE (1<<5) /* Reverse read data enable */
|
||||
#define TCC7xx_USB_SYS_CTRL_SPDEN (1<<6) /* Speed detection interrupt enable */
|
||||
#define TCC7xx_USB_SYS_CTRL_BUS16 (1<<7) /* Select bus width 8/16 */
|
||||
#define TCC7xx_USB_SYS_CTRL_EIEN (1<<8) /* Error interrupt enable */
|
||||
#define TCC7xx_USB_SYS_CTRL_RWDE (1<<9) /* Reverse write data enable */
|
||||
#define TCC7xx_USB_SYS_CTRL_VBONE (1<<10) /* VBus On enable */
|
||||
#define TCC7xx_USB_SYS_CTRL_VBOFE (1<<11) /* VBus Off enable */
|
||||
#define TCC7xx_USB_SYS_CTRL_DUAL (1<<12) /* Dual interrupt enable*/
|
||||
#define TCC7xx_USB_SYS_CTRL_DMAZ (1<<14) /* DMA total count zero int */
|
||||
|
||||
#define TCC7xx_USB_EP0_STAT MMR_REG16(USB_BASE, 0x24) /* EP0 status register */
|
||||
#define TCC7xx_USB_EP0_CTRL MMR_REG16(USB_BASE, 0x28) /* EP0 control register */
|
||||
|
||||
#define TCC7xx_USB_EP0_BUF MMR_REG16(USB_BASE, 0x60) /* EP0 buffer register */
|
||||
#define TCC7xx_USB_EP1_BUF MMR_REG16(USB_BASE, 0x64) /* EP1 buffer register */
|
||||
#define TCC7xx_USB_EP2_BUF MMR_REG16(USB_BASE, 0x68) /* EP2 buffer register */
|
||||
#define TCC7xx_USB_EP3_BUF MMR_REG16(USB_BASE, 0x6c) /* EP3 buffer register */
|
||||
|
||||
/* Indexed registers, write endpoint number to TCC7xx_USB_INDEX */
|
||||
#define TCC7xx_USB_EP_STAT MMR_REG16(USB_BASE, 0x2c) /* EP status register */
|
||||
#define TCC7xx_USB_EP_CTRL MMR_REG16(USB_BASE, 0x30) /* EP control register */
|
||||
#define TCC7xx_USB_EP_CTRL_CDP (1 << 2) /* Clear Data PID */
|
||||
#define TCC7xx_USB_EP_CTRL_FLUSH (1 << 6) /* Flush FIFO */
|
||||
#define TCC7xx_USB_EP_BRCR MMR_REG16(USB_BASE, 0x34) /* EP byte read count register */
|
||||
#define TCC7xx_USB_EP_BWCR MMR_REG16(USB_BASE, 0x38) /* EP byte write count register */
|
||||
#define TCC7xx_USB_EP_MAXP MMR_REG16(USB_BASE, 0x3c) /* EP max packet register */
|
||||
|
||||
#define TCC7xx_USB_EP_DMA_CTRL MMR_REG16(USB_BASE, 0x40) /* EP DMA control register */
|
||||
#define TCC7xx_USB_EP_DMA_TCNTR MMR_REG16(USB_BASE, 0x44) /* EP DMA transfer counter register */
|
||||
#define TCC7xx_USB_EP_DMA_FCNTR MMR_REG16(USB_BASE, 0x48) /* EP DMA fifo counter register */
|
||||
#define TCC7xx_USB_EP_DMA_TTCNTR1 MMR_REG16(USB_BASE, 0x4c) /* EP DMA total trasfer counter1 register */
|
||||
#define TCC7xx_USB_EP_DMA_TTCNTR2 MMR_REG16(USB_BASE, 0x50) /* EP DMA total trasfer counter2 register */
|
||||
#define TCC7xx_USB_EP_DMA_ADDR1 MMR_REG16(USB_BASE, 0xa0) /* EP DMA MCU addr1 register */
|
||||
#define TCC7xx_USB_EP_DMA_ADDR2 MMR_REG16(USB_BASE, 0xa4) /* EP DMA MCU addr2 register */
|
||||
#define TCC7xx_USB_EP_DMA_STAT MMR_REG16(USB_BASE, 0xc0) /* EP DMA Transfer Status register */
|
||||
#define TCC7xx_USB_DELAY_CTRL MMR_REG16(USB_BASE, 0x80) /* Delay control register */
|
||||
#endif /* USB_TCC7XX_H */
|
|
@ -48,7 +48,7 @@ static struct mutex ata_mtx SHAREDBSS_ATTR;
|
|||
|
||||
#define SECTOR_SIZE 512
|
||||
|
||||
#ifdef COWON_D2
|
||||
#if defined(COWON_D2) || defined(IAUDIO_7)
|
||||
#define SEGMENT_ID_BIGENDIAN
|
||||
#define BLOCKS_PER_SEGMENT 4
|
||||
#else
|
||||
|
|
|
@ -27,6 +27,9 @@
|
|||
#include "sound.h"
|
||||
#include "pcm.h"
|
||||
|
||||
/* Just for tests enable it to play simple tone */
|
||||
//#define PCM_TELECHIPS_TEST
|
||||
|
||||
struct dma_data
|
||||
{
|
||||
/* NOTE: The order of size and p is important if you use assembler
|
||||
|
@ -59,7 +62,9 @@ static unsigned long pcm_freq SHAREDDATA_ATTR = HW_SAMPR_DEFAULT; /* 44.1 is def
|
|||
|
||||
void pcm_postinit(void)
|
||||
{
|
||||
/*audiohw_postinit();*/
|
||||
#if defined(IAUDIO_7)
|
||||
audiohw_postinit(); /* implemented not for all codecs */
|
||||
#endif
|
||||
pcm_apply_settings();
|
||||
}
|
||||
|
||||
|
@ -73,6 +78,8 @@ const void * pcm_play_dma_get_peak_buffer(int *count)
|
|||
|
||||
void pcm_play_dma_init(void)
|
||||
{
|
||||
DAVC = 0x0; /* Digital Volume = max */
|
||||
#ifdef COWON_D2
|
||||
/* Set DAI clock divided from PLL0 (192MHz).
|
||||
The best approximation of 256*44.1kHz is 11.291MHz. */
|
||||
BCLKCTR &= ~DEV_DAI;
|
||||
|
@ -81,8 +88,15 @@ void pcm_play_dma_init(void)
|
|||
|
||||
/* Enable DAI block in Master mode, 256fs->32fs, 16bit LSB */
|
||||
DAMR = 0x3c8e80;
|
||||
DAVC = 0x0; /* Digital Volume = max */
|
||||
|
||||
#elif defined(IAUDIO_7)
|
||||
BCLKCTR &= ~DEV_DAI;
|
||||
PCLK_DAI = (0x800b << 16) | (PCLK_DAI & 0xffff);
|
||||
BCLKCTR |= DEV_DAI;
|
||||
/* Master mode, 256->64fs, 16bit LSB*/
|
||||
DAMR = 0x3cce20;
|
||||
#else
|
||||
#error "Target isn't supported"
|
||||
#endif
|
||||
/* Set DAI interrupts as FIQs */
|
||||
IRQSEL = ~(DAI_RX_IRQ_MASK | DAI_TX_IRQ_MASK);
|
||||
|
||||
|
@ -201,7 +215,47 @@ size_t pcm_get_bytes_waiting(void)
|
|||
return dma_play_data.size & ~3;
|
||||
}
|
||||
|
||||
#if 1
|
||||
#ifdef HAVE_RECORDING
|
||||
/* TODO: implement */
|
||||
void pcm_rec_dma_init(void)
|
||||
{
|
||||
}
|
||||
|
||||
void pcm_rec_dma_close(void)
|
||||
{
|
||||
}
|
||||
|
||||
void pcm_rec_dma_start(void *addr, size_t size)
|
||||
{
|
||||
(void) addr;
|
||||
(void) size;
|
||||
}
|
||||
|
||||
void pcm_rec_dma_stop(void)
|
||||
{
|
||||
}
|
||||
|
||||
void pcm_rec_lock(void)
|
||||
{
|
||||
}
|
||||
|
||||
void pcm_rec_unlock(void)
|
||||
{
|
||||
}
|
||||
|
||||
const void * pcm_rec_dma_get_peak_buffer(int *count)
|
||||
{
|
||||
*count = 0;
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void pcm_record_more(void *start, size_t size)
|
||||
{
|
||||
}
|
||||
#endif
|
||||
|
||||
#if defined(COWON_D2)
|
||||
/* TODO: hardcoded hex values differs for tcc7xx and tcc8xx */
|
||||
void fiq_handler(void) ICODE_ATTR __attribute__((naked));
|
||||
void fiq_handler(void)
|
||||
{
|
||||
|
@ -312,3 +366,69 @@ void fiq_handler(void)
|
|||
"subs pc, lr, #4 \n"); /* Return from FIQ */
|
||||
}
|
||||
#endif
|
||||
|
||||
/* TODO: required by wm8531 codec, why not to implement */
|
||||
void i2s_reset(void)
|
||||
{
|
||||
/* DAMR = 0; */
|
||||
}
|
||||
|
||||
#ifdef PCM_TELECHIPS_TEST
|
||||
#include "lcd.h"
|
||||
#include "sprintf.h"
|
||||
#include "backlight-target.h"
|
||||
|
||||
static int frame = 0;
|
||||
static void test_callback_for_more(unsigned char **start, size_t *size)
|
||||
{
|
||||
static unsigned short data[8];
|
||||
static int cntr = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 8; i ++) {
|
||||
unsigned short val;
|
||||
|
||||
if (0x100 == (cntr & 0x100))
|
||||
val = 0x0fff;
|
||||
else
|
||||
val = 0x0000;
|
||||
data[i] = val;
|
||||
cntr++;
|
||||
}
|
||||
|
||||
*start = data;
|
||||
*size = sizeof(data);
|
||||
|
||||
frame++;
|
||||
}
|
||||
|
||||
void pcm_telechips_test(void)
|
||||
{
|
||||
static char buf[100];
|
||||
unsigned char *data;
|
||||
size_t size;
|
||||
|
||||
_backlight_on();
|
||||
|
||||
audiohw_preinit();
|
||||
pcm_play_dma_init();
|
||||
pcm_postinit();
|
||||
|
||||
audiohw_mute(false);
|
||||
audiohw_set_master_vol(0x7f, 0x7f);
|
||||
|
||||
pcm_callback_for_more = test_callback_for_more;
|
||||
test_callback_for_more(&data, &size);
|
||||
pcm_play_dma_start(data, size);
|
||||
|
||||
while (1) {
|
||||
int line = 0;
|
||||
lcd_clear_display();
|
||||
lcd_puts(0, line++, __func__);
|
||||
snprintf(buf, sizeof(buf), "frame: %d", frame);
|
||||
lcd_puts(0, line++, buf);
|
||||
lcd_update();
|
||||
sleep(1);
|
||||
}
|
||||
}
|
||||
#endif
|
|
@ -104,6 +104,9 @@ unsigned short adc_read(int channel)
|
|||
|
||||
void adc_init(void)
|
||||
{
|
||||
/* Initialize ADC clocks */
|
||||
PCLKCFG6 = (PCLKCFG6 & 0xffff0000) | 4004;
|
||||
|
||||
ADCCON = (1<<4); /* Leave standby mode */
|
||||
|
||||
/* IRQ enable, auto power-down, single-mode */
|
||||
|
|
|
@ -1,21 +1,25 @@
|
|||
#include "config.h"
|
||||
|
||||
ENTRY(start)
|
||||
|
||||
OUTPUT_FORMAT(elf32-littlearm)
|
||||
OUTPUT_ARCH(arm)
|
||||
STARTUP(target/arm/tcc77x/crt0.o)
|
||||
|
||||
#define PLUGINSIZE PLUGIN_BUFFER_SIZE
|
||||
#define CODECSIZE CODEC_SIZE
|
||||
|
||||
#ifdef DEBUG
|
||||
#define STUBOFFSET 0x10000
|
||||
#else
|
||||
#define STUBOFFSET 0
|
||||
#endif
|
||||
|
||||
#include "imx31l.h"
|
||||
|
||||
#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - CODECSIZE
|
||||
#define DRAMSIZE (MEMORYSIZE * 0x100000) - PLUGINSIZE - STUBOFFSET - CODECSIZE
|
||||
|
||||
#define DRAMORIG 0x20000000
|
||||
#define IRAMORIG 0x00000000
|
||||
#define IRAMSIZE IRAM_SIZE
|
||||
#define IRAMSIZE 64K
|
||||
|
||||
|
||||
/* End of the audio buffer, where the codec buffer starts */
|
||||
#define ENDAUDIOADDR (DRAMORIG + DRAMSIZE)
|
||||
|
@ -23,100 +27,58 @@ STARTUP(target/arm/tcc77x/crt0.o)
|
|||
/* 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
|
||||
#ifdef TCCBOOT
|
||||
DRAM : ORIGIN = DRAMORIG + DRAMSIZE - 0x100000, LENGTH = 0x100000
|
||||
#else
|
||||
DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
|
||||
#endif
|
||||
IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
|
||||
}
|
||||
|
||||
SECTIONS
|
||||
{
|
||||
.text :
|
||||
{
|
||||
loadaddress = .;
|
||||
_loadaddress = .;
|
||||
. = ALIGN(0x200);
|
||||
.text : {
|
||||
loadaddress = .;
|
||||
_loadaddress = .;
|
||||
. = ALIGN(0x200);
|
||||
*(.init.text)
|
||||
*(.text)
|
||||
*(.text*)
|
||||
*(.glue_7)
|
||||
*(.glue_7t)
|
||||
. = ALIGN(0x4);
|
||||
} > DRAM
|
||||
} > DRAM
|
||||
|
||||
.rodata :
|
||||
{
|
||||
*(.rodata) /* problems without this, dunno why */
|
||||
*(.rodata*)
|
||||
*(.rodata.str1.1)
|
||||
*(.rodata.str1.4)
|
||||
. = ALIGN(0x4);
|
||||
|
||||
/* Pseudo-allocate the copies of the data sections */
|
||||
_datacopy = .;
|
||||
} > DRAM
|
||||
|
||||
/* TRICK ALERT! For RAM execution, we put the .data section at the
|
||||
same load address as the copy. Thus, we don't waste extra RAM
|
||||
when we don't actually need the copy. */
|
||||
.data : AT ( _datacopy )
|
||||
{
|
||||
_datastart = .;
|
||||
*(.data*)
|
||||
. = ALIGN(0x4);
|
||||
_dataend = .;
|
||||
} > DRAM
|
||||
|
||||
/DISCARD/ :
|
||||
{
|
||||
*(.eh_frame)
|
||||
}
|
||||
|
||||
.vectors 0x0 :
|
||||
{
|
||||
_vectorsstart = .;
|
||||
*(.vectors);
|
||||
_vectorsend = .;
|
||||
} AT> DRAM
|
||||
|
||||
_vectorscopy = LOADADDR(.vectors);
|
||||
|
||||
.iram :
|
||||
{
|
||||
_iramstart = .;
|
||||
.data : {
|
||||
*(.icode)
|
||||
*(.irodata)
|
||||
*(.idata)
|
||||
*(.data*)
|
||||
*(.rodata.*)
|
||||
*(.rodata)
|
||||
. = ALIGN(0x4);
|
||||
_iramend = .;
|
||||
} > DRAM
|
||||
|
||||
_iramcopy = LOADADDR(.iram);
|
||||
|
||||
.ibss (NOLOAD) :
|
||||
{
|
||||
_iedata = .;
|
||||
*(.ibss)
|
||||
. = ALIGN(0x4);
|
||||
_iend = .;
|
||||
_dataend = . ;
|
||||
} > DRAM
|
||||
|
||||
.stack :
|
||||
{
|
||||
*(.stack)
|
||||
stackbegin = .;
|
||||
. += 0x2000;
|
||||
stackend = .;
|
||||
} > DRAM
|
||||
|
||||
.bss :
|
||||
{
|
||||
_edata = .;
|
||||
*(.bss*)
|
||||
*(COMMON)
|
||||
. = ALIGN(0x4);
|
||||
_end = .;
|
||||
*(.stack)
|
||||
_stackbegin = .;
|
||||
stackbegin = .;
|
||||
. += 0x2000;
|
||||
_stackend = .;
|
||||
stackend = .;
|
||||
} > DRAM
|
||||
|
||||
.bss : {
|
||||
_edata = .;
|
||||
*(.bss*);
|
||||
*(.ibss);
|
||||
*(COMMON)
|
||||
_end = .;
|
||||
} > DRAM
|
||||
.audiobuf ALIGN(4) :
|
||||
{
|
||||
_audiobuffer = .;
|
||||
|
@ -128,7 +90,7 @@ SECTIONS
|
|||
audiobufend = .;
|
||||
_audiobufend = .;
|
||||
} > DRAM
|
||||
|
||||
|
||||
.codec ENDAUDIOADDR:
|
||||
{
|
||||
codecbuf = .;
|
||||
|
@ -139,6 +101,5 @@ SECTIONS
|
|||
{
|
||||
_pluginbuf = .;
|
||||
pluginbuf = .;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -14,7 +14,11 @@ STARTUP(target/arm/tcc77x/crt0.o)
|
|||
|
||||
MEMORY
|
||||
{
|
||||
#ifdef TCCBOOT
|
||||
DRAM : ORIGIN = DRAMORIG + DRAMSIZE - 0x100000, LENGTH = 0x100000
|
||||
#else
|
||||
DRAM : ORIGIN = DRAMORIG, LENGTH = DRAMSIZE
|
||||
#endif
|
||||
IRAM : ORIGIN = IRAMORIG, LENGTH = IRAMSIZE
|
||||
}
|
||||
|
||||
|
@ -34,6 +38,7 @@ SECTIONS
|
|||
*(.idata)
|
||||
*(.data*)
|
||||
*(.rodata.*)
|
||||
*(.rodata)
|
||||
. = ALIGN(0x4);
|
||||
_dataend = . ;
|
||||
} > DRAM
|
||||
|
|
|
@ -82,12 +82,15 @@ start_loc:
|
|||
|
||||
#ifdef TCCBOOT
|
||||
mov r0, #0x80000000
|
||||
#ifdef LOGIK_DAX
|
||||
#if defined(LOGIK_DAX)
|
||||
ldr r0, [r0, #0x300] /* Hold button is GPIO A, pin 0x2 */
|
||||
tst r0, #0x2
|
||||
#elif defined(SANSA_M200)
|
||||
ldr r0, [r0, #0x310] /* Hold button is GPIO B, pin 0x200 */
|
||||
tst r0, #0x200
|
||||
#elif defined(IAUDIO_7)
|
||||
ldr r0, [r0, #0x300] /* Hold button is !GPIO A, pin 0x2 */
|
||||
tst r0, #0x2
|
||||
#else
|
||||
#error No bootup key detection implemented for this target
|
||||
#endif
|
||||
|
|
|
@ -56,8 +56,11 @@ bool __dbg_hw_info(void)
|
|||
button = button_get(false);
|
||||
|
||||
button &= ~BUTTON_REPEAT;
|
||||
|
||||
#ifdef BUTTON_SELECT
|
||||
if (button == BUTTON_SELECT)
|
||||
#else
|
||||
if (button == BUTTON_STOP)
|
||||
#endif
|
||||
done=true;
|
||||
|
||||
snprintf(buf, sizeof(buf), "current tick: %08x Seconds running: %08d",
|
||||
|
|
28
firmware/target/arm/tcc77x/iaudio7/adc-target.h
Normal file
28
firmware/target/arm/tcc77x/iaudio7/adc-target.h
Normal file
|
@ -0,0 +1,28 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2007 Dave Chapman
|
||||
*
|
||||
* 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 8
|
||||
|
||||
#define ADC_BUTTONS 0
|
||||
|
||||
#endif /* _ADC_TARGET_H_ */
|
124
firmware/target/arm/tcc77x/iaudio7/ata2501.c
Normal file
124
firmware/target/arm/tcc77x/iaudio7/ata2501.c
Normal file
|
@ -0,0 +1,124 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2008 Vitja Makarov
|
||||
*
|
||||
* 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 "button.h"
|
||||
|
||||
#include "ata2501.h"
|
||||
|
||||
#define STB (1<<5)
|
||||
#define SDATA (1<<4)
|
||||
#define RESET (1<<6)
|
||||
#define SIFMD (1<<7)
|
||||
#define STB_DELAY 200
|
||||
|
||||
#define udelay _udelay
|
||||
|
||||
/* do we really need it? */
|
||||
static void _udelay(int cycles)
|
||||
{
|
||||
cycles /= 8;
|
||||
while (cycles--) {
|
||||
asm("nop;nop;");
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
TODO: sensitivity using GPIOS
|
||||
*/
|
||||
void ata2501_init(void)
|
||||
{
|
||||
GPIOD_DIR |= (RESET | STB | SIFMD | (1 << 8) | (1 << 9));
|
||||
GPIOD_DIR &= ~(SDATA);
|
||||
|
||||
GPIOD &= ~RESET;
|
||||
udelay(1000);
|
||||
|
||||
GPIOD |= RESET;
|
||||
|
||||
GPIOD &= ~STB;
|
||||
|
||||
#if 1
|
||||
GPIOD &= ~((1 << 9) | (1 << 8));
|
||||
GPIOD |= ((1 << 8) | SIFMD) | (1 << 9);
|
||||
#else
|
||||
GPIOD |= ((1 << 9) | (1 << 8));
|
||||
GPIOD &= ~(SIFMD);
|
||||
#endif
|
||||
}
|
||||
|
||||
unsigned short ata2501_read(void)
|
||||
{
|
||||
unsigned short ret = 0;
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 12; i++) {
|
||||
GPIOD |= STB;
|
||||
udelay(50);
|
||||
|
||||
ret <<= 1;
|
||||
if (GPIOD & SDATA)
|
||||
ret |= 1;
|
||||
udelay(50);
|
||||
GPIOD &= ~STB;
|
||||
udelay(100);
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
#define ATA2501_TEST
|
||||
#ifdef ATA2501_TEST
|
||||
#include "lcd.h"
|
||||
#include "sprintf.h"
|
||||
|
||||
static
|
||||
void bits(char *str, unsigned short val)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < 12; i++)
|
||||
str[i] = (val & (1 << i)) ? '1' : '0';
|
||||
str[i] = 0;
|
||||
}
|
||||
|
||||
void ata2501_test(void)
|
||||
{
|
||||
char buf[100];
|
||||
ata2501_init();
|
||||
|
||||
while (1) {
|
||||
unsigned short data;
|
||||
int i, line = 0;
|
||||
|
||||
data = ata2501_read();
|
||||
lcd_clear_display();
|
||||
lcd_puts(0, line++, "ATA2501 test");
|
||||
|
||||
bits(buf, data);
|
||||
lcd_puts(0, line++, buf);
|
||||
|
||||
lcd_update();
|
||||
udelay(2000);
|
||||
}
|
||||
}
|
||||
#endif
|
27
firmware/target/arm/tcc77x/iaudio7/ata2501.h
Normal file
27
firmware/target/arm/tcc77x/iaudio7/ata2501.h
Normal file
|
@ -0,0 +1,27 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2008 Vitja Makarov
|
||||
*
|
||||
* 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 _ATA2501_H_
|
||||
#define _ATA2501_H_
|
||||
|
||||
void ata2501_init(void);
|
||||
unsigned short ata2501_read(void);
|
||||
|
||||
#endif /* _ATA2501_H_ */
|
99
firmware/target/arm/tcc77x/iaudio7/audio-iaudio7.c
Normal file
99
firmware/target/arm/tcc77x/iaudio7/audio-iaudio7.c
Normal file
|
@ -0,0 +1,99 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2007 by Michael Sevakis
|
||||
*
|
||||
* 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 "cpu.h"
|
||||
#include "audio.h"
|
||||
#include "sound.h"
|
||||
|
||||
int audio_channels = 2;
|
||||
int audio_output_source = AUDIO_SRC_PLAYBACK;
|
||||
|
||||
void audiohw_enable_output(bool on)
|
||||
{
|
||||
(void) on;
|
||||
}
|
||||
|
||||
void audio_set_output_source(int source)
|
||||
{
|
||||
int oldmode = set_fiq_status(FIQ_DISABLED);
|
||||
|
||||
if ((unsigned)source >= AUDIO_NUM_SOURCES)
|
||||
source = AUDIO_SRC_PLAYBACK;
|
||||
|
||||
audio_output_source = source;
|
||||
set_fiq_status(oldmode);
|
||||
}
|
||||
|
||||
void audio_input_mux(int source, unsigned flags)
|
||||
{
|
||||
static int last_source = AUDIO_SRC_PLAYBACK;
|
||||
static bool last_recording = false;
|
||||
bool recording = flags & SRCF_RECORDING;
|
||||
|
||||
switch (source)
|
||||
{
|
||||
default: /* playback - no recording */
|
||||
source = AUDIO_SRC_PLAYBACK;
|
||||
case AUDIO_SRC_PLAYBACK:
|
||||
audio_channels = 2;
|
||||
if (source != last_source)
|
||||
{
|
||||
audiohw_set_monitor(false);
|
||||
/* audiohw_disable_recording();*/
|
||||
}
|
||||
break;
|
||||
|
||||
case AUDIO_SRC_MIC: /* recording only */
|
||||
GPIOD |= 0x1;
|
||||
|
||||
audio_channels = 1;
|
||||
if (source != last_source)
|
||||
{
|
||||
/*audiohw_set_monitor(false);
|
||||
audiohw_enable_recording(true); /. source mic */
|
||||
}
|
||||
break;
|
||||
|
||||
case AUDIO_SRC_FMRADIO: /* recording and playback */
|
||||
GPIOD &= ~0x1;
|
||||
|
||||
audio_channels = 2;
|
||||
|
||||
if (source == last_source && recording == last_recording)
|
||||
break;
|
||||
|
||||
last_recording = recording;
|
||||
|
||||
if (recording)
|
||||
{
|
||||
/*audiohw_set_monitor(false);
|
||||
audiohw_enable_recording(false);*/
|
||||
}
|
||||
else
|
||||
{
|
||||
/*audiohw_disable_recording(); */
|
||||
audiohw_set_monitor(true); /* line 1 analog audio path */
|
||||
}
|
||||
break;
|
||||
} /* end switch */
|
||||
|
||||
last_source = source;
|
||||
} /* audio_input_mux */
|
|
@ -7,7 +7,7 @@
|
|||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2008 by [whoever fills in these functions]
|
||||
* Copyright (C) 2008 Vitja Makarov
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -18,60 +18,29 @@
|
|||
* KIND, either express or implied.
|
||||
*
|
||||
****************************************************************************/
|
||||
#include "system.h"
|
||||
#include "kernel.h"
|
||||
#include "logf.h"
|
||||
#include "audio.h"
|
||||
#include "sound.h"
|
||||
#include "file.h"
|
||||
#ifndef BACKLIGHT_TARGET_H
|
||||
#define BACKLIGHT_TARGET_H
|
||||
|
||||
void pcm_postinit(void)
|
||||
#include <stdbool.h>
|
||||
#include "tcc77x.h"
|
||||
|
||||
void power_touch_panel(bool on);
|
||||
|
||||
static inline bool _backlight_init(void)
|
||||
{
|
||||
GPIOD_DIR |= 0x2;
|
||||
return true;
|
||||
}
|
||||
|
||||
const void * pcm_play_dma_get_peak_buffer(int *count)
|
||||
static inline void _backlight_on(void)
|
||||
{
|
||||
(void)count;
|
||||
return 0;
|
||||
GPIOD |= 0x2;
|
||||
power_touch_panel(true);
|
||||
}
|
||||
|
||||
void pcm_play_dma_init(void)
|
||||
static inline void _backlight_off(void)
|
||||
{
|
||||
GPIOD &= ~0x2;
|
||||
power_touch_panel(false);
|
||||
}
|
||||
|
||||
void pcm_apply_settings(void)
|
||||
{
|
||||
}
|
||||
|
||||
void pcm_set_frequency(unsigned int frequency)
|
||||
{
|
||||
(void)frequency;
|
||||
}
|
||||
|
||||
void pcm_play_dma_start(const void *addr, size_t size)
|
||||
{
|
||||
(void)addr;
|
||||
(void)size;
|
||||
}
|
||||
|
||||
void pcm_play_dma_stop(void)
|
||||
{
|
||||
}
|
||||
|
||||
void pcm_play_lock(void)
|
||||
{
|
||||
}
|
||||
|
||||
void pcm_play_unlock(void)
|
||||
{
|
||||
}
|
||||
|
||||
void pcm_play_dma_pause(bool pause)
|
||||
{
|
||||
(void)pause;
|
||||
}
|
||||
|
||||
size_t pcm_get_bytes_waiting(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
#endif /* BACKLIGHT_TARGET_H */
|
81
firmware/target/arm/tcc77x/iaudio7/button-iaudio7.c
Normal file
81
firmware/target/arm/tcc77x/iaudio7/button-iaudio7.c
Normal file
|
@ -0,0 +1,81 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2008 Vitja Makarov
|
||||
*
|
||||
* 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 "button.h"
|
||||
#include "adc.h"
|
||||
|
||||
#include "button-target.h"
|
||||
#include "ata2501.h"
|
||||
|
||||
void button_init_device(void)
|
||||
{
|
||||
ata2501_init();
|
||||
}
|
||||
|
||||
/*
|
||||
touchpad:
|
||||
0: stop
|
||||
1-8: between next & prev
|
||||
9: play
|
||||
10: next
|
||||
11: prev
|
||||
*/
|
||||
|
||||
int button_read_device(void)
|
||||
{
|
||||
int btn = BUTTON_NONE;
|
||||
int adc;
|
||||
int sensor;
|
||||
|
||||
if (button_hold())
|
||||
return BUTTON_NONE;
|
||||
|
||||
adc = adc_read(0);
|
||||
sensor = ata2501_read();
|
||||
|
||||
if (0 == (GPIOA & 4))
|
||||
btn |= BUTTON_POWER;
|
||||
|
||||
/* seems they can't be hold together */
|
||||
if (adc < 0x120)
|
||||
btn |= BUTTON_VOLUP;
|
||||
else if (adc < 0x270)
|
||||
btn |= BUTTON_VOLDOWN;
|
||||
else if (adc < 0x300)
|
||||
btn |= BUTTON_MENU;
|
||||
|
||||
if (sensor & (1 << 0))
|
||||
btn |= BUTTON_STOP;
|
||||
if (sensor & (1 << 9))
|
||||
btn |= BUTTON_PLAY;
|
||||
if (sensor & ((1 << 10) | 0x1c0))
|
||||
btn |= BUTTON_RIGHT;
|
||||
if (sensor & ((1 << 11) | 0xe))
|
||||
btn |= BUTTON_LEFT;
|
||||
|
||||
return btn;
|
||||
}
|
||||
|
||||
bool button_hold(void)
|
||||
{
|
||||
return !(GPIOA & 0x2);
|
||||
}
|
57
firmware/target/arm/tcc77x/iaudio7/button-target.h
Normal file
57
firmware/target/arm/tcc77x/iaudio7/button-target.h
Normal file
|
@ -0,0 +1,57 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2008 Vitja Makarov
|
||||
*
|
||||
* 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 _IAUDIO7_BUTTON_TARGET_H_
|
||||
#define _IAUDIO7_BUTTON_TARGET_H_
|
||||
|
||||
#include <stdbool.h>
|
||||
#include "config.h"
|
||||
|
||||
#define HAS_BUTTON_HOLD
|
||||
|
||||
bool button_hold(void);
|
||||
void button_init_device(void);
|
||||
int button_read_device(void);
|
||||
|
||||
/* Main unit's buttons */
|
||||
#define BUTTON_POWER 0x00000001
|
||||
#define BUTTON_VOLUP 0x00000002
|
||||
#define BUTTON_VOLDOWN 0x00000004
|
||||
#define BUTTON_MENU 0x00000008
|
||||
|
||||
#define BUTTON_LEFT 0x00000010
|
||||
#define BUTTON_RIGHT 0x00000020
|
||||
#define BUTTON_PLAY 0x00000040
|
||||
#define BUTTON_STOP 0x00000080
|
||||
|
||||
#define BUTTON_ON BUTTON_POWER
|
||||
|
||||
#define BUTTON_MAIN (BUTTON_POWER|BUTTON_VOLUP|BUTTON_VOLDOWN| \
|
||||
BUTTON_MENU|BUTTON_LEFT|BUTTON_RIGHT| \
|
||||
BUTTON_PLAY|BUTTON_STOP)
|
||||
|
||||
/* No remote */
|
||||
#define BUTTON_REMOTE 0
|
||||
|
||||
/* Software power-off */
|
||||
#define POWEROFF_BUTTON BUTTON_POWER
|
||||
#define POWEROFF_COUNT 10
|
||||
|
||||
#endif /* _IAUDIO7_BUTTON_TARGET_H_ */
|
252
firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c
Normal file
252
firmware/target/arm/tcc77x/iaudio7/lcd-iaudio7.c
Normal file
|
@ -0,0 +1,252 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2004 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.
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
/*
|
||||
Thanks Hein-Pieter van Braam for initial work.
|
||||
|
||||
Mostly based on lcd-h300.c, adapted for the iaudio 7 by Vitja Makarov
|
||||
*/
|
||||
|
||||
#include <config.h>
|
||||
|
||||
#include <kernel.h>
|
||||
#include <cpu.h>
|
||||
#include <lcd.h>
|
||||
#include <system-target.h>
|
||||
|
||||
#include "hd66789r.h"
|
||||
|
||||
static bool display_on = false; /* is the display turned on? */
|
||||
|
||||
static inline void lcd_write_reg(int reg, int data)
|
||||
{
|
||||
GPIOA &= ~0x400;
|
||||
outw(0, 0x50010000);
|
||||
outw(reg << 1, 0x50010000);
|
||||
GPIOA |= 0x400;
|
||||
|
||||
outw((data & 0xff00) >> 7, 0x50010008);
|
||||
outw((data << 24) >> 23, 0x50010008);
|
||||
}
|
||||
|
||||
static void lcd_write_cmd(int reg)
|
||||
{
|
||||
GPIOA &= ~0x400;
|
||||
outw(0, 0x50010000);
|
||||
outw(reg << 1, 0x50010000);
|
||||
GPIOA |= 0x400;
|
||||
}
|
||||
|
||||
/* Do what OF do */
|
||||
static void lcd_delay(int x)
|
||||
{
|
||||
int i;
|
||||
|
||||
x *= 0xc35;
|
||||
for (i = 0; i < x * 8; i++) {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
static void _display_on(void)
|
||||
{
|
||||
GPIOA_DIR |= 0x8000 | 0x400;
|
||||
GPIOA |= 0x8000;
|
||||
|
||||
/* power setup */
|
||||
lcd_write_reg(R_START_OSC, 0x0001);
|
||||
lcd_delay(0xf);
|
||||
lcd_write_reg(R_DISP_CONTROL1, 0x000);
|
||||
lcd_delay(0xa);
|
||||
lcd_write_reg(R_POWER_CONTROL2, 0x0002);
|
||||
lcd_write_reg(R_POWER_CONTROL3, 0x000a);
|
||||
lcd_write_reg(R_POWER_CONTROL4, 0xc5a);
|
||||
lcd_write_reg(R_POWER_CONTROL1, 0x0004);
|
||||
lcd_write_reg(R_POWER_CONTROL1, 0x0134);
|
||||
lcd_write_reg(R_POWER_CONTROL2, 0x0111);
|
||||
lcd_write_reg(R_POWER_CONTROL3, 0x001c);
|
||||
lcd_delay(0x28);
|
||||
lcd_write_reg(R_POWER_CONTROL4, 0x2c40);
|
||||
lcd_write_reg(R_POWER_CONTROL1, 0x0510);
|
||||
lcd_delay(0x3c);
|
||||
|
||||
/* lcd init 2 */
|
||||
lcd_write_reg(R_DRV_OUTPUT_CONTROL, 0x0113);
|
||||
lcd_write_reg(R_DRV_WAVEFORM_CONTROL, 0x0700);
|
||||
lcd_write_reg(R_ENTRY_MODE, 0x1038);
|
||||
lcd_write_reg(R_DISP_CONTROL2, 0x0508); // 0x3c8, TMM
|
||||
lcd_write_reg(R_DISP_CONTROL3, 0x0000);
|
||||
lcd_write_reg(R_FRAME_CYCLE_CONTROL, 0x0003);
|
||||
lcd_write_reg(R_RAM_ADDR_SET, 0x0000);
|
||||
lcd_write_reg(R_GAMMA_FINE_ADJ_POS1, 0x0406);
|
||||
lcd_write_reg(R_GAMMA_FINE_ADJ_POS2, 0x0303);
|
||||
lcd_write_reg(R_GAMMA_FINE_ADJ_POS3, 0x0000);
|
||||
lcd_write_reg(R_GAMMA_GRAD_ADJ_POS, 0x0305);
|
||||
lcd_write_reg(R_GAMMA_FINE_ADJ_NEG1, 0x0404);
|
||||
lcd_write_reg(R_GAMMA_FINE_ADJ_NEG2, 0x0000);
|
||||
lcd_write_reg(R_GAMMA_FINE_ADJ_NEG3, 0x0000);
|
||||
lcd_write_reg(R_GAMMA_GRAD_ADJ_NEG, 0x0503);
|
||||
lcd_write_reg(R_GAMMA_AMP_ADJ_RES_POS, 0x1d05);
|
||||
lcd_write_reg(R_GAMMA_AMP_AVG_ADJ_RES_NEG, 0x1d05);
|
||||
lcd_write_reg(R_VERT_SCROLL_CONTROL, 0x0000);
|
||||
lcd_write_reg(R_1ST_SCR_DRV_POS, 0x9f00);
|
||||
lcd_write_reg(R_2ND_SCR_DRV_POS, 0x9f00);
|
||||
lcd_write_reg(R_HORIZ_RAM_ADDR_POS, 0x7f00);
|
||||
lcd_write_reg(R_VERT_RAM_ADDR_POS, 0x9f00);
|
||||
|
||||
/* lcd init 3 */
|
||||
lcd_write_reg(R_POWER_CONTROL1, 0x4510);
|
||||
lcd_write_reg(R_DISP_CONTROL1, 0x0005);
|
||||
lcd_delay(0x28);
|
||||
lcd_write_reg(R_DISP_CONTROL1, 0x0025);
|
||||
lcd_write_reg(R_DISP_CONTROL1, 0x0027);
|
||||
lcd_delay(0x28);
|
||||
lcd_write_reg(R_DISP_CONTROL1, 0x0037);
|
||||
|
||||
display_on = true;
|
||||
}
|
||||
|
||||
void lcd_init_device(void)
|
||||
{
|
||||
/* Configure external memory banks */
|
||||
CSCFG1 = 0x3d500023;
|
||||
|
||||
/* may be reset */
|
||||
GPIOA |= 0x8000;
|
||||
|
||||
_display_on();
|
||||
}
|
||||
|
||||
void lcd_enable(bool on)
|
||||
{
|
||||
if (display_on == on)
|
||||
return;
|
||||
|
||||
if (on) {
|
||||
_display_on();
|
||||
// lcd_call_enable_hook();
|
||||
} else {
|
||||
/** Off sequence according to datasheet, p. 130 **/
|
||||
lcd_write_reg(R_FRAME_CYCLE_CONTROL, 0x0002); /* EQ=0, 18 clks/line */
|
||||
lcd_write_reg(R_DISP_CONTROL1, 0x0036); /* GON=1, DTE=1, REV=1, D1-0=10 */
|
||||
sleep(2);
|
||||
|
||||
lcd_write_reg(R_DISP_CONTROL1, 0x0026); /* GON=1, DTE=0, REV=1, D1-0=10 */
|
||||
sleep(2);
|
||||
|
||||
lcd_write_reg(R_DISP_CONTROL1, 0x0000); /* GON=0, DTE=0, D1-0=00 */
|
||||
|
||||
lcd_write_reg(R_POWER_CONTROL1, 0x0000); /* SAP2-0=000, AP2-0=000 */
|
||||
lcd_write_reg(R_POWER_CONTROL3, 0x0000); /* PON=0 */
|
||||
lcd_write_reg(R_POWER_CONTROL4, 0x0000); /* VCOMG=0 */
|
||||
|
||||
/* datasheet p. 131 */
|
||||
lcd_write_reg(R_POWER_CONTROL1, 0x0001); /* STB=1: standby mode */
|
||||
|
||||
display_on = false;
|
||||
}
|
||||
}
|
||||
|
||||
bool lcd_enabled(void)
|
||||
{
|
||||
return display_on;
|
||||
}
|
||||
|
||||
|
||||
#define RGB(r,g,b) ((((r)&0x3f) << 12)|(((g)&0x3f) << 6)|(((b)&0x3f)))
|
||||
|
||||
|
||||
void lcd_update(void)
|
||||
{
|
||||
lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT);
|
||||
}
|
||||
|
||||
/* todo: need tests */
|
||||
void lcd_update_rect(int sx, int sy, int width, int height)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
if (!display_on)
|
||||
return;
|
||||
|
||||
if (width <= 0 || height <= 0) /* nothing to do */
|
||||
return;
|
||||
|
||||
width += sx;
|
||||
height += sy;
|
||||
|
||||
if (width > LCD_WIDTH)
|
||||
width = LCD_WIDTH;
|
||||
if (height > LCD_HEIGHT)
|
||||
height = LCD_HEIGHT;
|
||||
|
||||
lcd_write_reg(R_ENTRY_MODE, 0x1028);
|
||||
/* set update window */
|
||||
lcd_write_reg(R_HORIZ_RAM_ADDR_POS, (LCD_HEIGHT - 1) << 8);
|
||||
lcd_write_reg(R_VERT_RAM_ADDR_POS, ((width - 1) << 8) | sx);
|
||||
lcd_write_reg(R_RAM_ADDR_SET, (sx << 8) | (LCD_HEIGHT - sy - 1));
|
||||
lcd_write_cmd(R_WRITE_DATA_2_GRAM);
|
||||
|
||||
for (y = sy; y < height; y++) {
|
||||
for (x = sx; x < width; x++) {
|
||||
fb_data c;
|
||||
unsigned long color;
|
||||
|
||||
c = lcd_framebuffer[y][x];
|
||||
color =
|
||||
((c & 0x1f) << 1) | ((c & 0x7e0) << 1) | ((c & 0xf800) <<
|
||||
2);
|
||||
|
||||
/* TODO: our color is 18-bit */
|
||||
outw((color >> 9) & 0x1ff, 0x50010008);
|
||||
outw((color) & 0x1ff, 0x50010008);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void lcd_set_contrast(int val)
|
||||
{
|
||||
(void) val;
|
||||
}
|
||||
|
||||
void lcd_set_invert_display(bool yesno)
|
||||
{
|
||||
(void) yesno;
|
||||
}
|
||||
|
||||
void lcd_set_flip(bool yesno)
|
||||
{
|
||||
(void) yesno;
|
||||
}
|
||||
|
||||
/* TODO: implement me */
|
||||
void lcd_blit_yuv(unsigned char *const src[3],
|
||||
int src_x, int src_y, int stride,
|
||||
int x, int y, int width, int height)
|
||||
{
|
||||
if (!display_on)
|
||||
return;
|
||||
|
||||
width &= ~1; /* stay on the safe side */
|
||||
height &= ~1;
|
||||
|
||||
panicf("%s", __func__);
|
||||
}
|
146
firmware/target/arm/tcc77x/iaudio7/power-iaudio7.c
Normal file
146
firmware/target/arm/tcc77x/iaudio7/power-iaudio7.c
Normal file
|
@ -0,0 +1,146 @@
|
|||
/***************************************************************************
|
||||
* __________ __ ___.
|
||||
* Open \______ \ ____ ____ | | _\_ |__ _______ ___
|
||||
* Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
|
||||
* Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
|
||||
* Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
|
||||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2008 Vitja Makarov
|
||||
*
|
||||
* 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 <stdbool.h>
|
||||
|
||||
#include "config.h"
|
||||
#include "cpu.h"
|
||||
#include "kernel.h"
|
||||
#include "system.h"
|
||||
#include "power.h"
|
||||
|
||||
#include "pcf50606.h"
|
||||
|
||||
void power_init(void)
|
||||
{
|
||||
pcf50606_write(PCF5060X_DCDC1, 0x90);
|
||||
pcf50606_write(PCF5060X_DCDC2, 0x48);
|
||||
pcf50606_write(PCF5060X_DCDC3, 0xfc);
|
||||
pcf50606_write(PCF5060X_DCDC4, 0xb1);
|
||||
|
||||
pcf50606_write(PCF5060X_IOREGC, 0xe9);
|
||||
/* 3.3V, touch-panel */
|
||||
pcf50606_write(PCF5060X_D1REGC1, 0xf8);
|
||||
pcf50606_write(PCF5060X_D2REGC1, 0xf2);
|
||||
pcf50606_write(PCF5060X_D3REGC1, 0xf5);
|
||||
|
||||
pcf50606_write(PCF5060X_LPREGC1, 0x00);
|
||||
pcf50606_write(PCF5060X_LPREGC2, 0x02);
|
||||
|
||||
pcf50606_write(PCF5060X_DCUDC1, 0xe6);
|
||||
pcf50606_write(PCF5060X_DCUDC2, 0x30);
|
||||
|
||||
pcf50606_write(PCF5060X_DCDEC1, 0xe7);
|
||||
pcf50606_write(PCF5060X_DCDEC2, 0x02);
|
||||
|
||||
pcf50606_write(PCF5060X_INT1M, 0x5b);
|
||||
pcf50606_write(PCF5060X_INT1M, 0xaf);
|
||||
pcf50606_write(PCF5060X_INT1M, 0x8f);
|
||||
|
||||
pcf50606_write(PCF5060X_OOCC1, 0x40);
|
||||
pcf50606_write(PCF5060X_OOCC2, 0x05);
|
||||
|
||||
pcf50606_write(PCF5060X_MBCC3, 0x3a);
|
||||
pcf50606_write(PCF5060X_GPOC1, 0x00);
|
||||
pcf50606_write(PCF5060X_BBCC, 0xf8);
|
||||
}
|
||||
|
||||
/* Control leds on ata2501 board */
|
||||
void power_touch_panel(bool on)
|
||||
{
|
||||
if (on)
|
||||
pcf50606_write(PCF5060X_D1REGC1, 0xf8);
|
||||
else
|
||||
pcf50606_write(PCF5060X_D1REGC1, 0x00);
|
||||
}
|
||||
|
||||
void ide_power_enable(bool on)
|
||||
{
|
||||
}
|
||||
|
||||
bool ide_powered(void)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
void power_off(void)
|
||||
{
|
||||
/* Forcibly cut power to SoC & peripherals by putting the PCF to sleep */
|
||||
pcf50606_write(PCF5060X_OOCC1, GOSTDBY | CHGWAK | EXTONWAK);
|
||||
}
|
||||
|
||||
#if CONFIG_TUNER
|
||||
#include "tuner.h"
|
||||
|
||||
/** Tuner **/
|
||||
static bool powered = false;
|
||||
|
||||
#define TUNNER_CLK (1 << 5)
|
||||
#define TUNNER_DATA (1 << 6)
|
||||
#define TUNNER_NR_W (1 << 7)
|
||||
|
||||
bool tuner_power(bool status)
|
||||
{
|
||||
bool old_status;
|
||||
lv24020lp_lock();
|
||||
|
||||
old_status = powered;
|
||||
|
||||
if (status != old_status)
|
||||
{
|
||||
if (status)
|
||||
{
|
||||
/* When power up, host should initialize the 3-wire bus
|
||||
in host read mode: */
|
||||
|
||||
/* 1. Set direction of the DATA-line to input-mode. */
|
||||
GPIOA_DIR &= ~TUNNER_DATA;
|
||||
|
||||
/* 2. Drive NR_W low */
|
||||
GPIOA &= ~TUNNER_NR_W;
|
||||
GPIOA_DIR |= TUNNER_NR_W;
|
||||
|
||||
/* 3. Drive CLOCK high */
|
||||
GPIOA |= TUNNER_CLK;
|
||||
GPIOA_DIR |= TUNNER_CLK;
|
||||
|
||||
lv24020lp_power(true);
|
||||
}
|
||||
else
|
||||
{
|
||||
lv24020lp_power(false);
|
||||
|
||||
/* set all as inputs */
|
||||
GPIOC_DIR &= ~(TUNNER_CLK | TUNNER_DATA | TUNNER_NR_W);
|
||||
}
|
||||
|
||||
powered = status;
|
||||
}
|
||||
|
||||
lv24020lp_unlock();
|
||||
return old_status;
|
||||
}
|
||||
|
||||
#endif /* CONFIG_TUNER */
|
||||
|
||||
bool charger_inserted(void)
|
||||
{
|
||||
return (GPIOA & 0x1) ? true : false;
|
||||
}
|
|
@ -26,6 +26,7 @@
|
|||
/* Externally defined interrupt handlers */
|
||||
extern void TIMER(void);
|
||||
extern void ADC(void);
|
||||
extern void USBD_IRQ(void);
|
||||
|
||||
void irq(void)
|
||||
{
|
||||
|
@ -36,14 +37,22 @@ void irq(void)
|
|||
TIMER();
|
||||
else if (irq & ADC_IRQ_MASK)
|
||||
ADC();
|
||||
#ifdef HAVE_USBSTACK
|
||||
else if (irq & USBD_IRQ_MASK)
|
||||
USBD_IRQ();
|
||||
#endif
|
||||
else
|
||||
panicf("Unhandled IRQ 0x%08X", irq);
|
||||
}
|
||||
|
||||
void fiq_handler(void) __attribute__((interrupt ("FIQ"), naked));
|
||||
|
||||
#ifdef BOOTLOADER
|
||||
void fiq_handler(void)
|
||||
{
|
||||
/* TODO */
|
||||
}
|
||||
#endif
|
||||
|
||||
void system_reboot(void)
|
||||
{
|
||||
|
@ -94,7 +103,7 @@ static void gpio_init(void)
|
|||
GPIOC = 0;
|
||||
GPIOD = 0x180;
|
||||
GPIOE = 0;
|
||||
GPIOA_DIR = 0x84b0
|
||||
GPIOA_DIR = 0x84b0;
|
||||
GPIOB_DIR = 0x80800;
|
||||
GPIOC_DIR = 0x2000000;
|
||||
GPIOD_DIR = 0x3e3;
|
||||
|
|
|
@ -7,7 +7,7 @@
|
|||
* \/ \/ \/ \/ \/
|
||||
* $Id$
|
||||
*
|
||||
* Copyright (C) 2008 by [whoever fills in these functions]
|
||||
* Copyright (C) 2008 by Vitja Makarov
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU General Public License
|
||||
|
@ -21,9 +21,15 @@
|
|||
|
||||
#include "config.h"
|
||||
#include "usb.h"
|
||||
#include "system.h"
|
||||
#include "usb-tcc7xx.h"
|
||||
|
||||
void usb_init_device(void)
|
||||
{
|
||||
/* simply switch USB off for now */
|
||||
BCLKCTR |= DEV_USBD;
|
||||
TCC7xx_USB_PHY_CFG = 0x3e4c;
|
||||
BCLKCTR &= ~DEV_USBD;
|
||||
}
|
||||
|
||||
void usb_enable(bool on)
|
||||
|
|
|
@ -34,6 +34,8 @@
|
|||
#if defined(COWON_D2)
|
||||
/* The D2's audio codec uses an I2C address of 0x34 */
|
||||
#define I2C_AUDIO_ADDRESS 0x34
|
||||
#elif defined (IAUDIO_7)
|
||||
#define I2C_AUDIO_ADDRESS 0x34
|
||||
#else
|
||||
#error wmcodec not implemented for this target!
|
||||
#endif
|
||||
|
@ -41,6 +43,9 @@
|
|||
|
||||
void audiohw_init(void)
|
||||
{
|
||||
#if defined(HAVE_WM8731) || defined(HAVE_WM8751)
|
||||
audiohw_preinit();
|
||||
#endif
|
||||
}
|
||||
|
||||
void wmcodec_write(int reg, int data)
|
||||
|
|
2
tools/configure
vendored
2
tools/configure
vendored
|
@ -1291,7 +1291,7 @@ fi
|
|||
target="-DIAUDIO_7"
|
||||
memory=16 # always
|
||||
arm946cc
|
||||
tool="$rootdir/tools/scramble -add i7"
|
||||
tool="$rootdir/tools/scramble -add=i7"
|
||||
boottool="$rootdir/tools/scramble -tcc=crc"
|
||||
bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
|
||||
bmp2rb_native="$rootdir/tools/bmp2rb -f 5"
|
||||
|
|
|
@ -279,6 +279,8 @@ int main (int argc, char** argv)
|
|||
modelnum = 26;
|
||||
else if(!strcmp(&argv[1][5], "1630")) /* Philips HDD1630 */
|
||||
modelnum = 31;
|
||||
else if (!strcmp(&argv[1][5], "i7"))
|
||||
modelnum = 32;
|
||||
else {
|
||||
fprintf(stderr, "unsupported model: %s\n", &argv[1][5]);
|
||||
return 2;
|
||||
|
|
Loading…
Reference in a new issue