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

Commit e3d62cb8 authored by Bard Liao's avatar Bard Liao Committed by Mark Brown
Browse files

ASoC: rt298: disable IRQ when jack is NULL



Disable IRQ when jack is NULL in rt298_mic_detect. So machine driver
can use it in suspend/resume.

Signed-off-by: default avatarBard Liao <bardliao@realtek.com>
Reviewed-by: default avatarVinod Koul <vinod.koul@intel.com>
Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 1001354c
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -321,11 +321,31 @@ static void rt298_jack_detect_work(struct work_struct *work)
int rt298_mic_detect(struct snd_soc_codec *codec, struct snd_soc_jack *jack)
{
	struct rt298_priv *rt298 = snd_soc_codec_get_drvdata(codec);
	struct snd_soc_dapm_context *dapm;
	bool hp = false;
	bool mic = false;
	int status = 0;

	/* If jack in NULL, disable HS jack */
	if (!jack) {
		regmap_update_bits(rt298->regmap, RT298_IRQ_CTRL, 0x2, 0x0);
		dapm = snd_soc_codec_get_dapm(codec);
		snd_soc_dapm_disable_pin(dapm, "LDO1");
		snd_soc_dapm_sync(dapm);
		return 0;
	}

	rt298->jack = jack;
	regmap_update_bits(rt298->regmap, RT298_IRQ_CTRL, 0x2, 0x2);

	rt298_jack_detect(rt298, &hp, &mic);
	if (hp == true)
		status |= SND_JACK_HEADPHONE;

	/* Send an initial empty report */
	snd_soc_jack_report(rt298->jack, 0,
	if (mic == true)
		status |= SND_JACK_MICROPHONE;

	snd_soc_jack_report(rt298->jack, status,
		SND_JACK_MICROPHONE | SND_JACK_HEADPHONE);

	return 0;