if (ret)
                return ret;
 
-       ret = devm_request_irq(&i2c->dev, rt5640->irq, rt5640_irq,
-                              IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING
-                              | IRQF_ONESHOT, "rt5640", rt5640);
-       if (ret == 0) {
-               /* Gets re-enabled by rt5640_set_jack() */
-               disable_irq(rt5640->irq);
+       if (rt5640->irq) {
+               /* enabled by rt5640_set_jack() */
+               ret = devm_request_irq(&i2c->dev, rt5640->irq, rt5640_irq,
+                                      IRQF_TRIGGER_RISING | IRQF_NO_AUTOEN |
+                                      IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+                                      "rt5640", rt5640);
+               if (ret) {
+                       dev_err(&i2c->dev, "Failed to request IRQ %d: %d\n",
+                               rt5640->irq, ret);
+                       return ret;
+               }
        } else {
-               dev_warn(&i2c->dev, "Failed to reguest IRQ %d: %d\n",
-                        rt5640->irq, ret);
                rt5640->irq = -ENXIO;
        }