Loading sound/soc/codecs/msm8x16-wcd.c +44 −46 Original line number Original line Diff line number Diff line Loading @@ -696,25 +696,60 @@ static int msm8x16_wcd_codec_enable_charge_pump(struct snd_soc_dapm_widget *w, dev_dbg(codec->dev, "%s: event = %d\n", __func__, event); dev_dbg(codec->dev, "%s: event = %d\n", __func__, event); switch (event) { switch (event) { case SND_SOC_DAPM_PRE_PMU: case SND_SOC_DAPM_PRE_PMU: if (!(strcmp(w->name, "EAR CP"))) if (!(strcmp(w->name, "EAR CP"))) { snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0x80, 0x80); 0x80, 0x80); else if (msm8x16_wcd->ear_pa_boost_set) { snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_SEC_ACCESS, 0xA5, 0xA5); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL3, 0x07, 0x07); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x40, 0x40); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x80, 0x80); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x02, 0x02); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0xDF, 0xDF); } } else { snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0xC0, 0xC0); 0xC0, 0xC0); } break; break; case SND_SOC_DAPM_POST_PMU: case SND_SOC_DAPM_POST_PMU: usleep_range(CODEC_DELAY_1_MS, CODEC_DELAY_1_1_MS); usleep_range(CODEC_DELAY_1_MS, CODEC_DELAY_1_1_MS); break; break; case SND_SOC_DAPM_POST_PMD: case SND_SOC_DAPM_POST_PMD: usleep_range(CODEC_DELAY_1_MS, CODEC_DELAY_1_1_MS); usleep_range(CODEC_DELAY_1_MS, CODEC_DELAY_1_1_MS); if (!(strcmp(w->name, "EAR CP"))) if (!(strcmp(w->name, "EAR CP"))) { snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0x80, 0x00); 0x80, 0x00); else { if (msm8x16_wcd->ear_pa_boost_set) { snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0x80, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x80, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x02, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x40, 0x00); } } else { snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0x40, 0x00); 0x40, 0x00); Loading Loading @@ -1641,7 +1676,6 @@ static int msm8x16_wcd_codec_enable_dig_clk(struct snd_soc_dapm_widget *w, event, w->name); event, w->name); switch (event) { switch (event) { case SND_SOC_DAPM_PRE_PMU: case SND_SOC_DAPM_PRE_PMU: if (w->shift == 2) snd_soc_update_bits(codec, w->reg, 0x80, 0x80); snd_soc_update_bits(codec, w->reg, 0x80, 0x80); if (msm8x16_wcd->spk_boost_set) { if (msm8x16_wcd->spk_boost_set) { snd_soc_update_bits(codec, snd_soc_update_bits(codec, Loading @@ -1663,28 +1697,6 @@ static int msm8x16_wcd_codec_enable_dig_clk(struct snd_soc_dapm_widget *w, snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_CURRENT_LIMIT, MSM8X16_WCD_A_ANALOG_CURRENT_LIMIT, 0x83, 0x83); 0x83, 0x83); } else if (msm8x16_wcd->ear_pa_boost_set) { snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_SEC_ACCESS, 0xA5, 0xA5); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL3, 0x07, 0x07); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x40, 0x40); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x80, 0x80); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x02, 0x02); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0xDF, 0xDF); } else { snd_soc_update_bits(codec, w->reg, 1<<w->shift, 1<<w->shift); } } break; break; case SND_SOC_DAPM_POST_PMD: case SND_SOC_DAPM_POST_PMD: Loading @@ -1695,21 +1707,6 @@ static int msm8x16_wcd_codec_enable_dig_clk(struct snd_soc_dapm_widget *w, snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0x20, 0x00); 0x20, 0x00); } else if (msm8x16_wcd->ear_pa_boost_set) { snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0x80, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x80, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x02, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x40, 0x00); } else { snd_soc_update_bits(codec, w->reg, 1<<w->shift, 0x00); } } break; break; } } Loading Loading @@ -2820,10 +2817,10 @@ static const struct snd_soc_dapm_widget msm8x16_wcd_dapm_widgets[] = { SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SUPPLY("RX1 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, SND_SOC_DAPM_SUPPLY("RX1 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0, 0, msm8x16_wcd_codec_enable_dig_clk, SND_SOC_DAPM_PRE_PMU | 0, 0, NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SUPPLY("RX2 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, SND_SOC_DAPM_SUPPLY("RX2 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 1, 0, msm8x16_wcd_codec_enable_dig_clk, SND_SOC_DAPM_PRE_PMU | 1, 0, NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SUPPLY("RX3 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, SND_SOC_DAPM_SUPPLY("RX3 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 2, 0, msm8x16_wcd_codec_enable_dig_clk, SND_SOC_DAPM_PRE_PMU | 2, 0, msm8x16_wcd_codec_enable_dig_clk, SND_SOC_DAPM_PRE_PMU | Loading Loading @@ -2992,6 +2989,7 @@ static const struct msm8x16_wcd_reg_mask_val msm8x16_wcd_reg_defaults_2_0[] = { MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SPKR_DRV_DBG, 0x01), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SPKR_DRV_DBG, 0x01), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0x5F), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0x5F), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SLOPE_COMP_IP_ZERO, 0x88), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SLOPE_COMP_IP_ZERO, 0x88), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SEC_ACCESS, 0xA5), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL3, 0x0F), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL3, 0x0F), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_CURRENT_LIMIT, 0x82), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_CURRENT_LIMIT, 0x82), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SPKR_DAC_CTL, 0x03), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SPKR_DAC_CTL, 0x03), Loading Loading
sound/soc/codecs/msm8x16-wcd.c +44 −46 Original line number Original line Diff line number Diff line Loading @@ -696,25 +696,60 @@ static int msm8x16_wcd_codec_enable_charge_pump(struct snd_soc_dapm_widget *w, dev_dbg(codec->dev, "%s: event = %d\n", __func__, event); dev_dbg(codec->dev, "%s: event = %d\n", __func__, event); switch (event) { switch (event) { case SND_SOC_DAPM_PRE_PMU: case SND_SOC_DAPM_PRE_PMU: if (!(strcmp(w->name, "EAR CP"))) if (!(strcmp(w->name, "EAR CP"))) { snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0x80, 0x80); 0x80, 0x80); else if (msm8x16_wcd->ear_pa_boost_set) { snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_SEC_ACCESS, 0xA5, 0xA5); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL3, 0x07, 0x07); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x40, 0x40); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x80, 0x80); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x02, 0x02); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0xDF, 0xDF); } } else { snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0xC0, 0xC0); 0xC0, 0xC0); } break; break; case SND_SOC_DAPM_POST_PMU: case SND_SOC_DAPM_POST_PMU: usleep_range(CODEC_DELAY_1_MS, CODEC_DELAY_1_1_MS); usleep_range(CODEC_DELAY_1_MS, CODEC_DELAY_1_1_MS); break; break; case SND_SOC_DAPM_POST_PMD: case SND_SOC_DAPM_POST_PMD: usleep_range(CODEC_DELAY_1_MS, CODEC_DELAY_1_1_MS); usleep_range(CODEC_DELAY_1_MS, CODEC_DELAY_1_1_MS); if (!(strcmp(w->name, "EAR CP"))) if (!(strcmp(w->name, "EAR CP"))) { snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0x80, 0x00); 0x80, 0x00); else { if (msm8x16_wcd->ear_pa_boost_set) { snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0x80, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x80, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x02, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x40, 0x00); } } else { snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0x40, 0x00); 0x40, 0x00); Loading Loading @@ -1641,7 +1676,6 @@ static int msm8x16_wcd_codec_enable_dig_clk(struct snd_soc_dapm_widget *w, event, w->name); event, w->name); switch (event) { switch (event) { case SND_SOC_DAPM_PRE_PMU: case SND_SOC_DAPM_PRE_PMU: if (w->shift == 2) snd_soc_update_bits(codec, w->reg, 0x80, 0x80); snd_soc_update_bits(codec, w->reg, 0x80, 0x80); if (msm8x16_wcd->spk_boost_set) { if (msm8x16_wcd->spk_boost_set) { snd_soc_update_bits(codec, snd_soc_update_bits(codec, Loading @@ -1663,28 +1697,6 @@ static int msm8x16_wcd_codec_enable_dig_clk(struct snd_soc_dapm_widget *w, snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_CURRENT_LIMIT, MSM8X16_WCD_A_ANALOG_CURRENT_LIMIT, 0x83, 0x83); 0x83, 0x83); } else if (msm8x16_wcd->ear_pa_boost_set) { snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_SEC_ACCESS, 0xA5, 0xA5); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL3, 0x07, 0x07); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x40, 0x40); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x80, 0x80); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x02, 0x02); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0xDF, 0xDF); } else { snd_soc_update_bits(codec, w->reg, 1<<w->shift, 1<<w->shift); } } break; break; case SND_SOC_DAPM_POST_PMD: case SND_SOC_DAPM_POST_PMD: Loading @@ -1695,21 +1707,6 @@ static int msm8x16_wcd_codec_enable_dig_clk(struct snd_soc_dapm_widget *w, snd_soc_update_bits(codec, snd_soc_update_bits(codec, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0x20, 0x00); 0x20, 0x00); } else if (msm8x16_wcd->ear_pa_boost_set) { snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0x80, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x80, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x02, 0x00); snd_soc_update_bits(codec, MSM8X16_WCD_A_ANALOG_BYPASS_MODE, 0x40, 0x00); } else { snd_soc_update_bits(codec, w->reg, 1<<w->shift, 0x00); } } break; break; } } Loading Loading @@ -2820,10 +2817,10 @@ static const struct snd_soc_dapm_widget msm8x16_wcd_dapm_widgets[] = { SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SUPPLY("RX1 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, SND_SOC_DAPM_SUPPLY("RX1 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 0, 0, msm8x16_wcd_codec_enable_dig_clk, SND_SOC_DAPM_PRE_PMU | 0, 0, NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SUPPLY("RX2 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, SND_SOC_DAPM_SUPPLY("RX2 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 1, 0, msm8x16_wcd_codec_enable_dig_clk, SND_SOC_DAPM_PRE_PMU | 1, 0, NULL, SND_SOC_DAPM_PRE_PMU | SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_POST_PMD), SND_SOC_DAPM_SUPPLY("RX3 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, SND_SOC_DAPM_SUPPLY("RX3 CLK", MSM8X16_WCD_A_DIGITAL_CDC_DIG_CLK_CTL, 2, 0, msm8x16_wcd_codec_enable_dig_clk, SND_SOC_DAPM_PRE_PMU | 2, 0, msm8x16_wcd_codec_enable_dig_clk, SND_SOC_DAPM_PRE_PMU | Loading Loading @@ -2992,6 +2989,7 @@ static const struct msm8x16_wcd_reg_mask_val msm8x16_wcd_reg_defaults_2_0[] = { MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SPKR_DRV_DBG, 0x01), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SPKR_DRV_DBG, 0x01), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0x5F), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_BOOST_EN_CTL, 0x5F), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SLOPE_COMP_IP_ZERO, 0x88), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SLOPE_COMP_IP_ZERO, 0x88), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SEC_ACCESS, 0xA5), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL3, 0x0F), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_PERPH_RESET_CTL3, 0x0F), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_CURRENT_LIMIT, 0x82), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_CURRENT_LIMIT, 0x82), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SPKR_DAC_CTL, 0x03), MSM8X16_WCD_REG_VAL(MSM8X16_WCD_A_ANALOG_SPKR_DAC_CTL, 0x03), Loading