aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/base/core.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/base/core.c')
-rw-r--r--drivers/base/core.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/base/core.c b/drivers/base/core.c
index 07304a3b9ee2..cadf165651d8 100644
--- a/drivers/base/core.c
+++ b/drivers/base/core.c
@@ -805,8 +805,16 @@ static void cleanup_device_parent(struct device *dev)
805 805
806static int device_add_class_symlinks(struct device *dev) 806static int device_add_class_symlinks(struct device *dev)
807{ 807{
808 struct device_node *of_node = dev_of_node(dev);
808 int error; 809 int error;
809 810
811 if (of_node) {
812 error = sysfs_create_link(&dev->kobj, &of_node->kobj,"of_node");
813 if (error)
814 dev_warn(dev, "Error %d creating of_node link\n",error);
815 /* An error here doesn't warrant bringing down the device */
816 }
817
810 if (!dev->class) 818 if (!dev->class)
811 return 0; 819 return 0;
812 820
@@ -814,7 +822,7 @@ static int device_add_class_symlinks(struct device *dev)
814 &dev->class->p->subsys.kobj, 822 &dev->class->p->subsys.kobj,
815 "subsystem"); 823 "subsystem");
816 if (error) 824 if (error)
817 goto out; 825 goto out_devnode;
818 826
819 if (dev->parent && device_is_not_partition(dev)) { 827 if (dev->parent && device_is_not_partition(dev)) {
820 error = sysfs_create_link(&dev->kobj, &dev->parent->kobj, 828 error = sysfs_create_link(&dev->kobj, &dev->parent->kobj,
@@ -842,12 +850,16 @@ out_device:
842 850
843out_subsys: 851out_subsys:
844 sysfs_remove_link(&dev->kobj, "subsystem"); 852 sysfs_remove_link(&dev->kobj, "subsystem");
845out: 853out_devnode:
854 sysfs_remove_link(&dev->kobj, "of_node");
846 return error; 855 return error;
847} 856}
848 857
849static void device_remove_class_symlinks(struct device *dev) 858static void device_remove_class_symlinks(struct device *dev)
850{ 859{
860 if (dev_of_node(dev))
861 sysfs_remove_link(&dev->kobj, "of_node");
862
851 if (!dev->class) 863 if (!dev->class)
852 return; 864 return;
853 865
@@ -1095,8 +1107,7 @@ done:
1095 kobject_del(&dev->kobj); 1107 kobject_del(&dev->kobj);
1096 Error: 1108 Error:
1097 cleanup_device_parent(dev); 1109 cleanup_device_parent(dev);
1098 if (parent) 1110 put_device(parent);
1099 put_device(parent);
1100name_error: 1111name_error:
1101 kfree(dev->p); 1112 kfree(dev->p);
1102 dev->p = NULL; 1113 dev->p = NULL;