pinebuds/platform/hal/hal_codec_common.c

128 lines
3.8 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);
}