|
@@ -47,7 +47,11 @@ struct bus_attribute {
|
|
|
};
|
|
|
|
|
|
#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 *,
|
|
|
struct bus_attribute *);
|
|
@@ -261,9 +265,12 @@ struct driver_attribute {
|
|
|
size_t count);
|
|
|
};
|
|
|
|
|
|
-#define DRIVER_ATTR(_name, _mode, _show, _store) \
|
|
|
-struct driver_attribute driver_attr_##_name = \
|
|
|
- __ATTR(_name, _mode, _show, _store)
|
|
|
+#define DRIVER_ATTR(_name, _mode, _show, _store) \
|
|
|
+ struct driver_attribute driver_attr_##_name = __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,
|
|
|
const struct driver_attribute *attr);
|
|
@@ -414,8 +421,12 @@ struct class_attribute {
|
|
|
const struct class_attribute *attr);
|
|
|
};
|
|
|
|
|
|
-#define CLASS_ATTR(_name, _mode, _show, _store) \
|
|
|
-struct class_attribute class_attr_##_name = __ATTR(_name, _mode, _show, _store)
|
|
|
+#define CLASS_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,
|
|
|
const struct class_attribute *attr);
|
|
@@ -423,7 +434,6 @@ extern void class_remove_file(struct class *class,
|
|
|
const struct class_attribute *attr);
|
|
|
|
|
|
/* Simple class attribute that is just a static string */
|
|
|
-
|
|
|
struct class_attribute_string {
|
|
|
struct class_attribute attr;
|
|
|
char *str;
|
|
@@ -512,6 +522,10 @@ ssize_t device_store_bool(struct device *dev, struct device_attribute *attr,
|
|
|
|
|
|
#define DEVICE_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) \
|
|
|
struct dev_ext_attribute dev_attr_##_name = \
|
|
|
{ __ATTR(_name, _mode, device_show_ulong, device_store_ulong), &(_var) }
|