diff options
Diffstat (limited to 'sound')
-rw-r--r-- | sound/soc/codecs/max98090.c | 25 |
1 files changed, 14 insertions, 11 deletions
diff --git a/sound/soc/codecs/max98090.c b/sound/soc/codecs/max98090.c index 6cb4102c41c0..3eda6a9c934e 100644 --- a/sound/soc/codecs/max98090.c +++ b/sound/soc/codecs/max98090.c @@ -3756,19 +3756,8 @@ 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); - max98090_handle_pdata(codec); - /* Register for interrupts */ - if ((request_threaded_irq(audio_int, 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, @@ -3799,6 +3788,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(audio_int, 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; } |