diff options
Diffstat (limited to 'drivers/base')
-rw-r--r-- | drivers/base/base.h | 1 | ||||
-rw-r--r-- | drivers/base/class.c | 31 |
2 files changed, 18 insertions, 14 deletions
diff --git a/drivers/base/base.h b/drivers/base/base.h index 79115eff6e94..c3b8dc98b8a7 100644 --- a/drivers/base/base.h +++ b/drivers/base/base.h | |||
@@ -42,4 +42,5 @@ struct class_device_attribute *to_class_dev_attr(struct attribute *_attr) | |||
42 | return container_of(_attr, struct class_device_attribute, attr); | 42 | return container_of(_attr, struct class_device_attribute, attr); |
43 | } | 43 | } |
44 | 44 | ||
45 | extern char *make_class_name(const char *name, struct kobject *kobj); | ||
45 | 46 | ||
diff --git a/drivers/base/class.c b/drivers/base/class.c index 4b598be0e4b6..41a8e0934e3a 100644 --- a/drivers/base/class.c +++ b/drivers/base/class.c | |||
@@ -504,22 +504,21 @@ void class_device_initialize(struct class_device *class_dev) | |||
504 | INIT_LIST_HEAD(&class_dev->node); | 504 | INIT_LIST_HEAD(&class_dev->node); |
505 | } | 505 | } |
506 | 506 | ||
507 | static char *make_class_name(struct class_device *class_dev) | 507 | char *make_class_name(const char *name, struct kobject *kobj) |
508 | { | 508 | { |
509 | char *name; | 509 | char *class_name; |
510 | int size; | 510 | int size; |
511 | 511 | ||
512 | size = strlen(class_dev->class->name) + | 512 | size = strlen(name) + strlen(kobject_name(kobj)) + 2; |
513 | strlen(kobject_name(&class_dev->kobj)) + 2; | ||
514 | 513 | ||
515 | name = kmalloc(size, GFP_KERNEL); | 514 | class_name = kmalloc(size, GFP_KERNEL); |
516 | if (!name) | 515 | if (!class_name) |
517 | return ERR_PTR(-ENOMEM); | 516 | return ERR_PTR(-ENOMEM); |
518 | 517 | ||
519 | strcpy(name, class_dev->class->name); | 518 | strcpy(class_name, name); |
520 | strcat(name, ":"); | 519 | strcat(class_name, ":"); |
521 | strcat(name, kobject_name(&class_dev->kobj)); | 520 | strcat(class_name, kobject_name(kobj)); |
522 | return name; | 521 | return class_name; |
523 | } | 522 | } |
524 | 523 | ||
525 | int class_device_add(struct class_device *class_dev) | 524 | int class_device_add(struct class_device *class_dev) |
@@ -594,7 +593,8 @@ int class_device_add(struct class_device *class_dev) | |||
594 | goto out5; | 593 | goto out5; |
595 | 594 | ||
596 | if (class_dev->dev) { | 595 | if (class_dev->dev) { |
597 | class_name = make_class_name(class_dev); | 596 | class_name = make_class_name(class_dev->class->name, |
597 | &class_dev->kobj); | ||
598 | error = sysfs_create_link(&class_dev->kobj, | 598 | error = sysfs_create_link(&class_dev->kobj, |
599 | &class_dev->dev->kobj, "device"); | 599 | &class_dev->dev->kobj, "device"); |
600 | if (error) | 600 | if (error) |
@@ -731,7 +731,8 @@ void class_device_del(struct class_device *class_dev) | |||
731 | } | 731 | } |
732 | 732 | ||
733 | if (class_dev->dev) { | 733 | if (class_dev->dev) { |
734 | class_name = make_class_name(class_dev); | 734 | class_name = make_class_name(class_dev->class->name, |
735 | &class_dev->kobj); | ||
735 | sysfs_remove_link(&class_dev->kobj, "device"); | 736 | sysfs_remove_link(&class_dev->kobj, "device"); |
736 | sysfs_remove_link(&class_dev->dev->kobj, class_name); | 737 | sysfs_remove_link(&class_dev->dev->kobj, class_name); |
737 | } | 738 | } |
@@ -796,14 +797,16 @@ int class_device_rename(struct class_device *class_dev, char *new_name) | |||
796 | new_name); | 797 | new_name); |
797 | 798 | ||
798 | if (class_dev->dev) | 799 | if (class_dev->dev) |
799 | old_class_name = make_class_name(class_dev); | 800 | old_class_name = make_class_name(class_dev->class->name, |
801 | &class_dev->kobj); | ||
800 | 802 | ||
801 | strlcpy(class_dev->class_id, new_name, KOBJ_NAME_LEN); | 803 | strlcpy(class_dev->class_id, new_name, KOBJ_NAME_LEN); |
802 | 804 | ||
803 | error = kobject_rename(&class_dev->kobj, new_name); | 805 | error = kobject_rename(&class_dev->kobj, new_name); |
804 | 806 | ||
805 | if (class_dev->dev) { | 807 | if (class_dev->dev) { |
806 | new_class_name = make_class_name(class_dev); | 808 | new_class_name = make_class_name(class_dev->class->name, |
809 | &class_dev->kobj); | ||
807 | sysfs_create_link(&class_dev->dev->kobj, &class_dev->kobj, | 810 | sysfs_create_link(&class_dev->dev->kobj, &class_dev->kobj, |
808 | new_class_name); | 811 | new_class_name); |
809 | sysfs_remove_link(&class_dev->dev->kobj, old_class_name); | 812 | sysfs_remove_link(&class_dev->dev->kobj, old_class_name); |