drm/radeon: fix PM on non-vram cards.
[safe/jmp/linux-2.6] / drivers / base / class.c
index 34a2de9..8e231d0 100644 (file)
@@ -63,7 +63,15 @@ static void class_release(struct kobject *kobj)
        kfree(cp);
 }
 
-static struct sysfs_ops class_sysfs_ops = {
+static const struct kobj_ns_type_operations *class_child_ns_type(struct kobject *kobj)
+{
+       struct class_private *cp = to_class(kobj);
+       struct class *class = cp->class;
+
+       return class->ns_type;
+}
+
+static const struct sysfs_ops class_sysfs_ops = {
        .show   = class_attr_show,
        .store  = class_attr_store,
 };
@@ -71,6 +79,7 @@ static struct sysfs_ops class_sysfs_ops = {
 static struct kobj_type class_ktype = {
        .sysfs_ops      = &class_sysfs_ops,
        .release        = class_release,
+       .child_ns_type  = class_child_ns_type,
 };
 
 /* Hotplug events for classes go to the class class_subsys */
@@ -219,6 +228,8 @@ static void class_create_release(struct class *cls)
  * This is used to create a struct class pointer that can then be used
  * in calls to device_create().
  *
+ * Returns &struct class pointer on success, or ERR_PTR() on error.
+ *
  * Note, the pointer created here is to be destroyed when finished by
  * making a call to class_destroy().
  */
@@ -490,6 +501,16 @@ void class_interface_unregister(struct class_interface *class_intf)
        class_put(parent);
 }
 
+ssize_t show_class_attr_string(struct class *class, struct class_attribute *attr,
+                               char *buf)
+{
+       struct class_attribute_string *cs;
+       cs = container_of(attr, struct class_attribute_string, attr);
+       return snprintf(buf, PAGE_SIZE, "%s\n", cs->str);
+}
+
+EXPORT_SYMBOL_GPL(show_class_attr_string);
+
 struct class_compat {
        struct kobject *kobj;
 };