[RFC][PATCH 1/2] alsa: jack: expand snd_jack_report parameter for jack sw_inject
Hui Wang
hui.wang at canonical.com
Wed Dec 9 13:43:43 CET 2020
This is the preparation for supporting jack software plug in/out
injection, when users enable the software injection, the jack state
shouldn't be changed by hw events or other non-injection events
anymore, so adding a parameter in the snd_jack_report() to distinguish
if the function is called from software injection or not.
Signed-off-by: Hui Wang <hui.wang at canonical.com>
---
include/sound/jack.h | 4 ++--
sound/core/jack.c | 3 ++-
sound/pci/hda/hda_jack.c | 6 +++---
sound/pci/hda/patch_hdmi.c | 2 +-
sound/pci/oxygen/xonar_wm87x6.c | 2 +-
sound/soc/soc-jack.c | 2 +-
sound/x86/intel_hdmi_audio.c | 4 ++--
7 files changed, 12 insertions(+), 11 deletions(-)
diff --git a/include/sound/jack.h b/include/sound/jack.h
index 9eb2b5ec1ec4..17f71fe38ed5 100644
--- a/include/sound/jack.h
+++ b/include/sound/jack.h
@@ -81,7 +81,7 @@ void snd_jack_set_parent(struct snd_jack *jack, struct device *parent);
int snd_jack_set_key(struct snd_jack *jack, enum snd_jack_types type,
int keytype);
#endif
-void snd_jack_report(struct snd_jack *jack, int status);
+void snd_jack_report(struct snd_jack *jack, int status, bool sw_inject);
#else
static inline int snd_jack_new(struct snd_card *card, const char *id, int type,
@@ -95,7 +95,7 @@ static inline int snd_jack_add_new_kctl(struct snd_jack *jack, const char * name
return 0;
}
-static inline void snd_jack_report(struct snd_jack *jack, int status)
+static inline void snd_jack_report(struct snd_jack *jack, int status, bool sw_inject)
{
}
diff --git a/sound/core/jack.c b/sound/core/jack.c
index 503c8af79d55..49b9461aef51 100644
--- a/sound/core/jack.c
+++ b/sound/core/jack.c
@@ -336,8 +336,9 @@ EXPORT_SYMBOL(snd_jack_set_key);
*
* @jack: The jack to report status for
* @status: The current status of the jack
+ * @sw_inject: Indicate if this is called from jack software inject
*/
-void snd_jack_report(struct snd_jack *jack, int status)
+void snd_jack_report(struct snd_jack *jack, int status, bool sw_inject)
{
struct snd_jack_kctl *jack_kctl;
#ifdef CONFIG_SND_JACK_INPUT_DEV
diff --git a/sound/pci/hda/hda_jack.c b/sound/pci/hda/hda_jack.c
index 588059428d8f..152d651df74e 100644
--- a/sound/pci/hda/hda_jack.c
+++ b/sound/pci/hda/hda_jack.c
@@ -414,10 +414,10 @@ void snd_hda_jack_report_sync(struct hda_codec *codec)
state = jack->button_state;
if (get_jack_plug_state(jack->pin_sense))
state |= jack->type;
- snd_jack_report(jack->jack, state);
+ snd_jack_report(jack->jack, state, false);
if (jack->button_state) {
snd_jack_report(jack->jack,
- state & ~jack->button_state);
+ state & ~jack->button_state, false);
jack->button_state = 0; /* button released */
}
}
@@ -503,7 +503,7 @@ int snd_hda_jack_add_kctl_mst(struct hda_codec *codec, hda_nid_t nid,
}
state = snd_hda_jack_detect_mst(codec, nid, dev_id);
- snd_jack_report(jack->jack, state ? jack->type : 0);
+ snd_jack_report(jack->jack, state ? jack->type : 0, false);
return 0;
}
diff --git a/sound/pci/hda/patch_hdmi.c b/sound/pci/hda/patch_hdmi.c
index b0068f8ca46d..f19762a6e9e7 100644
--- a/sound/pci/hda/patch_hdmi.c
+++ b/sound/pci/hda/patch_hdmi.c
@@ -1590,7 +1590,7 @@ static void update_eld(struct hda_codec *codec,
if (eld_changed && pcm_jack)
snd_jack_report(pcm_jack,
(eld->monitor_present && eld->eld_valid) ?
- SND_JACK_AVOUT : 0);
+ SND_JACK_AVOUT : 0, false);
}
/* update ELD and jack state via HD-audio verbs */
diff --git a/sound/pci/oxygen/xonar_wm87x6.c b/sound/pci/oxygen/xonar_wm87x6.c
index 8aa92f3e5ee8..595e10275bd9 100644
--- a/sound/pci/oxygen/xonar_wm87x6.c
+++ b/sound/pci/oxygen/xonar_wm87x6.c
@@ -251,7 +251,7 @@ static void xonar_ds_handle_hp_jack(struct oxygen *chip)
reg |= WM8766_MUTEALL;
wm8766_write_cached(chip, WM8766_DAC_CTRL, reg);
- snd_jack_report(data->hp_jack, hp_plugged ? SND_JACK_HEADPHONE : 0);
+ snd_jack_report(data->hp_jack, hp_plugged ? SND_JACK_HEADPHONE : 0, false);
mutex_unlock(&chip->mutex);
}
diff --git a/sound/soc/soc-jack.c b/sound/soc/soc-jack.c
index 0f1820f36b4d..5b98f5fa4537 100644
--- a/sound/soc/soc-jack.c
+++ b/sound/soc/soc-jack.c
@@ -78,7 +78,7 @@ void snd_soc_jack_report(struct snd_soc_jack *jack, int status, int mask)
if (sync)
snd_soc_dapm_sync(dapm);
- snd_jack_report(jack->jack, jack->status);
+ snd_jack_report(jack->jack, jack->status, false);
mutex_unlock(&jack->mutex);
}
diff --git a/sound/x86/intel_hdmi_audio.c b/sound/x86/intel_hdmi_audio.c
index 9f9fcd2749f2..e12dce8daed0 100644
--- a/sound/x86/intel_hdmi_audio.c
+++ b/sound/x86/intel_hdmi_audio.c
@@ -1363,7 +1363,7 @@ static void had_process_hot_plug(struct snd_intelhad *intelhaddata)
had_substream_put(intelhaddata);
}
- snd_jack_report(intelhaddata->jack, SND_JACK_AVOUT);
+ snd_jack_report(intelhaddata->jack, SND_JACK_AVOUT, false);
}
/* process hot unplug, called from wq with mutex locked */
@@ -1398,7 +1398,7 @@ static void had_process_hot_unplug(struct snd_intelhad *intelhaddata)
had_substream_put(intelhaddata);
}
- snd_jack_report(intelhaddata->jack, 0);
+ snd_jack_report(intelhaddata->jack, 0, false);
}
/*
--
2.25.1
More information about the Alsa-devel
mailing list