Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 239378f1 authored by Kay Sievers's avatar Kay Sievers Committed by Greg Kroah-Hartman
Browse files

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: default avatarKay Sievers <kay.sievers@novell.com>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent bf0acc33
Loading
Loading
Loading
Loading
+34 −12
Original line number Diff line number Diff line
@@ -154,25 +154,47 @@ static int dev_uevent(struct kset *kset, struct kobject *kobj, char **envp,
			       "MINOR=%u", MINOR(dev->devt));
	}

	if (dev->driver)
		add_uevent_var(envp, num_envp, &i,
			       buffer, buffer_size, &length,
			       "DRIVER=%s", dev->driver->name);

#ifdef CONFIG_SYSFS_DEPRECATED
	/* add bus name (same as SUBSYSTEM, deprecated) */
	if (dev->bus)
	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,
			       "PHYSDEVBUS=%s", dev->bus->name);
#endif
				       "PHYSDEVPATH=%s", path);
			kfree(path);

	/* add driver name (PHYSDEV* values are deprecated)*/
	if (dev->driver) {
			add_uevent_var(envp, num_envp, &i,
				       buffer, buffer_size, &length,
			       "DRIVER=%s", dev->driver->name);
#ifdef CONFIG_SYSFS_DEPRECATED
				       "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,
			       buffer, buffer_size, &length,
			       "PHYSDEVBUS=%s", dev->bus->name);

		if (dev->driver)
			add_uevent_var(envp, num_envp, &i,
				       buffer, buffer_size, &length,
				       "PHYSDEVDRIVER=%s", dev->driver->name);
#endif
	}
#endif

	/* terminate, set to next free slot, shrink available space */
	envp[i] = NULL;