* [PATCH 1/2] ASoC: wm5102: Correct AEC loopback enable definiton
@ 2013-02-26 17:15 Mark Brown
2013-02-26 17:15 ` [PATCH 1/3] ASoC: wm8994: Cancel delayed work for jackdet unconditionally Mark Brown
` (3 more replies)
0 siblings, 4 replies; 5+ messages in thread
From: Mark Brown @ 2013-02-26 17:15 UTC (permalink / raw)
To: Liam Girdwood; +Cc: alsa-devel, patches, Mark Brown
Reported-by: Ryo Tsutsui <Ryo.Tsutsui@wolfsonmicro.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm5102.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/wm5102.c b/sound/soc/codecs/wm5102.c
index c1ea75c..efd7317 100644
--- a/sound/soc/codecs/wm5102.c
+++ b/sound/soc/codecs/wm5102.c
@@ -1083,7 +1083,8 @@ SND_SOC_DAPM_AIF_IN("AIF3RX2", NULL, 0,
ARIZONA_DSP_WIDGETS(DSP1, "DSP1"),
SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1,
- ARIZONA_AEC_LOOPBACK_ENA, 0, &wm5102_aec_loopback_mux),
+ ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0,
+ &wm5102_aec_loopback_mux),
SND_SOC_DAPM_PGA_E("OUT1L", SND_SOC_NOPM,
ARIZONA_OUT1L_ENA_SHIFT, 0, NULL, 0, arizona_hp_ev,
--
1.7.10.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 1/3] ASoC: wm8994: Cancel delayed work for jackdet unconditionally
2013-02-26 17:15 [PATCH 1/2] ASoC: wm5102: Correct AEC loopback enable definiton Mark Brown
@ 2013-02-26 17:15 ` Mark Brown
2013-02-26 17:15 ` [PATCH 2/2] ASoC: wm5110: Correct AEC loopback enable definition Mark Brown
` (2 subsequent siblings)
3 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2013-02-26 17:15 UTC (permalink / raw)
To: Liam Girdwood; +Cc: alsa-devel, patches, Mark Brown
This avoids a potential deadlock with cancellation and races with
completion on insertion.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm8994.c | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index b66435f..d6e994d 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -3578,6 +3578,8 @@ static irqreturn_t wm1811_jackdet_irq(int irq, void *data)
int reg, delay;
bool present;
+ cancel_delayed_work_sync(&wm8994->mic_work);
+
pm_runtime_get_sync(codec->dev);
mutex_lock(&wm8994->accdet_lock);
@@ -3612,8 +3614,6 @@ static irqreturn_t wm1811_jackdet_irq(int irq, void *data)
} else {
dev_dbg(codec->dev, "Jack not detected\n");
- cancel_delayed_work_sync(&wm8994->mic_work);
-
snd_soc_update_bits(codec, WM8958_MICBIAS2,
WM8958_MICB2_DISCH, WM8958_MICB2_DISCH);
--
1.7.10.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] ASoC: wm5110: Correct AEC loopback enable definition
2013-02-26 17:15 [PATCH 1/2] ASoC: wm5102: Correct AEC loopback enable definiton Mark Brown
2013-02-26 17:15 ` [PATCH 1/3] ASoC: wm8994: Cancel delayed work for jackdet unconditionally Mark Brown
@ 2013-02-26 17:15 ` Mark Brown
2013-02-26 17:15 ` [PATCH 2/3] ASoC: wm8994: Defer declaration of open circuit microphones Mark Brown
2013-02-26 17:15 ` [PATCH 3/3] ASoC: wm8994: Remove duplicate headset report Mark Brown
3 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2013-02-26 17:15 UTC (permalink / raw)
To: Liam Girdwood; +Cc: alsa-devel, patches, Mark Brown
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm5110.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/sound/soc/codecs/wm5110.c b/sound/soc/codecs/wm5110.c
index 47ce8de..ff9f133 100644
--- a/sound/soc/codecs/wm5110.c
+++ b/sound/soc/codecs/wm5110.c
@@ -503,7 +503,8 @@ SND_SOC_DAPM_PGA("ASRC2R", ARIZONA_ASRC_ENABLE, ARIZONA_ASRC2R_ENA_SHIFT, 0,
NULL, 0),
SND_SOC_DAPM_VALUE_MUX("AEC Loopback", ARIZONA_DAC_AEC_CONTROL_1,
- ARIZONA_AEC_LOOPBACK_ENA, 0, &wm5110_aec_loopback_mux),
+ ARIZONA_AEC_LOOPBACK_ENA_SHIFT, 0,
+ &wm5110_aec_loopback_mux),
SND_SOC_DAPM_AIF_OUT("AIF1TX1", NULL, 0,
ARIZONA_AIF1_TX_ENABLES, ARIZONA_AIF1TX1_ENA_SHIFT, 0),
--
1.7.10.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/3] ASoC: wm8994: Defer declaration of open circuit microphones
2013-02-26 17:15 [PATCH 1/2] ASoC: wm5102: Correct AEC loopback enable definiton Mark Brown
2013-02-26 17:15 ` [PATCH 1/3] ASoC: wm8994: Cancel delayed work for jackdet unconditionally Mark Brown
2013-02-26 17:15 ` [PATCH 2/2] ASoC: wm5110: Correct AEC loopback enable definition Mark Brown
@ 2013-02-26 17:15 ` Mark Brown
2013-02-26 17:15 ` [PATCH 3/3] ASoC: wm8994: Remove duplicate headset report Mark Brown
3 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2013-02-26 17:15 UTC (permalink / raw)
To: Liam Girdwood; +Cc: alsa-devel, patches, Mark Brown
Provide a bit of debounce to handle pathological cases with slow input
better by allowing the microphone detection to run for a bit longer.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm8994.c | 40 +++++++++++++++++++++++++++++++---------
sound/soc/codecs/wm8994.h | 1 +
2 files changed, 32 insertions(+), 9 deletions(-)
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index d6e994d..1d98f28 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -3474,6 +3474,31 @@ static void wm8958_button_det(struct snd_soc_codec *codec, u16 status)
wm8994->btn_mask);
}
+static void wm8958_open_circuit_work(struct work_struct *work)
+{
+ struct wm8994_priv *wm8994 = container_of(work,
+ struct wm8994_priv,
+ open_circuit_work.work);
+ struct device *dev = wm8994->wm8994->dev;
+
+ mutex_lock(&wm8994->accdet_lock);
+
+ dev_dbg(dev, "Reporting open circuit\n");
+
+ wm8994->jack_mic = false;
+ wm8994->mic_detecting = true;
+
+ wm1811_micd_stop(wm8994->hubs.codec);
+
+ wm8958_micd_set_rate(wm8994->hubs.codec);
+
+ snd_soc_jack_report(wm8994->micdet[0].jack, 0,
+ wm8994->btn_mask |
+ SND_JACK_HEADSET);
+
+ mutex_unlock(&wm8994->accdet_lock);
+}
+
static void wm8958_mic_id(void *data, u16 status)
{
struct snd_soc_codec *codec = data;
@@ -3483,16 +3508,9 @@ static void wm8958_mic_id(void *data, u16 status)
if (!(status & WM8958_MICD_STS)) {
/* If nothing present then clear our statuses */
dev_dbg(codec->dev, "Detected open circuit\n");
- wm8994->jack_mic = false;
- wm8994->mic_detecting = true;
-
- wm1811_micd_stop(codec);
- wm8958_micd_set_rate(codec);
-
- snd_soc_jack_report(wm8994->micdet[0].jack, 0,
- wm8994->btn_mask |
- SND_JACK_HEADSET);
+ schedule_delayed_work(&wm8994->open_circuit_work,
+ msecs_to_jiffies(500));
return;
}
@@ -3778,6 +3796,8 @@ static irqreturn_t wm8958_mic_irq(int irq, void *data)
if (!(snd_soc_read(codec, WM8958_MIC_DETECT_1) & WM8958_MICD_ENA))
return IRQ_HANDLED;
+ cancel_delayed_work_sync(&wm8994->open_circuit_work);
+
pm_runtime_get_sync(codec->dev);
/* We may occasionally read a detection without an impedence
@@ -3877,6 +3897,8 @@ static int wm8994_codec_probe(struct snd_soc_codec *codec)
mutex_init(&wm8994->accdet_lock);
INIT_DELAYED_WORK(&wm8994->jackdet_bootstrap,
wm1811_jackdet_bootstrap);
+ INIT_DELAYED_WORK(&wm8994->open_circuit_work,
+ wm8958_open_circuit_work);
switch (control->type) {
case WM8994:
diff --git a/sound/soc/codecs/wm8994.h b/sound/soc/codecs/wm8994.h
index 20356b3..130ce93 100644
--- a/sound/soc/codecs/wm8994.h
+++ b/sound/soc/codecs/wm8994.h
@@ -134,6 +134,7 @@ struct wm8994_priv {
struct mutex accdet_lock;
struct wm8994_micdet micdet[2];
struct delayed_work mic_work;
+ struct delayed_work open_circuit_work;
bool mic_detecting;
bool jack_mic;
int btn_mask;
--
1.7.10.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 3/3] ASoC: wm8994: Remove duplicate headset report
2013-02-26 17:15 [PATCH 1/2] ASoC: wm5102: Correct AEC loopback enable definiton Mark Brown
` (2 preceding siblings ...)
2013-02-26 17:15 ` [PATCH 2/3] ASoC: wm8994: Defer declaration of open circuit microphones Mark Brown
@ 2013-02-26 17:15 ` Mark Brown
3 siblings, 0 replies; 5+ messages in thread
From: Mark Brown @ 2013-02-26 17:15 UTC (permalink / raw)
To: Liam Girdwood; +Cc: alsa-devel, patches, Mark Brown
We do the same report a few lines earlier for no good reason.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
sound/soc/codecs/wm8994.c | 3 ---
1 file changed, 3 deletions(-)
diff --git a/sound/soc/codecs/wm8994.c b/sound/soc/codecs/wm8994.c
index 1d98f28..8d77c8b 100644
--- a/sound/soc/codecs/wm8994.c
+++ b/sound/soc/codecs/wm8994.c
@@ -3541,9 +3541,6 @@ static void wm8958_mic_id(void *data, u16 status)
/* If we have jackdet that will detect removal */
wm1811_micd_stop(codec);
-
- snd_soc_jack_report(wm8994->micdet[0].jack, SND_JACK_HEADPHONE,
- SND_JACK_HEADSET);
}
}
--
1.7.10.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-02-26 17:15 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-02-26 17:15 [PATCH 1/2] ASoC: wm5102: Correct AEC loopback enable definiton Mark Brown
2013-02-26 17:15 ` [PATCH 1/3] ASoC: wm8994: Cancel delayed work for jackdet unconditionally Mark Brown
2013-02-26 17:15 ` [PATCH 2/2] ASoC: wm5110: Correct AEC loopback enable definition Mark Brown
2013-02-26 17:15 ` [PATCH 2/3] ASoC: wm8994: Defer declaration of open circuit microphones Mark Brown
2013-02-26 17:15 ` [PATCH 3/3] ASoC: wm8994: Remove duplicate headset report Mark Brown
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.