Unverified Commit f35d834d authored by Nícolas F. R. A. Prado's avatar Nícolas F. R. A. Prado Committed by Mark Brown
Browse files

ASoC: mediatek: mt8188-mt6359: Add accdet headset jack detect support



Enable headset jack detection for MT8188 platforms that use the MT6359
ACCDET block for it, indicated by the mediatek,accdet property in DT.
For those platforms, register a jack and initialize the ACCDET block to
report jack events through it.

Co-developed-by: default avatarZoran Zhan <zoran.zhan@mediatek.com>
Signed-off-by: default avatarZoran Zhan <zoran.zhan@mediatek.com>
Reviewed-by: default avatarAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: default avatarNícolas F. R. A. Prado <nfraprado@collabora.com>
Link: https://patch.msgid.link/20250306-mt8188-accdet-v3-4-7828e835ff4b@collabora.com


Signed-off-by: default avatarMark Brown <broonie@kernel.org>
parent 0116a7d8
Loading
Loading
Loading
Loading
+43 −0
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
#include "mt8188-afe-common.h"
#include "../../codecs/nau8825.h"
#include "../../codecs/mt6359.h"
#include "../../codecs/mt6359-accdet.h"
#include "../../codecs/rt5682.h"
#include "../common/mtk-afe-platform-driver.h"
#include "../common/mtk-soundcard-driver.h"
@@ -271,6 +272,17 @@ static struct snd_soc_jack_pin nau8825_jack_pins[] = {
	},
};

static struct snd_soc_jack_pin mt8188_headset_jack_pins[] = {
	{
		.pin    = "Headphone",
		.mask   = SND_JACK_HEADPHONE,
	},
	{
		.pin    = "Headset Mic",
		.mask   = SND_JACK_MICROPHONE,
	},
};

static const struct snd_kcontrol_new mt8188_dumb_spk_controls[] = {
	SOC_DAPM_PIN_SWITCH("Ext Spk"),
};
@@ -506,6 +518,35 @@ static int mt8188_mt6359_mtkaif_calibration(struct snd_soc_pcm_runtime *rtd)
	return 0;
}

static int mt8188_mt6359_accdet_init(struct snd_soc_pcm_runtime *rtd)
{
	struct mtk_soc_card_data *soc_card_data = snd_soc_card_get_drvdata(rtd->card);
	struct snd_soc_jack *jack = &soc_card_data->card_data->jacks[MT8188_JACK_HEADSET];
	int ret;

	if (!soc_card_data->accdet)
		return 0;

	ret = snd_soc_card_jack_new_pins(rtd->card, "Headset Jack",
				   SND_JACK_HEADSET | SND_JACK_BTN_0 |
				   SND_JACK_BTN_1 | SND_JACK_BTN_2 |
				   SND_JACK_BTN_3,
				   jack, mt8188_headset_jack_pins,
				   ARRAY_SIZE(mt8188_headset_jack_pins));
	if (ret) {
		dev_err(rtd->dev, "Headset Jack create failed: %d\n", ret);
		return ret;
	}

	ret = mt6359_accdet_enable_jack_detect(soc_card_data->accdet, jack);
	if (ret) {
		dev_err(rtd->dev, "Headset Jack enable failed: %d\n", ret);
		return ret;
	}

	return 0;
}

static int mt8188_mt6359_init(struct snd_soc_pcm_runtime *rtd)
{
	struct snd_soc_component *cmpnt_codec =
@@ -518,6 +559,8 @@ static int mt8188_mt6359_init(struct snd_soc_pcm_runtime *rtd)
	/* mtkaif calibration */
	mt8188_mt6359_mtkaif_calibration(rtd);

	mt8188_mt6359_accdet_init(rtd);

	return 0;
}