diff options
| author | Linus Torvalds <torvalds@home.transmeta.com> | 2003-05-10 07:58:50 -0700 |
|---|---|---|
| committer | Linus Torvalds <torvalds@home.transmeta.com> | 2003-05-10 07:58:50 -0700 |
| commit | 0774aa2d456669415e04d8d56e73ae5f1939509c (patch) | |
| tree | c278ca7efbadf674b2fb02ad5001aed636157675 | |
| parent | 04c8dca9d426dc7d6df5448a74fc71640615a924 (diff) | |
| parent | 3e3122a7734939c0f1788b2bcc68d61a33fa6a73 (diff) | |
Merge master.kernel.org:/home/gregkh/BK/i2c-2.5
into home.transmeta.com:/home/torvalds/v2.5/linux
| -rw-r--r-- | drivers/base/class.c | 18 | ||||
| -rw-r--r-- | include/linux/cpu.h | 1 | ||||
| -rw-r--r-- | kernel/cpufreq.c | 2 |
3 files changed, 20 insertions, 1 deletions
diff --git a/drivers/base/class.c b/drivers/base/class.c index eda427f96134..4e43e97a8a70 100644 --- a/drivers/base/class.c +++ b/drivers/base/class.c @@ -133,6 +133,21 @@ static void class_device_dev_unlink(struct class_device * class_dev) sysfs_remove_link(&class_dev->kobj, "device"); } +static int class_device_driver_link(struct class_device * class_dev) +{ + if ((class_dev->dev) && (class_dev->dev->driver)) + return sysfs_create_link(&class_dev->kobj, + &class_dev->dev->driver->kobj, "driver"); + return 0; +} + +static void class_device_driver_unlink(struct class_device * class_dev) +{ + if ((class_dev->dev) && (class_dev->dev->driver)) + sysfs_remove_link(&class_dev->kobj, "driver"); +} + + #define to_class_dev(obj) container_of(obj,struct class_device,kobj) #define to_class_dev_attr(_attr) container_of(_attr,struct class_device_attribute,attr) @@ -244,7 +259,6 @@ int class_device_add(struct class_device *class_dev) /* first, register with generic layer. */ strncpy(class_dev->kobj.name, class_dev->class_id, KOBJ_NAME_LEN); - kobj_set_kset_s(class_dev, class_subsys); kobj_set_kset_s(class_dev, class_obj_subsys); if (parent) class_dev->kobj.parent = &parent->subsys.kset.kobj; @@ -265,6 +279,7 @@ int class_device_add(struct class_device *class_dev) } class_device_dev_link(class_dev); + class_device_driver_link(class_dev); register_done: if (error && parent) @@ -298,6 +313,7 @@ void class_device_del(struct class_device *class_dev) if (class_dev->dev) { class_device_dev_unlink(class_dev); + class_device_driver_unlink(class_dev); put_device(class_dev->dev); } diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 0cea32df8325..e9e7ebfd63d4 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h @@ -29,6 +29,7 @@ struct cpu { }; extern int register_cpu(struct cpu *, int, struct node *); +extern struct class cpu_class; /* Stop CPUs going up and down. */ extern struct semaphore cpucontrol; diff --git a/kernel/cpufreq.c b/kernel/cpufreq.c index f548aead6a9d..913e6b0f56fb 100644 --- a/kernel/cpufreq.c +++ b/kernel/cpufreq.c @@ -22,6 +22,7 @@ #include <linux/spinlock.h> #include <linux/device.h> #include <linux/slab.h> +#include <linux/cpu.h> /** * The "cpufreq driver" - the arch- or hardware-dependend low @@ -115,6 +116,7 @@ static void cpufreq_remove_dev (struct class_device * dev); extern struct device_class cpu_devclass; static struct class_interface cpufreq_interface = { + .class = &cpu_class, .add = &cpufreq_add_dev, .remove = &cpufreq_remove_dev, }; |
