driver core: bus_type: add dev_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 dev_groups to struct bus_type which should be used instead of dev_attrs. dev_attrs will be removed from the structure soon. Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
This commit is contained in:
		
							parent
							
								
									e70b091512
								
							
						
					
					
						commit
						fa6fdb33b4
					
				| @ -119,6 +119,11 @@ static inline int driver_match_device(struct device_driver *drv, | ||||
| 	return drv->bus->match ? drv->bus->match(dev, drv) : 1; | ||||
| } | ||||
| 
 | ||||
| extern int device_add_groups(struct device *dev, | ||||
| 			     const struct attribute_group **groups); | ||||
| extern void device_remove_groups(struct device *dev, | ||||
| 				 const struct attribute_group **groups); | ||||
| 
 | ||||
| extern char *make_class_name(const char *name, struct kobject *kobj); | ||||
| 
 | ||||
| extern int devres_release_all(struct device *dev); | ||||
|  | ||||
| @ -499,6 +499,9 @@ int bus_add_device(struct device *dev) | ||||
| 		error = device_add_attrs(bus, dev); | ||||
| 		if (error) | ||||
| 			goto out_put; | ||||
| 		error = device_add_groups(dev, bus->dev_groups); | ||||
| 		if (error) | ||||
| 			goto out_groups; | ||||
| 		error = sysfs_create_link(&bus->p->devices_kset->kobj, | ||||
| 						&dev->kobj, dev_name(dev)); | ||||
| 		if (error) | ||||
| @ -513,6 +516,8 @@ int bus_add_device(struct device *dev) | ||||
| 
 | ||||
| out_subsys: | ||||
| 	sysfs_remove_link(&bus->p->devices_kset->kobj, dev_name(dev)); | ||||
| out_groups: | ||||
| 	device_remove_groups(dev, bus->dev_groups); | ||||
| out_id: | ||||
| 	device_remove_attrs(bus, dev); | ||||
| out_put: | ||||
| @ -575,6 +580,7 @@ void bus_remove_device(struct device *dev) | ||||
| 	sysfs_remove_link(&dev->bus->p->devices_kset->kobj, | ||||
| 			  dev_name(dev)); | ||||
| 	device_remove_attrs(dev->bus, dev); | ||||
| 	device_remove_groups(dev, dev->bus->dev_groups); | ||||
| 	if (klist_node_attached(&dev->p->knode_bus)) | ||||
| 		klist_del(&dev->p->knode_bus); | ||||
| 
 | ||||
|  | ||||
| @ -491,8 +491,7 @@ static void device_remove_bin_attributes(struct device *dev, | ||||
| 			device_remove_bin_file(dev, &attrs[i]); | ||||
| } | ||||
| 
 | ||||
| static int device_add_groups(struct device *dev, | ||||
| 			     const struct attribute_group **groups) | ||||
| int device_add_groups(struct device *dev, const struct attribute_group **groups) | ||||
| { | ||||
| 	int error = 0; | ||||
| 	int i; | ||||
| @ -511,8 +510,8 @@ static int device_add_groups(struct device *dev, | ||||
| 	return error; | ||||
| } | ||||
| 
 | ||||
| static void device_remove_groups(struct device *dev, | ||||
| 				 const struct attribute_group **groups) | ||||
| void device_remove_groups(struct device *dev, | ||||
| 			  const struct attribute_group **groups) | ||||
| { | ||||
| 	int i; | ||||
| 
 | ||||
|  | ||||
| @ -66,6 +66,7 @@ extern void bus_remove_file(struct bus_type *, struct bus_attribute *); | ||||
|  * @bus_attrs:	Default attributes of the bus. | ||||
|  * @dev_attrs:	Default attributes of the devices on the bus. | ||||
|  * @drv_attrs:	Default attributes of the device drivers on the bus. | ||||
|  * @dev_groups:	Default attributes of the devices on the bus. | ||||
|  * @match:	Called, perhaps multiple times, whenever a new device or driver | ||||
|  *		is added for this bus. It should return a nonzero value if the | ||||
|  *		given device can be handled by the given driver. | ||||
| @ -104,8 +105,9 @@ struct bus_type { | ||||
| 	const char		*dev_name; | ||||
| 	struct device		*dev_root; | ||||
| 	struct bus_attribute	*bus_attrs; | ||||
| 	struct device_attribute	*dev_attrs; | ||||
| 	struct device_attribute	*dev_attrs;	/* use dev_groups instead */ | ||||
| 	struct driver_attribute	*drv_attrs; | ||||
| 	const struct attribute_group **dev_groups; | ||||
| 
 | ||||
| 	int (*match)(struct device *dev, struct device_driver *drv); | ||||
| 	int (*uevent)(struct device *dev, struct kobj_uevent_env *env); | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user