diff options
author | Takashi Iwai <tiwai@suse.de> | 2017-02-14 14:29:38 +0300 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2017-02-16 11:22:42 +0300 |
commit | b9bacf275ca2eeb8e8fa85c1705d07e2475f1aaa (patch) | |
tree | 2f82ca43e5aca879e69ccde21c50b6c3bf701382 /sound | |
parent | 9f1bc2c4c58fcb2d86e0e26437dc8f3a18ac3276 (diff) | |
download | linux-b9bacf275ca2eeb8e8fa85c1705d07e2475f1aaa.tar.xz |
ALSA: x86: Implement jack control
This patch implements a jack interface for notifying HDMI/DP
connection. PA listens to this, so it can handle the monitor
connection more gracefully.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound')
-rw-r--r-- | sound/x86/intel_hdmi_audio.c | 23 | ||||
-rw-r--r-- | sound/x86/intel_hdmi_audio.h | 1 |
2 files changed, 24 insertions, 0 deletions
diff --git a/sound/x86/intel_hdmi_audio.c b/sound/x86/intel_hdmi_audio.c index 9889cdf3ccf4..a30ca03e49ae 100644 --- a/sound/x86/intel_hdmi_audio.c +++ b/sound/x86/intel_hdmi_audio.c @@ -37,6 +37,7 @@ #include <sound/pcm_params.h> #include <sound/initval.h> #include <sound/control.h> +#include <sound/jack.h> #include <drm/drm_edid.h> #include <drm/intel_lpe_audio.h> #include "intel_hdmi_audio.h" @@ -1382,6 +1383,8 @@ static void had_process_hot_plug(struct snd_intelhad *intelhaddata) } had_build_channel_allocation_map(intelhaddata); + + snd_jack_report(intelhaddata->jack, SND_JACK_AVOUT); } /* process hot unplug, called from wq with mutex locked */ @@ -1414,6 +1417,7 @@ static void had_process_hot_unplug(struct snd_intelhad *intelhaddata) snd_pcm_stop(substream, SNDRV_PCM_STATE_SETUP); out: + snd_jack_report(intelhaddata->jack, 0); if (substream) had_substream_put(intelhaddata); kfree(intelhaddata->chmap->chmap); @@ -1609,6 +1613,21 @@ static void had_audio_wq(struct work_struct *work) } /* + * Jack interface + */ +static int had_create_jack(struct snd_intelhad *ctx) +{ + int err; + + err = snd_jack_new(ctx->card, "HDMI/DP", SND_JACK_AVOUT, &ctx->jack, + true, false); + if (err < 0) + return err; + ctx->jack->private_data = ctx; + return 0; +} + +/* * PM callbacks */ @@ -1780,6 +1799,10 @@ static int hdmi_lpe_audio_probe(struct platform_device *pdev) if (ret < 0) goto err; + ret = had_create_jack(ctx); + if (ret < 0) + goto err; + ret = snd_card_register(card); if (ret) goto err; diff --git a/sound/x86/intel_hdmi_audio.h b/sound/x86/intel_hdmi_audio.h index d6ba90fd011d..2d3e389f76b3 100644 --- a/sound/x86/intel_hdmi_audio.h +++ b/sound/x86/intel_hdmi_audio.h @@ -130,6 +130,7 @@ struct snd_intelhad { struct work_struct hdmi_audio_wq; struct mutex mutex; /* for protecting chmap and eld */ bool need_reset; + struct snd_jack *jack; }; #endif /* _INTEL_HDMI_AUDIO_ */ |