Driver core: add uevent vars for devices of a class
Devices converted from class_device to device should have the same uevent keys as the original class_device had. We search up the parents until we find the first bus device and add the (already deprecated) PHYDEV* values. Signed-off-by: Kay Sievers <kay.sievers@novell.com> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
parent
bf0acc3302
commit
239378f16a
1 changed files with 34 additions and 12 deletions
|
@ -154,25 +154,47 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp,
|
||||||
"MINOR=%u", MINOR(dev->devt));
|
"MINOR=%u", MINOR(dev->devt));
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef CONFIG_SYSFS_DEPRECATED
|
if (dev->driver)
|
||||||
/* add bus name (same as SUBSYSTEM, deprecated) */
|
|
||||||
if (dev->bus)
|
|
||||||
add_uevent_var(envp, num_envp, &i,
|
|
||||||
buffer, buffer_size, &length,
|
|
||||||
"PHYSDEVBUS=%s", dev->bus->name);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* add driver name (PHYSDEV* values are deprecated)*/
|
|
||||||
if (dev->driver) {
|
|
||||||
add_uevent_var(envp, num_envp, &i,
|
add_uevent_var(envp, num_envp, &i,
|
||||||
buffer, buffer_size, &length,
|
buffer, buffer_size, &length,
|
||||||
"DRIVER=%s", dev->driver->name);
|
"DRIVER=%s", dev->driver->name);
|
||||||
|
|
||||||
#ifdef CONFIG_SYSFS_DEPRECATED
|
#ifdef CONFIG_SYSFS_DEPRECATED
|
||||||
|
if (dev->class) {
|
||||||
|
struct device *parent = dev->parent;
|
||||||
|
|
||||||
|
/* find first bus device in parent chain */
|
||||||
|
while (parent && !parent->bus)
|
||||||
|
parent = parent->parent;
|
||||||
|
if (parent && parent->bus) {
|
||||||
|
const char *path;
|
||||||
|
|
||||||
|
path = kobject_get_path(&parent->kobj, GFP_KERNEL);
|
||||||
|
add_uevent_var(envp, num_envp, &i,
|
||||||
|
buffer, buffer_size, &length,
|
||||||
|
"PHYSDEVPATH=%s", path);
|
||||||
|
kfree(path);
|
||||||
|
|
||||||
|
add_uevent_var(envp, num_envp, &i,
|
||||||
|
buffer, buffer_size, &length,
|
||||||
|
"PHYSDEVBUS=%s", parent->bus->name);
|
||||||
|
|
||||||
|
if (parent->driver)
|
||||||
|
add_uevent_var(envp, num_envp, &i,
|
||||||
|
buffer, buffer_size, &length,
|
||||||
|
"PHYSDEVDRIVER=%s", parent->driver->name);
|
||||||
|
}
|
||||||
|
} else if (dev->bus) {
|
||||||
add_uevent_var(envp, num_envp, &i,
|
add_uevent_var(envp, num_envp, &i,
|
||||||
buffer, buffer_size, &length,
|
buffer, buffer_size, &length,
|
||||||
"PHYSDEVDRIVER=%s", dev->driver->name);
|
"PHYSDEVBUS=%s", dev->bus->name);
|
||||||
#endif
|
|
||||||
|
if (dev->driver)
|
||||||
|
add_uevent_var(envp, num_envp, &i,
|
||||||
|
buffer, buffer_size, &length,
|
||||||
|
"PHYSDEVDRIVER=%s", dev->driver->name);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* terminate, set to next free slot, shrink available space */
|
/* terminate, set to next free slot, shrink available space */
|
||||||
envp[i] = NULL;
|
envp[i] = NULL;
|
||||||
|
|
Loading…
Reference in a new issue