Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit b14c9174 authored by Nicolas Boichat's avatar Nicolas Boichat Committed by Mark Brown
Browse files

ASoC: rt5645: Update dapm pins when the card is not instantiated yet



This makes sure the dapm state is consistent when the card is
instantiated.

However, if the card is not instantiated yet, we still update the
registers manually in the "jack in" case, so that we can immediately
report if a mic is present or not.

Disabling "Mic Det Power" after detection, and on jack out, can
wait until the card gets instantiated.

Signed-off-by: default avatarNicolas Boichat <drinkcat@chromium.org>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent f312bc59
Loading
Loading
Loading
Loading
+11 −25
Original line number Diff line number Diff line
@@ -2805,12 +2805,11 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
	if (jack_insert) {
		regmap_write(rt5645->regmap, RT5645_CHARGE_PUMP, 0x0006);

		if (codec->component.card->instantiated) {
		/* for jack type detect */
		snd_soc_dapm_force_enable_pin(dapm, "LDO2");
		snd_soc_dapm_force_enable_pin(dapm, "Mic Det Power");
		snd_soc_dapm_sync(dapm);
		} else {
		if (!dapm->card->instantiated) {
			/* Power up necessary bits for JD if dapm is
			   not ready yet */
			regmap_update_bits(rt5645->regmap, RT5645_PWR_ANLG1,
@@ -2841,12 +2840,8 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
				rt5645_enable_push_button_irq(codec, true);
			}
		} else {
			if (codec->component.card->instantiated) {
			snd_soc_dapm_disable_pin(dapm, "Mic Det Power");
			snd_soc_dapm_sync(dapm);
			} else
				regmap_update_bits(rt5645->regmap,
					RT5645_PWR_VOL, RT5645_PWR_MIC_DET, 0);
			rt5645->jack_type = SND_JACK_HEADPHONE;
		}

@@ -2855,19 +2850,10 @@ static int rt5645_jack_detect(struct snd_soc_codec *codec, int jack_insert)
		if (rt5645->en_button_func)
			rt5645_enable_push_button_irq(codec, false);
		else {
			if (codec->component.card->instantiated) {
			if (rt5645->pdata.jd_mode == 0)
				snd_soc_dapm_disable_pin(dapm, "LDO2");
			snd_soc_dapm_disable_pin(dapm, "Mic Det Power");
			snd_soc_dapm_sync(dapm);
			} else {
				if (rt5645->pdata.jd_mode == 0)
					regmap_update_bits(rt5645->regmap,
						RT5645_PWR_MIXER,
						RT5645_PWR_LDO2, 0);
				regmap_update_bits(rt5645->regmap,
					RT5645_PWR_VOL, RT5645_PWR_MIC_DET, 0);
			}
		}
	}