#define PMBR1                          0x0D
 #define GPIO_USB_4PIN_ULPI_2430C       (3 << 0)
 
+static irqreturn_t twl4030_usb_irq(int irq, void *_twl);
 /*
  * If VBUS is valid or ID is ground, then we know a
  * cable is present and we need to be runtime-enabled
        WARN_ON(twl4030_usb_write_verify(twl, PHY_PWR_CTRL, pwr) < 0);
 }
 
+static int __maybe_unused twl4030_usb_suspend(struct device *dev)
+{
+       struct twl4030_usb *twl = dev_get_drvdata(dev);
+
+       /*
+        * we need enabled runtime on resume,
+        * so turn irq off here, so we do not get it early
+        * note: wakeup on usb plug works independently of this
+        */
+       dev_dbg(twl->dev, "%s\n", __func__);
+       disable_irq(twl->irq);
+
+       return 0;
+}
+
+static int __maybe_unused twl4030_usb_resume(struct device *dev)
+{
+       struct twl4030_usb *twl = dev_get_drvdata(dev);
+
+       dev_dbg(twl->dev, "%s\n", __func__);
+       enable_irq(twl->irq);
+       /* check whether cable status changed */
+       twl4030_usb_irq(0, twl);
+
+       return 0;
+}
+
 static int __maybe_unused twl4030_usb_runtime_suspend(struct device *dev)
 {
        struct twl4030_usb *twl = dev_get_drvdata(dev);
 static const struct dev_pm_ops twl4030_usb_pm_ops = {
        SET_RUNTIME_PM_OPS(twl4030_usb_runtime_suspend,
                           twl4030_usb_runtime_resume, NULL)
+       SET_SYSTEM_SLEEP_PM_OPS(twl4030_usb_suspend, twl4030_usb_resume)
 };
 
 static int twl4030_usb_probe(struct platform_device *pdev)