summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/sound/soc.h4
-rw-r--r--sound/soc/soc-core.c11
-rw-r--r--sound/soc/soc-jack.c22
3 files changed, 37 insertions, 0 deletions
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 23681538c849..feb896815069 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -800,6 +800,8 @@ struct snd_soc_component_driver {
int clk_id, int source, unsigned int freq, int dir);
int (*set_pll)(struct snd_soc_component *component, int pll_id,
int source, unsigned int freq_in, unsigned int freq_out);
+ int (*set_jack)(struct snd_soc_component *component,
+ struct snd_soc_jack *jack, void *data);
/* DT */
int (*of_xlate_dai_name)(struct snd_soc_component *component,
@@ -875,6 +877,8 @@ struct snd_soc_component {
int clk_id, int source, unsigned int freq, int dir);
int (*set_pll)(struct snd_soc_component *component, int pll_id,
int source, unsigned int freq_in, unsigned int freq_out);
+ int (*set_jack)(struct snd_soc_component *component,
+ struct snd_soc_jack *jack, void *data);
/* machine specific init */
int (*init)(struct snd_soc_component *component);
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index ee641cd8aa22..3d7287858609 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -3225,6 +3225,7 @@ static int snd_soc_component_initialize(struct snd_soc_component *component,
component->resume = component->driver->resume;
component->set_sysclk = component->driver->set_sysclk;
component->set_pll = component->driver->set_pll;
+ component->set_jack = component->driver->set_jack;
dapm = &component->dapm;
dapm->dev = dev;
@@ -3625,6 +3626,14 @@ static int snd_soc_codec_set_pll_(struct snd_soc_component *component,
return snd_soc_codec_set_pll(codec, pll_id, source, freq_in, freq_out);
}
+static int snd_soc_codec_set_jack_(struct snd_soc_component *component,
+ struct snd_soc_jack *jack, void *data)
+{
+ struct snd_soc_codec *codec = snd_soc_component_to_codec(component);
+
+ return snd_soc_codec_set_jack(codec, jack, data);
+}
+
static int snd_soc_codec_set_bias_level(struct snd_soc_dapm_context *dapm,
enum snd_soc_bias_level level)
{
@@ -3680,6 +3689,8 @@ int snd_soc_register_codec(struct device *dev,
codec->component.set_sysclk = snd_soc_codec_set_sysclk_;
if (codec_drv->set_pll)
codec->component.set_pll = snd_soc_codec_set_pll_;
+ if (codec_drv->set_jack)
+ codec->component.set_jack = snd_soc_codec_set_jack_;
codec->component.ignore_pmdown_time = codec_drv->ignore_pmdown_time;
dapm = snd_soc_codec_get_dapm(codec);
diff --git a/sound/soc/soc-jack.c b/sound/soc/soc-jack.c
index 7daf21fee355..2f9f496ab14f 100644
--- a/sound/soc/soc-jack.c
+++ b/sound/soc/soc-jack.c
@@ -41,6 +41,28 @@ int snd_soc_codec_set_jack(struct snd_soc_codec *codec,
EXPORT_SYMBOL_GPL(snd_soc_codec_set_jack);
/**
+ * snd_soc_component_set_jack - configure component jack.
+ * @component: COMPONENTs
+ * @jack: structure to use for the jack
+ * @data: can be used if codec driver need extra data for configuring jack
+ *
+ * Configures and enables jack detection function.
+ */
+int snd_soc_component_set_jack(struct snd_soc_component *component,
+ struct snd_soc_jack *jack, void *data)
+{
+ /* will be removed */
+ if (component->set_jack)
+ return component->set_jack(component, jack, data);
+
+ if (component->driver->set_jack)
+ return component->driver->set_jack(component, jack, data);
+
+ return -ENOTSUPP;
+}
+EXPORT_SYMBOL_GPL(snd_soc_component_set_jack);
+
+/**
* snd_soc_card_jack_new - Create a new jack
* @card: ASoC card
* @id: an identifying string for this jack