summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMark Arigo <markarigo@gmail.com>2008-06-27 18:40:25 +0000
committerMark Arigo <markarigo@gmail.com>2008-06-27 18:40:25 +0000
commit22e7bf32b894acc1f9e2820e213f05a57bd4148c (patch)
treecdecc7a9f0db0b41d7ac55680c2b3b2212ab4dda
parent78337961b72b76c410075a0d5fe6c3cf1269b5e8 (diff)
downloadrockbox-22e7bf32b894acc1f9e2820e213f05a57bd4148c.tar.gz
rockbox-22e7bf32b894acc1f9e2820e213f05a57bd4148c.zip
My Devcon 2008 contribution: port for Philips GoGear HDD1630 (PP5022-based). Current status is that the bootloader works to load Rockbox, but dual boot does not work: it freezes after decrypting the OF. When Rockbox boots, it freezes somewhere between showing the logo and the main menu. And there's no driver for the touchpad. So lots of work left.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@17809 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/SOURCES2
-rw-r--r--apps/debug_menu.c3
-rwxr-xr-xapps/keymaps/keymap-hdd1630.c315
-rw-r--r--bootloader/SOURCES3
-rw-r--r--bootloader/main-pp.c4
-rw-r--r--firmware/SOURCES16
-rwxr-xr-xfirmware/export/config-hdd1630.h189
-rw-r--r--firmware/export/config.h4
-rw-r--r--firmware/export/usb.h3
-rw-r--r--firmware/target/arm/philips/hdd1630/adc-target.h39
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/backlight-hdd1630.c49
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/backlight-target.h36
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/button-hdd1630.c65
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/button-target.h53
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/lcd-hdd1630.c266
-rwxr-xr-xfirmware/target/arm/philips/hdd1630/power-hdd1630.c58
-rw-r--r--firmware/target/arm/philips/hdd1630/powermgmt-hdd1630.c62
-rw-r--r--firmware/target/arm/usb-fw-pp502x.c5
-rwxr-xr-xtools/configure26
-rw-r--r--tools/scramble.c4
20 files changed, 1198 insertions, 4 deletions
diff --git a/apps/SOURCES b/apps/SOURCES
index 1da74e1b2a..01d31210e6 100644
--- a/apps/SOURCES
+++ b/apps/SOURCES
@@ -193,4 +193,6 @@ keymaps/keymap-creativezvm.c
193keymaps/keymap-creativezv.c 193keymaps/keymap-creativezv.c
194#elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD 194#elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD
195keymaps/keymap-sa9200.c 195keymaps/keymap-sa9200.c
196#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
197keymaps/keymap-hdd1630.c
196#endif 198#endif
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index ab3075afc1..f87d41d53c 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -1013,7 +1013,8 @@ static bool dbg_spdif(void)
1013# define DEBUG_CANCEL BUTTON_LEFT 1013# define DEBUG_CANCEL BUTTON_LEFT
1014 1014
1015/* This is temporary until the SA9200 touchpad works */ 1015/* This is temporary until the SA9200 touchpad works */
1016#elif (CONFIG_KEYPAD == PHILIPS_SA9200_PAD) 1016#elif (CONFIG_KEYPAD == PHILIPS_SA9200_PAD) || \
1017 (CONFIG_KEYPAD == PHILIPS_HDD1630_PAD)
1017# define DEBUG_CANCEL BUTTON_POWER 1018# define DEBUG_CANCEL BUTTON_POWER
1018 1019
1019#endif /* key definitions */ 1020#endif /* key definitions */
diff --git a/apps/keymaps/keymap-hdd1630.c b/apps/keymaps/keymap-hdd1630.c
new file mode 100755
index 0000000000..9363eba735
--- /dev/null
+++ b/apps/keymaps/keymap-hdd1630.c
@@ -0,0 +1,315 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2008 Mark Arigo
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20/* Button Code Definitions for the toshiba gigabeat target */
21#include <stdio.h>
22#include <string.h>
23#include <stdlib.h>
24
25#include "config.h"
26#include "action.h"
27#include "button.h"
28#include "settings.h"
29
30/*
31 * The format of the list is as follows
32 * { Action Code, Button code, Prereq button code }
33 * if there's no need to check the previous button's value, use BUTTON_NONE
34 * Insert LAST_ITEM_IN_LIST at the end of each mapping
35 */
36
37/* CONTEXT_CUSTOM's used in this file...
38
39CONTEXT_CUSTOM|CONTEXT_TREE = the standard list/tree defines (without directions)
40CONTEXT_CUSTOM|CONTEXT_SETTINGS = the direction keys for the eq/col picker screens
41 i.e where up/down is inc/dec
42 CONTEXT_SETTINGS = up/down is prev/next, l/r is inc/dec
43
44*/
45
46
47static const struct button_mapping button_context_standard[] = {
48 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
49 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
50 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
51 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
52
53 { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE },
54 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
55
56 { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT,BUTTON_SELECT },
57
58 { ACTION_STD_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
59 { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
60
61 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
62 { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE },
63
64 LAST_ITEM_IN_LIST
65}; /* button_context_standard */
66
67
68static const struct button_mapping button_context_wps[] = {
69 { ACTION_WPS_PLAY, BUTTON_VIEW|BUTTON_REL, BUTTON_VIEW },
70 { ACTION_WPS_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
71
72 { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
73 { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
74
75 { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
76 { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
77 { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
78 { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
79
80 { ACTION_WPS_ABSETB_NEXTDIR, BUTTON_VIEW|BUTTON_RIGHT, BUTTON_NONE },
81 { ACTION_WPS_ABSETA_PREVDIR, BUTTON_VIEW|BUTTON_LEFT, BUTTON_NONE },
82 { ACTION_WPS_ABRESET, BUTTON_VIEW|BUTTON_SELECT, BUTTON_NONE },
83
84 { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
85 { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE },
86 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
87 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
88 { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
89 { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE },
90 { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
91 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
92
93 { ACTION_WPS_PITCHSCREEN, BUTTON_VIEW|BUTTON_UP, BUTTON_VIEW },
94 { ACTION_WPS_PITCHSCREEN, BUTTON_VIEW|BUTTON_DOWN, BUTTON_VIEW },
95
96 { ACTION_WPS_QUICKSCREEN, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU },
97 { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU },
98 { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT },
99
100 { ACTION_WPS_ID3SCREEN, BUTTON_VIEW|BUTTON_MENU, BUTTON_NONE },
101 { ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT },
102
103 LAST_ITEM_IN_LIST
104}; /* button_context_wps */
105
106static const struct button_mapping button_context_list[] = {
107 { ACTION_LISTTREE_PGUP, BUTTON_VIEW|BUTTON_UP, BUTTON_VIEW },
108 { ACTION_LISTTREE_PGUP, BUTTON_UP|BUTTON_REL, BUTTON_VIEW|BUTTON_UP },
109 { ACTION_LISTTREE_PGUP, BUTTON_VIEW|BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
110 { ACTION_LISTTREE_PGDOWN, BUTTON_VIEW|BUTTON_DOWN, BUTTON_VIEW },
111 { ACTION_LISTTREE_PGDOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_VIEW|BUTTON_DOWN },
112 { ACTION_LISTTREE_PGDOWN, BUTTON_VIEW|BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
113#ifdef HAVE_VOLUME_IN_LIST
114 { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE },
115 { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE },
116 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE },
117 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE },
118#endif
119
120 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
121}; /* button_context_list */
122
123static const struct button_mapping button_context_tree[] = {
124 { ACTION_TREE_WPS, BUTTON_VIEW|BUTTON_REL, BUTTON_VIEW },
125 { ACTION_TREE_STOP, BUTTON_POWER, BUTTON_NONE },
126 { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
127 { ACTION_TREE_STOP, BUTTON_POWER|BUTTON_REPEAT, BUTTON_NONE },
128
129 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST)
130}; /* button_context_tree */
131
132static const struct button_mapping button_context_listtree_scroll_with_combo[] = {
133 { ACTION_NONE, BUTTON_VIEW, BUTTON_NONE },
134 { ACTION_TREE_PGLEFT, BUTTON_VIEW|BUTTON_LEFT, BUTTON_VIEW },
135 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_VIEW|BUTTON_LEFT },
136 { ACTION_TREE_PGLEFT, BUTTON_VIEW|BUTTON_LEFT, BUTTON_LEFT|BUTTON_REL },
137 { ACTION_TREE_ROOT_INIT, BUTTON_VIEW|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_VIEW|BUTTON_LEFT },
138 { ACTION_TREE_PGLEFT, BUTTON_VIEW|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
139 { ACTION_TREE_PGRIGHT, BUTTON_VIEW|BUTTON_RIGHT, BUTTON_VIEW },
140 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_VIEW|BUTTON_RIGHT },
141 { ACTION_TREE_PGRIGHT, BUTTON_VIEW|BUTTON_RIGHT, BUTTON_RIGHT|BUTTON_REL },
142 { ACTION_TREE_PGRIGHT, BUTTON_VIEW|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
143 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
144};
145
146static const struct button_mapping button_context_listtree_scroll_without_combo[] = {
147 { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE },
148 { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT },
149 { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT },
150 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
151 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT },
152 { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE },
153 { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT },
154 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
155 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT },
156 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE),
157};
158
159static const struct button_mapping button_context_settings[] = {
160 { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE },
161 { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
162 { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE },
163 { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
164 { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE },
165 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
166 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE },
167 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
168 { ACTION_SETTINGS_RESET, BUTTON_VIEW, BUTTON_NONE },
169
170 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
171}; /* button_context_settings */
172
173static const struct button_mapping button_context_settings_right_is_inc[] = {
174 { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE },
175 { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
176 { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE },
177 { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
178 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE },
179 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
180 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE },
181 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
182 { ACTION_SETTINGS_RESET, BUTTON_VIEW, BUTTON_NONE },
183
184 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
185}; /* button_context_settingsgraphical */
186
187static const struct button_mapping button_context_yesno[] = {
188 { ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE },
189 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
190}; /* button_context_settings_yesno */
191
192static const struct button_mapping button_context_colorchooser[] = {
193 { ACTION_STD_OK, BUTTON_VIEW|BUTTON_REL, BUTTON_NONE },
194 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS),
195}; /* button_context_colorchooser */
196
197static const struct button_mapping button_context_eq[] = {
198 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE },
199 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS),
200}; /* button_context_eq */
201
202/** Bookmark Screen **/
203static const struct button_mapping button_context_bmark[] = {
204 { ACTION_BMS_DELETE, BUTTON_VIEW, BUTTON_NONE },
205
206 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST),
207}; /* button_context_bmark */
208
209static const struct button_mapping button_context_time[] = {
210 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE },
211 { ACTION_STD_OK, BUTTON_VIEW, BUTTON_NONE },
212 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS),
213}; /* button_context_time */
214
215static const struct button_mapping button_context_quickscreen[] = {
216 { ACTION_QS_DOWNINV, BUTTON_UP, BUTTON_NONE },
217 { ACTION_QS_DOWNINV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
218 { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE },
219 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
220 { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE },
221 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
222 { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
223 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
224 { ACTION_STD_CANCEL, BUTTON_MENU, BUTTON_NONE },
225
226 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
227}; /* button_context_quickscreen */
228
229static const struct button_mapping button_context_pitchscreen[] = {
230 { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE },
231 { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
232 { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE },
233 { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
234 { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE },
235 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE },
236 { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
237 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE },
238 { ACTION_PS_TOGGLE_MODE, BUTTON_MENU, BUTTON_NONE },
239 { ACTION_PS_RESET, BUTTON_VIEW, BUTTON_NONE },
240 { ACTION_PS_EXIT, BUTTON_POWER, BUTTON_NONE },
241
242 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD)
243}; /* button_context_pitchcreen */
244
245static const struct button_mapping button_context_keyboard[] = {
246 { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE },
247 { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
248 { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE },
249 { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
250 { ACTION_KBD_CURSOR_LEFT, BUTTON_VIEW|BUTTON_LEFT, BUTTON_NONE },
251 { ACTION_KBD_CURSOR_LEFT, BUTTON_VIEW|BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE },
252 { ACTION_KBD_CURSOR_RIGHT, BUTTON_VIEW|BUTTON_RIGHT, BUTTON_NONE },
253 { ACTION_KBD_CURSOR_RIGHT, BUTTON_VIEW|BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE },
254 { ACTION_KBD_SELECT, BUTTON_SELECT, BUTTON_NONE },
255 { ACTION_KBD_PAGE_FLIP, BUTTON_VIEW|BUTTON_MENU, BUTTON_NONE },
256 { ACTION_KBD_DONE, BUTTON_VIEW|BUTTON_REL, BUTTON_VIEW },
257 { ACTION_KBD_ABORT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER },
258 { ACTION_KBD_BACKSPACE, BUTTON_MENU, BUTTON_NONE },
259 { ACTION_KBD_BACKSPACE, BUTTON_MENU|BUTTON_REPEAT, BUTTON_NONE },
260 { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE },
261 { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE },
262 { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE },
263 { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE },
264 { ACTION_KBD_MORSE_INPUT, BUTTON_VIEW|BUTTON_POWER, BUTTON_NONE },
265 { ACTION_KBD_MORSE_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE },
266
267 LAST_ITEM_IN_LIST
268}; /* button_context_keyboard */
269
270const struct button_mapping* get_context_mapping(int context)
271{
272 switch (context)
273 {
274 case CONTEXT_STD:
275 return button_context_standard;
276 case CONTEXT_WPS:
277 return button_context_wps;
278
279 case CONTEXT_LIST:
280 return button_context_list;
281 case CONTEXT_MAINMENU:
282 case CONTEXT_TREE:
283 if (global_settings.hold_lr_for_scroll_in_list)
284 return button_context_listtree_scroll_without_combo;
285 else
286 return button_context_listtree_scroll_with_combo;
287 case CONTEXT_CUSTOM|CONTEXT_TREE:
288 return button_context_tree;
289
290 case CONTEXT_SETTINGS:
291 return button_context_settings;
292 case CONTEXT_CUSTOM|CONTEXT_SETTINGS:
293 return button_context_settings_right_is_inc;
294
295 case CONTEXT_SETTINGS_COLOURCHOOSER:
296 return button_context_colorchooser;
297 case CONTEXT_SETTINGS_EQ:
298 return button_context_eq;
299
300 case CONTEXT_SETTINGS_TIME:
301 return button_context_time;
302
303 case CONTEXT_YESNOSCREEN:
304 return button_context_yesno;
305 case CONTEXT_BOOKMARKSCREEN:
306 return button_context_bmark;
307 case CONTEXT_QUICKSCREEN:
308 return button_context_quickscreen;
309 case CONTEXT_PITCHSCREEN:
310 return button_context_pitchscreen;
311 case CONTEXT_KEYBOARD:
312 return button_context_keyboard;
313 }
314 return button_context_standard;
315}
diff --git a/bootloader/SOURCES b/bootloader/SOURCES
index c38b8ade1f..37011dd700 100644
--- a/bootloader/SOURCES
+++ b/bootloader/SOURCES
@@ -9,7 +9,8 @@ gigabeat-s.c
9../firmware/target/arm/imx31/gigabeat-s/mmu-imx31.c 9../firmware/target/arm/imx31/gigabeat-s/mmu-imx31.c
10#elif defined(IRIVER_H10) || defined(IRIVER_H10_5GB) || \ 10#elif defined(IRIVER_H10) || defined(IRIVER_H10_5GB) || \
11 defined(SANSA_E200) || defined(SANSA_C200) || \ 11 defined(SANSA_E200) || defined(SANSA_C200) || \
12 defined(MROBE_100) || defined(PHILIPS_SA9200) 12 defined(MROBE_100) || defined(PHILIPS_SA9200) || \
13 defined(PHILIPS_HDD1630)
13#ifdef E200R_INSTALLER 14#ifdef E200R_INSTALLER
14main-e200r-installer.c 15main-e200r-installer.c
15#else 16#else
diff --git a/bootloader/main-pp.c b/bootloader/main-pp.c
index 076900555e..9d69ed4932 100644
--- a/bootloader/main-pp.c
+++ b/bootloader/main-pp.c
@@ -61,6 +61,10 @@ extern int show_logo(void);
61 61
62#elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD 62#elif CONFIG_KEYPAD == PHILIPS_SA9200_PAD
63#define BOOTLOADER_BOOT_OF BUTTON_VOL_UP 63#define BOOTLOADER_BOOT_OF BUTTON_VOL_UP
64
65#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
66#define BOOTLOADER_BOOT_OF BUTTON_MENU
67
64#endif 68#endif
65 69
66/* Maximum allowed firmware image size. 10MB is more than enough */ 70/* Maximum allowed firmware image size. 10MB is more than enough */
diff --git a/firmware/SOURCES b/firmware/SOURCES
index 2e2559477f..4dca1c1563 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -481,6 +481,22 @@ target/arm/i2s-pp.c
481#endif /* SIMULATOR */ 481#endif /* SIMULATOR */
482#endif /* PHILIPS_SA9200 */ 482#endif /* PHILIPS_SA9200 */
483 483
484#ifdef PHILIPS_HDD1630
485#ifndef SIMULATOR
486target/arm/ata-as-arm.S
487target/arm/ata-pp5020.c
488target/arm/wmcodec-pp.c
489target/arm/i2s-pp.c
490target/arm/adc-pp5020.c
491target/arm/philips/hdd1630/backlight-hdd1630.c
492target/arm/philips/hdd1630/button-hdd1630.c
493target/arm/philips/hdd1630/lcd-hdd1630.c
494target/arm/philips/hdd1630/power-hdd1630.c
495target/arm/philips/hdd1630/powermgmt-hdd1630.c
496target/arm/usb-fw-pp502x.c
497#endif /* SIMULATOR */
498#endif /* PHILIPS_HDD1630 */
499
484#ifdef IAUDIO_X5 500#ifdef IAUDIO_X5
485#ifndef SIMULATOR 501#ifndef SIMULATOR
486target/coldfire/ata-as-coldfire.S 502target/coldfire/ata-as-coldfire.S
diff --git a/firmware/export/config-hdd1630.h b/firmware/export/config-hdd1630.h
new file mode 100755
index 0000000000..19ca190a57
--- /dev/null
+++ b/firmware/export/config-hdd1630.h
@@ -0,0 +1,189 @@
1/*
2 * This config file is for the iriver H10 20Gb
3 */
4
5#define TARGET_TREE /* this target is using the target tree system */
6
7/* For Rolo and boot loader */
8#define MODEL_NUMBER 31
9#define MODEL_NAME "Philips GoGear HDD1630"
10
11/* define this if you use an ATA controller */
12#define HAVE_ATA
13
14/* define this if you have recording possibility */
15/* #define HAVE_RECORDING */
16
17/* Define bitmask of input sources - recordable bitmask can be defined
18 explicitly if different */
19#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN | SRC_CAP_FMRADIO)
20
21/* define the bitmask of hardware sample rates */
22#define HW_SAMPR_CAPS (SAMPR_CAP_44)
23
24/* define the bitmask of recording sample rates */
25#define REC_SAMPR_CAPS (SAMPR_CAP_44)
26
27/* define this if you have a bitmap LCD display */
28#define HAVE_LCD_BITMAP
29
30/* define this if you have a colour LCD */
31#define HAVE_LCD_COLOR
32
33/* define this if you want album art for this target */
34#define HAVE_ALBUMART
35
36/* define this if you have access to the quickscreen */
37#define HAVE_QUICKSCREEN
38
39/* define this if you have access to the pitchscreen */
40#define HAVE_PITCHSCREEN
41
42/* define this if you would like tagcache to build on this target */
43#define HAVE_TAGCACHE
44
45/* LCD dimensions */
46#define LCD_WIDTH 128
47#define LCD_HEIGHT 128
48#define LCD_DEPTH 16 /* 65536 colours */
49#define LCD_PIXELFORMAT RGB565SWAPPED /* rgb565 byte-swapped */
50
51#ifndef BOOTLOADER
52/* Define this if your LCD can be enabled/disabled */
53/* #define HAVE_LCD_ENABLE */
54
55/* Define this if your LCD can be put to sleep. HAVE_LCD_ENABLE
56 * should be defined as well.
57 * We can currently put the lcd to sleep but it won't wake up properly */
58/* #define HAVE_LCD_SLEEP */
59/* #define HAVE_LCD_SLEEP_SETTING */
60#endif
61
62/* define this if you can flip your LCD */
63/* #define HAVE_LCD_FLIP */
64
65/* define this if you can invert the colours on your LCD */
66/* #define HAVE_LCD_INVERT */
67
68/* #define IRAM_LCDFRAMEBUFFER IDATA_ATTR *//* put the lcd frame buffer in IRAM */
69
70#define CONFIG_KEYPAD PHILIPS_HDD1630_PAD
71
72/* Define this if you do software codec */
73#define CONFIG_CODEC SWCODEC
74
75/* define this if you have a real-time clock */
76#ifndef BOOTLOADER
77/* #define CONFIG_RTC RTC_E8564 */
78/* #define HAVE_RTC_ALARM */
79#endif
80
81/* Define this if you have a software controlled poweroff */
82/* #define HAVE_SW_POWEROFF */
83
84/* The number of bytes reserved for loadable codecs */
85#define CODEC_SIZE 0x80000
86
87/* The number of bytes reserved for loadable plugins */
88#define PLUGIN_BUFFER_SIZE 0x80000
89
90/* Define this if you have the WM8731 audio codec */
91#define HAVE_WM8731
92
93/* WM8731 has no tone controls, so we use the software ones */
94#define HAVE_SW_TONE_CONTROLS
95
96#define AB_REPEAT_ENABLE 1
97
98/* FM Tuner */
99/* #define CONFIG_TUNER TEA5767 */
100/* #define CONFIG_TUNER_XTAL 32768 */
101
102/* Define this for LCD backlight available */
103#define HAVE_BACKLIGHT
104/* #define HAVE_BACKLIGHT_BRIGHTNESS */
105
106/* Main LCD backlight brightness range and defaults */
107#define MIN_BRIGHTNESS_SETTING 1
108#define MAX_BRIGHTNESS_SETTING 12
109#define DEFAULT_BRIGHTNESS_SETTING 6
110
111/* define this if you have a light associated with the buttons */
112/* #define HAVE_BUTTON_LIGHT */
113
114#define AB_REPEAT_ENABLE 1
115
116#define BATTERY_CAPACITY_DEFAULT 1550 /* default battery capacity */
117#define BATTERY_CAPACITY_MIN 1500 /* min. capacity selectable */
118#define BATTERY_CAPACITY_MAX 3200 /* max. capacity selectable */
119#define BATTERY_CAPACITY_INC 50 /* capacity increment */
120#define BATTERY_TYPES_COUNT 1 /* only one type */
121
122/* Hardware controlled charging */
123/* #define CONFIG_CHARGING CHARGING_SIMPLE */
124
125/* define this if the unit can be powered or charged via USB */
126#define HAVE_USB_POWER
127
128#ifndef SIMULATOR
129
130/* Define this if you have a PortalPlayer PP5020 */
131#define CONFIG_CPU PP5022
132
133/* Define this if you want to use the PP5020 i2c interface */
134#define CONFIG_I2C I2C_PP5020
135
136/* define this if the hardware can be powered off while charging */
137#define HAVE_POWEROFF_WHILE_CHARGING
138
139/* The start address index for ROM builds */
140#define ROM_START 0x00000000
141
142/* The size of the flash ROM */
143#define FLASH_SIZE 0x100000
144
145/* Define this to the CPU frequency */
146#define CPU_FREQ 75000000
147
148/* Type of LCD */
149#define CONFIG_LCD LCD_HDD1630
150
151/* Define this if your LCD can set contrast */
152#define HAVE_LCD_CONTRAST
153
154#define MIN_CONTRAST_SETTING 0
155#define MAX_CONTRAST_SETTING 30
156#define DEFAULT_CONTRAST_SETTING 14 /* Match boot contrast */
157
158/* We're able to shut off power to the HDD */
159/* #define HAVE_ATA_POWER_OFF */
160
161/* Offset ( in the firmware file's header ) to the file CRC and data. These are
162 only used when loading the old format rockbox.e200 file */
163#define FIRMWARE_OFFSET_FILE_CRC 0x0
164#define FIRMWARE_OFFSET_FILE_DATA 0x8
165
166/* #define USB_IPODSTYLE */
167
168/* USB On-the-go */
169#define CONFIG_USBOTG USBOTG_ARC
170
171/* enable these for the experimental usb stack */
172#define HAVE_USBSTACK
173#define USB_VENDOR_ID 0x0471
174#define USB_PRODUCT_ID 0x014C
175
176/* Virtual LED (icon) */
177#define CONFIG_LED LED_VIRTUAL
178
179/* Define this if you have adjustable CPU frequency */
180#define HAVE_ADJUSTABLE_CPU_FREQ
181
182#define MI4_FORMAT
183#define BOOTFILE_EXT "mi4"
184#define BOOTFILE "rockbox." BOOTFILE_EXT
185#define BOOTDIR "/.rockbox"
186
187#define ICODE_ATTR_TREMOR_NOT_MDCT
188
189#endif
diff --git a/firmware/export/config.h b/firmware/export/config.h
index 34d0bf27c6..1a6e5d6894 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -85,6 +85,7 @@
85#define CREATIVEZV_PAD 26 85#define CREATIVEZV_PAD 26
86#define PHILIPS_SA9200_PAD 27 86#define PHILIPS_SA9200_PAD 27
87#define SANSA_C100_PAD 28 87#define SANSA_C100_PAD 28
88#define PHILIPS_HDD1630_PAD 29
88 89
89/* CONFIG_REMOTE_KEYPAD */ 90/* CONFIG_REMOTE_KEYPAD */
90#define H100_REMOTE 1 91#define H100_REMOTE 1
@@ -125,6 +126,7 @@
125#define LCD_COWOND2 24 /* as used by Cowon D2 - LTV250QV, TCC7801 driver */ 126#define LCD_COWOND2 24 /* as used by Cowon D2 - LTV250QV, TCC7801 driver */
126#define LCD_SA9200 25 /* as used by the Philips SA9200 */ 127#define LCD_SA9200 25 /* as used by the Philips SA9200 */
127#define LCD_S6B33B2 26 /* as used by the Sansa c100 */ 128#define LCD_S6B33B2 26 /* as used by the Sansa c100 */
129#define LCD_HDD1630 27 /* as used by the Philips HDD1630 */
128 130
129/* LCD_PIXELFORMAT */ 131/* LCD_PIXELFORMAT */
130#define HORIZONTAL_PACKING 1 132#define HORIZONTAL_PACKING 1
@@ -265,6 +267,8 @@
265#include "config-creativezv.h" 267#include "config-creativezv.h"
266#elif defined(PHILIPS_SA9200) 268#elif defined(PHILIPS_SA9200)
267#include "config-sa9200.h" 269#include "config-sa9200.h"
270#elif defined(PHILIPS_HDD1630)
271#include "config-hdd1630.h"
268#elif defined(SANSA_C100) 272#elif defined(SANSA_C100)
269#include "config-c100.h" 273#include "config-c100.h"
270#else 274#else
diff --git a/firmware/export/usb.h b/firmware/export/usb.h
index 0590f702c5..05ea84148a 100644
--- a/firmware/export/usb.h
+++ b/firmware/export/usb.h
@@ -64,6 +64,9 @@ enum {
64 (CONFIG_KEYPAD == PHILIPS_SA9200_PAD) 64 (CONFIG_KEYPAD == PHILIPS_SA9200_PAD)
65#define USBPOWER_BUTTON BUTTON_SELECT 65#define USBPOWER_BUTTON BUTTON_SELECT
66#define USBPOWER_BTN_IGNORE BUTTON_POWER 66#define USBPOWER_BTN_IGNORE BUTTON_POWER
67#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
68#define USBPOWER_BUTTON BUTTON_PLAYLIST
69#define USBPOWER_BTN_IGNORE BUTTON_POWER
67#endif 70#endif
68#endif /* HAVE_USB_POWER */ 71#endif /* HAVE_USB_POWER */
69 72
diff --git a/firmware/target/arm/philips/hdd1630/adc-target.h b/firmware/target/arm/philips/hdd1630/adc-target.h
new file mode 100644
index 0000000000..95b911783b
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/adc-target.h
@@ -0,0 +1,39 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2006 by Barry Wardell
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#ifndef _ADC_TARGET_H_
20#define _ADC_TARGET_H_
21
22#define ADC_ADDR (*(volatile unsigned long*)(0x7000ad00))
23#define ADC_STATUS (*(volatile unsigned long*)(0x7000ad04))
24#define ADC_DATA_1 (*(volatile unsigned long*)(0x7000ad20))
25#define ADC_DATA_2 (*(volatile unsigned long*)(0x7000ad24))
26#define ADC_INIT (*(volatile unsigned long*)(0x7000ad2c))
27
28#define NUM_ADC_CHANNELS 4
29
30#define ADC_BATTERY 0
31#define ADC_UNKNOWN_1 1
32#define ADC_UNKNOWN_2 2
33#define ADC_UNKNOWN_3 3
34#define ADC_UNREG_POWER ADC_BATTERY /* For compatibility */
35
36/* Force a scan now */
37unsigned short adc_scan(int channel);
38
39#endif
diff --git a/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c b/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c
new file mode 100755
index 0000000000..22d31976aa
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/backlight-hdd1630.c
@@ -0,0 +1,49 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2008 by Mark Arigo
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#include "config.h"
20#include "backlight-target.h"
21#include "system.h"
22#include "lcd.h"
23#include "backlight.h"
24
25#ifdef HAVE_BACKLIGHT_BRIGHTNESS
26static unsigned short backlight_brightness = DEFAULT_BRIGHTNESS_SETTING;
27
28void _backlight_set_brightness(int brightness)
29{
30}
31#endif
32
33void _backlight_on(void)
34{
35}
36
37void _backlight_off(void)
38{
39}
40
41#ifdef HAVE_BUTTON_LIGHT
42void _buttonlight_on(void)
43{
44}
45
46void _buttonlight_off(void)
47{
48}
49#endif
diff --git a/firmware/target/arm/philips/hdd1630/backlight-target.h b/firmware/target/arm/philips/hdd1630/backlight-target.h
new file mode 100755
index 0000000000..3cfd085761
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/backlight-target.h
@@ -0,0 +1,36 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2008 by Mark Arigo
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#ifndef BACKLIGHT_TARGET_H
20#define BACKLIGHT_TARGET_H
21
22#define _backlight_init() true
23void _backlight_on(void);
24void _backlight_off(void);
25int __backlight_is_on(void);
26
27#ifdef HAVE_BACKLIGHT_BRIGHTNESS
28void _backlight_set_brightness(int brightness);
29#endif
30
31#ifdef HAVE_BUTTON_LIGHT
32void _buttonlight_on(void);
33void _buttonlight_off(void);
34#endif
35
36#endif
diff --git a/firmware/target/arm/philips/hdd1630/button-hdd1630.c b/firmware/target/arm/philips/hdd1630/button-hdd1630.c
new file mode 100755
index 0000000000..ac478065bc
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/button-hdd1630.c
@@ -0,0 +1,65 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2008 by Mark Arigo
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "system.h"
21#include "button.h"
22#include "backlight.h"
23
24void button_init_device(void)
25{
26 /* TODO...for now, hardware initialisation is done by the bootloader */
27}
28
29bool button_hold(void)
30{
31 return !(GPIOJ_INPUT_VAL & 0x8);
32}
33
34/*
35 * Get button pressed from hardware
36 */
37int button_read_device(void)
38{
39 int btn = BUTTON_NONE;
40 static bool hold_button = false;
41 bool hold_button_old;
42
43 /* Hold */
44 hold_button_old = hold_button;
45 hold_button = button_hold();
46
47 /* device buttons */
48 if (!hold_button)
49 {
50 if (!(GPIOA_INPUT_VAL & 0x01)) btn |= BUTTON_MENU;
51 if (!(GPIOA_INPUT_VAL & 0x02)) btn |= BUTTON_VOL_UP;
52 if (!(GPIOA_INPUT_VAL & 0x04)) btn |= BUTTON_VOL_DOWN;
53 if (!(GPIOA_INPUT_VAL & 0x08)) btn |= BUTTON_VIEW;
54
55 if (!(GPIOD_INPUT_VAL & 0x20)) btn |= BUTTON_PLAYLIST;
56 if (!(GPIOD_INPUT_VAL & 0x40)) btn |= BUTTON_POWER;
57 }
58
59 return btn;
60}
61
62bool headphones_inserted(void)
63{
64 return true;
65}
diff --git a/firmware/target/arm/philips/hdd1630/button-target.h b/firmware/target/arm/philips/hdd1630/button-target.h
new file mode 100755
index 0000000000..92c584463f
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/button-target.h
@@ -0,0 +1,53 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2008 by Mark Arigo
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#ifndef _BUTTON_TARGET_H_
21#define _BUTTON_TARGET_H_
22
23#include <stdbool.h>
24#include "config.h"
25
26#define HAS_BUTTON_HOLD
27
28bool button_hold(void);
29void button_init_device(void);
30int button_read_device(void);
31
32/* Main unit's buttons */
33#define BUTTON_POWER 0x00000001
34#define BUTTON_PLAYLIST 0x00000002
35#define BUTTON_MENU 0x00000004
36#define BUTTON_VIEW 0x00000008
37#define BUTTON_VOL_UP 0x00000010
38#define BUTTON_VOL_DOWN 0x00000020
39#define BUTTON_SELECT 0x00000040
40#define BUTTON_LEFT 0x00000080
41#define BUTTON_RIGHT 0x00000100
42#define BUTTON_UP 0x00000200
43#define BUTTON_DOWN 0x00000400
44
45#define BUTTON_MAIN 0x00000fff
46
47/* No Remote control */
48#define BUTTON_REMOTE 0
49
50#define POWEROFF_BUTTON BUTTON_POWER
51#define POWEROFF_COUNT 10
52
53#endif /* _BUTTON_TARGET_H_ */
diff --git a/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c b/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c
new file mode 100755
index 0000000000..5e6d3ace42
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/lcd-hdd1630.c
@@ -0,0 +1,266 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2008 by Mark Arigo
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19#include "config.h"
20#include "cpu.h"
21#include "lcd.h"
22#include "kernel.h"
23#include "system.h"
24
25/* Display status */
26static unsigned lcd_yuv_options SHAREDBSS_ATTR = 0;
27
28/* wait for LCD */
29static inline void lcd_wait_write(void)
30{
31 int i = 0;
32 while (LCD2_PORT & LCD2_BUSY_MASK)
33 {
34 if (i < 2000)
35 i++;
36 else
37 LCD2_PORT &= ~LCD2_BUSY_MASK;
38 }
39}
40
41/* send LCD data */
42static void lcd_send_data(unsigned data)
43{
44 lcd_wait_write();
45 LCD2_PORT = LCD2_DATA_MASK | (data & 0xff);
46}
47
48/* send LCD command */
49static void lcd_send_cmd(unsigned cmd)
50{
51 lcd_wait_write();
52 LCD2_PORT = LCD2_CMD_MASK | (cmd & 0xff);
53 lcd_wait_write();
54}
55
56static inline void lcd_send_pixel(unsigned pixel)
57{
58 lcd_send_data(pixel >> 8);
59 lcd_send_data(pixel);
60}
61
62void lcd_init_device(void)
63{
64#if 0
65 /* this sequence from the OF bootloader */
66
67 DEV_EN2 |= 0x2000;
68 outl(inl(0x70000014) & ~0xf000000, 0x70000014);
69 outl(inl(0x70000014) | 0xa000000, 0x70000014);
70 DEV_INIT1 &= 0xc000;
71 DEV_INIT1 |= 0x8000;
72 MLCD_SCLK_DIV &= ~0x800;
73 CLCD_CLOCK_SRC |= 0xc0000000;
74 DEV_INIT2 &= ~0x400;
75 outl(inl(0x7000002c) | ((1<<4)<<24), 0x7000002c);
76 DEV_INIT2 &= ~((1<<4)<<24);
77 udelay(10000);
78
79 DEV_INIT2 |= ((1<<4)<<24);
80 outl(0x220, 0x70008a00);
81 outl(0x1f00, 0x70008a04);
82 LCD2_BLOCK_CTRL = 0x10008080;
83 LCD2_BLOCK_CONFIG = 0xF00000;
84
85 GPIOJ_ENABLE |= 0x4;
86 GPIOJ_OUTPUT_VAL |= 0x4;
87 GPIOJ_OUTPUT_EN |= 0x4;
88
89 lcd_send_cmd(0x1);
90 udelay(10000);
91
92 lcd_send_cmd(0x25);
93 lcd_send_data(0x3f);
94
95 lcd_send_cmd(0x11);
96 udelay(120000);
97
98 lcd_send_cmd(0x20);
99 lcd_send_cmd(0x38);
100 lcd_send_cmd(0x13);
101
102 lcd_send_cmd(0xb4);
103 lcd_send_data(0x2);
104 lcd_send_data(0x6);
105 lcd_send_data(0x8);
106 lcd_send_data(0xd);
107
108 lcd_send_cmd(0xb5);
109 lcd_send_data(0x2);
110 lcd_send_data(0x6);
111 lcd_send_data(0x8);
112 lcd_send_data(0xd);
113
114 lcd_send_cmd(0xb6);
115 lcd_send_data(0x19);
116 lcd_send_data(0x23);
117 lcd_send_data(0x2d);
118
119 lcd_send_cmd(0xb7);
120 lcd_send_data(0x5);
121
122 lcd_send_cmd(0xba);
123 lcd_send_data(0x7);
124 lcd_send_data(0x18);
125
126 lcd_send_cmd(0x36);
127 lcd_send_data(0);
128
129 lcd_send_cmd(0x3a);
130 lcd_send_data(0x5);
131
132 lcd_send_cmd(0x2d);
133 lcd_send_data(0x1);
134 lcd_send_data(0x2);
135 lcd_send_data(0x3);
136 lcd_send_data(0x4);
137 lcd_send_data(0x5);
138 lcd_send_data(0x6);
139 lcd_send_data(0x7);
140 lcd_send_data(0x8);
141 lcd_send_data(0x9);
142 lcd_send_data(0xa);
143 lcd_send_data(0xb);
144 lcd_send_data(0xc);
145 lcd_send_data(0xd);
146 lcd_send_data(0xe);
147 lcd_send_data(0xf);
148 lcd_send_data(0x10);
149 lcd_send_data(0x11);
150 lcd_send_data(0x12);
151 lcd_send_data(0x13);
152 lcd_send_data(0x14);
153 lcd_send_data(0x15);
154 lcd_send_data(0x16);
155 lcd_send_data(0x17);
156 lcd_send_data(0x18);
157 lcd_send_data(0x19);
158 lcd_send_data(0x1a);
159 lcd_send_data(0x1b);
160 lcd_send_data(0x1c);
161 lcd_send_data(0x1d);
162 lcd_send_data(0x1e);
163 lcd_send_data(0x1f);
164 lcd_send_data(0x20);
165 lcd_send_data(0x21);
166 lcd_send_data(0x22);
167 lcd_send_data(0x23);
168 lcd_send_data(0x24);
169 lcd_send_data(0x25);
170 lcd_send_data(0x26);
171 lcd_send_data(0x27);
172 lcd_send_data(0x28);
173 lcd_send_data(0x29);
174 lcd_send_data(0x2a);
175 lcd_send_data(0x2b);
176 lcd_send_data(0x2c);
177 lcd_send_data(0x2d);
178 lcd_send_data(0x2e);
179 lcd_send_data(0x2f);
180 lcd_send_data(0x30);
181
182 lcd_send_cmd(0x29);
183#endif
184}
185
186/*** hardware configuration ***/
187int lcd_default_contrast(void)
188{
189 return DEFAULT_CONTRAST_SETTING;
190}
191
192void lcd_set_contrast(int val)
193{
194 (void)val;
195}
196
197void lcd_set_invert_display(bool yesno)
198{
199 (void)yesno;
200}
201
202/* turn the display upside down (call lcd_update() afterwards) */
203void lcd_set_flip(bool yesno)
204{
205 (void)yesno;
206}
207
208void lcd_yuv_set_options(unsigned options)
209{
210 lcd_yuv_options = options;
211}
212
213/* Performance function to blit a YUV bitmap directly to the LCD */
214void lcd_blit_yuv(unsigned char * const src[3],
215 int src_x, int src_y, int stride,
216 int x, int y, int width, int height)
217{
218 (void)src;
219 (void)src_x;
220 (void)src_y;
221 (void)stride;
222 (void)x;
223 (void)y;
224 (void)width;
225 (void)height;
226}
227
228/* Update the display.
229 This must be called after all other LCD functions that change the display. */
230void lcd_update(void)
231{
232 lcd_update_rect(0, 0, LCD_WIDTH, LCD_HEIGHT);
233}
234
235/* Update a fraction of the display. */
236void lcd_update_rect(int x, int y, int width, int height)
237{
238 const fb_data *addr;
239
240 if (x + width >= LCD_WIDTH)
241 width = LCD_WIDTH - x;
242 if (y + height >= LCD_HEIGHT)
243 height = LCD_HEIGHT - y;
244
245 if ((width <= 0) || (height <= 0))
246 return; /* Nothing left to do. */
247
248 addr = &lcd_framebuffer[y][x];
249
250 lcd_send_cmd(0x2a);
251 lcd_send_data(x);
252 lcd_send_data(x + width - 1);
253
254 lcd_send_cmd(0x2b);
255 lcd_send_data(y);
256 lcd_send_data(y + height - 1);
257
258 lcd_send_cmd(0x2c);
259 do {
260 int w = width;
261 do {
262 lcd_send_pixel(*addr++);
263 } while (--w > 0);
264 addr += LCD_WIDTH - width;
265 } while (--height > 0);
266}
diff --git a/firmware/target/arm/philips/hdd1630/power-hdd1630.c b/firmware/target/arm/philips/hdd1630/power-hdd1630.c
new file mode 100755
index 0000000000..6d3686ff4a
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/power-hdd1630.c
@@ -0,0 +1,58 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2008 by Mark Arigo
11 *
12 * All files in this archive are subject to the GNU General Public License.
13 * See the file COPYING in the source tree root for full license agreement.
14 *
15 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
16 * KIND, either express or implied.
17 *
18 ****************************************************************************/
19
20#include "config.h"
21#include "cpu.h"
22#include <stdbool.h>
23#include "adc.h"
24#include "kernel.h"
25#include "system.h"
26#include "power.h"
27#include "logf.h"
28#include "usb.h"
29
30#if CONFIG_CHARGING == CHARGING_CONTROL
31bool charger_enabled;
32#endif
33
34void power_init(void)
35{
36}
37
38bool charger_inserted(void)
39{
40 return false ;
41}
42
43void ide_power_enable(bool on)
44{
45 (void)on;
46 /* We do nothing */
47}
48
49
50bool ide_powered(void)
51{
52 /* pretend we are always powered - we don't turn it off */
53 return true;
54}
55
56void power_off(void)
57{
58}
diff --git a/firmware/target/arm/philips/hdd1630/powermgmt-hdd1630.c b/firmware/target/arm/philips/hdd1630/powermgmt-hdd1630.c
new file mode 100644
index 0000000000..71781182fa
--- /dev/null
+++ b/firmware/target/arm/philips/hdd1630/powermgmt-hdd1630.c
@@ -0,0 +1,62 @@
1/***************************************************************************
2 * __________ __ ___.
3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___
4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ /
5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < <
6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \
7 * \/ \/ \/ \/ \/
8 * $Id$
9 *
10 * Copyright (C) 2002 by Heikki Hannikainen, Uwe Freese
11 * Revisions copyright (C) 2005 by Gerald Van Baren
12 *
13 * All files in this archive are subject to the GNU General Public License.
14 * See the file COPYING in the source tree root for full license agreement.
15 *
16 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
17 * KIND, either express or implied.
18 *
19 ****************************************************************************/
20
21#include "config.h"
22#include "adc.h"
23#include "powermgmt.h"
24
25const unsigned short battery_level_dangerous[BATTERY_TYPES_COUNT] =
26{
27 3450
28};
29
30const unsigned short battery_level_shutoff[BATTERY_TYPES_COUNT] =
31{
32 3400
33};
34
35/* voltages (millivolt) of 0%, 10%, ... 100% when charging disabled */
36const unsigned short percent_to_volt_discharge[BATTERY_TYPES_COUNT][11] =
37{
38 { 3480, 3550, 3590, 3610, 3630, 3650, 3700, 3760, 3800, 3910, 3990 },
39};
40
41#if CONFIG_CHARGING
42/* voltages (millivolt) of 0%, 10%, ... 100% when charging enabled */
43const unsigned short percent_to_volt_charge[11] =
44{
45 3480, 3550, 3590, 3610, 3630, 3650, 3700, 3760, 3800, 3910, 3990
46};
47#endif /* CONFIG_CHARGING */
48
49#define BATTERY_SCALE_FACTOR 6003
50/* full-scale ADC readout (2^10) in millivolt */
51
52/* adc readout
53 * max with charger connected: 690
54 * max fully charged: 682
55 * min just before shutdown: 570
56 */
57
58/* Returns battery voltage from ADC [millivolts] */
59unsigned int battery_adc_voltage(void)
60{
61 return (adc_read(ADC_UNREG_POWER) * BATTERY_SCALE_FACTOR) >> 10;
62}
diff --git a/firmware/target/arm/usb-fw-pp502x.c b/firmware/target/arm/usb-fw-pp502x.c
index eae78886f4..7ea5641007 100644
--- a/firmware/target/arm/usb-fw-pp502x.c
+++ b/firmware/target/arm/usb-fw-pp502x.c
@@ -126,6 +126,11 @@ static bool usb_pin_detect(void)
126 /* GPIO F bit 7 is usb detect */ 126 /* GPIO F bit 7 is usb detect */
127 if (!(GPIOF_INPUT_VAL & 0x80)) 127 if (!(GPIOF_INPUT_VAL & 0x80))
128 retval = true; 128 retval = true;
129
130#elif defined(PHILIPS_HDD1630)
131 /* GPIO E bit 2 is usb detect */
132 if (GPIOE_INPUT_VAL & 0x4)
133 retval = true;
129#endif 134#endif
130 135
131 return retval; 136 return retval;
diff --git a/tools/configure b/tools/configure
index b2c1b7ed18..3d9afdbfda 100755
--- a/tools/configure
+++ b/tools/configure
@@ -679,7 +679,7 @@ cat <<EOF
679 679
680 ==Creative== ==Philips== 680 ==Creative== ==Philips==
681 90) Zen Vision:M 30GB 100) GoGear SA9200 681 90) Zen Vision:M 30GB 100) GoGear SA9200
682 91) Zen Vision:M 60GB 682 91) Zen Vision:M 60GB 101) GoGear HDD1630
683 92) Zen Vision 683 92) Zen Vision
684 684
685EOF 685EOF
@@ -1696,6 +1696,30 @@ fi
1696 t_model="sa9200" 1696 t_model="sa9200"
1697 ;; 1697 ;;
1698 1698
1699 101|hdd1630)
1700 target_id=43
1701 modelname="hdd1630"
1702 target="-DPHILIPS_HDD1630"
1703 memory=32 # supposedly
1704 arm7tdmicc
1705 tool="$rootdir/tools/scramble -mi4v3 -model=1630 -type=RBOS"
1706 bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
1707 bmp2rb_native="$rootdir/tools/bmp2rb -f 4"
1708 output="rockbox.mi4"
1709 appextra="recorder:gui"
1710 plugins=""
1711 swcodec="yes"
1712 boottool="$rootdir/tools/scramble -mi4v3 -model=1630 -type=RBBL"
1713 bootoutput="FWImage.ebn"
1714 # toolset is the tools within the tools directory that we build for
1715 # this particular target.
1716 toolset="$genericbitmaptools scramble"
1717 # architecture, manufacturer and model for the target-tree build
1718 t_cpu="arm"
1719 t_manufacturer="philips"
1720 t_model="hdd1630"
1721 ;;
1722
1699 *) 1723 *)
1700 echo "Please select a supported target platform!" 1724 echo "Please select a supported target platform!"
1701 exit 1725 exit
diff --git a/tools/scramble.c b/tools/scramble.c
index 5263809e41..8fd4ca98f4 100644
--- a/tools/scramble.c
+++ b/tools/scramble.c
@@ -120,7 +120,7 @@ void usage(void)
120 "\t (X values: h100, h120, h140, h300, ipco, nano, ipvd, mn2g\n" 120 "\t (X values: h100, h120, h140, h300, ipco, nano, ipvd, mn2g\n"
121 "\t ip3g, ip4g, mini, iax5, iam5, iam3, h10, h10_5gb,\n" 121 "\t ip3g, ip4g, mini, iax5, iam5, iam3, h10, h10_5gb,\n"
122 "\t tpj2, c200, e200, giga, gigs, m100, m500, d2,\n"); 122 "\t tpj2, c200, e200, giga, gigs, m100, m500, d2,\n");
123 printf("\t 9200)\n"); 123 printf("\t 9200, 1630)\n");
124 printf("\nNo option results in Archos standard player/recorder format.\n"); 124 printf("\nNo option results in Archos standard player/recorder format.\n");
125 125
126 exit(1); 126 exit(1);
@@ -274,6 +274,8 @@ int main (int argc, char** argv)
274 modelnum = 25; 274 modelnum = 25;
275 else if(!strcmp(&argv[1][5], "9200")) /* Philips SA9200 */ 275 else if(!strcmp(&argv[1][5], "9200")) /* Philips SA9200 */
276 modelnum = 26; 276 modelnum = 26;
277 else if(!strcmp(&argv[1][5], "1630")) /* Philips HDD1630 */
278 modelnum = 31;
277 else { 279 else {
278 fprintf(stderr, "unsupported model: %s\n", &argv[1][5]); 280 fprintf(stderr, "unsupported model: %s\n", &argv[1][5]);
279 return 2; 281 return 2;