130 lines
4.1 KiB
C
130 lines
4.1 KiB
C
/***************************************************************************
|
|
*
|
|
* 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);
|
|
}
|
|
|