diff options
author | Mark Brown <broonie@kernel.org> | 2019-07-26 15:10:09 +0300 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2019-07-26 15:10:09 +0300 |
commit | 3b46a67af2eb8214a634a37c485146ca0ef42849 (patch) | |
tree | 1fef31dfdf401819f71158ad28ba87e7c8c4d886 /sound/soc/rockchip/rockchip_max98090.c | |
parent | 3dcfb397dad2ad55bf50de3c5d5a57090d35a18a (diff) | |
parent | 1e112c35e3c96db7c8ca6ddaa96574f00c06e7db (diff) | |
download | linux-3b46a67af2eb8214a634a37c485146ca0ef42849.tar.xz |
Merge branch 'asoc-5.3' into asoc-5.4
Diffstat (limited to 'sound/soc/rockchip/rockchip_max98090.c')
-rw-r--r-- | sound/soc/rockchip/rockchip_max98090.c | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/sound/soc/rockchip/rockchip_max98090.c b/sound/soc/rockchip/rockchip_max98090.c index d1c907631c2d..1af1147c3da3 100644 --- a/sound/soc/rockchip/rockchip_max98090.c +++ b/sound/soc/rockchip/rockchip_max98090.c @@ -60,6 +60,37 @@ static const struct snd_kcontrol_new rk_mc_controls[] = { SOC_DAPM_PIN_SWITCH("Speaker"), }; +static int rk_jack_event(struct notifier_block *nb, unsigned long event, + void *data) +{ + struct snd_soc_jack *jack = (struct snd_soc_jack *)data; + struct snd_soc_dapm_context *dapm = &jack->card->dapm; + + if (event & SND_JACK_MICROPHONE) + snd_soc_dapm_force_enable_pin(dapm, "MICBIAS"); + else + snd_soc_dapm_disable_pin(dapm, "MICBIAS"); + + snd_soc_dapm_sync(dapm); + + return 0; +} + +static struct notifier_block rk_jack_nb = { + .notifier_call = rk_jack_event, +}; + +static int rk_init(struct snd_soc_pcm_runtime *runtime) +{ + /* + * The jack has already been created in the rk_98090_headset_init() + * function. + */ + snd_soc_jack_notifier_register(&headset_jack, &rk_jack_nb); + + return 0; +} + static int rk_aif1_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params) { @@ -118,6 +149,7 @@ SND_SOC_DAILINK_DEFS(hifi, static struct snd_soc_dai_link rk_dailink = { .name = "max98090", .stream_name = "Audio", + .init = rk_init, .ops = &rk_aif1_ops, /* set max98090 as slave */ .dai_fmt = SND_SOC_DAIFMT_I2S | SND_SOC_DAIFMT_NB_NF | |