struct clk *dbck;
        struct notifier_block nb;
        unsigned int is_suspended:1;
+       unsigned int needs_resume:1;
        u32 mod_usage;
        u32 irq_usage;
        u32 dbck_enable_mask;
        return 0;
 }
 
+static int omap_gpio_suspend(struct device *dev)
+{
+       struct gpio_bank *bank = dev_get_drvdata(dev);
+
+       if (bank->is_suspended)
+               return 0;
+
+       bank->needs_resume = 1;
+
+       return omap_gpio_runtime_suspend(dev);
+}
+
+static int omap_gpio_resume(struct device *dev)
+{
+       struct gpio_bank *bank = dev_get_drvdata(dev);
+
+       if (!bank->needs_resume)
+               return 0;
+
+       bank->needs_resume = 0;
+
+       return omap_gpio_runtime_resume(dev);
+}
+
 static const struct dev_pm_ops gpio_pm_ops = {
        SET_RUNTIME_PM_OPS(omap_gpio_runtime_suspend, omap_gpio_runtime_resume,
                                                                        NULL)
+       SET_LATE_SYSTEM_SLEEP_PM_OPS(omap_gpio_suspend, omap_gpio_resume)
 };
 
 static struct platform_driver omap_gpio_driver = {