summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarcin Bukat <marcin.bukat@gmail.com>2010-04-26 21:40:00 +0000
committerMarcin Bukat <marcin.bukat@gmail.com>2010-04-26 21:40:00 +0000
commitb09d3aec392538ca0934644ff6357c41aaa4c323 (patch)
tree0603cf4ef59e84ee4e0c172e3b418d8dccac664c
parentfa5cd0d3bf744f75be0593a7e2c2083810f16c21 (diff)
downloadrockbox-b09d3aec392538ca0934644ff6357c41aaa4c323.tar.gz
rockbox-b09d3aec392538ca0934644ff6357c41aaa4c323.tar.bz2
rockbox-b09d3aec392538ca0934644ff6357c41aaa4c323.zip
Add MPIO HD200 port - changed files
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@25724 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/SOURCES2
-rw-r--r--apps/debug_menu.c3
-rw-r--r--apps/plugins/battery_bench.c6
-rw-r--r--apps/plugins/bitmaps/native/SOURCES19
-rw-r--r--apps/plugins/blackjack.c15
-rw-r--r--apps/plugins/bounce.c8
-rw-r--r--apps/plugins/brickmania.c8
-rw-r--r--apps/plugins/calculator.c7
-rw-r--r--apps/plugins/calendar.c10
-rw-r--r--apps/plugins/chessbox/chessbox_pgn.h10
-rw-r--r--apps/plugins/chessclock.c10
-rw-r--r--apps/plugins/chip8.c9
-rw-r--r--apps/plugins/chopper.c5
-rw-r--r--apps/plugins/cube.c10
-rw-r--r--apps/plugins/dict.c2
-rw-r--r--apps/plugins/doom/i_video.c10
-rw-r--r--apps/plugins/fft/fft.c8
-rw-r--r--apps/plugins/fireworks.c4
-rw-r--r--apps/plugins/flipit.c12
-rw-r--r--apps/plugins/fractals/fractal.h12
-rw-r--r--apps/plugins/goban/goban.h10
-rw-r--r--apps/plugins/imageviewer/imageviewer.h12
-rw-r--r--apps/plugins/jewels.c10
-rw-r--r--apps/plugins/lib/pluginlib_actions.c32
-rw-r--r--apps/plugins/logo.c7
-rw-r--r--apps/plugins/matrix.c6
-rw-r--r--apps/plugins/midi/midiplay.c8
-rw-r--r--apps/plugins/minesweeper.c10
-rw-r--r--apps/plugins/mosaique.c5
-rw-r--r--apps/plugins/mp3_encoder.c6
-rw-r--r--apps/plugins/mpegplayer/mpeg_settings.c8
-rw-r--r--apps/plugins/mpegplayer/mpegplayer.c9
-rw-r--r--apps/plugins/oscilloscope.c11
-rw-r--r--apps/plugins/pegbox.c19
-rw-r--r--apps/plugins/plasma.c6
-rw-r--r--apps/plugins/pong.c7
-rw-r--r--apps/plugins/reversi/reversi-gui.h10
-rw-r--r--apps/plugins/rockblox.c10
-rw-r--r--apps/plugins/rockblox1d.c4
-rw-r--r--apps/plugins/sliding_puzzle.c9
-rw-r--r--apps/plugins/snake.c8
-rw-r--r--apps/plugins/snake2.c9
-rw-r--r--apps/plugins/snow.c3
-rw-r--r--apps/plugins/sokoban.c15
-rw-r--r--apps/plugins/solitaire.c18
-rw-r--r--apps/plugins/spacerocks.c10
-rw-r--r--apps/plugins/star.c18
-rw-r--r--apps/plugins/starfield.c8
-rw-r--r--apps/plugins/stats.c3
-rw-r--r--apps/plugins/stopwatch.c8
-rw-r--r--apps/plugins/sudoku/sudoku.h9
-rw-r--r--apps/plugins/test_fps.c2
-rw-r--r--apps/plugins/test_grey.c8
-rw-r--r--apps/plugins/test_greylib_bitmap_scale.c2
-rw-r--r--apps/plugins/test_scanrate.c7
-rw-r--r--apps/plugins/viewer.c10
-rw-r--r--apps/plugins/vu_meter.c11
-rw-r--r--apps/plugins/wormlet.c10
-rw-r--r--apps/plugins/xobox.c9
-rw-r--r--apps/plugins/zxbox/keymaps.h9
-rw-r--r--apps/plugins/zxbox/zxbox_keyb.c9
-rw-r--r--bootloader/SOURCES2
-rw-r--r--firmware/SOURCES24
-rw-r--r--firmware/drivers/audio/wm8751.c25
-rw-r--r--firmware/export/audiohw.h2
-rw-r--r--firmware/export/config.h3
-rw-r--r--firmware/export/wm8751.h9
-rw-r--r--firmware/sound.c11
-rw-r--r--firmware/target/coldfire/crt0.S19
-rw-r--r--firmware/target/coldfire/i2c-coldfire.c4
-rw-r--r--firmware/target/coldfire/pcm-coldfire.c30
-rw-r--r--firmware/target/coldfire/system-coldfire.c5
-rwxr-xr-xtools/configure28
-rw-r--r--tools/scramble.c4
-rw-r--r--uisimulator/sdl/button.c36
-rw-r--r--uisimulator/sdl/uisdl.h8
76 files changed, 753 insertions, 12 deletions
diff --git a/apps/SOURCES b/apps/SOURCES
index 66f2a7da51..ef81f0cfdd 100644
--- a/apps/SOURCES
+++ b/apps/SOURCES
@@ -279,4 +279,6 @@ keymaps/keymap-yh8xx_yh9xx.c
keymaps/keymap-mini2440.c
#elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
keymaps/keymap-vibe500.c
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+keymaps/keymap-mpio-hd200.c
#endif
diff --git a/apps/debug_menu.c b/apps/debug_menu.c
index 5b413598fc..867ac1fccd 100644
--- a/apps/debug_menu.c
+++ b/apps/debug_menu.c
@@ -1000,6 +1000,9 @@ static bool dbg_spdif(void)
#elif (CONFIG_KEYPAD == PBELL_VIBE500_PAD)
# define DEBUG_CANCEL BUTTON_CANCEL
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+# define DEBUG_CANCEL BUTTON_REC
+
#endif /* key definitions */
/* Test code!!! */
diff --git a/apps/plugins/battery_bench.c b/apps/plugins/battery_bench.c
index e4e399ff7b..5c04892d61 100644
--- a/apps/plugins/battery_bench.c
+++ b/apps/plugins/battery_bench.c
@@ -210,6 +210,12 @@ PLUGIN_HEADER
#define BATTERY_ON_TXT "PLAY - start"
#define BATTERY_OFF_TXT "REC"
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define BATTERY_ON BUTTON_PLAY
+#define BATTERY_OFF BUTTON_REC
+#define BATTERY_ON_TXT "PLAY - start"
+#define BATTERY_OFF_TXT "REC"
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES
index 506ecc9451..6d3257608f 100644
--- a/apps/plugins/bitmaps/native/SOURCES
+++ b/apps/plugins/bitmaps/native/SOURCES
@@ -98,6 +98,9 @@ brickmania_bricks.160x128x2.bmp
#elif LCD_WIDTH >= 138
brickmania_ball.5x5x2.bmp
brickmania_bricks.138x110x2.bmp
+#elif LCD_WIDTH >= 128
+brickmania_ball.4x4x2.bmp
+brickmania_bricks.128x128x2.bmp
#else /* M3 currently */
brickmania_ball.4x4x2.bmp
brickmania_bricks.128x96x2.bmp
@@ -251,6 +254,14 @@ clock_segments.132x80x16.bmp
clock_smallsegments.132x80x16.bmp
clock_logo.132x80x16.bmp
clock_messages.132x80x16.bmp
+#elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 128) && (LCD_DEPTH >= 2)
+clock_binary.128x128x2.bmp
+clock_digits.128x128x2.bmp
+clock_smalldigits.128x128x2.bmp
+clock_segments.128x128x2.bmp
+clock_smallsegments.128x128x2.bmp
+clock_logo.128x128x2.bmp
+clock_messages.128x128x2.bmp
#elif (LCD_WIDTH >= 112) && (LCD_HEIGHT >= 64) && (LCD_DEPTH >= 1)
clock_binary.112x64x1.bmp
clock_digits.112x64x1.bmp
@@ -494,6 +505,8 @@ rockblox_background.128x96x2.bmp
rockblox_background.160x128x2.bmp
#elif (LCD_WIDTH == 138) && (LCD_HEIGHT == 110)
rockblox_background.138x110x2.bmp
+#elif (LCD_WIDTH == 128) && (LCD_HEIGHT == 128)
+rockblox_background.128x128x2.bmp
#elif (LCD_WIDTH == 128) && (LCD_HEIGHT == 96)
rockblox_background.128x96x2.bmp
#endif
@@ -698,6 +711,10 @@ sudoku_inverse.112x64x1.bmp
sudoku_start.128x96x2.bmp
sudoku_normal.128x96x2.bmp
sudoku_inverse.128x96x2.bmp
+#elif (LCD_WIDTH == 128) && (LCD_HEIGHT == 128) && (LCD_DEPTH == 2)
+sudoku_start.128x128x2.bmp
+sudoku_normal.128x128x2.bmp
+sudoku_inverse.128x128x2.bmp
#elif (LCD_WIDTH == 138) && (LCD_HEIGHT == 110) && (LCD_DEPTH >= 2)
sudoku_start.138x110x2.bmp
sudoku_normal.138x110x2.bmp
@@ -861,6 +878,8 @@ pitch_notes.160x128x2.bmp
pitch_notes.160x128x2.bmp
#elif (LCD_WIDTH >= 132) && (LCD_HEIGHT >= 80) && (LCD_DEPTH >= 16)
pitch_notes.132x80x16.bmp
+#elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 128) && (LCD_DEPTH >= 2)
+pitch_notes.128x128x2.bmp
#elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 96) && (LCD_DEPTH >= 2)
pitch_notes.128x96x2.bmp
#elif (LCD_WIDTH >= 128) && (LCD_HEIGHT >= 64)
diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c
index a8f92b9f5a..1af26f290f 100644
--- a/apps/plugins/blackjack.c
+++ b/apps/plugins/blackjack.c
@@ -404,6 +404,21 @@ enum {
#define BJACK_RIGHT BUTTON_NEXT
#define BJACK_LEFT BUTTON_PREV
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define BJACK_SELECT_NAME "SELECT"
+#define BJACK_STAY_NAME "RIGHT"
+#define BJACK_RESUME_NAME "PLAY"
+#define BJACK_QUIT_NAME "REC+PLAY"
+#define BJACK_DOUBLE_NAME "LEFT"
+#define BJACK_SELECT BUTTON_SELECT
+#define BJACK_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define BJACK_STAY BUTTON_VOL_UP
+#define BJACK_DOUBLEDOWN BUTTON_VOL_DOWN
+#define BJACK_UP BUTTON_PREV
+#define BJACK_DOWN BUTTON_NEXT
+#define BJACK_RIGHT BUTTON_VOL_UP
+#define BJACK_LEFT BUTTON_VOL_DOWN
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/bounce.c b/apps/plugins/bounce.c
index a7f8e1847d..f193818850 100644
--- a/apps/plugins/bounce.c
+++ b/apps/plugins/bounce.c
@@ -204,6 +204,14 @@ PLUGIN_HEADER
#define BOUNCE_QUIT BUTTON_REC
#define BOUNCE_MODE BUTTON_MENU
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define BOUNCE_LEFT BUTTON_VOL_DOWN
+#define BOUNCE_RIGHT BUTTON_VOL_UP
+#define BOUNCE_UP BUTTON_PREV
+#define BOUNCE_DOWN BUTTON_NEXT
+#define BOUNCE_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define BOUNCE_MODE BUTTON_SELECT
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index bc446df179..60e8f3820b 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -243,6 +243,14 @@ CONFIG_KEYPAD == SANSA_M200_PAD
#define UP BUTTON_UP
#define DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define QUIT (BUTTON_REC|BUTTON_PLAY)
+#define LEFT BUTTON_VOL_DOWN
+#define RIGHT BUTTON_VOL_UP
+#define SELECT BUTTON_SELECT
+#define UP BUTTON_PREV
+#define DOWN BUTTON_NEXT
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/calculator.c b/apps/plugins/calculator.c
index 4e40625356..942f031890 100644
--- a/apps/plugins/calculator.c
+++ b/apps/plugins/calculator.c
@@ -374,6 +374,13 @@ PLUGIN_HEADER
#define CALCULATOR_CALC BUTTON_PLAY
#define CALCULATOR_CLEAR BUTTON_CANCEL
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define CALCULATOR_LEFT BUTTON_PREV
+#define CALCULATOR_RIGHT BUTTON_NEXT
+#define CALCULATOR_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define CALCULATOR_INPUT BUTTON_SELECT
+#define CALCULATOR_CALC BUTTON_PLAY
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/calendar.c b/apps/plugins/calendar.c
index 9327ac6aa2..d6a1a9a4ac 100644
--- a/apps/plugins/calendar.c
+++ b/apps/plugins/calendar.c
@@ -258,6 +258,16 @@ PLUGIN_HEADER
#define CALENDAR_NEXT_MONTH BUTTON_PLAY
#define CALENDAR_PREV_MONTH BUTTON_MENU
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define CALENDAR_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define CALENDAR_SELECT BUTTON_SELECT
+#define CALENDAR_NEXT_WEEK BUTTON_NEXT
+#define CALENDAR_PREV_WEEK BUTTON_PREV
+#define CALENDAR_NEXT_DAY BUTTON_VOL_UP
+#define CALENDAR_PREV_DAY BUTTON_VOL_DOWN
+#define CALENDAR_NEXT_MONTH BUTTON_PLAY
+#define CALENDAR_PREV_MONTH BUTTON_REC
+
#else
#error "No keypad setting."
#endif
diff --git a/apps/plugins/chessbox/chessbox_pgn.h b/apps/plugins/chessbox/chessbox_pgn.h
index 64cf3a5383..ee28a4fd55 100644
--- a/apps/plugins/chessbox/chessbox_pgn.h
+++ b/apps/plugins/chessbox/chessbox_pgn.h
@@ -366,6 +366,16 @@
#define CB_LEVEL BUTTON_CANCEL
#define CB_MENU BUTTON_MENU
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define CB_SELECT BUTTON_SELECT
+#define CB_UP BUTTON_PREV
+#define CB_DOWN BUTTON_NEXT
+#define CB_LEFT BUTTON_VOL_DOWN
+#define CB_RIGHT BUTTON_VOL_UP
+#define CB_PLAY BUTTON_PLAY
+#define CB_LEVEL BUTTON_REC
+#define CB_MENU (BUTTON_SELECT | BUTTON_REPEAT)
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/chessclock.c b/apps/plugins/chessclock.c
index f0a63f63dc..3afa705bf1 100644
--- a/apps/plugins/chessclock.c
+++ b/apps/plugins/chessclock.c
@@ -276,6 +276,16 @@ PLUGIN_HEADER
#define CHC_SETTINGS_OK BUTTON_OK
#define CHC_SETTINGS_CANCEL BUTTON_CANCEL
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define CHC_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define CHC_STARTSTOP BUTTON_PLAY
+#define CHC_RESET BUTTON_PREV
+#define CHC_MENU BUTTON_SELECT
+#define CHC_SETTINGS_INC BUTTON_VOL_UP
+#define CHC_SETTINGS_DEC BUTTON_VOL_DOWN
+#define CHC_SETTINGS_OK BUTTON_SELECT
+#define CHC_SETTINGS_CANCEL BUTTON_REC
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/chip8.c b/apps/plugins/chip8.c
index 4aa19125f2..edc3bf0bc1 100644
--- a/apps/plugins/chip8.c
+++ b/apps/plugins/chip8.c
@@ -1136,6 +1136,15 @@ CONFIG_KEYPAD == MROBE500_PAD
#define CHIP8_KEY6 BUTTON_NEXT
#define CHIP8_KEY8 BUTTON_DOWN
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define CHIP8_OFF (BUTTON_REC|BUTTON_PLAY)
+#define CHIP8_KEY2 BUTTON_PREV
+#define CHIP8_KEY4 BUTTON_NEXT
+#define CHIP8_KEY5 BUTTON_PLAY
+#define CHIP8_KEY6 BUTTON_VOL_DOWN
+#define CHIP8_KEY8 BUTTON_VOL_UP
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/chopper.c b/apps/plugins/chopper.c
index 1217ea75ac..67cb9ee760 100644
--- a/apps/plugins/chopper.c
+++ b/apps/plugins/chopper.c
@@ -157,6 +157,11 @@ CONFIG_KEYPAD == MROBE500_PAD
#define ACTION2 BUTTON_UP
#define ACTIONTEXT "PLAY"
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define QUIT (BUTTON_REC|BUTTON_PLAY)
+#define ACTION BUTTON_SELECT
+#define ACTIONTEXT "SELECT"
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c
index 014bcfcb79..5c6f9934eb 100644
--- a/apps/plugins/cube.c
+++ b/apps/plugins/cube.c
@@ -274,6 +274,16 @@ PLUGIN_HEADER
#define CUBE_PAUSE BUTTON_PLAY
#define CUBE_HIGHSPEED BUTTON_OK
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define CUBE_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define CUBE_NEXT BUTTON_NEXT
+#define CUBE_PREV BUTTON_PREV
+#define CUBE_INC BUTTON_VOL_UP
+#define CUBE_DEC BUTTON_VOL_DOWN
+#define CUBE_MODE BUTTON_REC
+#define CUBE_PAUSE BUTTON_PLAY
+#define CUBE_HIGHSPEED BUTTON_SELECT
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/dict.c b/apps/plugins/dict.c
index bb98df7501..cdd4c651de 100644
--- a/apps/plugins/dict.c
+++ b/apps/plugins/dict.c
@@ -150,6 +150,8 @@ long reverse (long N) {
#define LP_QUIT BUTTON_LEFT
#elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
#define LP_QUIT BUTTON_CANCEL
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define LP_QUIT (BUTTON_REC|BUTTON_PLAY)
#else
#define LP_QUIT BUTTON_OFF
#endif
diff --git a/apps/plugins/doom/i_video.c b/apps/plugins/doom/i_video.c
index fbe8369100..dc0374f852 100644
--- a/apps/plugins/doom/i_video.c
+++ b/apps/plugins/doom/i_video.c
@@ -360,6 +360,16 @@ void I_ShutdownGraphics(void)
#define DOOMBUTTON_ESC BUTTON_REC
#define DOOMBUTTON_ENTER BUTTON_POWER
#define DOOMBUTTON_WEAPON BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define DOOMBUTTON_UP BUTTON_PREV
+#define DOOMBUTTON_DOWN BUTTON_NEXT
+#define DOOMBUTTON_LEFT BUTTON_VOL_DOWN
+#define DOOMBUTTON_RIGHT BUTTON_VOL_UP
+#define DOOMBUTTON_SHOOT BUTTON_SELECT
+#define DOOMBUTTON_OPEN (BUTTON_SELECT|BUTTON_PLAY)
+#define DOOMBUTTON_ESC BUTTON_REC
+#define DOOMBUTTON_ENTER BUTTON_PLAY
+#define DOOMBUTTON_WEAPON (BUTTON_PLAY|BUTTON_REPEAT)
#else
#error Keymap not defined!
#endif
diff --git a/apps/plugins/fft/fft.c b/apps/plugins/fft/fft.c
index e62c919f88..ae07179557 100644
--- a/apps/plugins/fft/fft.c
+++ b/apps/plugins/fft/fft.c
@@ -195,6 +195,14 @@ GREY_INFO_STRUCT
# define FFT_SCALE BUTTON_PLAY
# define FFT_QUIT BUTTON_REC
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+# define FFT_PREV_GRAPH BUTTON_PREV
+# define FFT_NEXT_GRAPH BUTTON_NEXT
+# define FFT_ORIENTATION BUTTON_REC
+# define FFT_WINDOW BUTTON_SELECT
+# define FFT_SCALE BUTTON_PLAY
+# define FFT_QUIT (BUTTON_REC | BUTTON_PLAY)
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/fireworks.c b/apps/plugins/fireworks.c
index 263c05792b..1ad5f9a2ca 100644
--- a/apps/plugins/fireworks.c
+++ b/apps/plugins/fireworks.c
@@ -114,6 +114,10 @@ PLUGIN_HEADER
#define BTN_MENU BUTTON_MENU
#define BTN_FIRE BUTTON_OK
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+#define BTN_MENU BUTTON_REC
+#define BTN_FIRE BUTTON_SELECT
+
#elif defined(HAVE_TOUCHSCREEN)
/* This is a touchscreen target */
#else
diff --git a/apps/plugins/flipit.c b/apps/plugins/flipit.c
index b706b63f94..d4c5702bc0 100644
--- a/apps/plugins/flipit.c
+++ b/apps/plugins/flipit.c
@@ -320,6 +320,18 @@ PLUGIN_HEADER
#define FLIPIT_STEP_BY_STEP BUTTON_CANCEL
#define FLIPIT_TOGGLE BUTTON_OK
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define FLIPIT_LEFT BUTTON_VOL_DOWN
+#define FLIPIT_RIGHT BUTTON_VOL_UP
+#define FLIPIT_UP BUTTON_PREV
+#define FLIPIT_DOWN BUTTON_NEXT
+#define FLIPIT_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define FLIPIT_SHUFFLE BUTTON_SELECT
+#define FLIPIT_SOLVE BUTTON_REC
+#define FLIPIT_STEP_BY_STEP (BUTTON_PLAY|BUTTON_PREV)
+#define FLIPIT_TOGGLE (BUTTON_PLAY|BUTTON_NEXT)
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/fractals/fractal.h b/apps/plugins/fractals/fractal.h
index 2bcee1da57..557dde470a 100644
--- a/apps/plugins/fractals/fractal.h
+++ b/apps/plugins/fractals/fractal.h
@@ -318,6 +318,18 @@
#define FRACTAL_PRECISION_DEC BUTTON_CANCEL
#define FRACTAL_RESET (BUTTON_CANCEL | BUTTON_REPEAT)
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define FRACTAL_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define FRACTAL_UP BUTTON_PREV
+#define FRACTAL_DOWN BUTTON_NEXT
+#define FRACTAL_LEFT BUTTON_VOL_DOWN
+#define FRACTAL_RIGHT BUTTON_VOL_UP
+#define FRACTAL_ZOOM_IN (BUTTON_PLAY|BUTTON_NEXT)
+#define FRACTAL_ZOOM_OUT (BUTTON_PLAY|BUTTON_PREV)
+#define FRACTAL_PRECISION_INC (BUTTON_PLAY | BUTTON_VOL_UP)
+#define FRACTAL_PRECISION_DEC (BUTTON_PLAY | BUTTON_VOL_DOWN)
+#define FRACTAL_RESET BUTTON_REC
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/goban/goban.h b/apps/plugins/goban/goban.h
index 6bc1e83ea9..978812ac65 100644
--- a/apps/plugins/goban/goban.h
+++ b/apps/plugins/goban/goban.h
@@ -309,6 +309,16 @@
#define GBN_BUTTON_CONTEXT BUTTON_OK
#define GBN_BUTTON_NEXT_VAR BUTTON_CANCEL
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+#define GBN_BUTTON_UP BUTTON_PREV
+#define GBN_BUTTON_DOWN BUTTON_NEXT
+#define GBN_BUTTON_LEFT BUTTON_VOL_DOWN
+#define GBN_BUTTON_RIGHT BUTTON_VOL_UP
+#define GBN_BUTTON_RETREAT BUTTON_REC
+#define GBN_BUTTON_ADVANCE BUTTON_PLAY
+#define GBN_BUTTON_PLAY BUTTON_SELECT | BUTTON_REL
+#define GBN_BUTTON_MENU BUTTON_SELECT | BUTTON_REPEAT
+
#else
#error Unsupported keypad
#endif
diff --git a/apps/plugins/imageviewer/imageviewer.h b/apps/plugins/imageviewer/imageviewer.h
index a2e12911b3..b704701cda 100644
--- a/apps/plugins/imageviewer/imageviewer.h
+++ b/apps/plugins/imageviewer/imageviewer.h
@@ -316,6 +316,18 @@
#define IMGVIEW_MENU BUTTON_MENU
#define IMGVIEW_QUIT BUTTON_CANCEL
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define IMGVIEW_ZOOM_IN (BUTTON_REC|BUTTON_VOL_UP)
+#define IMGVIEW_ZOOM_OUT (BUTTON_REC|BUTTON_VOL_DOWN)
+#define IMGVIEW_UP BUTTON_PREV
+#define IMGVIEW_DOWN BUTTON_NEXT
+#define IMGVIEW_LEFT BUTTON_VOL_DOWN
+#define IMGVIEW_RIGHT BUTTON_VOL_UP
+#define IMGVIEW_NEXT (BUTTON_REC | BUTTON_NEXT)
+#define IMGVIEW_PREVIOUS (BUTTON_REC | BUTTON_PREV)
+#define IMGVIEW_MENU BUTTON_SELECT
+#define IMGVIEW_QUIT (BUTTON_REC | BUTTON_PLAY)
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c
index 74e8d6ec11..6bed9bf827 100644
--- a/apps/plugins/jewels.c
+++ b/apps/plugins/jewels.c
@@ -277,6 +277,16 @@ CONFIG_KEYPAD == MROBE500_PAD
#define HK_SELECT "OK"
#define HK_CANCEL "REC"
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define JEWELS_LEFT BUTTON_VOL_DOWN
+#define JEWELS_RIGHT BUTTON_VOL_UP
+#define JEWELS_UP BUTTON_PREV
+#define JEWELS_DOWN BUTTON_NEXT
+#define JEWELS_SELECT BUTTON_SELECT
+#define JEWELS_CANCEL BUTTON_REC
+#define HK_SELECT "SELECT"
+#define HK_CANCEL "REC"
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/lib/pluginlib_actions.c b/apps/plugins/lib/pluginlib_actions.c
index 20e7bd7ea3..29c9430f64 100644
--- a/apps/plugins/lib/pluginlib_actions.c
+++ b/apps/plugins/lib/pluginlib_actions.c
@@ -199,6 +199,16 @@ const struct button_mapping generic_directions[] =
{ PLA_DOWN_REPEAT, BUTTON_DOWN, BUTTON_NONE},
{ PLA_LEFT_REPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE},
{ PLA_RIGHT_REPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE},
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+ { PLA_UP, BUTTON_PREV, BUTTON_NONE},
+ { PLA_DOWN, BUTTON_NEXT, BUTTON_NONE},
+ { PLA_LEFT, BUTTON_VOL_DOWN, BUTTON_NONE},
+ { PLA_RIGHT, BUTTON_VOL_UP, BUTTON_NONE},
+ { PLA_UP_REPEAT, BUTTON_PREV|BUTTON_REPEAT, BUTTON_NONE},
+ { PLA_DOWN_REPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE},
+ { PLA_LEFT_REPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE},
+ { PLA_RIGHT_REPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE},
+
#else
#error pluginlib_actions: Unsupported keypad
#endif
@@ -342,6 +352,15 @@ const struct button_mapping generic_left_right_fire[] =
{ PLA_RIGHT_REPEAT, BUTTON_NEXT|BUTTON_REPEAT, BUTTON_NONE},
{ PLA_FIRE, BUTTON_OK, BUTTON_NONE},
{ PLA_FIRE_REPEAT, BUTTON_OK|BUTTON_REPEAT, BUTTON_NONE},
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+ { PLA_LEFT, BUTTON_VOL_DOWN, BUTTON_NONE},
+ { PLA_RIGHT, BUTTON_VOL_UP, BUTTON_NONE},
+ { PLA_LEFT_REPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE},
+ { PLA_RIGHT_REPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE},
+ { PLA_FIRE, BUTTON_SELECT, BUTTON_NONE},
+ { PLA_FIRE_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE},
+
+
#else
#error pluginlib_actions: Unsupported keypad
#endif
@@ -521,6 +540,13 @@ const struct button_mapping generic_actions[] =
{PLA_MENU, BUTTON_MENU, BUTTON_NONE},
{PLA_FIRE, BUTTON_OK, BUTTON_NONE},
{PLA_FIRE_REPEAT, BUTTON_OK|BUTTON_REPEAT, BUTTON_NONE},
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+ {PLA_QUIT, (BUTTON_REC|BUTTON_PLAY), BUTTON_NONE},
+ {PLA_START, BUTTON_PLAY, BUTTON_NONE},
+ {PLA_MENU, BUTTON_REC, BUTTON_NONE},
+ {PLA_FIRE, BUTTON_SELECT, BUTTON_NONE},
+ {PLA_FIRE_REPEAT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE},
+
#else
#error pluginlib_actions: Unsupported keypad
#endif
@@ -616,6 +642,12 @@ const struct button_mapping generic_increase_decrease[] =
{PLA_DEC, BUTTON_DOWN, BUTTON_NONE},
{PLA_INC_REPEAT, BUTTON_UP, BUTTON_NONE},
{PLA_DEC_REPEAT, BUTTON_DOWN, BUTTON_NONE},
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+ {PLA_INC, BUTTON_VOL_UP, BUTTON_NONE},
+ {PLA_DEC, BUTTON_VOL_DOWN, BUTTON_NONE},
+ {PLA_INC_REPEAT, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE},
+ {PLA_DEC_REPEAT, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE},
+
#else
#error pluginlib_actions: Unsupported keypad
#endif
diff --git a/apps/plugins/logo.c b/apps/plugins/logo.c
index b2320237f9..59baa2d5af 100644
--- a/apps/plugins/logo.c
+++ b/apps/plugins/logo.c
@@ -193,6 +193,13 @@ const unsigned char rockbox16x7[] = {
#define LP_DEC_Y BUTTON_DOWN
#define LP_INC_Y BUTTON_UP
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define LP_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define LP_DEC_X BUTTON_VOL_DOWN
+#define LP_INC_X BUTTON_VOL_UP
+#define LP_DEC_Y BUTTON_PREV
+#define LP_INC_Y BUTTON_NEXT
+
#else
#define LP_QUIT BUTTON_OFF
#define LP_DEC_X BUTTON_LEFT
diff --git a/apps/plugins/matrix.c b/apps/plugins/matrix.c
index e7326ea4f4..5a13b3aa38 100644
--- a/apps/plugins/matrix.c
+++ b/apps/plugins/matrix.c
@@ -156,6 +156,12 @@ CONFIG_KEYPAD == MROBE500_PAD
#define MATRIX_SLEEP_LESS BUTTON_NEXT
#define MATRIX_PAUSE BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define MATRIX_EXIT (BUTTON_REC|BUTTON_PLAY)
+#define MATRIX_SLEEP_MORE BUTTON_VOL_UP
+#define MATRIX_SLEEP_LESS BUTTON_VOL_DOWN
+#define MATRIX_PAUSE BUTTON_PLAY
+
#else
#error Unsupported keypad
#endif
diff --git a/apps/plugins/midi/midiplay.c b/apps/plugins/midi/midiplay.c
index 69c137e268..b225014fce 100644
--- a/apps/plugins/midi/midiplay.c
+++ b/apps/plugins/midi/midiplay.c
@@ -195,6 +195,14 @@ PLUGIN_IRAM_DECLARE
#define BTN_DOWN BUTTON_DOWN
#define BTN_PLAY BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define BTN_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define BTN_RIGHT BUTTON_VOL_DOWN
+#define BTN_LEFT BUTTON_VOL_UP
+#define BTN_UP BUTTON_PREV
+#define BTN_DOWN BUTTON_NEXT
+#define BTN_PLAY BUTTON_PLAY
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/minesweeper.c b/apps/plugins/minesweeper.c
index 7b26169da7..dbf3271353 100644
--- a/apps/plugins/minesweeper.c
+++ b/apps/plugins/minesweeper.c
@@ -259,6 +259,16 @@ CONFIG_KEYPAD == MROBE500_PAD
# define MINESWP_DISCOVER BUTTON_OK
# define MINESWP_INFO BUTTON_MENU
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+# define MINESWP_LEFT BUTTON_VOL_DOWN
+# define MINESWP_RIGHT BUTTON_VOL_UP
+# define MINESWP_UP BUTTON_PREV
+# define MINESWP_DOWN BUTTON_NEXT
+# define MINESWP_QUIT (BUTTON_REC|BUTTON_PLAY)
+# define MINESWP_TOGGLE BUTTON_PLAY
+# define MINESWP_DISCOVER BUTTON_SELECT
+# define MINESWP_INFO BUTTON_REC
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/mosaique.c b/apps/plugins/mosaique.c
index d6fc11d131..6506c85560 100644
--- a/apps/plugins/mosaique.c
+++ b/apps/plugins/mosaique.c
@@ -169,6 +169,11 @@ PLUGIN_HEADER
#define MOSAIQUE_SPEED BUTTON_PLAY
#define MOSAIQUE_RESTART BUTTON_MENU
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define MOSAIQUE_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define MOSAIQUE_SPEED BUTTON_SELECT
+#define MOSAIQUE_RESTART BUTTON_PLAY
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/mp3_encoder.c b/apps/plugins/mp3_encoder.c
index 070bdb199f..50aa99b2ae 100644
--- a/apps/plugins/mp3_encoder.c
+++ b/apps/plugins/mp3_encoder.c
@@ -2511,6 +2511,12 @@ CONFIG_KEYPAD == MROBE500_PAD
#define MP3ENC_DONE BUTTON_REC
#define MP3ENC_SELECT BUTTON_OK
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define MP3ENC_PREV BUTTON_PREV
+#define MP3ENC_NEXT BUTTON_NEXT
+#define MP3ENC_DONE BUTTON_PLAY
+#define MP3ENC_SELECT BUTTON_SELECT
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/mpegplayer/mpeg_settings.c b/apps/plugins/mpegplayer/mpeg_settings.c
index 49d7f8b38d..6c8a2b8e3e 100644
--- a/apps/plugins/mpegplayer/mpeg_settings.c
+++ b/apps/plugins/mpegplayer/mpeg_settings.c
@@ -206,6 +206,14 @@ struct mpeg_settings settings;
#define MPEG_START_TIME_RIGHT2 BUTTON_CANCEL
#define MPEG_START_TIME_EXIT BUTTON_REC
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define MPEG_START_TIME_SELECT BUTTON_SELECT
+#define MPEG_START_TIME_LEFT BUTTON_PREV
+#define MPEG_START_TIME_RIGHT BUTTON_NEXT
+#define MPEG_START_TIME_UP BUTTON_VOL_UP
+#define MPEG_START_TIME_DOWN BUTTON_VOL_DOWN
+#define MPEG_START_TIME_EXIT BUTTON_REC
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/mpegplayer/mpegplayer.c b/apps/plugins/mpegplayer/mpegplayer.c
index 015aae4ad0..4c7245dc94 100644
--- a/apps/plugins/mpegplayer/mpegplayer.c
+++ b/apps/plugins/mpegplayer/mpegplayer.c
@@ -317,6 +317,15 @@ CONFIG_KEYPAD == SANSA_M200_PAD
#define MPEG_RW BUTTON_PREV
#define MPEG_FF BUTTON_NEXT
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define MPEG_MENU BUTTON_SELECT
+#define MPEG_PAUSE (BUTTON_PLAY | BUTTON_REL)
+#define MPEG_STOP (BUTTON_PLAY | BUTTON_REPEAT)
+#define MPEG_VOLDOWN BUTTON_VOL_DOWN
+#define MPEG_VOLUP BUTTON_VOL_UP
+#define MPEG_RW BUTTON_PREV
+#define MPEG_FF BUTTON_NEXT
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/oscilloscope.c b/apps/plugins/oscilloscope.c
index 69ae8bcfaf..4195d96d5f 100644
--- a/apps/plugins/oscilloscope.c
+++ b/apps/plugins/oscilloscope.c
@@ -287,6 +287,17 @@ PLUGIN_HEADER
#define OSCILLOSCOPE_VOL_UP BUTTON_UP
#define OSCILLOSCOPE_VOL_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define OSCILLOSCOPE_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define OSCILLOSCOPE_DRAWMODE BUTTON_SELECT
+#define OSCILLOSCOPE_ADVMODE BUTTON_REC
+#define OSCILLOSCOPE_ORIENTATION (BUTTON_SELECT|BUTTON_REPEAT)
+#define OSCILLOSCOPE_PAUSE BUTTON_PLAY
+#define OSCILLOSCOPE_SPEED_UP BUTTON_NEXT
+#define OSCILLOSCOPE_SPEED_DOWN BUTTON_PREV
+#define OSCILLOSCOPE_VOL_UP BUTTON_VOL_UP
+#define OSCILLOSCOPE_VOL_DOWN BUTTON_VOL_DOWN
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/pegbox.c b/apps/plugins/pegbox.c
index f80b163c3f..a429b00166 100644
--- a/apps/plugins/pegbox.c
+++ b/apps/plugins/pegbox.c
@@ -418,6 +418,25 @@ CONFIG_KEYPAD == MROBE500_PAD
#define LVL_DOWN_TEXT "CANCEL"
#define SELECT_TEXT "PLAY"
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define PEGBOX_SAVE (BUTTON_PLAY|BUTTON_SELECT)
+#define PEGBOX_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define PEGBOX_RESTART BUTTON_REC
+#define PEGBOX_LVL_UP (BUTTON_PLAY|BUTTON_PREV)
+#define PEGBOX_LVL_DOWN (BUTTON_PLAY|BUTTON_NEXT)
+#define PEGBOX_UP BUTTON_PREV
+#define PEGBOX_DOWN BUTTON_NEXT
+#define PEGBOX_RIGHT BUTTON_VOL_UP
+#define PEGBOX_LEFT BUTTON_VOL_DOWN
+#define PEGBOX_SELECT BUTTON_SELECT
+
+#define SAVE_TEXT "PLAY + SELECT"
+#define QUIT_TEXT "REC + PLAY"
+#define RESTART_TEXT "REC"
+#define LVL_UP_TEXT "PREV"
+#define LVL_DOWN_TEXT "NEXT"
+#define SELECT_TEXT "SELECT"
+
#else
#error Unsupported keymap!
#endif
diff --git a/apps/plugins/plasma.c b/apps/plugins/plasma.c
index f91242ed9f..adf7ab532a 100644
--- a/apps/plugins/plasma.c
+++ b/apps/plugins/plasma.c
@@ -170,6 +170,12 @@ static bool boosted = false;
#define PLASMA_DECREASE_FREQUENCY BUTTON_DOWN
#define PLASMA_REGEN_COLORS BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define PLASMA_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define PLASMA_INCREASE_FREQUENCY BUTTON_VOL_DOWN
+#define PLASMA_DECREASE_FREQUENCY BUTTON_VOL_UP
+#define PLASMA_REGEN_COLORS BUTTON_PLAY
+
#endif
#ifdef HAVE_TOUCHSCREEN
diff --git a/apps/plugins/pong.c b/apps/plugins/pong.c
index d14db5fdbd..08899d767a 100644
--- a/apps/plugins/pong.c
+++ b/apps/plugins/pong.c
@@ -213,6 +213,13 @@ CONFIG_KEYPAD == MROBE500_PAD
#define PONG_RIGHT_UP BUTTON_PLAY
#define PONG_RIGHT_DOWN BUTTON_NEXT
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define PONG_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define PONG_LEFT_UP BUTTON_PREV
+#define PONG_LEFT_DOWN BUTTON_NEXT
+#define PONG_RIGHT_UP BUTTON_VOL_UP
+#define PONG_RIGHT_DOWN BUTTON_VOL_DOWN
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/reversi/reversi-gui.h b/apps/plugins/reversi/reversi-gui.h
index 145335ce76..9b4c43ca21 100644
--- a/apps/plugins/reversi/reversi-gui.h
+++ b/apps/plugins/reversi/reversi-gui.h
@@ -216,6 +216,16 @@
#define REVERSI_BUTTON_MAKE_MOVE BUTTON_OK
#define REVERSI_BUTTON_MENU BUTTON_MENU
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define REVERSI_BUTTON_UP BUTTON_PREV
+#define REVERSI_BUTTON_DOWN BUTTON_NEXT
+#define REVERSI_BUTTON_LEFT BUTTON_VOL_DOWN
+#define REVERSI_BUTTON_RIGHT BUTTON_VOL_UP
+#define REVERSI_BUTTON_MAKE_MOVE BUTTON_SELECT
+#define REVERSI_BUTTON_MAKE_MOVE_SHORTPRESS
+#define REVERSI_BUTTON_MENU BUTTON_SELECT
+#define REVERSI_BUTTON_MENU_LONGPRESS
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c
index 891b79be56..f1ad8399fb 100644
--- a/apps/plugins/rockblox.c
+++ b/apps/plugins/rockblox.c
@@ -326,6 +326,16 @@ PLUGIN_HEADER
#define ROCKBLOX_DROP BUTTON_OK
#define ROCKBLOX_RESTART BUTTON_CANCEL
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define ROCKBLOX_OFF (BUTTON_REC|BUTTON_PLAY)
+#define ROCKBLOX_ROTATE_CCW BUTTON_PREV
+#define ROCKBLOX_ROTATE_CW BUTTON_NEXT
+#define ROCKBLOX_DOWN BUTTON_SELECT
+#define ROCKBLOX_LEFT BUTTON_VOL_DOWN
+#define ROCKBLOX_RIGHT BUTTON_VOL_UP
+#define ROCKBLOX_DROP BUTTON_PLAY
+#define ROCKBLOX_RESTART BUTTON_REC
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/rockblox1d.c b/apps/plugins/rockblox1d.c
index d34087ab61..5006d88a2d 100644
--- a/apps/plugins/rockblox1d.c
+++ b/apps/plugins/rockblox1d.c
@@ -117,6 +117,10 @@ PLUGIN_HEADER
#define ONEDROCKBLOX_DOWN BUTTON_DOWN
#define ONEDROCKBLOX_QUIT BUTTON_REC
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+#define ONEDROCKBLOX_DOWN BUTTON_SELECT
+#define ONEDROCKBLOX_QUIT (BUTTON_REC | BUTTON_PLAY)
+
#elif defined(HAVE_TOUCHSCREEN)
#define ONEDROCKBLOX_DOWN BUTTON_BOTTOMMIDDLE
diff --git a/apps/plugins/sliding_puzzle.c b/apps/plugins/sliding_puzzle.c
index f6ba83e683..7bf49c123d 100644
--- a/apps/plugins/sliding_puzzle.c
+++ b/apps/plugins/sliding_puzzle.c
@@ -221,6 +221,15 @@ CONFIG_KEYPAD == MROBE500_PAD
#define PUZZLE_SHUFFLE BUTTON_CANCEL
#define PUZZLE_PICTURE BUTTON_MENU
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define PUZZLE_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define PUZZLE_LEFT BUTTON_VOL_DOWN
+#define PUZZLE_RIGHT BUTTON_VOL_UP
+#define PUZZLE_UP BUTTON_PREV
+#define PUZZLE_DOWN BUTTON_NEXT
+#define PUZZLE_SHUFFLE BUTTON_REC
+#define PUZZLE_PICTURE BUTTON_PLAY
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/snake.c b/apps/plugins/snake.c
index 1d14efea69..c3fe84e6d0 100644
--- a/apps/plugins/snake.c
+++ b/apps/plugins/snake.c
@@ -208,6 +208,14 @@ PLUGIN_HEADER
#define SNAKE_DOWN BUTTON_DOWN
#define SNAKE_PLAYPAUSE BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SNAKE_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define SNAKE_LEFT BUTTON_VOL_DOWN
+#define SNAKE_RIGHT BUTTON_VOL_UP
+#define SNAKE_UP BUTTON_PREV
+#define SNAKE_DOWN BUTTON_NEXT
+#define SNAKE_PLAYPAUSE BUTTON_PLAY
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/snake2.c b/apps/plugins/snake2.c
index 136952599c..d9b6542bf3 100644
--- a/apps/plugins/snake2.c
+++ b/apps/plugins/snake2.c
@@ -317,6 +317,15 @@ CONFIG_KEYPAD == MROBE500_PAD
#define SNAKE2_PLAYPAUSE BUTTON_PLAY
#define SNAKE2_PLAYPAUSE_TEXT "Play"
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SNAKE2_LEFT BUTTON_VOL_DOWN
+#define SNAKE2_RIGHT BUTTON_VOL_UP
+#define SNAKE2_UP BUTTON_PREV
+#define SNAKE2_DOWN BUTTON_NEXT
+#define SNAKE2_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define SNAKE2_PLAYPAUSE BUTTON_PLAY
+#define SNAKE2_PLAYPAUSE_TEXT "Play"
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/snow.c b/apps/plugins/snow.c
index a81e12be96..eb8870efde 100644
--- a/apps/plugins/snow.c
+++ b/apps/plugins/snow.c
@@ -82,6 +82,9 @@ PLUGIN_HEADER
#elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
#define SNOW_QUIT BUTTON_REC
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SNOW_QUIT (BUTTON_REC|BUTTON_PLAY)
+
#else
#define SNOW_QUIT BUTTON_OFF
#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
diff --git a/apps/plugins/sokoban.c b/apps/plugins/sokoban.c
index e7b22197e6..838b4de5b0 100644
--- a/apps/plugins/sokoban.c
+++ b/apps/plugins/sokoban.c
@@ -437,6 +437,21 @@ PLUGIN_HEADER
#define BUTTON_SAVE BUTTON_MENU
#define BUTTON_SAVE_NAME "MENU"
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SOKOBAN_LEFT BUTTON_VOL_DOWN
+#define SOKOBAN_RIGHT BUTTON_VOL_UP
+#define SOKOBAN_UP BUTTON_PREV
+#define SOKOBAN_DOWN BUTTON_NEXT
+#define SOKOBAN_MENU BUTTON_SELECT
+#define SOKOBAN_UNDO (BUTTON_PLAY | BUTTON_PREV)
+#define SOKOBAN_REDO (BUTTON_PLAY | BUTTON_NEXT)
+#define SOKOBAN_LEVEL_DOWN (BUTTON_PLAY | BUTTON_VOL_DOWN)
+#define SOKOBAN_LEVEL_REPEAT BUTTON_REC
+#define SOKOBAN_LEVEL_UP (BUTTON_PLAY | BUTTON_VOL_UP)
+#define SOKOBAN_PAUSE BUTTON_PLAY
+#define BUTTON_SAVE (BUTTON_PLAY|BUTTON_SELECT)
+#define BUTTON_SAVE_NAME "PLAY+SELECT"
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/solitaire.c b/apps/plugins/solitaire.c
index 8737275627..cf4e6475b0 100644
--- a/apps/plugins/solitaire.c
+++ b/apps/plugins/solitaire.c
@@ -457,6 +457,24 @@ CONFIG_KEYPAD == MROBE500_PAD
# define HK_CUR2STACK "PLAY"
# define HK_REM2STACK "PLAY..."
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+# define SOL_QUIT (BUTTON_REC | BUTTON_PLAY)
+# define SOL_UP BUTTON_PREV
+# define SOL_DOWN BUTTON_NEXT
+# define SOL_LEFT BUTTON_VOL_DOWN
+# define SOL_RIGHT BUTTON_VOL_UP
+# define SOL_MOVE_PRE BUTTON_SELECT
+# define SOL_MOVE (BUTTON_SELECT | BUTTON_REL)
+# define SOL_DRAW BUTTON_REC
+# define SOL_REM2CUR (BUTTON_REC | BUTTON_REPEAT)
+# define SOL_CUR2STACK BUTTON_PLAY
+# define SOL_REM2STACK (BUTTON_PLAY | BUTTON_REPEAT)
+# define HK_MOVE "SELECT"
+# define HK_DRAW "REC"
+# define HK_REM2CUR "REC.."
+# define HK_CUR2STACK "PLAY"
+# define HK_REM2STACK "PLAY...."
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index 586beb37ab..0ade406b59 100644
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -229,6 +229,16 @@ PLUGIN_HEADER
#define AST_RIGHT BUTTON_NEXT
#define AST_FIRE BUTTON_OK
+#elif (CONFIG_KEYPAD == MPIO_HD200_PAD)
+
+#define AST_PAUSE (BUTTON_PLAY|BUTTON_SELECT)
+#define AST_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define AST_THRUST BUTTON_REC
+#define AST_HYPERSPACE BUTTON_PLAY
+#define AST_LEFT BUTTON_PREV
+#define AST_RIGHT BUTTON_NEXT
+#define AST_FIRE BUTTON_SELECT
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/star.c b/apps/plugins/star.c
index 1e8eb868a9..d11e3187db 100644
--- a/apps/plugins/star.c
+++ b/apps/plugins/star.c
@@ -393,6 +393,24 @@ PLUGIN_HEADER
#define STAR_LEVEL_DOWN_NAME "CANCEL"
#define STAR_LEVEL_REPEAT_NAME "MENU"
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define STAR_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define STAR_LEFT BUTTON_VOL_DOWN
+#define STAR_RIGHT BUTTON_VOL_UP
+#define STAR_UP BUTTON_PREV
+#define STAR_DOWN BUTTON_NEXT
+#define STAR_TOGGLE_CONTROL_PRE BUTTON_SELECT
+#define STAR_TOGGLE_CONTROL (BUTTON_SELECT | BUTTON_REL)
+#define STAR_LEVEL_UP BUTTON_PLAY
+#define STAR_LEVEL_DOWN BUTTON_REC
+#define STAR_LEVEL_REPEAT (BUTTON_SELECT | BUTTON_REPEAT)
+#define STAR_TOGGLE_CONTROL_NAME "SELECT"
+#define STAR_QUIT_NAME "REC + PLAY"
+#define STAR_LEVEL_UP_NAME "PLAY"
+#define STAR_LEVEL_DOWN_NAME "REC"
+#define STAR_LEVEL_REPEAT_NAME "SELECT LONG"
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/starfield.c b/apps/plugins/starfield.c
index 4b3b0878ad..1ae0f289ff 100644
--- a/apps/plugins/starfield.c
+++ b/apps/plugins/starfield.c
@@ -158,6 +158,14 @@ PLUGIN_HEADER
#define STARFIELD_DECREASE_NB_STARS BUTTON_PREV
#define STARFIELD_TOGGLE_COLOR BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define STARFIELD_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define STARFIELD_INCREASE_ZMOVE BUTTON_VOL_UP
+#define STARFIELD_DECREASE_ZMOVE BUTTON_VOL_DOWN
+#define STARFIELD_INCREASE_NB_STARS BUTTON_NEXT
+#define STARFIELD_DECREASE_NB_STARS BUTTON_PREV
+#define STARFIELD_TOGGLE_COLOR BUTTON_PLAY
+
#endif
#ifdef HAVE_TOUCHSCREEN
diff --git a/apps/plugins/stats.c b/apps/plugins/stats.c
index ae297841f6..eaa1055a73 100644
--- a/apps/plugins/stats.c
+++ b/apps/plugins/stats.c
@@ -105,6 +105,9 @@ static bool abort;
#elif CONFIG_KEYPAD == PBELL_VIBE500_PAD
#define STATS_STOP BUTTON_REC
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define STATS_STOP BUTTON_REC
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c
index ad3b285d2f..cb85e360db 100644
--- a/apps/plugins/stopwatch.c
+++ b/apps/plugins/stopwatch.c
@@ -223,6 +223,14 @@ PLUGIN_HEADER
#define STOPWATCH_SCROLL_UP BUTTON_UP
#define STOPWATCH_SCROLL_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define STOPWATCH_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define STOPWATCH_START_STOP BUTTON_PLAY
+#define STOPWATCH_RESET_TIMER BUTTON_PREV
+#define STOPWATCH_LAP_TIMER BUTTON_NEXT
+#define STOPWATCH_SCROLL_UP BUTTON_VOL_UP
+#define STOPWATCH_SCROLL_DOWN BUTTON_VOL_DOWN
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/sudoku/sudoku.h b/apps/plugins/sudoku/sudoku.h
index 63e0718c70..8974bd8768 100644
--- a/apps/plugins/sudoku/sudoku.h
+++ b/apps/plugins/sudoku/sudoku.h
@@ -281,6 +281,15 @@
#define SUDOKU_BUTTON_MENU BUTTON_MENU
#define SUDOKU_BUTTON_POSSIBLE BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SUDOKU_BUTTON_MENU BUTTON_REC
+#define SUDOKU_BUTTON_LEFT BUTTON_VOL_DOWN
+#define SUDOKU_BUTTON_RIGHT BUTTON_VOL_UP
+#define SUDOKU_BUTTON_CHANGEDIR BUTTON_SELECT
+#define SUDOKU_BUTTON_TOGGLE BUTTON_NEXT
+#define SUDOKU_BUTTON_TOGGLEBACK BUTTON_PREV
+#define SUDOKU_BUTTON_POSSIBLE BUTTON_PLAY
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/test_fps.c b/apps/plugins/test_fps.c
index f7706f64bd..52a56d5954 100644
--- a/apps/plugins/test_fps.c
+++ b/apps/plugins/test_fps.c
@@ -35,6 +35,8 @@ PLUGIN_IRAM_DECLARE
#define FPS_QUIT BUTTON_PLAY
#elif CONFIG_KEYPAD == SANSA_FUZE_PAD
#define FPS_QUIT (BUTTON_HOME|BUTTON_REPEAT)
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define FPS_QUIT (BUTTON_REC|BUTTON_PLAY)
#elif defined(BUTTON_OFF)
#define FPS_QUIT BUTTON_OFF
#else
diff --git a/apps/plugins/test_grey.c b/apps/plugins/test_grey.c
index a1189dda77..c2adaf06b5 100644
--- a/apps/plugins/test_grey.c
+++ b/apps/plugins/test_grey.c
@@ -83,6 +83,14 @@ PLUGIN_HEADER
#define GREY_UP BUTTON_UP
#define GREY_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define GREY_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define GREY_OK BUTTON_SELECT
+#define GREY_PREV BUTTON_PREV
+#define GREY_NEXT BUTTON_NEXT
+#define GREY_UP BUTTON_VOL_UP
+#define GREY_DOWN BUTTON_VOL_DOWN
+
#else
#error unsupported keypad
#endif
diff --git a/apps/plugins/test_greylib_bitmap_scale.c b/apps/plugins/test_greylib_bitmap_scale.c
index 7b226d4f96..892f3dc622 100644
--- a/apps/plugins/test_greylib_bitmap_scale.c
+++ b/apps/plugins/test_greylib_bitmap_scale.c
@@ -30,6 +30,8 @@
#define GBS_QUIT BUTTON_RC_REC
#elif CONFIG_KEYPAD == SAMSUNG_YH_PAD
#define GBS_QUIT BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define GBS_QUIT (BUTTON_REC|BUTTON_PLAY)
#elif defined(BUTTON_OFF)
#define GBS_QUIT BUTTON_OFF
#else
diff --git a/apps/plugins/test_scanrate.c b/apps/plugins/test_scanrate.c
index 5f1e3cacdf..fb59193272 100644
--- a/apps/plugins/test_scanrate.c
+++ b/apps/plugins/test_scanrate.c
@@ -71,6 +71,13 @@ PLUGIN_HEADER
#define SCANRATE_INC BUTTON_UP
#define SCANRATE_DEC BUTTON_DOWN
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define SCANRATE_DONE BUTTON_PLAY
+#define SCANRATE_FASTINC BUTTON_NEXT
+#define SCANRATE_FASTDEC BUTTON_PREV
+#define SCANRATE_INC BUTTON_VOL_UP
+#define SCANRATE_DEC BUTTON_VOL_DOWN
+
#endif
/* Default refresh rates in 1/10 Hz */
diff --git a/apps/plugins/viewer.c b/apps/plugins/viewer.c
index 9ebc1d9cf6..ed84d26f28 100644
--- a/apps/plugins/viewer.c
+++ b/apps/plugins/viewer.c
@@ -486,6 +486,16 @@ PLUGIN_HEADER
#define VIEWER_AUTOSCROLL BUTTON_PLAY
#define VIEWER_BOOKMARK BUTTON_POWER
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define VIEWER_QUIT (BUTTON_REC | BUTTON_PLAY)
+#define VIEWER_PAGE_UP BUTTON_PREV
+#define VIEWER_PAGE_DOWN BUTTON_NEXT
+#define VIEWER_SCREEN_LEFT BUTTON_VOL_DOWN
+#define VIEWER_SCREEN_RIGHT BUTTON_VOL_UP
+#define VIEWER_MENU BUTTON_SELECT
+#define VIEWER_AUTOSCROLL BUTTON_PLAY
+#define VIEWER_BOOKMARK BUTTON_REC
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/vu_meter.c b/apps/plugins/vu_meter.c
index f3473c84d7..7cf5a5f00c 100644
--- a/apps/plugins/vu_meter.c
+++ b/apps/plugins/vu_meter.c
@@ -283,6 +283,17 @@ PLUGIN_HEADER
#define LABEL_MENU "MENU"
#define LABEL_VOLUME "UP/DOWN"
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+#define VUMETER_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define VUMETER_HELP BUTTON_PLAY
+#define VUMETER_MENU BUTTON_SELECT
+#define VUMETER_UP BUTTON_VOL_UP
+#define VUMETER_DOWN BUTTON_VOL_DOWN
+#define LABEL_HELP "PLAY"
+#define LABEL_QUIT "MENU"
+#define LABEL_MENU "SELECT"
+#define LABEL_VOLUME "UP/DOWN"
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/wormlet.c b/apps/plugins/wormlet.c
index 3324d6c507..037f4005a2 100644
--- a/apps/plugins/wormlet.c
+++ b/apps/plugins/wormlet.c
@@ -268,6 +268,16 @@ CONFIG_KEYPAD == MROBE500_PAD
#define BTN_QUIT BUTTON_REC
#define BTN_STOPRESET BUTTON_CANCEL
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define BTN_DIR_UP BUTTON_REC
+#define BTN_DIR_DOWN BUTTON_PLAY
+#define BTN_DIR_LEFT BUTTON_PREV
+#define BTN_DIR_RIGHT BUTTON_NEXT
+#define BTN_STARTPAUSE BUTTON_SELECT
+#define BTN_QUIT (BUTTON_REC|BUTTON_PLAY)
+#define BTN_STOPRESET (BUTTON_SELECT|BUTTON_REPEAT)
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/xobox.c b/apps/plugins/xobox.c
index 6edc629144..4dd673c370 100644
--- a/apps/plugins/xobox.c
+++ b/apps/plugins/xobox.c
@@ -232,6 +232,15 @@ CONFIG_KEYPAD == MROBE500_PAD
#define DOWN BUTTON_DOWN
#define PAUSE BUTTON_PLAY
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define QUIT (BUTTON_REC|BUTTON_PLAY)
+#define LEFT BUTTON_VOL_DOWN
+#define RIGHT BUTTON_VOL_UP
+#define UP BUTTON_PREV
+#define DOWN BUTTON_NEXT
+#define PAUSE BUTTON_PLAY
+
#else
#error No keymap defined!
#endif
diff --git a/apps/plugins/zxbox/keymaps.h b/apps/plugins/zxbox/keymaps.h
index 3ca5451fdb..ee2a8d5f4a 100644
--- a/apps/plugins/zxbox/keymaps.h
+++ b/apps/plugins/zxbox/keymaps.h
@@ -189,6 +189,15 @@
#define ZX_SELECT BUTTON_OK
#define ZX_MENU BUTTON_MENU
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define ZX_MENU (BUTTON_REC|BUTTON_PLAY)
+#define ZX_UP BUTTON_PREV
+#define ZX_DOWN BUTTON_NEXT
+#define ZX_SELECT BUTTON_SELECT
+#define ZX_LEFT BUTTON_VOL_DOWN
+#define ZX_RIGHT BUTTON_VOL_UP
+
#else
#error Keymap not defined!
diff --git a/apps/plugins/zxbox/zxbox_keyb.c b/apps/plugins/zxbox/zxbox_keyb.c
index b48c5ec4ac..bc7e3aca2c 100644
--- a/apps/plugins/zxbox/zxbox_keyb.c
+++ b/apps/plugins/zxbox/zxbox_keyb.c
@@ -184,6 +184,15 @@
#define KBD_UP BUTTON_UP
#define KBD_DOWN BUTTON_DOWN
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+
+#define KBD_SELECT BUTTON_SELECT
+#define KBD_ABORT BUTTON_REC
+#define KBD_LEFT BUTTON_VOL_DOWN
+#define KBD_RIGHT BUTTON_VOL_UP
+#define KBD_UP BUTTON_PREV
+#define KBD_DOWN BUTTON_NEXT
+
#endif
#ifdef HAVE_TOUCHSCREEN
diff --git a/bootloader/SOURCES b/bootloader/SOURCES
index 31b051445b..24d0bd29f6 100644
--- a/bootloader/SOURCES
+++ b/bootloader/SOURCES
@@ -63,4 +63,6 @@ show_logo.c
#elif defined(PBELL_VIBE500)
main-pp.c
show_logo.c
+#elif defined(MPIO_HD200)
+mpio_hd200.c
#endif
diff --git a/firmware/SOURCES b/firmware/SOURCES
index b13f6a0df8..48360d7b45 100644
--- a/firmware/SOURCES
+++ b/firmware/SOURCES
@@ -258,7 +258,8 @@ drivers/mas.c
#if !defined(SIMULATOR) && !defined(BOOTLOADER)
#if defined(HAVE_UDA1380)
drivers/audio/uda1380.c
-#elif defined(HAVE_WM8751)
+#elif defined(HAVE_WM8751) \
+ || defined(HAVE_WM8750)
drivers/audio/wm8751.c
#elif defined(HAVE_WM8978)
drivers/audio/wm8978.c
@@ -1609,3 +1610,24 @@ target/arm/usb-fw-pp502x.c
#endif /* SIMULATOR */
#endif
+#ifdef MPIO_HD200
+#ifndef SIMULATOR
+/* TODO: currently including all files */
+target/coldfire/mpio/hd200/adc-hd200.c
+target/coldfire/mpio/hd200/button-hd200.c
+target/coldfire/mpio/hd200/lcd-hd200.c
+target/coldfire/mpio/hd200/lcd-as-hd200.S
+target/coldfire/mpio/hd200/power-hd200.c
+target/coldfire/mpio/hd200/powermgmt-hd200.c
+target/coldfire/mpio/hd200/backlight-hd200.c
+target/coldfire/mpio/hd200/system-hd200.c
+target/coldfire/mpio/hd200/usb-hd200.c
+target/coldfire/mpio/fmradio_i2c-mpio.c
+target/coldfire/mpio/ata-mpio.c
+target/coldfire/mpio/ata-as-mpio.S
+#ifndef BOOTLOADER
+target/coldfire/mpio/audio-mpio.c
+target/coldfire/wmcodec-coldfire.c
+#endif /* BOOTLOADER */
+#endif /* SIMULATOR */
+#endif
diff --git a/firmware/drivers/audio/wm8751.c b/firmware/drivers/audio/wm8751.c
index b42c4b1041..cdc64fd69b 100644
--- a/firmware/drivers/audio/wm8751.c
+++ b/firmware/drivers/audio/wm8751.c
@@ -116,17 +116,22 @@ void audiohw_preinit(void)
* and Headphone outputs are all OFF (DACMU = 1 Power
* Management registers 1 and 2 are all zeros).
*/
+
wmcodec_write(RESET, RESET_RESET); /*Reset*/
/* 2. Enable Vmid and VREF. */
wmcodec_write(PWRMGMT1, PWRMGMT1_VREF | PWRMGMT1_VMIDSEL_5K);
+#ifdef CODEC_SLAVE
+ wmcodec_write(AINTFCE,AINTFCE_WL_16|AINTFCE_FORMAT_I2S);
+#else
/* BCLKINV=0(Dont invert BCLK) MS=1(Enable Master) LRSWAP=0 LRP=0 */
/* IWL=00(16 bit) FORMAT=10(I2S format) */
wmcodec_write(AINTFCE, AINTFCE_MS | AINTFCE_WL_16 |
AINTFCE_FORMAT_I2S);
-
+#endif
/* Set default samplerate */
+
audiohw_set_frequency(HW_FREQ_DEFAULT);
}
@@ -140,7 +145,7 @@ void audiohw_postinit(void)
wmcodec_write(PWRMGMT2, PWRMGMT2_DACL | PWRMGMT2_DACR);
/* 4. Enable line and / or headphone output buffers as required. */
-#ifdef MROBE_100
+#if defined(MROBE_100) || defined(MPIO_HD200)
wmcodec_write(PWRMGMT2, PWRMGMT2_DACL | PWRMGMT2_DACR |
PWRMGMT2_LOUT1 | PWRMGMT2_ROUT1);
#else
@@ -166,6 +171,19 @@ void audiohw_postinit(void)
#endif
#endif
+#ifdef MPIO_HD200
+ /* Crude fix for high pitch noise at startup
+ * I should find out what realy causes this
+ */
+ wmcodec_write(LOUT1, LOUT1_BITS|0x7f);
+ wmcodec_write(ROUT1, ROUT1_BITS|0x7f);
+ wmcodec_write(LOUT1, LOUT1_BITS);
+ wmcodec_write(ROUT1, ROUT1_BITS);
+#endif
+
+ /* lower power consumption */
+ wmcodec_write(PWRMGMT1, PWRMGMT1_VREF | PWRMGMT1_VMIDSEL_50K);
+
audiohw_mute(false);
#ifdef MROBE_100
@@ -234,6 +252,8 @@ void audiohw_close(void)
void audiohw_set_frequency(int fsel)
{
+ (void)fsel;
+#ifndef CODEC_SLAVE
static const unsigned char srctrl_table[HW_NUM_FREQ] =
{
HW_HAVE_11_([HW_FREQ_11] = CODEC_SRCTRL_11025HZ,)
@@ -246,4 +266,5 @@ void audiohw_set_frequency(int fsel)
fsel = HW_FREQ_DEFAULT;
wmcodec_write(CLOCKING, srctrl_table[fsel]);
+#endif
}
diff --git a/firmware/export/audiohw.h b/firmware/export/audiohw.h
index 781bc12f8e..c00b673a4a 100644
--- a/firmware/export/audiohw.h
+++ b/firmware/export/audiohw.h
@@ -38,7 +38,7 @@
#include "uda1380.h"
#elif defined(HAVE_UDA1341)
#include "uda1341.h"
-#elif defined(HAVE_WM8751)
+#elif defined(HAVE_WM8750) || defined(HAVE_WM8751)
#include "wm8751.h"
#elif defined(HAVE_WM8978)
#include "wm8978.h"
diff --git a/firmware/export/config.h b/firmware/export/config.h
index fb9381e7da..906a3fef1a 100644
--- a/firmware/export/config.h
+++ b/firmware/export/config.h
@@ -117,6 +117,7 @@
#define MINI2440_PAD 41
#define PHILIPS_HDD6330_PAD 42
#define PBELL_VIBE500_PAD 43
+#define MPIO_HD200_PAD 44
/* CONFIG_REMOTE_KEYPAD */
#define H100_REMOTE 1
@@ -412,6 +413,8 @@ Lyre prototype 1 */
#include "config/samsungyps3.h"
#elif defined(PBELL_VIBE500)
#include "config/vibe500.h"
+#elif defined(MPIO_HD200)
+#include "config/mpiohd200.h"
#else
/* no known platform */
#endif
diff --git a/firmware/export/wm8751.h b/firmware/export/wm8751.h
index 15170b76bc..c171642853 100644
--- a/firmware/export/wm8751.h
+++ b/firmware/export/wm8751.h
@@ -98,6 +98,15 @@ extern void audiohw_set_lineout_vol(int vol_l, int vol_r);
#define RESET 0x0f
#define RESET_RESET 0x000
+/* WM8750 only */
+#define ENHANCE_3D 0x10
+#define ENHANCE_3D_3DEN (1 << 0)
+#define ENHANCE_3D_DEPTH(x) (((x) & 0xf) << 1)
+#define ENHANCE_3D_3DLC (1 << 5)
+#define ENHANCE_3D_3DUC (1 << 6)
+#define ENHANCE_3D_MODE3D_PLAYBACK (1 << 7)
+#define ENHANCE_3D_MODE3D_RECORD (0 << 7)
+
#define ADDITIONAL1 0x17
#define ADDITIONAL1_TOEN (1 << 0)
#define ADDITIONAL1_DACINV (1 << 1)
diff --git a/firmware/sound.c b/firmware/sound.c
index d64dfcfdb9..4f95b6ed50 100644
--- a/firmware/sound.c
+++ b/firmware/sound.c
@@ -235,11 +235,12 @@ static void set_prescaled_volume(void)
dac_volume(tenthdb2reg(l), tenthdb2reg(r), false);
#elif defined(HAVE_UDA1380) || defined(HAVE_WM8975) || defined(HAVE_WM8758) \
|| defined(HAVE_WM8711) || defined(HAVE_WM8721) || defined(HAVE_WM8731) \
- || defined(HAVE_WM8751) || defined(HAVE_AS3514) || defined(HAVE_TSC2100) \
- || defined(HAVE_AK4537) || defined(HAVE_UDA1341)
+ || defined(HAVE_WM8750) || defined(HAVE_WM8751) || defined(HAVE_AS3514) \
+ || defined(HAVE_TSC2100) || defined(HAVE_AK4537) || defined(HAVE_UDA1341)
audiohw_set_master_vol(tenthdb2master(l), tenthdb2master(r));
#if defined(HAVE_WM8975) || defined(HAVE_WM8758) \
- || (defined(HAVE_WM8751) && !defined(MROBE_100)) || defined(HAVE_WM8985)
+ || defined(HAVE_WM8750) || (defined(HAVE_WM8751) && !defined(MROBE_100)) \
+ || defined(HAVE_WM8985)
audiohw_set_lineout_vol(tenthdb2master(0), tenthdb2master(0));
#endif
@@ -295,7 +296,7 @@ void sound_set_bass(int value)
return;
#if !defined(AUDIOHW_HAVE_CLIPPING)
-#if defined(HAVE_WM8751)
+#if defined(HAVE_WM8750) || defined(HAVE_WM8751)
current_bass = value;
#else
current_bass = value * 10;
@@ -319,7 +320,7 @@ void sound_set_treble(int value)
return;
#if !defined(AUDIOHW_HAVE_CLIPPING)
-#if defined(HAVE_WM8751)
+#if defined(HAVE_WM8750) || defined(HAVE_WM8751)
current_treble = value;
#else
current_treble = value * 10;
diff --git a/firmware/target/coldfire/crt0.S b/firmware/target/coldfire/crt0.S
index bc8a370823..38365c7d71 100644
--- a/firmware/target/coldfire/crt0.S
+++ b/firmware/target/coldfire/crt0.S
@@ -63,7 +63,16 @@ start:
move.l #0x00000180,%d0 /* CSCR0 - no wait states, 16 bits, no bursts */
move.l %d0,(0x088,%a0)
-#ifndef IAUDIO_M3
+#ifdef MPIO_HD200
+ /* Chip select 3 - LCD controller */
+ /* values taken from original firmware except base address*/
+ move.l #0xf0000000,%d0 /* CSAR3 - Base = 0xf0000000 */
+ move.l %d0,(0x0a4,%a0)
+ moveq.l #0x1,%d0 /* CSMR3 - 64K */
+ move.l %d0,(0x0a8,%a0)
+ move.l #0x00000980,%d0 /* CSCR3 - 1 wait state, 16 bits no bursts */
+ move.l %d0,(0x0ac,%a0)
+#elif !(defined IAUDIO_M3)
/* Chip select 1 - LCD controller */
move.l #0xf0000000,%d0 /* CSAR1 - Base = 0xf0000000 */
move.l %d0,(0x08c,%a0)
@@ -267,6 +276,14 @@ start:
or.l %d0,(0xbc,%a1)
#endif
+#ifdef MPIO_HD200
+ /* Set KEEP_ACT */
+ move.l #0x02200000,%d0
+ or.l %d0,(0xb4,%a1)
+ or.l %d0,(0xb8,%a1)
+ or.l %d0,(0xbc,%a1)
+#endif
+
/* zero out bss */
lea _edata,%a2
lea _end,%a4
diff --git a/firmware/target/coldfire/i2c-coldfire.c b/firmware/target/coldfire/i2c-coldfire.c
index ebfe0a006e..ab3018d713 100644
--- a/firmware/target/coldfire/i2c-coldfire.c
+++ b/firmware/target/coldfire/i2c-coldfire.c
@@ -70,6 +70,10 @@ void i2c_init(void)
#elif defined(IRIVER_H100_SERIES) || defined(IRIVER_H300_SERIES)
MBDR = 0; /* iRiver firmware does this */
MBCR = IEN; /* Enable interface */
+#elif defined(MPIO_HD200)
+ /* second channel */
+ MFDR2 = 0x0d;
+ MBCR2 = IEN;
#endif
}
diff --git a/firmware/target/coldfire/pcm-coldfire.c b/firmware/target/coldfire/pcm-coldfire.c
index 0782b116b4..209d227187 100644
--- a/firmware/target/coldfire/pcm-coldfire.c
+++ b/firmware/target/coldfire/pcm-coldfire.c
@@ -55,6 +55,24 @@
#define FPARM_CLOCKSEL 0
#define FPARM_CLSEL 1
+
+/* SCLK = Fs * bit clocks per word
+ * so SCLK should be Fs * 64
+ *
+ * CLOCKSEL sets SCLK freq based on Audio CLK
+ * 0x0c SCLK = Audio CLK/2 88200 * 64 = 5644800 Hz
+ * 0x06 SCLK = Audio CLK/4 44100 * 64 = 2822400 Hz
+ * 0x04 SCLK = Audio CLK/8 22050 * 64 = 1411200 Hz
+ * 0x02 SCLK = Audio CLK/16 11025 * 64 = 705600 Hz
+ *
+ * CLSEL sets MCLK1/2 DAC freq based on XTAL freq
+ * 0x01 MCLK1/2 = XTAL freq
+ * 0x02 MCLK1/2 = XTAL/2 freq
+ *
+ * Audio CLK can be XTAL freq or XTAL/2 freq (bit22 in PLLCR)
+ * we always set bit22 so Audio CLK is always XTAL freq
+ */
+
#if CONFIG_CPU == MCF5249 && defined(HAVE_UDA1380)
static const unsigned char pcm_freq_parms[HW_NUM_FREQ][2] =
{
@@ -65,6 +83,16 @@ static const unsigned char pcm_freq_parms[HW_NUM_FREQ][2] =
};
#endif
+#if CONFIG_CPU == MCF5249 && defined(HAVE_WM8750)
+static const unsigned char pcm_freq_parms[HW_NUM_FREQ][2] =
+{
+ [HW_FREQ_88] = { 0x0c, 0x01 },
+ [HW_FREQ_44] = { 0x06, 0x01 },
+ [HW_FREQ_22] = { 0x04, 0x01 },
+ [HW_FREQ_11] = { 0x02, 0x01 },
+};
+#endif
+
#if (CONFIG_CPU == MCF5250 || CONFIG_CPU == MCF5249) && defined(HAVE_TLV320)
static const unsigned char pcm_freq_parms[HW_NUM_FREQ][2] =
{
@@ -324,6 +352,7 @@ const void * pcm_play_dma_get_peak_buffer(int *count)
return (void *)((addr + 2) & ~3);
} /* pcm_play_dma_get_peak_buffer */
+#ifdef HAVE_RECORDING
/****************************************************************************
** Recording DMA transfer
**/
@@ -487,3 +516,4 @@ const void * pcm_rec_dma_get_peak_buffer(int *count)
*count = (end >> 2) - addr;
return (void *)(addr << 2);
} /* pcm_rec_dma_get_peak_buffer */
+#endif
diff --git a/firmware/target/coldfire/system-coldfire.c b/firmware/target/coldfire/system-coldfire.c
index a387824526..ba67daa3a6 100644
--- a/firmware/target/coldfire/system-coldfire.c
+++ b/firmware/target/coldfire/system-coldfire.c
@@ -152,6 +152,11 @@ default_interrupt (ADC); /* A/D converter */
#define EXCP_BUTTON_MASK 0x00000202
#define EXCP_BUTTON_VALUE 0x00000200 /* On button and !hold */
#define EXCP_PLLCR 0x10800000
+#elif defined(MPIO_HD200)
+#define EXCP_BUTTON_GPIO_READ GPIO1_READ
+#define EXCP_BUTTON_MASK 0x01000010
+#define EXCP_BUTTON_VALUE 0x01000000 /* Play button and !hold */
+#define EXCP_PLLCR 0x10800000
#else
#define EXCP_BUTTON_GPIO_READ GPIO1_READ
#define EXCP_BUTTON_MASK 0x00000022
diff --git a/tools/configure b/tools/configure
index 87646148f2..186e0d5ace 100755
--- a/tools/configure
+++ b/tools/configure
@@ -930,9 +930,12 @@ cat <<EOF
==Logik==
==Samsung== ==Tatung== 80) DAX 1GB MP3/DAB
140) YH-820 150) Elio TPJ-1022
- 141) YH-920 ==Lyre project==1
+ 141) YH-920 ==Lyre project==
142) YH-925 ==Packard Bell== 130) Lyre proto 1
143) YP-S3 160) Vibe 500 131) Mini2440
+
+ ==MPIO==
+ 170) HD200
EOF
buildfor=`input`;
@@ -2525,6 +2528,29 @@ fi
t_model="vibe500"
;;
+ 170|hd200)
+ target_id=69
+ modelname="mpiohd200"
+ target="-DMPIO_HD200"
+ memory=16 # always
+ coldfirecc
+ tool="$rootdir/tools/scramble -add=hd20"
+ bmp2rb_mono="$rootdir/tools/bmp2rb -f 0"
+ bmp2rb_native="$rootdir/tools/bmp2rb -f 7"
+ output="rockbox.mpio"
+ bootoutput="bootloader.mpio"
+ appextra="recorder:gui"
+ plugins="yes"
+ swcodec="yes"
+ # toolset is the tools within the tools directory that we build for
+ # this particular target.
+ toolset="$genericbitmaptools"
+ # architecture, manufacturer and model for the target-tree build
+ t_cpu="coldfire"
+ t_manufacturer="mpio"
+ t_model="hd200"
+ ;;
+
*)
echo "Please select a supported target platform!"
exit 7
diff --git a/tools/scramble.c b/tools/scramble.c
index ed972f7768..7d33e4b203 100644
--- a/tools/scramble.c
+++ b/tools/scramble.c
@@ -125,7 +125,7 @@ void usage(void)
"\t tpj2, c200, e200, giga, gigs, m100, m500, d2,\n");
printf("\t 9200, 1630, 6330, ldax, m200, c100, clip, e2v2,\n"
"\t m2v4, fuze, c2v2, clv2, y820, y920, y925, x747,\n"
- "\t 747p, x777, nn2g, m244, cli+, fuz2)\n");
+ "\t 747p, x777, nn2g, m244, cli+, fuz2, hd20)\n");
printf("\nNo option results in Archos standard player/recorder format.\n");
exit(1);
@@ -328,6 +328,8 @@ int main (int argc, char** argv)
modelnum = 68;
else if (!strcmp(&argv[1][5], "m244"))
modelnum = 131;
+ else if (!strcmp(&argv[1][5], "hd20")) /* MPIO HD200 */
+ modelnum = 69;
else {
fprintf(stderr, "unsupported model: %s\n", &argv[1][5]);
return 2;
diff --git a/uisimulator/sdl/button.c b/uisimulator/sdl/button.c
index 4fd276ac97..2bb7764782 100644
--- a/uisimulator/sdl/button.c
+++ b/uisimulator/sdl/button.c
@@ -1305,6 +1305,30 @@ void button_event(int key, bool pressed)
case SDLK_KP_MULTIPLY:
new_btn = BUTTON_REC;
break;
+
+#elif CONFIG_KEYPAD == MPIO_HD200_PAD
+ case SDLK_UP:
+ new_btn = BUTTON_PREV;
+ break;
+ case SDLK_DOWN:
+ new_btn = BUTTON_NEXT;
+ break;
+ case SDLK_SPACE:
+ new_btn = BUTTON_SELECT;
+ break;
+ case SDLK_RETURN:
+ new_btn = BUTTON_PLAY;
+ break;
+ case SDLK_LEFT:
+ new_btn = BUTTON_VOL_DOWN;
+ break;
+ case SDLK_RIGHT:
+ new_btn = BUTTON_VOL_UP;
+ break;
+ case SDLK_ESCAPE:
+ new_btn = BUTTON_REC;
+ break;
+
#else
#error No keymap defined!
#endif /* CONFIG_KEYPAD */
@@ -1850,6 +1874,18 @@ struct button_map bm[] = {
{ SDLK_KP3, 311, 569, 47, "Menu" },
{ 0, 0, 0, 0, "None" }
};
+#elif defined (MPIO_HD200)
+struct button_map bm[] = {
+ { SDLK_ESCAPE, 369, 257, 20, "Rec" },
+ { SDLK_RETURN, 369, 305, 20, "Play/Stop" },
+ { SDLK_UP, 353, 168, 10, "Rew" },
+ { SDLK_DOWN, 353, 198, 10, "FF" },
+ { SDLK_SPACE, 353, 186, 10, "Select" },
+ { SDLK_LEFT, 123, 67, 20, "Vol Down" },
+ { SDLK_RIGHT, 206, 67, 20, "Vol Up" },
+ { SDLK_h, 369, 402, 30, "Hold" },
+ { 0, 0, 0, 0, "None" }
+};
#else
struct button_map bm[] = {
{ 0, 0, 0, 0, ""}
diff --git a/uisimulator/sdl/uisdl.h b/uisimulator/sdl/uisdl.h
index ca422c66ef..dac84ffb74 100644
--- a/uisimulator/sdl/uisdl.h
+++ b/uisimulator/sdl/uisdl.h
@@ -389,6 +389,14 @@
#define UI_HEIGHT 488 /* height of GUI window */
#define UI_LCD_POSX 64 /* x position of lcd */
#define UI_LCD_POSY 61 /* y position of lcd */
+
+#elif defined(MPIO_HD200)
+#define UI_TITLE "MPIO HD200"
+#define UI_WIDTH 430 /* width of GUI window */
+#define UI_HEIGHT 479 /* height of GUI window */
+#define UI_LCD_POSX 101
+#define UI_LCD_POSY 195
+
#else
#error no UI defines
#endif