diff options
author | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-08-08 18:22:56 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-08-12 18:33:31 -0400 |
commit | ed0617b5c0bcd7fd04053568aa0cc19a977a1f26 (patch) | |
tree | 8b5a0a83d4374fc9d6361cbb9f820300c446d7ca /drivers/base | |
parent | fa6fdb33b486a8afc5439c504da8d581e142c77d (diff) |
driver core: bus_type: add drv_groups
attribute groups are much more flexible than just a list of attributes,
due to their support for visibility of the attributes, and binary
attributes. Add drv_groups to struct bus_type which should be used
instead of drv_attrs.
drv_attrs will be removed from the structure soon.
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/base.h | 5 | ||||
-rw-r--r-- | drivers/base/bus.c | 5 | ||||
-rw-r--r-- | drivers/base/driver.c | 8 |
3 files changed, 14 insertions, 4 deletions
diff --git a/drivers/base/base.h b/drivers/base/base.h index fccf954f82fd..2cbc6774f4cd 100644 --- a/drivers/base/base.h +++ b/drivers/base/base.h | |||
@@ -119,6 +119,11 @@ static inline int driver_match_device(struct device_driver *drv, | |||
119 | return drv->bus->match ? drv->bus->match(dev, drv) : 1; | 119 | return drv->bus->match ? drv->bus->match(dev, drv) : 1; |
120 | } | 120 | } |
121 | 121 | ||
122 | extern int driver_add_groups(struct device_driver *drv, | ||
123 | const struct attribute_group **groups); | ||
124 | extern void driver_remove_groups(struct device_driver *drv, | ||
125 | const struct attribute_group **groups); | ||
126 | |||
122 | extern int device_add_groups(struct device *dev, | 127 | extern int device_add_groups(struct device *dev, |
123 | const struct attribute_group **groups); | 128 | const struct attribute_group **groups); |
124 | extern void device_remove_groups(struct device *dev, | 129 | extern void device_remove_groups(struct device *dev, |
diff --git a/drivers/base/bus.c b/drivers/base/bus.c index 7b2dc5ba7d79..de5ce22df306 100644 --- a/drivers/base/bus.c +++ b/drivers/base/bus.c | |||
@@ -725,6 +725,10 @@ int bus_add_driver(struct device_driver *drv) | |||
725 | printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n", | 725 | printk(KERN_ERR "%s: driver_add_attrs(%s) failed\n", |
726 | __func__, drv->name); | 726 | __func__, drv->name); |
727 | } | 727 | } |
728 | error = driver_add_groups(drv, bus->drv_groups); | ||
729 | if (error) | ||
730 | printk(KERN_ERR "%s: driver_create_groups(%s) failed\n", | ||
731 | __func__, drv->name); | ||
728 | 732 | ||
729 | if (!drv->suppress_bind_attrs) { | 733 | if (!drv->suppress_bind_attrs) { |
730 | error = add_bind_files(drv); | 734 | error = add_bind_files(drv); |
@@ -762,6 +766,7 @@ void bus_remove_driver(struct device_driver *drv) | |||
762 | if (!drv->suppress_bind_attrs) | 766 | if (!drv->suppress_bind_attrs) |
763 | remove_bind_files(drv); | 767 | remove_bind_files(drv); |
764 | driver_remove_attrs(drv->bus, drv); | 768 | driver_remove_attrs(drv->bus, drv); |
769 | driver_remove_groups(drv, drv->bus->drv_groups); | ||
765 | driver_remove_file(drv, &driver_attr_uevent); | 770 | driver_remove_file(drv, &driver_attr_uevent); |
766 | klist_remove(&drv->p->knode_bus); | 771 | klist_remove(&drv->p->knode_bus); |
767 | pr_debug("bus: '%s': remove driver %s\n", drv->bus->name, drv->name); | 772 | pr_debug("bus: '%s': remove driver %s\n", drv->bus->name, drv->name); |
diff --git a/drivers/base/driver.c b/drivers/base/driver.c index 974e301a1ef0..89db726ebb98 100644 --- a/drivers/base/driver.c +++ b/drivers/base/driver.c | |||
@@ -123,8 +123,8 @@ void driver_remove_file(struct device_driver *drv, | |||
123 | } | 123 | } |
124 | EXPORT_SYMBOL_GPL(driver_remove_file); | 124 | EXPORT_SYMBOL_GPL(driver_remove_file); |
125 | 125 | ||
126 | static int driver_add_groups(struct device_driver *drv, | 126 | int driver_add_groups(struct device_driver *drv, |
127 | const struct attribute_group **groups) | 127 | const struct attribute_group **groups) |
128 | { | 128 | { |
129 | int error = 0; | 129 | int error = 0; |
130 | int i; | 130 | int i; |
@@ -143,8 +143,8 @@ static int driver_add_groups(struct device_driver *drv, | |||
143 | return error; | 143 | return error; |
144 | } | 144 | } |
145 | 145 | ||
146 | static void driver_remove_groups(struct device_driver *drv, | 146 | void driver_remove_groups(struct device_driver *drv, |
147 | const struct attribute_group **groups) | 147 | const struct attribute_group **groups) |
148 | { | 148 | { |
149 | int i; | 149 | int i; |
150 | 150 | ||