Blame view
net/ieee802154/sysfs.c
2.55 KB
e23e9ec16 ieee802154: intro... |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
/* This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 * as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * Authors: * Alexander Aring <aar@pengutronix.de> * * Based on: net/wireless/sysfs.c */ #include <linux/device.h> |
a6cb869b3 cfg802154: add PM... |
17 |
#include <linux/rtnetlink.h> |
e23e9ec16 ieee802154: intro... |
18 19 |
#include <net/cfg802154.h> |
a5dd1d72d cfg802154: introd... |
20 |
#include "core.h" |
c5fbbc468 ieee802154: sysfs... |
21 |
#include "sysfs.h" |
a6cb869b3 cfg802154: add PM... |
22 |
#include "rdev-ops.h" |
a5dd1d72d cfg802154: introd... |
23 24 25 26 27 28 29 |
static inline struct cfg802154_registered_device * dev_to_rdev(struct device *dev) { return container_of(dev, struct cfg802154_registered_device, wpan_phy.dev); } |
a6fd693f6 ieee802154: sysfs... |
30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
#define SHOW_FMT(name, fmt, member) \ static ssize_t name ## _show(struct device *dev, \ struct device_attribute *attr, \ char *buf) \ { \ return sprintf(buf, fmt " ", dev_to_rdev(dev)->member); \ } \ static DEVICE_ATTR_RO(name) SHOW_FMT(index, "%d", wpan_phy_idx); static ssize_t name_show(struct device *dev, struct device_attribute *attr, char *buf) { struct wpan_phy *wpan_phy = &dev_to_rdev(dev)->wpan_phy; return sprintf(buf, "%s ", dev_name(&wpan_phy->dev)); } static DEVICE_ATTR_RO(name); |
a5dd1d72d cfg802154: introd... |
52 |
static void wpan_phy_release(struct device *dev) |
e23e9ec16 ieee802154: intro... |
53 |
{ |
a5dd1d72d cfg802154: introd... |
54 |
struct cfg802154_registered_device *rdev = dev_to_rdev(dev); |
e23e9ec16 ieee802154: intro... |
55 |
|
a5dd1d72d cfg802154: introd... |
56 |
cfg802154_dev_free(rdev); |
e23e9ec16 ieee802154: intro... |
57 58 59 |
} static struct attribute *pmib_attrs[] = { |
a6fd693f6 ieee802154: sysfs... |
60 61 |
&dev_attr_index.attr, &dev_attr_name.attr, |
e23e9ec16 ieee802154: intro... |
62 63 64 |
NULL, }; ATTRIBUTE_GROUPS(pmib); |
a6cb869b3 cfg802154: add PM... |
65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 |
#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 |
e23e9ec16 ieee802154: intro... |
99 100 101 102 |
struct class wpan_phy_class = { .name = "ieee802154", .dev_release = wpan_phy_release, .dev_groups = pmib_groups, |
a6cb869b3 cfg802154: add PM... |
103 |
.pm = WPAN_PHY_PM_OPS, |
e23e9ec16 ieee802154: intro... |
104 105 106 107 108 109 110 111 112 113 114 |
}; int wpan_phy_sysfs_init(void) { return class_register(&wpan_phy_class); } void wpan_phy_sysfs_exit(void) { class_unregister(&wpan_phy_class); } |