/*************************************************************************** * * Copyright 2015-2019 BES. * All rights reserved. All unpublished rights reserved. * * No part of this work may be used or reproduced in any form or by any * means, or stored in a database or retrieval system, without prior written * permission of BES. * * Use of this work is governed by a license granted by BES. * This work contains confidential and proprietary information of * BES. which is protected by copyright, trade secret, * trademark and other intellectual property rights. * ****************************************************************************/ #include "cmsis.h" #include "hal_codec.h" #include "hal_trace.h" #include "tgt_hardware.h" extern const CODEC_ADC_VOL_T codec_adc_vol[TGT_ADC_VOL_LEVEL_QTY]; #ifndef CODEC_MIC_CH0_SADC_VOL #define CODEC_MIC_CH0_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_MIC_CH1_SADC_VOL #define CODEC_MIC_CH1_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_MIC_CH2_SADC_VOL #define CODEC_MIC_CH2_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_MIC_CH3_SADC_VOL #define CODEC_MIC_CH3_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_MIC_CH4_SADC_VOL #define CODEC_MIC_CH4_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_MIC_CH5_SADC_VOL #define CODEC_MIC_CH5_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_MIC_CH6_SADC_VOL #define CODEC_MIC_CH6_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_MIC_CH7_SADC_VOL #define CODEC_MIC_CH7_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_DIGMIC_CH0_SADC_VOL #define CODEC_DIGMIC_CH0_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_DIGMIC_CH1_SADC_VOL #define CODEC_DIGMIC_CH1_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_DIGMIC_CH2_SADC_VOL #define CODEC_DIGMIC_CH2_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_DIGMIC_CH3_SADC_VOL #define CODEC_DIGMIC_CH3_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_DIGMIC_CH4_SADC_VOL #define CODEC_DIGMIC_CH4_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_DIGMIC_CH5_SADC_VOL #define CODEC_DIGMIC_CH5_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_DIGMIC_CH6_SADC_VOL #define CODEC_DIGMIC_CH6_SADC_VOL CODEC_SADC_VOL #endif #ifndef CODEC_DIGMIC_CH7_SADC_VOL #define CODEC_DIGMIC_CH7_SADC_VOL CODEC_SADC_VOL #endif static const uint8_t codec_mic_chan_vol[] = { CODEC_MIC_CH0_SADC_VOL, CODEC_MIC_CH1_SADC_VOL, CODEC_MIC_CH2_SADC_VOL, CODEC_MIC_CH3_SADC_VOL, CODEC_MIC_CH4_SADC_VOL, CODEC_MIC_CH5_SADC_VOL, CODEC_MIC_CH6_SADC_VOL, CODEC_MIC_CH7_SADC_VOL, CODEC_DIGMIC_CH0_SADC_VOL, CODEC_DIGMIC_CH1_SADC_VOL, CODEC_DIGMIC_CH2_SADC_VOL, CODEC_DIGMIC_CH3_SADC_VOL, CODEC_DIGMIC_CH4_SADC_VOL, CODEC_DIGMIC_CH5_SADC_VOL, CODEC_DIGMIC_CH6_SADC_VOL, CODEC_DIGMIC_CH7_SADC_VOL, }; uint32_t hal_codec_get_input_path_cfg(enum AUD_IO_PATH_T io_path) { int i; for (i = 0; i < CFG_HW_AUD_INPUT_PATH_NUM; i++) { if (io_path == cfg_audio_input_path_cfg[i].io_path) { return cfg_audio_input_path_cfg[i].cfg; } } ASSERT(false, "%s: Bad input path: %d", __func__, io_path); return 0; } const struct CODEC_DAC_VOL_T *hal_codec_get_dac_volume(uint32_t index) { uint32_t _array_sizeof_vol = ARRAY_SIZE(codec_dac_vol); if (index < _array_sizeof_vol) { return &codec_dac_vol[index]; } else { return &codec_dac_vol[_array_sizeof_vol-1]; } } const CODEC_ADC_VOL_T *hal_codec_get_adc_volume(uint32_t index) { uint32_t _array_sizeof_vol = ARRAY_SIZE(codec_adc_vol); if (index < _array_sizeof_vol) { return &codec_adc_vol[index]; } else { return &codec_adc_vol[_array_sizeof_vol-1]; } } uint32_t hal_codec_get_mic_chan_volume_level(uint32_t map) { uint32_t mic_ch; mic_ch = get_lsb_pos(map); if (mic_ch < ARRAY_SIZE(codec_mic_chan_vol)) { return codec_mic_chan_vol[mic_ch]; } else { return ARRAY_SIZE(codec_adc_vol); } } uint8_t hal_codec_get_digmic_hw_index(uint8_t chan) { return chan - get_msb_pos(AUD_CHANNEL_MAP_DIGMIC_CH0); }