diff mbox series

ASoC: rt5682: Add jack kcontrol

Message ID 20220407141316.5099-1-akihiko.odaki@gmail.com
State New
Headers show
Series ASoC: rt5682: Add jack kcontrol | expand

Commit Message

Akihiko Odaki April 7, 2022, 2:13 p.m. UTC
Create a jack kcontrol manually as rt5682 does not use DAPM pins
for jack and will not have kcontrols for them.

Signed-off-by: Akihiko Odaki <akihiko.odaki@gmail.com>
---
 include/sound/jack.h      | 2 +-
 sound/core/jack.c         | 3 +--
 sound/soc/codecs/rt5682.c | 5 +++++
 3 files changed, 7 insertions(+), 3 deletions(-)
diff mbox series

Patch

diff --git a/include/sound/jack.h b/include/sound/jack.h
index 1181f536557e..bb5fcbd70d7c 100644
--- a/include/sound/jack.h
+++ b/include/sound/jack.h
@@ -60,10 +60,10 @@  struct snd_jack {
 	struct list_head kctl_list;
 	struct snd_card *card;
 	const char *id;
+	int type;
 #ifdef CONFIG_SND_JACK_INPUT_DEV
 	struct input_dev *input_dev;
 	int registered;
-	int type;
 	char name[100];
 	unsigned int key[6];   /* Keep in sync with definitions above */
 #endif /* CONFIG_SND_JACK_INPUT_DEV */
diff --git a/sound/core/jack.c b/sound/core/jack.c
index d1e3055f2b6a..967a9769ea24 100644
--- a/sound/core/jack.c
+++ b/sound/core/jack.c
@@ -530,8 +530,6 @@  int snd_jack_new(struct snd_card *card, const char *id, int type,
 
 		jack->input_dev->phys = "ALSA";
 
-		jack->type = type;
-
 		for (i = 0; i < SND_JACK_SWITCH_TYPES; i++)
 			if (type & (1 << i))
 				input_set_capability(jack->input_dev, EV_SW,
@@ -545,6 +543,7 @@  int snd_jack_new(struct snd_card *card, const char *id, int type,
 		goto fail_input;
 
 	jack->card = card;
+	jack->type = type;
 	INIT_LIST_HEAD(&jack->kctl_list);
 
 	if (initial_kctl)
diff --git a/sound/soc/codecs/rt5682.c b/sound/soc/codecs/rt5682.c
index be68d573a490..583dc80f08d0 100644
--- a/sound/soc/codecs/rt5682.c
+++ b/sound/soc/codecs/rt5682.c
@@ -1012,6 +1012,7 @@  static int rt5682_set_jack_detect(struct snd_soc_component *component,
 		struct snd_soc_jack *hs_jack, void *data)
 {
 	struct rt5682_priv *rt5682 = snd_soc_component_get_drvdata(component);
+	int ret;
 
 	rt5682->hs_jack = hs_jack;
 
@@ -1025,6 +1026,10 @@  static int rt5682_set_jack_detect(struct snd_soc_component *component,
 		return 0;
 	}
 
+	ret = snd_jack_add_new_kctl(hs_jack->jack, hs_jack->jack->id, hs_jack->jack->type);
+	if (ret)
+		dev_warn(component->dev, "Failed to create jack kcontrol - %d\n", ret);
+
 	if (!rt5682->is_sdw) {
 		switch (rt5682->pdata.jd_src) {
 		case RT5682_JD1: