rk3399 linux ac108音频杂音调试

    From 3748a28437f85e42afcbbd56d3f97931a1f89ab6 Mon Sep 17 00:00:00 2001
    From: zw <zw@quanyuntech.com>
    Date: Thu, 20 Jun 2019 10:46:52 +0800
    Subject: [PATCH 10/10] ac108 ok.arecord -Dhw:0,0 -d 10 -r 16000 -f S16_LE -c 4
     -t wav test.wav test ok
    
    Change-Id: Ie895a9ff248ecb28e204845530750bbb1841695f
    ---
     sound/soc/codecs/ac108.c | 27 ++++++++++++++-------------
     1 file changed, 14 insertions(+), 13 deletions(-)
    
    diff --git a/sound/soc/codecs/ac108.c b/sound/soc/codecs/ac108.c
    index 2785a40..542c4b6 100644
    --- a/sound/soc/codecs/ac108.c
    +++ b/sound/soc/codecs/ac108.c
    @@ -48,18 +48,18 @@
     //test config
     #define AC108_DAPM_TEST_EN		0
     #define AC108_CODEC_RW_TEST_EN	0
    -#define AC108_ADC_PATTERN_SEL	ADC_PTN_NORMAL //ADC_PTN_NORMAL		//0:ADC normal,  1:0x5A5A5A,  2:0x123456,  3:0x000000,  4~7:I2S_RX_DATA,  other:reserved
    +#define AC108_ADC_PATTERN_SEL   ADC_PTN_NORMAL//	ADC_PTN_NORMAL //ADC_PTN_NORMAL		//0:ADC normal,  1:0x5A5A5A,  2:0x123456,  3:0x000000,  4~7:I2S_RX_DATA,  other:reserved
     
     
     //AC108 config
    -#define AC108_CHANNELS_MAX		8		//range[1, 16] 
    -#define AC108_SLOT_WIDTH		32		//16bit or 32bit slot width, other value will be reserved
    -#define AC108_ENCODING_EN		1		//TX Encoding mode enable
    -#define AC108_ENCODING_CH_NUMS 	8		//TX Encoding channel numbers, must be dual, range[1, 16]
    +#define AC108_CHANNELS_MAX		4		//range[1, 16] 
    +#define AC108_SLOT_WIDTH		16		//16bit or 32bit slot width, other value will be reserved
    +#define AC108_ENCODING_EN		0		//TX Encoding mode enable
    +#define AC108_ENCODING_CH_NUMS 	4		//TX Encoding channel numbers, must be dual, range[1, 16]
     #define AC108_PGA_GAIN			ADC_PGA_GAIN_28dB	//0dB~30dB and -6dB, except 1~2dB
     #define AC108_LRCK_PERIOD		((AC108_SLOT_WIDTH*(AC108_ENCODING_EN ? 2 : AC108_CHANNELS_MAX))/2)	//range[1, 1024], default PCM mode, I2S/LJ/RJ mode shall divide by 2
     
    -#define AC108_SDO2_EN			0		//AC108 SDO2/TX2 Enable (SDO1 has be enabled default)
    +#define AC108_SDO2_EN			1		//AC108 SDO2/TX2 Enable (SDO1 has be enabled default)
     #define AC108_DMIC_EN			0		//0:ADC	 1:DMIC
     #define AC108_IDLE_RESET_EN		1		//reset AC108 when in idle time
     #define AC108_POWERON_RESET_EN	1		//AC108 poweron soft reset enable
    @@ -743,7 +743,7 @@ static void ac108_hw_init(struct i2c_client *i2c)
     {
     	/*** Chip reset ***/
     	//ac108_write(CHIP_AUDIO_RST, 0x12, i2c);	/*0x00=0x12: reset all registers to their default state*/
    -
    +printk("func:%s,i2c addr:0x%02x\n",__func__,i2c->addr);
     #if !AC108_DMIC_EN
     	/*** Analog voltage enable ***/
     	ac108_write(PWR_CTRL6, 0x01, i2c);		/*0x06=0x01: Enable Analog LDO*/
    @@ -836,7 +836,7 @@ static int ac108_set_sysclk(struct snd_soc_dai *dai, int clk_id, unsigned int fr
     	ac108_multi_chips_update_bits(SYSCLK_CTRL, 0x1<<SYSCLK_EN, 0x1<<SYSCLK_EN);
     	return 0;
     }
    -
    +#if 1
     static int ac108_set_pll(struct snd_soc_dai *dai, int pll_id, int source, unsigned int freq_in, unsigned int freq_out)
     {
     	u32 i,m1,m2,n,k1,k2;
    @@ -914,7 +914,7 @@ static int ac108_set_pll(struct snd_soc_dai *dai, int pll_id, int source, unsign
     	
     	return 0;
     }
    -
    +#endif
     static int ac108_set_clkdiv(struct snd_soc_dai *dai, int div_id, int div)
     {
     	u32 i,bclk_div,bclk_div_reg_val;
    @@ -1052,9 +1052,9 @@ static int ac108_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_h
     	for(i=0; i<ARRAY_SIZE(ac108_sample_rate); i++){
     		if(ac108_sample_rate[i].real_val == params_rate(params)) {/// (AC108_ENCODING_EN ? AC108_ENCODING_CH_NUMS/2 : 1)){
     			ac108_multi_chips_update_bits(ADC_SPRC, 0xf<<ADC_FS_I2S1, ac108_sample_rate[i].reg_val<<ADC_FS_I2S1);
    -			ac108_set_sysclk(dai,0,0,0);
    +			ac108_set_sysclk(dai,1,1,1);
     			//ac108_set_pll(dai,0,1,12288000,24576000);
    -			ac108_set_pll(dai,1,1,4096000,24576000);
    +			ac108_set_pll(dai,1,1,1024000,24576000);
     			ac108_set_fmt(dai,SND_SOC_DAIFMT_I2S|SND_SOC_DAIFMT_CBS_CFS|SND_SOC_DAIFMT_NB_NF);
     			break;
     		}
    @@ -1178,7 +1178,7 @@ static int ac108_hw_free(struct snd_pcm_substream *substream, struct snd_soc_dai
     static struct snd_soc_dai_ops ac108_dai_ops = {
     	/*DAI clocking configuration*/
     	.set_sysclk = ac108_set_sysclk,
    -	.set_pll = ac108_set_pll,
    +//	.set_pll = ac108_set_pll,
     	.set_clkdiv = ac108_set_clkdiv,
     
     	/*ALSA PCM audio operations*/
    @@ -1202,6 +1202,7 @@ static struct snd_soc_dai_driver ac108_dai0 = {
     	.ops = &ac108_dai_ops,
     };
     
    +#if 0
     static struct snd_soc_dai_driver ac108_dai1 = {
     	.name = "ac108-pcm1",
     	.capture = {
    @@ -1213,7 +1214,7 @@ static struct snd_soc_dai_driver ac108_dai1 = {
     	},
     	.ops = &ac108_dai_ops,
     };
    -#if 0
    +//if 0
     static struct snd_soc_dai_driver ac108_dai2 = {
     	.name = "ac108-pcm2",
     	.capture = {
    -- 
    2.7.4

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值