diff options
| author | Mark Brown <broonie@kernel.org> | 2026-01-13 14:55:40 +0300 |
|---|---|---|
| committer | Mark Brown <broonie@kernel.org> | 2026-01-13 14:55:40 +0300 |
| commit | eb4cd1a4a9ef115193a9bef447b5db11bb7defc9 (patch) | |
| tree | b12ffce4712a3c5d562c5a3e228a774cb9c9e595 | |
| parent | 28e5a3de9858a4189e48b2cbdf3d06e6fd806a3d (diff) | |
| parent | e590752119029d87ce46d725e11245a52d22e1fe (diff) | |
| download | linux-eb4cd1a4a9ef115193a9bef447b5db11bb7defc9.tar.xz | |
sound: codecs: wm8962: Assorted fixes
Merge series from Sebastian Krzyszkowiak <sebastian.krzyszkowiak@puri.sm>:
Bunch of patches developed while working on Purism's Librem 5 phone.
| -rw-r--r-- | sound/soc/codecs/wm8962.c | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/sound/soc/codecs/wm8962.c b/sound/soc/codecs/wm8962.c index e9e317ce6898..bff864467416 100644 --- a/sound/soc/codecs/wm8962.c +++ b/sound/soc/codecs/wm8962.c @@ -67,6 +67,8 @@ struct wm8962_priv { struct mutex dsp2_ena_lock; u16 dsp2_ena; + int mic_status; + struct delayed_work mic_work; struct snd_soc_jack *jack; @@ -1760,7 +1762,7 @@ SND_SOC_BYTES("EQR Coefficients", WM8962_EQ24, 18), SOC_SINGLE("3D Switch", WM8962_THREED1, 0, 1, 0), -SND_SOC_BYTES_MASK("3D Coefficients", WM8962_THREED1, 4, WM8962_THREED_ENA), +SND_SOC_BYTES_MASK("3D Coefficients", WM8962_THREED1, 4, WM8962_THREED_ENA | WM8962_ADC_MONOMIX), SOC_SINGLE("DF1 Switch", WM8962_DF1, 0, 1, 0), SND_SOC_BYTES_MASK("DF1 Coefficients", WM8962_DF1, 7, WM8962_DF1_ENA), @@ -3081,8 +3083,16 @@ static void wm8962_mic_work(struct work_struct *work) if (reg & WM8962_MICSHORT_STS) { status |= SND_JACK_BTN_0; irq_pol |= WM8962_MICSCD_IRQ_POL; + + /* Don't report a microphone if it's shorted right after + * plugging in, as this may be a TRS plug in a TRRS socket. + */ + if (!(wm8962->mic_status & WM8962_MICDET_STS)) + status = 0; } + wm8962->mic_status = status; + snd_soc_jack_report(wm8962->jack, status, SND_JACK_MICROPHONE | SND_JACK_BTN_0); |
