Commit ced321bf authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman

driver core: device.h: add RW and RO attribute macros

Make it easier to create attributes without having to always audit the
mode settings.
Reviewed-by: default avatarGuenter Roeck <linux@roeck-us.net>
Tested-by: default avatarGuenter Roeck <linux@roeck-us.net>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent e4b63603
...@@ -47,7 +47,11 @@ struct bus_attribute { ...@@ -47,7 +47,11 @@ struct bus_attribute {
}; };
#define BUS_ATTR(_name, _mode, _show, _store) \ #define BUS_ATTR(_name, _mode, _show, _store) \
struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store) struct bus_attribute bus_attr_##_name = __ATTR(_name, _mode, _show, _store)
#define BUS_ATTR_RW(_name) \
struct bus_attribute bus_attr_##_name = __ATTR_RW(_name)
#define BUS_ATTR_RO(_name) \
struct bus_attribute bus_attr_##_name = __ATTR_RO(_name)
extern int __must_check bus_create_file(struct bus_type *, extern int __must_check bus_create_file(struct bus_type *,
struct bus_attribute *); struct bus_attribute *);
...@@ -262,8 +266,11 @@ struct driver_attribute { ...@@ -262,8 +266,11 @@ struct driver_attribute {
}; };
#define DRIVER_ATTR(_name, _mode, _show, _store) \ #define DRIVER_ATTR(_name, _mode, _show, _store) \
struct driver_attribute driver_attr_##_name = \ struct driver_attribute driver_attr_##_name = __ATTR(_name, _mode, _show, _store)
__ATTR(_name, _mode, _show, _store) #define DRIVER_ATTR_RW(_name) \
struct driver_attribute driver_attr_##_name = __ATTR_RW(_name)
#define DRIVER_ATTR_RO(_name) \
struct driver_attribute driver_attr_##_name = __ATTR_RO(_name)
extern int __must_check driver_create_file(struct device_driver *driver, extern int __must_check driver_create_file(struct device_driver *driver,
const struct driver_attribute *attr); const struct driver_attribute *attr);
...@@ -415,7 +422,11 @@ struct class_attribute { ...@@ -415,7 +422,11 @@ struct class_attribute {
}; };
#define CLASS_ATTR(_name, _mode, _show, _store) \ #define CLASS_ATTR(_name, _mode, _show, _store) \
struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store) struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store)
#define CLASS_ATTR_RW(_name) \
struct class_attribute class_attr_##_name = __ATTR_RW(_name)
#define CLASS_ATTR_RO(_name) \
struct class_attribute class_attr_##_name = __ATTR_RO(_name)
extern int __must_check class_create_file(struct class *class, extern int __must_check class_create_file(struct class *class,
const struct class_attribute *attr); const struct class_attribute *attr);
...@@ -423,7 +434,6 @@ extern void class_remove_file(struct class *class, ...@@ -423,7 +434,6 @@ extern void class_remove_file(struct class *class,
const struct class_attribute *attr); const struct class_attribute *attr);
/* Simple class attribute that is just a static string */ /* Simple class attribute that is just a static string */
struct class_attribute_string { struct class_attribute_string {
struct class_attribute attr; struct class_attribute attr;
char *str; char *str;
...@@ -512,6 +522,10 @@ ssize_t device_store_bool(struct device *dev, struct device_attribute *attr, ...@@ -512,6 +522,10 @@ ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
#define DEVICE_ATTR(_name, _mode, _show, _store) \ #define DEVICE_ATTR(_name, _mode, _show, _store) \
struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store) struct device_attribute dev_attr_##_name = __ATTR(_name, _mode, _show, _store)
#define DEVICE_ATTR_RW(_name) \
struct device_attribute dev_attr_##_name = __ATTR_RW(_name)
#define DEVICE_ATTR_RO(_name) \
struct device_attribute dev_attr_##_name = __ATTR_RO(_name)
#define DEVICE_ULONG_ATTR(_name, _mode, _var) \ #define DEVICE_ULONG_ATTR(_name, _mode, _var) \
struct dev_ext_attribute dev_attr_##_name = \ struct dev_ext_attribute dev_attr_##_name = \
{ __ATTR(_name, _mode, device_show_ulong, device_store_ulong), &(_var) } { __ATTR(_name, _mode, device_show_ulong, device_store_ulong), &(_var) }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment