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
rk3399 linux ac108音频杂音调试
最新推荐文章于 2024-08-07 19:39:11 发布