]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ASoC: jack: add snd_soc_codec_set_jack
authorBard Liao <bardliao@realtek.com>
Fri, 7 Apr 2017 03:26:41 +0000 (11:26 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 10 Apr 2017 18:46:09 +0000 (19:46 +0100)
There are many codecs with the capability of jack detection. Usually,
we create a jack on machine driver but there is no common function for
machine driver to deliver the jack pointer to codec driver.
snd_soc_codec_set_jack can be used for delivering the jack pointer to
codec driver and enable the jack detection function. To make it work,
codec driver need to define a callback function to receive the jack
pointer and do all necessary procedure for enabling jack detection.

Signed-off-by: Bard Liao <bardliao@realtek.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc.h
sound/soc/soc-jack.c

index 1d20abec499579de91c716f348ab269845e55d12..a6d589c340df8e8b1070bf812d69e2fa1f541a32 100644 (file)
@@ -434,6 +434,8 @@ int snd_soc_codec_set_sysclk(struct snd_soc_codec *codec, int clk_id,
                             int source, unsigned int freq, int dir);
 int snd_soc_codec_set_pll(struct snd_soc_codec *codec, int pll_id, int source,
                          unsigned int freq_in, unsigned int freq_out);
+int snd_soc_codec_set_jack(struct snd_soc_codec *codec,
+                          struct snd_soc_jack *jack, void *data);
 
 int snd_soc_register_card(struct snd_soc_card *card);
 int snd_soc_unregister_card(struct snd_soc_card *card);
@@ -908,6 +910,8 @@ struct snd_soc_codec_driver {
                          int clk_id, int source, unsigned int freq, int dir);
        int (*set_pll)(struct snd_soc_codec *codec, int pll_id, int source,
                unsigned int freq_in, unsigned int freq_out);
+       int (*set_jack)(struct snd_soc_codec *codec,
+                       struct snd_soc_jack *jack,  void *data);
 
        /* codec IO */
        struct regmap *(*get_regmap)(struct device *);
index a03dcbb94baf86ba37c22e9dde52b80a16de725b..7daf21fee355b22c0a522d51c3de723fd6b7a1fd 100644 (file)
 #include <linux/suspend.h>
 #include <trace/events/asoc.h>
 
+/**
+ * snd_soc_codec_set_jack - configure codec jack.
+ * @codec: CODEC
+ * @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_codec_set_jack(struct snd_soc_codec *codec,
+       struct snd_soc_jack *jack, void *data)
+{
+       if (codec->driver->set_jack)
+               return codec->driver->set_jack(codec, jack, data);
+       else
+               return -EINVAL;
+}
+EXPORT_SYMBOL_GPL(snd_soc_codec_set_jack);
+
 /**
  * snd_soc_card_jack_new - Create a new jack
  * @card:  ASoC card