From 716c7c9bee6c75da9748d493bd5c953ec8c752f9 Mon Sep 17 00:00:00 2001 From: Alin Jerpelea Date: Fri, 11 Oct 2019 15:46:15 +0000 Subject: [PATCH] Merged in alinjerpelea/nuttx (pull request #1048) boards: arm: cxd56xx: audio: add power_control and audio_tone_generator * boards: arm: cxd56xx: audio: add power_control Add a simeple way to control the audio power for userspace apps Signed-off-by: Alin Jerpelea * boards: arm: cxd56xx: audio: add audio_tone_generator Add a simple way to control the audio buzzer with defined frequency for userspace apps Signed-off-by: Alin Jerpelea Approved-by: Gregory Nutt --- arch/arm/include/cxd56xx/audio.h | 6 ++ boards/arm/cxd56xx/common/src/cxd56_audio.c | 70 +++++++++++++++++++ .../arm/cxd56xx/drivers/audio/cxd56_audio.c | 45 ++++++++++++ .../cxd56xx/spresense/include/cxd56_audio.h | 11 +++ 4 files changed, 132 insertions(+) diff --git a/arch/arm/include/cxd56xx/audio.h b/arch/arm/include/cxd56xx/audio.h index 7653de2b92..030882f9ce 100644 --- a/arch/arm/include/cxd56xx/audio.h +++ b/arch/arm/include/cxd56xx/audio.h @@ -939,6 +939,12 @@ CXD56_AUDIO_ECODE cxd56_audio_set_micmap(uint32_t map); uint32_t cxd56_audio_get_micmap(void); +/* Tone generator + * + * Setup tone generator + */ +bool board_audio_tone_generator(bool en, int16_t vol, uint16_t freq); + #ifdef __cplusplus } /* end of extern "C" */ #endif /* __cplusplus */ diff --git a/boards/arm/cxd56xx/common/src/cxd56_audio.c b/boards/arm/cxd56xx/common/src/cxd56_audio.c index 1f1e6c5863..9c313c0d92 100644 --- a/boards/arm/cxd56xx/common/src/cxd56_audio.c +++ b/boards/arm/cxd56xx/common/src/cxd56_audio.c @@ -47,6 +47,7 @@ #include #include +#include #include "chip.h" #include "up_arch.h" @@ -104,6 +105,75 @@ static bool check_pin_i2s_mode(uint32_t pin) * Public Functions ****************************************************************************/ +/**************************************************************************** + * Name: board_audio_power_control + * + * Description: + * Power on/off the audio device on the board. + * + ****************************************************************************/ +bool board_audio_power_control(bool en) +{ + if (en) + { + /* Enable I2S pin. */ + + cxd56_audio_en_i2s_io(); + + /* Enable speaker output. */ + + cxd56_audio_set_spout(true); + + /* Power on Audio driver */ + + if (cxd56_audio_poweron() != 0) + { + return false; + } + + /* Enable BaseBand driver output */ + + if (cxd56_audio_en_output() != 0) + { + return false; + } + + /* Cancel output mute. */ + + board_external_amp_mute_control(false); + } + else + { + /* Set output mute. */ + + board_external_amp_mute_control(true); + + /* Disable speaker output. */ + + cxd56_audio_set_spout(false); + + /* Disable I2S pin. */ + + cxd56_audio_dis_i2s_io(); + + /* Power off Audio driver */ + + if (cxd56_audio_dis_output() != 0) + { + return false; + } + + /* Disable BaseBand driver output */ + + if (cxd56_audio_poweroff() != 0) + { + return false; + } + } + + return true; +} + /**************************************************************************** * Name: board_aca_power_control * diff --git a/boards/arm/cxd56xx/drivers/audio/cxd56_audio.c b/boards/arm/cxd56xx/drivers/audio/cxd56_audio.c index dbe8616c04..fc63212936 100644 --- a/boards/arm/cxd56xx/drivers/audio/cxd56_audio.c +++ b/boards/arm/cxd56xx/drivers/audio/cxd56_audio.c @@ -1303,3 +1303,48 @@ uint32_t cxd56_audio_get_micmap(void) { return cxd56_audio_config_get_micmap(); } + +bool board_audio_tone_generator(bool en, int16_t vol, uint16_t freq) +{ + if (!en) + { + /* Stop beep */ + + if (cxd56_audio_stop_beep() != 0) + { + return false; + } + } + + if (0 != freq) + { + /* Set beep frequency parameter */ + + if (cxd56_audio_set_beep_freq(freq) != 0) + { + return false; + } + } + + if (255 != vol) + { + /* Set beep volume parameter */ + + if (cxd56_audio_set_beep_vol(vol) != 0) + { + return false; + } + } + + if (en) + { + /* Play beep */ + + if (cxd56_audio_play_beep() != 0) + { + return false; + } + } + + return true; +} diff --git a/boards/arm/cxd56xx/spresense/include/cxd56_audio.h b/boards/arm/cxd56xx/spresense/include/cxd56_audio.h index 63274c9471..75b030fe1d 100644 --- a/boards/arm/cxd56xx/spresense/include/cxd56_audio.h +++ b/boards/arm/cxd56xx/spresense/include/cxd56_audio.h @@ -63,6 +63,17 @@ extern "C" #define EXTERN extern #endif +/**************************************************************************** + * Name: board_audio_power_control + * + * Description: + * Power on/off the audio on the board. + * + ****************************************************************************/ + +bool board_audio_power_control(bool en); + + /**************************************************************************** * Name: board_aca_power_control *