From 259d20dfa9127dac2f4b90cebd459869ffe7b4d8 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=E9=99=88=E9=87=91=E6=B3=89?= Date: Tue, 14 May 2013 15:51:11 +0800 Subject: [PATCH] fix codec rk616 I2S format setting error --- sound/soc/codecs/rk616_codec.c | 54 ++++++++++++++-------------------- 1 file changed, 22 insertions(+), 32 deletions(-) diff --git a/sound/soc/codecs/rk616_codec.c b/sound/soc/codecs/rk616_codec.c index c9fc4b7b3da4..ccad50bd9ca7 100755 --- a/sound/soc/codecs/rk616_codec.c +++ b/sound/soc/codecs/rk616_codec.c @@ -493,6 +493,12 @@ static int rk616_reset(struct snd_soc_codec *codec) snd_soc_write(codec, RK616_RESET, 0x43); mdelay(10); + for (i = 0; i < RK616_MFD_REG_LEN; i++) + snd_soc_write(codec, rk616_mfd_reg_defaults[i].reg, rk616_mfd_reg_defaults[i].value); + + memcpy(codec->reg_cache, rk616_reg_defaults, + sizeof(rk616_reg_defaults)); + //close charge pump snd_soc_write(codec, RK616_CLK_CHPUMP, 0x41); @@ -500,12 +506,6 @@ static int rk616_reset(struct snd_soc_codec *codec) snd_soc_write(codec, RK616_SINGNAL_ZC_CTL1, 0x3f); snd_soc_write(codec, RK616_SINGNAL_ZC_CTL2, 0xff); - for (i = 0; i < RK616_MFD_REG_LEN; i++) - snd_soc_write(codec, rk616_mfd_reg_defaults[i].reg, rk616_mfd_reg_defaults[i].value); - - memcpy(codec->reg_cache, rk616_reg_defaults, - sizeof(rk616_reg_defaults)); - return 0; } @@ -711,16 +711,6 @@ int snd_soc_put_pgal_volsw(struct snd_kcontrol *kcontrol, } static const struct snd_kcontrol_new rk616_snd_controls[] = { - - SOC_SINGLE("I2S0 schmitt input Switch", CRU_IO_CON1, - 3, 1, 0), - SOC_SINGLE("I2S1 schmitt input Switch", CRU_IO_CON1, - 4, 1, 0), - SOC_SINGLE("I2S0 output Switch", CRU_IO_CON0, - 12, 1, 0), - SOC_SINGLE("I2S1 output Switch", CRU_IO_CON0, - 13, 1, 0), - //Add for set voice volume SOC_DOUBLE_R_TLV("Speaker Playback Volume", RK616_SPKL_CTL, RK616_SPKR_CTL, RK616_VOL_SFT, 31, 0, out_vol_tlv), @@ -1482,20 +1472,20 @@ static int rk616_hw_params(struct snd_pcm_substream *substream, switch (div) { case 16: - adc_aif1 |= RK616_ADC_VWL_16; - dac_aif1 |= RK616_DAC_VWL_16; + adc_aif2 |= RK616_ADC_WL_16; + dac_aif2 |= RK616_DAC_WL_16; break; case 20: - adc_aif1 |= RK616_ADC_VWL_20; - dac_aif1 |= RK616_DAC_VWL_20; + adc_aif2 |= RK616_ADC_WL_20; + dac_aif2 |= RK616_DAC_WL_20; break; case 24: - adc_aif1 |= RK616_ADC_VWL_24; - dac_aif1 |= RK616_DAC_VWL_24; + adc_aif2 |= RK616_ADC_WL_24; + dac_aif2 |= RK616_DAC_WL_24; break; case 32: - adc_aif1 |= RK616_ADC_VWL_32; - dac_aif1 |= RK616_DAC_VWL_32; + adc_aif2 |= RK616_ADC_WL_32; + dac_aif2 |= RK616_DAC_WL_32; break; default: return -EINVAL; @@ -1507,20 +1497,20 @@ static int rk616_hw_params(struct snd_pcm_substream *substream, switch (params_format(params)) { case SNDRV_PCM_FORMAT_S16_LE: - adc_aif2 |= RK616_ADC_WL_16; - dac_aif2 |= RK616_DAC_WL_16; + adc_aif1 |= RK616_ADC_VWL_16; + dac_aif1 |= RK616_DAC_VWL_16; break; case SNDRV_PCM_FORMAT_S20_3LE: - adc_aif2 |= RK616_ADC_WL_20; - dac_aif2 |= RK616_DAC_WL_20; + adc_aif1 |= RK616_ADC_VWL_20; + dac_aif1 |= RK616_DAC_VWL_20; break; case SNDRV_PCM_FORMAT_S24_LE: - adc_aif2 |= RK616_ADC_WL_24; - dac_aif2 |= RK616_DAC_WL_24; + adc_aif1 |= RK616_ADC_VWL_24; + dac_aif1 |= RK616_DAC_VWL_24; break; case SNDRV_PCM_FORMAT_S32_LE: - adc_aif2 |= RK616_ADC_WL_32; - dac_aif2 |= RK616_DAC_WL_32; + adc_aif1 |= RK616_ADC_VWL_32; + dac_aif1 |= RK616_DAC_VWL_32; break; default: return -EINVAL; -- 2.34.1