From f02c16f77ded4b3917961327f1353f47b453473c Mon Sep 17 00:00:00 2001 From: Andres Salomon Date: Fri, 13 Jul 2012 05:57:17 -0700 Subject: [PATCH] --- yaml --- r: 321285 b: refs/heads/master c: ac2504151f5af27bbf0c0362b7da5951e05dfc43 h: refs/heads/master i: 321283: aa5cd44ce2f5b01281d41bc34407d47735db9c6b v: v3 --- [refs] | 2 +- trunk/drivers/platform/olpc/olpc-ec.c | 48 +++++++++++++++++++++++++++ trunk/include/linux/olpc-ec.h | 6 ++++ 3 files changed, 55 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index f73a72659d58..44eb137238db 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 3d26c20bae9e97c98f7240184427d3a38515d406 +refs/heads/master: ac2504151f5af27bbf0c0362b7da5951e05dfc43 diff --git a/trunk/drivers/platform/olpc/olpc-ec.c b/trunk/drivers/platform/olpc/olpc-ec.c index 44e6a4fae79b..d00523c65191 100644 --- a/trunk/drivers/platform/olpc/olpc-ec.c +++ b/trunk/drivers/platform/olpc/olpc-ec.c @@ -8,6 +8,7 @@ #include #include #include +#include #include #include #include @@ -122,3 +123,50 @@ int olpc_ec_cmd(u8 cmd, u8 *inbuf, size_t inlen, u8 *outbuf, size_t outlen) return desc.err; } EXPORT_SYMBOL_GPL(olpc_ec_cmd); + +static int olpc_ec_probe(struct platform_device *pdev) +{ + int err; + + if (!ec_driver) + return -ENODEV; + + err = ec_driver->probe ? ec_driver->probe(pdev) : 0; + + return err; +} + +static int olpc_ec_suspend(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + return ec_driver->suspend ? ec_driver->suspend(pdev) : 0; +} + +static int olpc_ec_resume(struct device *dev) +{ + struct platform_device *pdev = to_platform_device(dev); + return ec_driver->resume ? ec_driver->resume(pdev) : 0; +} + +static const struct dev_pm_ops olpc_ec_pm_ops = { + .suspend_late = olpc_ec_suspend, + .resume_early = olpc_ec_resume, +}; + +static struct platform_driver olpc_ec_plat_driver = { + .probe = olpc_ec_probe, + .driver = { + .name = "olpc-ec", + .pm = &olpc_ec_pm_ops, + }, +}; + +static int __init olpc_ec_init_module(void) +{ + return platform_driver_register(&olpc_ec_plat_driver); +} + +module_init(olpc_ec_init_module); + +MODULE_AUTHOR("Andres Salomon "); +MODULE_LICENSE("GPL"); diff --git a/trunk/include/linux/olpc-ec.h b/trunk/include/linux/olpc-ec.h index 231e96f5dfe2..5bb6e760aa61 100644 --- a/trunk/include/linux/olpc-ec.h +++ b/trunk/include/linux/olpc-ec.h @@ -14,7 +14,13 @@ #define EC_SCI_QUERY 0x84 #define EC_EXT_SCI_QUERY 0x85 +struct platform_device; + struct olpc_ec_driver { + int (*probe)(struct platform_device *); + int (*suspend)(struct platform_device *); + int (*resume)(struct platform_device *); + int (*ec_cmd)(u8, u8 *, size_t, u8 *, size_t, void *); };