Index: apps/recorder/radio.c =================================================================== --- apps/recorder/radio.c (revision 15565) +++ apps/recorder/radio.c (working copy) @@ -81,6 +81,10 @@ #define FM_NEXT_PRESET #define FM_PREV_PRESET +#elif CONFIG_KEYPAD == IRIVER_H10_PAD +#define FM_PRESET +#define FM_MODE + #elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) #define FM_PRESET #define FM_MODE Index: apps/keymaps/keymap-h10.c =================================================================== --- apps/keymaps/keymap-h10.c (revision 15565) +++ apps/keymaps/keymap-h10.c (working copy) @@ -305,6 +305,26 @@ LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) }; /* button_context_recscreen */ +static const struct button_mapping button_context_radio[] = { + { ACTION_FM_PRESET, BUTTON_RIGHT | BUTTON_REL, BUTTON_RIGHT }, + { ACTION_FM_MENU, BUTTON_RIGHT | BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_FM_MODE, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_FM_STOP, BUTTON_PLAY | BUTTON_REPEAT, BUTTON_PLAY }, + { ACTION_FM_EXIT, BUTTON_POWER, BUTTON_NONE }, + { ACTION_FM_PLAY, BUTTON_PLAY | BUTTON_REL, BUTTON_PLAY }, + { ACTION_SETTINGS_INC, BUTTON_SCROLL_UP, BUTTON_NONE }, + { ACTION_SETTINGS_INCREPEAT, BUTTON_SCROLL_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_SETTINGS_DEC, BUTTON_SCROLL_DOWN, BUTTON_NONE }, + { ACTION_SETTINGS_DECREPEAT, BUTTON_SCROLL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_PREV, BUTTON_REW, BUTTON_NONE }, + { ACTION_STD_PREVREPEAT, BUTTON_REW|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_FF, BUTTON_NONE }, + { ACTION_STD_NEXTREPEAT, BUTTON_FF|BUTTON_REPEAT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST + +}; + static const struct button_mapping* get_context_mapping_remote( int context ) { context ^= CONTEXT_REMOTE; @@ -385,7 +405,8 @@ return button_context_keyboard; case CONTEXT_RECSCREEN: return button_context_recscreen; - + case CONTEXT_FM: + return button_context_radio; default: return button_context_standard; } Index: firmware/export/config-h10.h =================================================================== --- firmware/export/config-h10.h (revision 15565) +++ firmware/export/config-h10.h (working copy) @@ -12,7 +12,7 @@ #define HAVE_RECORDING /* Define bitmask of input sources - recordable bitmask can be defined explicitly if different */ -#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN) +#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN | SRC_CAP_FMRADIO) /* define the bitmask of hardware sample rates */ #define HW_SAMPR_CAPS (SAMPR_CAP_44) @@ -85,8 +85,8 @@ #define AB_REPEAT_ENABLE 1 /* FM Tuner */ -/*#define CONFIG_TUNER TEA5767 -#define CONFIG_TUNER_XTAL 32768 *//* TODO: what is this? */ +#define CONFIG_TUNER TEA5767 +#define CONFIG_TUNER_XTAL 32768 /* Define this for LCD backlight available */ #define HAVE_BACKLIGHT Index: firmware/export/config-h10_5gb.h =================================================================== --- firmware/export/config-h10_5gb.h (revision 15565) +++ firmware/export/config-h10_5gb.h (working copy) @@ -12,7 +12,7 @@ #define HAVE_RECORDING /* Define bitmask of input sources - recordable bitmask can be defined explicitly if different */ -#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN) +#define INPUT_SRC_CAPS (SRC_CAP_MIC | SRC_CAP_LINEIN | SRC_CAP_FMRADIO) /* define the bitmask of hardware sample rates */ #define HW_SAMPR_CAPS (SAMPR_CAP_44) @@ -71,8 +71,8 @@ #define AB_REPEAT_ENABLE 1 /* FM Tuner */ -/*#define CONFIG_TUNER TEA5767 -#define CONFIG_TUNER_XTAL 32768 *//* TODO: what is this? */ +#define CONFIG_TUNER TEA5767 +#define CONFIG_TUNER_XTAL 32768 /* Define this for LCD backlight available */ #define HAVE_BACKLIGHT Index: firmware/SOURCES =================================================================== --- firmware/SOURCES (revision 15565) +++ firmware/SOURCES (working copy) @@ -557,6 +557,7 @@ target/arm/iriver/h10/adc-h10.c target/arm/iriver/h10/backlight-h10.c target/arm/iriver/h10/button-h10.c +target/arm/iriver/h10/fmradio_i2c-h10.c target/arm/iriver/h10/lcd-h10_20gb.c target/arm/iriver/h10/power-h10.c target/arm/iriver/h10/powermgmt-h10.c @@ -573,6 +574,7 @@ target/arm/iriver/h10/adc-h10.c target/arm/iriver/h10/backlight-h10.c target/arm/iriver/h10/button-h10.c +target/arm/iriver/h10/fmradio_i2c-h10.c target/arm/iriver/h10/lcd-h10_5gb.c target/arm/iriver/h10/power-h10.c target/arm/iriver/h10/powermgmt-h10.c Index: firmware/target/arm/audio-pp.c =================================================================== --- firmware/target/arm/audio-pp.c (revision 15565) +++ firmware/target/arm/audio-pp.c (working copy) @@ -35,6 +35,7 @@ /* Prevent pops from unneeded switching */ static int last_source = AUDIO_SRC_PLAYBACK; #ifdef HAVE_FMRADIO_REC + bool recording = flags & SRCF_RECORDING; static bool last_recording = false; #endif @@ -72,7 +73,7 @@ #ifdef HAVE_FMRADIO_REC case AUDIO_SRC_FMRADIO: /* recording and playback */ if (!recording) - audiohw_set_recvol(0, 0, AUDIO_GAIN_LINEIN); + audiohw_set_recvol(0x17, 0x17, AUDIO_GAIN_LINEIN); if (source == last_source && recording == last_recording) break; Index: firmware/target/arm/iriver/h10/power-h10.c =================================================================== --- firmware/target/arm/iriver/h10/power-h10.c (revision 15565) +++ firmware/target/arm/iriver/h10/power-h10.c (working copy) @@ -35,18 +35,25 @@ bool charger_enabled; #endif -#if 0 #if CONFIG_TUNER bool tuner_power(bool status) { (void)status; /* TODO: tuner power control */ - return true; + if(status==true) + { + /* switch recording input to the tuner */ + GPIO_SET_BITWISE(GPIOB_OUTPUT_VAL, 0x04); + } + else + { + GPIO_CLEAR_BITWISE(GPIOB_OUTPUT_VAL, 0x04); + } + return status; } #endif /* #if CONFIG_TUNER */ -#endif void power_init(void) { Index: firmware/drivers/audio/wm8731.c =================================================================== --- firmware/drivers/audio/wm8731.c (revision 15565) +++ firmware/drivers/audio/wm8731.c (working copy) @@ -319,6 +319,15 @@ void audiohw_set_monitor(int enable) { - /* TODO: Implement for FM monitoring */ - (void)enable; + if(enable) + { + wm8731_regs[AAPCTRL] |= AAPCTRL_BYPASS; + wm8731_regs[AAPCTRL] &=~ (AAPCTRL_DACSEL | AAPCTRL_SIDETONE); + wm8731_write(AAPCTRL, wm8731_regs[AAPCTRL]); + } + else { + wm8731_regs[AAPCTRL] &=~ AAPCTRL_BYPASS; + wm8731_regs[AAPCTRL] |= AAPCTRL_DACSEL | AAPCTRL_SIDETONE; + wm8731_write(AAPCTRL, wm8731_regs[AAPCTRL]); + } }