struct bus_type ibmebus_bus_type = {
        .name      = "ibmebus",
-       .uevent    = of_device_uevent,
+       .uevent    = of_device_uevent_modalias,
        .bus_attrs = ibmebus_bus_attrs,
        .match     = ibmebus_bus_bus_match,
        .probe     = ibmebus_bus_device_probe,
 
 #include <linux/string.h>
 #include <linux/kdev_t.h>
 #include <linux/notifier.h>
+#include <linux/of.h>
+#include <linux/of_device.h>
 #include <linux/genhd.h>
 #include <linux/kallsyms.h>
 #include <linux/mutex.h>
        if (dev->driver)
                add_uevent_var(env, "DRIVER=%s", dev->driver->name);
 
+       /* Add common DT information about the device */
+       of_device_uevent(dev, env);
+
        /* have the bus specific function add its stuff */
        if (dev->bus && dev->bus->uevent) {
                retval = dev->bus->uevent(dev, env);
 
        int rc;
 
        /* Some devices have extra OF data and an OF-style MODALIAS */
-       rc = of_device_uevent(dev,env);
+       rc = of_device_uevent_modalias(dev,env);
        if (rc != -ENODEV)
                return rc;
 
 
 struct bus_type macio_bus_type = {
        .name   = "macio",
        .match  = macio_bus_match,
-       .uevent = of_device_uevent,
+       .uevent = of_device_uevent_modalias,
        .probe  = macio_device_probe,
        .remove = macio_device_remove,
        .shutdown = macio_device_shutdown,
 
 /**
  * of_device_uevent - Display OF related uevent information
  */
-int of_device_uevent(struct device *dev, struct kobj_uevent_env *env)
+void of_device_uevent(struct device *dev, struct kobj_uevent_env *env)
 {
        const char *compat;
        int seen = 0, cplen, sl;
 
        if ((!dev) || (!dev->of_node))
-               return -ENODEV;
-
-       if (add_uevent_var(env, "OF_NAME=%s", dev->of_node->name))
-               return -ENOMEM;
+               return;
 
-       if (add_uevent_var(env, "OF_TYPE=%s", dev->of_node->type))
-               return -ENOMEM;
+       add_uevent_var(env, "OF_NAME=%s", dev->of_node->name);
+       add_uevent_var(env, "OF_FULLNAME=%s", dev->of_node->full_name);
+       if (dev->of_node->type && strcmp("<NULL>", dev->of_node->type) != 0)
+               add_uevent_var(env, "OF_TYPE=%s", dev->of_node->type);
 
        /* Since the compatible field can contain pretty much anything
         * it's not really legal to split it out with commas. We split it
         * up using a number of environment variables instead. */
-
        compat = of_get_property(dev->of_node, "compatible", &cplen);
        while (compat && *compat && cplen > 0) {
-               if (add_uevent_var(env, "OF_COMPATIBLE_%d=%s", seen, compat))
-                       return -ENOMEM;
-
+               add_uevent_var(env, "OF_COMPATIBLE_%d=%s", seen, compat);
                sl = strlen(compat) + 1;
                compat += sl;
                cplen -= sl;
                seen++;
        }
+       add_uevent_var(env, "OF_COMPATIBLE_N=%d", seen);
+}
 
-       if (add_uevent_var(env, "OF_COMPATIBLE_N=%d", seen))
-               return -ENOMEM;
+int of_device_uevent_modalias(struct device *dev, struct kobj_uevent_env *env)
+{
+       int sl;
+
+       if ((!dev) || (!dev->of_node))
+               return -ENODEV;
 
-       /* modalias is trickier, we add it in 2 steps */
+       /* Devicetree modalias is tricky, we add it in 2 steps */
        if (add_uevent_var(env, "MODALIAS="))
                return -ENOMEM;
 
 
 extern ssize_t of_device_get_modalias(struct device *dev,
                                        char *str, ssize_t len);
 
-extern int of_device_uevent(struct device *dev, struct kobj_uevent_env *env);
+extern void of_device_uevent(struct device *dev, struct kobj_uevent_env *env);
+extern int of_device_uevent_modalias(struct device *dev, struct kobj_uevent_env *env);
 
 static inline void of_device_node_put(struct device *dev)
 {
        return 0;
 }
 
-static inline int of_device_uevent(struct device *dev,
+static inline void of_device_uevent(struct device *dev,
+                       struct kobj_uevent_env *env) { }
+
+static inline int of_device_uevent_modalias(struct device *dev,
                                   struct kobj_uevent_env *env)
 {
        return -ENODEV;