#include <linux/reboot.h>
#include <linux/notifier.h>
#include <linux/delay.h>
+#include <linux/pm.h>
struct cpcap_driver_info {
struct list_head list;
static int __devinit cpcap_probe(struct spi_device *spi);
static int __devexit cpcap_remove(struct spi_device *spi);
+#ifdef CONFIG_PM
+static int cpcap_suspend(struct spi_device *spi, pm_message_t mesg);
+static int cpcap_resume(struct spi_device *spi);
+#endif
+
const static struct file_operations cpcap_fops = {
.owner = THIS_MODULE,
.ioctl = ioctl,
},
.probe = cpcap_probe,
.remove = __devexit_p(cpcap_remove),
+#ifdef CONFIG_PM
+ .suspend = cpcap_suspend,
+ .resume = cpcap_resume,
+#endif
};
static struct platform_device cpcap_adc_device = {
spi_unregister_driver(&cpcap_driver);
}
+#ifdef CONFIG_PM
+static int cpcap_suspend(struct spi_device *spi, pm_message_t mesg)
+{
+
+ struct cpcap_device *cpcap = spi_get_drvdata(spi);
+
+ return cpcap_irq_suspend(cpcap);
+}
+
+static int cpcap_resume(struct spi_device *spi)
+{
+ struct cpcap_device *cpcap = spi_get_drvdata(spi);
+
+ return cpcap_irq_resume(cpcap);
+}
+#endif
+
subsys_initcall(cpcap_init);
module_exit(cpcap_shutdown);
return ((val & EVENT_MASK(irq)) != 0) ? 1 : 0;
}
EXPORT_SYMBOL_GPL(cpcap_irq_sense);
+
+#ifdef CONFIG_PM
+int cpcap_irq_suspend(struct cpcap_device *cpcap)
+{
+ struct spi_device *spi = cpcap->spi;
+
+ disable_irq(spi->irq);
+ return 0;
+}
+
+int cpcap_irq_resume(struct cpcap_device *cpcap)
+{
+ struct spi_device *spi = cpcap->spi;
+
+ enable_irq(spi->irq);
+ return 0;
+}
+#endif
int cpcap_irq_sense(struct cpcap_device *cpcap, enum cpcap_irqs int_event,
unsigned char clear);
+#ifdef CONFIG_PM
+int cpcap_irq_suspend(struct cpcap_device *cpcap);
+
+int cpcap_irq_resume(struct cpcap_device *cpcap);
+#endif
+
int cpcap_adc_sync_read(struct cpcap_device *cpcap,
struct cpcap_adc_request *request);