drm/etnaviv: Implement mmap as GEM object function
[linux-2.6-microblaze.git] / drivers / mfd / sprd-sc27xx-spi.c
index f8a8b91..6b79566 100644 (file)
@@ -189,7 +189,7 @@ static int sprd_pmic_probe(struct spi_device *spi)
                ddata->irqs[i].mask = BIT(i);
 
        ret = devm_regmap_add_irq_chip(&spi->dev, ddata->regmap, ddata->irq,
-                                      IRQF_ONESHOT | IRQF_NO_SUSPEND, 0,
+                                      IRQF_ONESHOT, 0,
                                       &ddata->irq_chip, &ddata->irq_data);
        if (ret) {
                dev_err(&spi->dev, "Failed to add PMIC irq chip %d\n", ret);
@@ -202,9 +202,34 @@ static int sprd_pmic_probe(struct spi_device *spi)
                return ret;
        }
 
+       device_init_wakeup(&spi->dev, true);
        return 0;
 }
 
+#ifdef CONFIG_PM_SLEEP
+static int sprd_pmic_suspend(struct device *dev)
+{
+       struct sprd_pmic *ddata = dev_get_drvdata(dev);
+
+       if (device_may_wakeup(dev))
+               enable_irq_wake(ddata->irq);
+
+       return 0;
+}
+
+static int sprd_pmic_resume(struct device *dev)
+{
+       struct sprd_pmic *ddata = dev_get_drvdata(dev);
+
+       if (device_may_wakeup(dev))
+               disable_irq_wake(ddata->irq);
+
+       return 0;
+}
+#endif
+
+static SIMPLE_DEV_PM_OPS(sprd_pmic_pm_ops, sprd_pmic_suspend, sprd_pmic_resume);
+
 static const struct of_device_id sprd_pmic_match[] = {
        { .compatible = "sprd,sc2731", .data = &sc2731_data },
        {},
@@ -215,6 +240,7 @@ static struct spi_driver sprd_pmic_driver = {
        .driver = {
                .name = "sc27xx-pmic",
                .of_match_table = sprd_pmic_match,
+               .pm = &sprd_pmic_pm_ops,
        },
        .probe = sprd_pmic_probe,
 };