diff options
author | Varka Bhadram <varkabhadram@gmail.com> | 2015-06-24 11:36:35 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2015-07-23 17:10:49 +0200 |
commit | a6cb869b3b7c16fd7c3ee766dd9f9a4fdda7edf9 (patch) | |
tree | a62ccbcbd43f12ffd7025f897134fd37e3d7b0b3 /net/ieee802154/sysfs.c | |
parent | c4227c8a6246b30793bd7360113ddc7b66d526dc (diff) | |
download | linux-stable-a6cb869b3b7c16fd7c3ee766dd9f9a4fdda7edf9.tar.gz linux-stable-a6cb869b3b7c16fd7c3ee766dd9f9a4fdda7edf9.tar.bz2 linux-stable-a6cb869b3b7c16fd7c3ee766dd9f9a4fdda7edf9.zip |
cfg802154: add PM hooks
This patch help to implement suspend/resume in mac802154, these
hooks will be run before the device is suspended and after it
resumes.
Signed-off-by: Varka Bhadram <varkab@cdac.in>
Signed-off-by: Alexander Aring <alex.aring@gmail.com>
Signed-off-by: Marcel Holtmann <marcel@holtmann.org>
Diffstat (limited to 'net/ieee802154/sysfs.c')
-rw-r--r-- | net/ieee802154/sysfs.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/net/ieee802154/sysfs.c b/net/ieee802154/sysfs.c index 133b4280660c..bd88525b041e 100644 --- a/net/ieee802154/sysfs.c +++ b/net/ieee802154/sysfs.c @@ -14,11 +14,13 @@ */ #include <linux/device.h> +#include <linux/rtnetlink.h> #include <net/cfg802154.h> #include "core.h" #include "sysfs.h" +#include "rdev-ops.h" static inline struct cfg802154_registered_device * dev_to_rdev(struct device *dev) @@ -62,10 +64,46 @@ static struct attribute *pmib_attrs[] = { }; ATTRIBUTE_GROUPS(pmib); +#ifdef CONFIG_PM_SLEEP +static int wpan_phy_suspend(struct device *dev) +{ + struct cfg802154_registered_device *rdev = dev_to_rdev(dev); + int ret = 0; + + if (rdev->ops->suspend) { + rtnl_lock(); + ret = rdev_suspend(rdev); + rtnl_unlock(); + } + + return ret; +} + +static int wpan_phy_resume(struct device *dev) +{ + struct cfg802154_registered_device *rdev = dev_to_rdev(dev); + int ret = 0; + + if (rdev->ops->resume) { + rtnl_lock(); + ret = rdev_resume(rdev); + rtnl_unlock(); + } + + return ret; +} + +static SIMPLE_DEV_PM_OPS(wpan_phy_pm_ops, wpan_phy_suspend, wpan_phy_resume); +#define WPAN_PHY_PM_OPS (&wpan_phy_pm_ops) +#else +#define WPAN_PHY_PM_OPS NULL +#endif + struct class wpan_phy_class = { .name = "ieee802154", .dev_release = wpan_phy_release, .dev_groups = pmib_groups, + .pm = WPAN_PHY_PM_OPS, }; int wpan_phy_sysfs_init(void) |