summaryrefslogtreecommitdiff
path: root/sound/soc/codecs/max98090.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/soc/codecs/max98090.c')
-rw-r--r--sound/soc/codecs/max98090.c25
1 files changed, 14 insertions, 11 deletions
diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c
index 611fed829ff6..2b79879684c8 100644
--- a/sound/soc/codecs/max98090.c
+++ b/sound/soc/codecs/max98090.c
@@ -3715,17 +3715,6 @@ static int max98090_probe(struct snd_soc_codec *codec)
INIT_DELAYED_WORK(&max98090->jack_work, max98090_jack_work);
- /* Enable jack detection */
- snd_soc_write(codec, M98090_REG_3D_CFG_JACK,
- M98090_JDETEN_MASK | M98090_JDEB_25MS);
-
- /* Register for interrupts */
- if ((request_threaded_irq(pdata->irq, NULL,
- max98090_interrupt, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
- "max98090_interrupt", codec)) < 0) {
- dev_info(codec->dev, "request_irq failed\n");
- }
-
#ifdef MAX98090_HIGH_PERFORMANCE
/* High Performance */
snd_soc_update_bits(codec, M98090_REG_43_DAC_CFG,
@@ -3758,6 +3747,20 @@ static int max98090_probe(struct snd_soc_codec *codec)
max98090_add_widgets(codec);
+ /* Clear existing interrupts */
+ snd_soc_read(codec, M98090_REG_01_IRQ_STATUS);
+
+ /* Register for interrupts */
+ if ((request_threaded_irq(pdata->irq, NULL,
+ max98090_interrupt, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+ "max98090_interrupt", codec)) < 0) {
+ dev_info(codec->dev, "request_irq failed\n");
+ }
+
+ /* Enable jack detection */
+ snd_soc_write(codec, M98090_REG_3D_CFG_JACK,
+ M98090_JDETEN_MASK | M98090_JDEB_25MS);
+
err_access:
return ret;
}