[PATCH 24/28] Driver core: add uevent vars for devices of a class

2007-02-07 Thread Greg KH
From: Kay Sievers <[EMAIL PROTECTED]>

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 <[EMAIL PROTECTED]>
Signed-off-by: Greg Kroah-Hartman <[EMAIL PROTECTED]>
---
 drivers/base/core.c |   46 ++
 1 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index 6fee3e6..7a5336f 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -154,25 +154,47 @@ static int dev_uevent(struct kset *kset, struct kobject 
*kobj, char **envp,
   "MINOR=%u", MINOR(dev->devt));
}
 
-#ifdef CONFIG_SYSFS_DEPRECATED
-   /* add bus name (same as SUBSYSTEM, deprecated) */
-   if (dev->bus)
-   add_uevent_var(envp, num_envp, ,
-  buffer, buffer_size, ,
-  "PHYSDEVBUS=%s", dev->bus->name);
-#endif
-
-   /* add driver name (PHYSDEV* values are deprecated)*/
-   if (dev->driver) {
+   if (dev->driver)
add_uevent_var(envp, num_envp, ,
   buffer, buffer_size, ,
   "DRIVER=%s", dev->driver->name);
+
 #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(>kobj, GFP_KERNEL);
+   add_uevent_var(envp, num_envp, ,
+  buffer, buffer_size, ,
+  "PHYSDEVPATH=%s", path);
+   kfree(path);
+
+   add_uevent_var(envp, num_envp, ,
+  buffer, buffer_size, ,
+  "PHYSDEVBUS=%s", parent->bus->name);
+
+   if (parent->driver)
+   add_uevent_var(envp, num_envp, ,
+  buffer, buffer_size, ,
+  "PHYSDEVDRIVER=%s", 
parent->driver->name);
+   }
+   } else if (dev->bus) {
add_uevent_var(envp, num_envp, ,
   buffer, buffer_size, ,
-  "PHYSDEVDRIVER=%s", dev->driver->name);
-#endif
+  "PHYSDEVBUS=%s", dev->bus->name);
+
+   if (dev->driver)
+   add_uevent_var(envp, num_envp, ,
+  buffer, buffer_size, ,
+  "PHYSDEVDRIVER=%s", dev->driver->name);
}
+#endif
 
/* terminate, set to next free slot, shrink available space */
envp[i] = NULL;
-- 
1.4.4.4

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH 24/28] Driver core: add uevent vars for devices of a class

2007-02-07 Thread Greg KH
From: Kay Sievers [EMAIL PROTECTED]

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 [EMAIL PROTECTED]
Signed-off-by: Greg Kroah-Hartman [EMAIL PROTECTED]
---
 drivers/base/core.c |   46 ++
 1 files changed, 34 insertions(+), 12 deletions(-)

diff --git a/drivers/base/core.c b/drivers/base/core.c
index 6fee3e6..7a5336f 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -154,25 +154,47 @@ static int dev_uevent(struct kset *kset, struct kobject 
*kobj, char **envp,
   MINOR=%u, MINOR(dev-devt));
}
 
-#ifdef CONFIG_SYSFS_DEPRECATED
-   /* 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) {
+   if (dev-driver)
add_uevent_var(envp, num_envp, i,
   buffer, buffer_size, length,
   DRIVER=%s, dev-driver-name);
+
 #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,
   buffer, buffer_size, length,
-  PHYSDEVDRIVER=%s, dev-driver-name);
-#endif
+  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
 
/* terminate, set to next free slot, shrink available space */
envp[i] = NULL;
-- 
1.4.4.4

-
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/