diff options
Diffstat (limited to 'sound/soc/codecs/rt5640.c')
-rw-r--r-- | sound/soc/codecs/rt5640.c | 47 |
1 files changed, 25 insertions, 22 deletions
diff --git a/sound/soc/codecs/rt5640.c b/sound/soc/codecs/rt5640.c index 4f50b39cb48a..8407c638cf8a 100644 --- a/sound/soc/codecs/rt5640.c +++ b/sound/soc/codecs/rt5640.c @@ -25,7 +25,7 @@ #include <sound/tlv.h> #include "rt5640.h" -#if (CONFIG_SND_SOC_RT5642_MODULE | CONFIG_SND_SOC_RT5642) +#if defined(CONFIG_SND_SOC_RT5642_MODULE) || defined(CONFIG_SND_SOC_RT5642) #include "rt5640-dsp.h" #endif @@ -422,8 +422,18 @@ static int rt5640_readable_register( int rt5640_headset_detect(struct snd_soc_codec *codec, int jack_insert) { int jack_type; + int sclk_src; if (jack_insert) { + if (SND_SOC_BIAS_OFF == codec->dapm.bias_level) { + snd_soc_write(codec, RT5640_PWR_ANLG1, 0x2004); + snd_soc_write(codec, RT5640_MICBIAS, 0x3830); + snd_soc_write(codec, RT5640_DUMMY1 , 0x3701); + } + sclk_src = snd_soc_read(codec, RT5640_GLB_CLK) & + RT5640_SCLK_SRC_MASK; + snd_soc_update_bits(codec, RT5640_GLB_CLK, + RT5640_SCLK_SRC_MASK, 0x3 << RT5640_SCLK_SRC_SFT); snd_soc_update_bits(codec, RT5640_PWR_ANLG1, RT5640_PWR_LDO2, RT5640_PWR_LDO2); snd_soc_update_bits(codec, RT5640_PWR_ANLG2, @@ -435,13 +445,15 @@ int rt5640_headset_detect(struct snd_soc_codec *codec, int jack_insert) RT5640_PWR_MB_PU | RT5640_PWR_CLK25M_PU); snd_soc_update_bits(codec, RT5640_DUMMY1, 0x1, 0x1); - msleep(50); + msleep(100); if (snd_soc_read(codec, RT5640_IRQ_CTRL2) & 0x8) jack_type = RT5640_HEADPHO_DET; else jack_type = RT5640_HEADSET_DET; snd_soc_update_bits(codec, RT5640_IRQ_CTRL2, RT5640_MB1_OC_CLR, 0); + snd_soc_update_bits(codec, RT5640_GLB_CLK, + RT5640_SCLK_SRC_MASK, sclk_src); } else { snd_soc_update_bits(codec, RT5640_MICBIAS, RT5640_MIC1_OVCD_MASK, @@ -1167,8 +1179,6 @@ static int spk_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { struct snd_soc_codec *codec = w->codec; - static unsigned int spkl_out_enable; - static unsigned int spkr_out_enable; switch (event) { case SND_SOC_DAPM_POST_PMU: @@ -1194,9 +1204,6 @@ static int spk_event(struct snd_soc_dapm_widget *w, static int hp_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) { - struct snd_soc_codec *codec = w->codec; - static unsigned int hp_out_enable; - switch (event) { case SND_SOC_DAPM_POST_PMU: pr_info("hp_event --SND_SOC_DAPM_POST_PMU\n"); @@ -1808,9 +1815,8 @@ static int get_sdp_info(struct snd_soc_codec *codec, int dai_id) ret |= RT5640_U_IF3; break; -#if (CONFIG_SND_SOC_RT5643_MODULE | CONFIG_SND_SOC_RT5643 | \ - CONFIG_SND_SOC_RT5646_MODULE | CONFIG_SND_SOC_RT5646) - +#if defined(CONFIG_SND_SOC_RT5643_MODULE) || defined(CONFIG_SND_SOC_RT5643) || \ + defined(CONFIG_SND_SOC_RT5646_MODULE) || defined(CONFIG_SND_SOC_RT5646) case RT5640_AIF3: if (val == RT5640_IF_312 || val == RT5640_IF_321) ret |= RT5640_U_IF1; @@ -1910,8 +1916,8 @@ static int rt5640_hw_params(struct snd_pcm_substream *substream, RT5640_I2S_DL_MASK, val_len); snd_soc_update_bits(codec, RT5640_ADDA_CLK1, mask_clk, val_clk); } -#if (CONFIG_SND_SOC_RT5643_MODULE | CONFIG_SND_SOC_RT5643 | \ - CONFIG_SND_SOC_RT5646_MODULE | CONFIG_SND_SOC_RT5646) +#if defined(CONFIG_SND_SOC_RT5643_MODULE) || defined(CONFIG_SND_SOC_RT5643) || \ + defined(CONFIG_SND_SOC_RT5646_MODULE) || defined(CONFIG_SND_SOC_RT5646) if (dai_sel & RT5640_U_IF3) { mask_clk = RT5640_I2S_BCLK_MS3_MASK | RT5640_I2S_PD3_MASK; val_clk = bclk_ms << RT5640_I2S_BCLK_MS3_SFT | @@ -1994,8 +2000,8 @@ static int rt5640_set_dai_fmt(struct snd_soc_dai *dai, unsigned int fmt) RT5640_I2S_MS_MASK | RT5640_I2S_BP_MASK | RT5640_I2S_DF_MASK, reg_val); } -#if (CONFIG_SND_SOC_RT5643_MODULE | CONFIG_SND_SOC_RT5643 | \ - CONFIG_SND_SOC_RT5646_MODULE | CONFIG_SND_SOC_RT5646) +#if defined(CONFIG_SND_SOC_RT5643_MODULE) || defined(CONFIG_SND_SOC_RT5643) || \ + defined(CONFIG_SND_SOC_RT5646_MODULE) || defined(CONFIG_SND_SOC_RT5646) if (dai_sel & RT5640_U_IF3) { snd_soc_update_bits(codec, RT5640_I2S3_SDP, RT5640_I2S_MS_MASK | RT5640_I2S_BP_MASK | @@ -2123,10 +2129,8 @@ static int rt5640_set_dai_pll(struct snd_soc_dai *dai, int pll_id, int source, break; case RT5640_PLL1_S_BCLK1: case RT5640_PLL1_S_BCLK2: - -#if (CONFIG_SND_SOC_RT5643_MODULE | CONFIG_SND_SOC_RT5643 | \ - CONFIG_SND_SOC_RT5646_MODULE | CONFIG_SND_SOC_RT5646) - +#if defined(CONFIG_SND_SOC_RT5643_MODULE) || defined(CONFIG_SND_SOC_RT5643) || \ + defined(CONFIG_SND_SOC_RT5646_MODULE) || defined(CONFIG_SND_SOC_RT5646) case RT5640_PLL1_S_BCLK3: #endif @@ -2346,8 +2350,7 @@ static int rt5640_probe(struct snd_soc_codec *codec) rt5640_reg_init(codec); #endif - -#if (CONFIG_SND_SOC_RT5642_MODULE | CONFIG_SND_SOC_RT5642) +#if defined(CONFIG_SND_SOC_RT5642_MODULE) || defined(CONFIG_SND_SOC_RT5642) rt5640_register_dsp(codec); #endif @@ -2446,8 +2449,8 @@ struct snd_soc_dai_driver rt5640_dai[] = { }, .ops = &rt5640_aif_dai_ops, }, -#if (CONFIG_SND_SOC_RT5643_MODULE | CONFIG_SND_SOC_RT5643 | \ - CONFIG_SND_SOC_RT5646_MODULE | CONFIG_SND_SOC_RT5646) +#if defined(CONFIG_SND_SOC_RT5643_MODULE) || defined(CONFIG_SND_SOC_RT5643) || \ + defined(CONFIG_SND_SOC_RT5646_MODULE) || defined(CONFIG_SND_SOC_RT5646) { .name = "rt5640-aif3", .id = RT5640_AIF3, |