Loading sound/soc/codecs/mt6358.c +29 −4 Original line number Diff line number Diff line Loading @@ -450,6 +450,15 @@ static int mt6358_put_volsw(struct snd_kcontrol *kcontrol, priv->ana_gain[AUDIO_ANALOG_VOLUME_HSOUTR] = (reg >> RG_AUDHSGAIN_SFT) & RG_AUDHSGAIN_MASK; break; case MT6358_AUDENC_ANA_CON0: case MT6358_AUDENC_ANA_CON1: regmap_read(priv->regmap, MT6358_AUDENC_ANA_CON0, ®); priv->ana_gain[AUDIO_ANALOG_VOLUME_MICAMP1] = (reg >> RG_AUDPREAMPLGAIN_SFT) & RG_AUDPREAMPLGAIN_MASK; regmap_read(priv->regmap, MT6358_AUDENC_ANA_CON1, ®); priv->ana_gain[AUDIO_ANALOG_VOLUME_MICAMP2] = (reg >> RG_AUDPREAMPRGAIN_SFT) & RG_AUDPREAMPRGAIN_MASK; break; } return ret; Loading @@ -470,10 +479,10 @@ static const struct snd_kcontrol_new mt6358_snd_controls[] = { MT6358_ZCD_CON3, 0, 0x12, 1, snd_soc_get_volsw, mt6358_put_volsw, playback_tlv), /* ul pga gain */ SOC_DOUBLE_R_TLV("PGA Volume", SOC_DOUBLE_R_EXT_TLV("PGA Volume", MT6358_AUDENC_ANA_CON0, MT6358_AUDENC_ANA_CON1, 8, 4, 0, pga_tlv), snd_soc_get_volsw, mt6358_put_volsw, pga_tlv), }; /* MUX */ Loading Loading @@ -1750,6 +1759,21 @@ static void mt6358_dmic_disable(struct mt6358_priv *priv) regmap_write(priv->regmap, MT6358_AUDENC_ANA_CON9, 0x0000); } static void mt6358_restore_pga(struct mt6358_priv *priv) { unsigned int gain_l, gain_r; gain_l = priv->ana_gain[AUDIO_ANALOG_VOLUME_MICAMP1]; gain_r = priv->ana_gain[AUDIO_ANALOG_VOLUME_MICAMP2]; regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, RG_AUDPREAMPLGAIN_MASK_SFT, gain_l << RG_AUDPREAMPLGAIN_SFT); regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, RG_AUDPREAMPRGAIN_MASK_SFT, gain_r << RG_AUDPREAMPRGAIN_SFT); } static int mt_mic_type_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) Loading @@ -1774,6 +1798,7 @@ static int mt_mic_type_event(struct snd_soc_dapm_widget *w, mt6358_amic_enable(priv); break; } mt6358_restore_pga(priv); break; case SND_SOC_DAPM_POST_PMD: Loading Loading
sound/soc/codecs/mt6358.c +29 −4 Original line number Diff line number Diff line Loading @@ -450,6 +450,15 @@ static int mt6358_put_volsw(struct snd_kcontrol *kcontrol, priv->ana_gain[AUDIO_ANALOG_VOLUME_HSOUTR] = (reg >> RG_AUDHSGAIN_SFT) & RG_AUDHSGAIN_MASK; break; case MT6358_AUDENC_ANA_CON0: case MT6358_AUDENC_ANA_CON1: regmap_read(priv->regmap, MT6358_AUDENC_ANA_CON0, ®); priv->ana_gain[AUDIO_ANALOG_VOLUME_MICAMP1] = (reg >> RG_AUDPREAMPLGAIN_SFT) & RG_AUDPREAMPLGAIN_MASK; regmap_read(priv->regmap, MT6358_AUDENC_ANA_CON1, ®); priv->ana_gain[AUDIO_ANALOG_VOLUME_MICAMP2] = (reg >> RG_AUDPREAMPRGAIN_SFT) & RG_AUDPREAMPRGAIN_MASK; break; } return ret; Loading @@ -470,10 +479,10 @@ static const struct snd_kcontrol_new mt6358_snd_controls[] = { MT6358_ZCD_CON3, 0, 0x12, 1, snd_soc_get_volsw, mt6358_put_volsw, playback_tlv), /* ul pga gain */ SOC_DOUBLE_R_TLV("PGA Volume", SOC_DOUBLE_R_EXT_TLV("PGA Volume", MT6358_AUDENC_ANA_CON0, MT6358_AUDENC_ANA_CON1, 8, 4, 0, pga_tlv), snd_soc_get_volsw, mt6358_put_volsw, pga_tlv), }; /* MUX */ Loading Loading @@ -1750,6 +1759,21 @@ static void mt6358_dmic_disable(struct mt6358_priv *priv) regmap_write(priv->regmap, MT6358_AUDENC_ANA_CON9, 0x0000); } static void mt6358_restore_pga(struct mt6358_priv *priv) { unsigned int gain_l, gain_r; gain_l = priv->ana_gain[AUDIO_ANALOG_VOLUME_MICAMP1]; gain_r = priv->ana_gain[AUDIO_ANALOG_VOLUME_MICAMP2]; regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON0, RG_AUDPREAMPLGAIN_MASK_SFT, gain_l << RG_AUDPREAMPLGAIN_SFT); regmap_update_bits(priv->regmap, MT6358_AUDENC_ANA_CON1, RG_AUDPREAMPRGAIN_MASK_SFT, gain_r << RG_AUDPREAMPRGAIN_SFT); } static int mt_mic_type_event(struct snd_soc_dapm_widget *w, struct snd_kcontrol *kcontrol, int event) Loading @@ -1774,6 +1798,7 @@ static int mt_mic_type_event(struct snd_soc_dapm_widget *w, mt6358_amic_enable(priv); break; } mt6358_restore_pga(priv); break; case SND_SOC_DAPM_POST_PMD: Loading