doubao_chat/include_lib/driver/cpu/wl82/asm/dac.h

159 lines
4.0 KiB
C
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef __DAC_H__
#define __DAC_H__
#include "generic/typedef.h"
/// \cond DO_NOT_DOCUMENT
#define DAC_44_1KHZ 0
#define DAC_48KHZ 1
#define DAC_32KHZ 2
#define DAC_22_05KHZ 3
#define DAC_24KHZ 4
#define DAC_16KHZ 5
#define DAC_11_025KHZ 6
#define DAC_12KHZ 7
#define DAC_8KHZ 8
/// \endcond
/**
* \name 淡入淡出状态
* \{
*/
#define FADE_DISABLE 0 /*!< 淡入淡出失能 */
#define FADE_VOL_OUT 1 /*!< 淡入淡出模拟音量淡出 */
#define FADE_VOL_IN 2 /*!< 淡入淡出模拟音量淡入 */
#define FADE_VOL_UPDOWN 3 /*!< 淡入淡出模拟音量调节 */
/* \} name */
/// \cond DO_NOT_DOCUMENT
struct dac_platform_data {
u8 sw_differ; /*!< 软件差分 0:不使用 1:使用 */
u8 pa_auto_mute; /*!< 关闭DAC时是否自动MUTE功放 0:不mute功放 1:MUTE功放 */
u8 pa_mute_port; /*!< 功放MUTE IO */
u8 pa_mute_value; /*!< MUTE电平值 0:低电平 1:高电平 */
u8 differ_output; /*!< 是否使用硬件差分输出模式 0:不使用 1:使用 */
u8 hw_channel; /*!< 硬件DAC模拟通道 */
u8 ch_num; /*!< 数字通道,软件输出通道数 */
u8 fade_enable; /*!< 模拟音量淡入淡出使能位 */
u8 auto_src_enable; /*!< 根据当前解码的最高采样率自动调整最佳DAC采样率 */
u16 mute_delay_ms; /*!< MUTE延时 */
u16 fade_delay_ms; /*!< 模拟音量淡入淡出延时 */
u16 sr_points; /*!< 多少个采样点进一次中断,一般不建议修改 */
u16 vcm_init_delay_ms; /*!< VCM电压初始化后等待稳定的延时ms */
u32 poweron_delay; /*!< 低功耗睡眠时恢复DAC模块的延迟us */
void (*pa_mute_cb)(u8 mute);/*!< 功放mute用户操作回调 */
};
/// \endcond
/**
* @brief dac_early_init, dac初始化
*
* @param trim_en 0:初始化不trim dac 1:初始化时trim dac
* @param hw_channel 硬件dac通道配置BIT(x)
* @param dly_msecs 延时时间
*/
void dac_early_init(u8 trim_en, u8 hw_channel, u32 dly_msecs);
/**
* @brief 打开dac模块
*
* @param struct dac_platform_data *pd dac配置参数结构体参数指针
*/
int dac_open(const struct dac_platform_data *pd);
/**
* @brief dac模块使能
*/
int dac_on(void);
/**
* @brief dac模块失能
*/
int dac_off(void);
/**
* @brief 关闭dac模块
*/
int dac_close(void);
/**
* @brief 低功耗休眠起来后恢复dac模块
*/
void dac_power_on(void);
/**
* @brief 低功耗进入前挂起dac模块
*/
void dac_power_off(void);
/**
* @brief dac数字音量设置
*
* @param volume 音量0-16384
*/
void dac_set_volume(s16 volume);
/**
* @brief dac采样率设置
*
* @param sample_rate 采样率
*/
int dac_set_sample_rate(u32 sample_rate);
/**
* @brief 获取当前dac采样率
*
* @return DAC当前采样率
*/
int dac_get_sample_rate(void);
/**
* @brief dac中断函数
*/
void dac_irq_handler(void);
/**
* @brief dac中断的回调函数设置
*
* @param priv 传入指针
* @param handler 传入的回调函数
*/
void dac_set_data_handler(void *priv, void (*handler)(void *, u8 *data, int len));
/**
* @brief dac模拟增益设置
*
* @param gain 模拟增益0-31
* @param fade_opt 淡入淡出状态位
*/
void dac_set_gain(u8 gain, u8 fade_opt);
/**
* @brief dac直通模拟增益设置
*
* @param gain 模拟增益0-31
*/
void dac_direct_set_gain(u8 gain);
/**
* @brief dac模拟增益淡入淡出设置
*
* @param enable 0:关闭 1:使能
*/
void dac_fade_inout_set(u8 enable);
/**
* @brief 读取DAC DMA BUF的单通道数据
*
* @param read_pos 读指针
* @param points_offset 偏移量
* @param data 数据指针
* @param len 数据长度
*
* @return 数据长度
*/
int audio_dac_read_single_channel(u16 *read_pos, s16 points_offset, void *data, int len);
#endif