diff options
| author | Greg Kroah-Hartman <gregkh@suse.de> | 2006-07-27 19:16:04 -0400 |
|---|---|---|
| committer | Greg Kroah-Hartman <gregkh@suse.de> | 2006-12-01 17:51:59 -0500 |
| commit | 94fbcded4ea0dc14cbfb222a5c68372f150d1476 (patch) | |
| tree | fcbf2d5f71a9993666a1c8d1883273f8046f8625 | |
| parent | cd15422b9f39155e2d9ea56ae95c6f62aa5df42e (diff) | |
Driver core: change misc class_devices to be real devices
This also ment that some of the misc drivers had to also be fixed
up as they were assuming the device was a class_device.
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
| -rw-r--r-- | drivers/char/hw_random/core.c | 38 | ||||
| -rw-r--r-- | drivers/char/misc.c | 13 | ||||
| -rw-r--r-- | drivers/char/tpm/tpm.c | 2 | ||||
| -rw-r--r-- | drivers/input/serio/serio_raw.c | 2 | ||||
| -rw-r--r-- | include/linux/miscdevice.h | 5 |
5 files changed, 27 insertions, 33 deletions
diff --git a/drivers/char/hw_random/core.c b/drivers/char/hw_random/core.c index 154a81d328c1..ebace201bec6 100644 --- a/drivers/char/hw_random/core.c +++ b/drivers/char/hw_random/core.c | |||
| @@ -162,7 +162,8 @@ static struct miscdevice rng_miscdev = { | |||
| 162 | }; | 162 | }; |
| 163 | 163 | ||
| 164 | 164 | ||
| 165 | static ssize_t hwrng_attr_current_store(struct class_device *class, | 165 | static ssize_t hwrng_attr_current_store(struct device *dev, |
| 166 | struct device_attribute *attr, | ||
| 166 | const char *buf, size_t len) | 167 | const char *buf, size_t len) |
| 167 | { | 168 | { |
| 168 | int err; | 169 | int err; |
| @@ -192,7 +193,8 @@ static ssize_t hwrng_attr_current_store(struct class_device *class, | |||
| 192 | return err ? : len; | 193 | return err ? : len; |
| 193 | } | 194 | } |
| 194 | 195 | ||
| 195 | static ssize_t hwrng_attr_current_show(struct class_device *class, | 196 | static ssize_t hwrng_attr_current_show(struct device *dev, |
| 197 | struct device_attribute *attr, | ||
| 196 | char *buf) | 198 | char *buf) |
| 197 | { | 199 | { |
| 198 | int err; | 200 | int err; |
| @@ -210,7 +212,8 @@ static ssize_t hwrng_attr_current_show(struct class_device *class, | |||
| 210 | return ret; | 212 | return ret; |
| 211 | } | 213 | } |
| 212 | 214 | ||
| 213 | static ssize_t hwrng_attr_available_show(struct class_device *class, | 215 | static ssize_t hwrng_attr_available_show(struct device *dev, |
| 216 | struct device_attribute *attr, | ||
| 214 | char *buf) | 217 | char *buf) |
| 215 | { | 218 | { |
| 216 | int err; | 219 | int err; |
| @@ -234,20 +237,18 @@ static ssize_t hwrng_attr_available_show(struct class_device *class, | |||
| 234 | return ret; | 237 | return ret; |
| 235 | } | 238 | } |
| 236 | 239 | ||
| 237 | static CLASS_DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR, | 240 | static DEVICE_ATTR(rng_current, S_IRUGO | S_IWUSR, |
| 238 | hwrng_attr_current_show, | 241 | hwrng_attr_current_show, |
| 239 | hwrng_attr_current_store); | 242 | hwrng_attr_current_store); |
| 240 | static CLASS_DEVICE_ATTR(rng_available, S_IRUGO, | 243 | static DEVICE_ATTR(rng_available, S_IRUGO, |
| 241 | hwrng_attr_available_show, | 244 | hwrng_attr_available_show, |
| 242 | NULL); | 245 | NULL); |
| 243 | 246 | ||
| 244 | 247 | ||
| 245 | static void unregister_miscdev(void) | 248 | static void unregister_miscdev(void) |
| 246 | { | 249 | { |
| 247 | class_device_remove_file(rng_miscdev.class, | 250 | device_remove_file(rng_miscdev.this_device, &dev_attr_rng_available); |
| 248 | &class_device_attr_rng_available); | 251 | device_remove_file(rng_miscdev.this_device, &dev_attr_rng_current); |
| 249 | class_device_remove_file(rng_miscdev.class, | ||
| 250 | &class_device_attr_rng_current); | ||
| 251 | misc_deregister(&rng_miscdev); | 252 | misc_deregister(&rng_miscdev); |
| 252 | } | 253 | } |
| 253 | 254 | ||
| @@ -258,20 +259,19 @@ static int register_miscdev(void) | |||
| 258 | err = misc_register(&rng_miscdev); | 259 | err = misc_register(&rng_miscdev); |
| 259 | if (err) | 260 | if (err) |
| 260 | goto out; | 261 | goto out; |
| 261 | err = class_device_create_file(rng_miscdev.class, | 262 | err = device_create_file(rng_miscdev.this_device, |
| 262 | &class_device_attr_rng_current); | 263 | &dev_attr_rng_current); |
| 263 | if (err) | 264 | if (err) |
| 264 | goto err_misc_dereg; | 265 | goto err_misc_dereg; |
| 265 | err = class_device_create_file(rng_miscdev.class, | 266 | err = device_create_file(rng_miscdev.this_device, |
| 266 | &class_device_attr_rng_available); | 267 | &dev_attr_rng_available); |
| 267 | if (err) | 268 | if (err) |
| 268 | goto err_remove_current; | 269 | goto err_remove_current; |
| 269 | out: | 270 | out: |
| 270 | return err; | 271 | return err; |
| 271 | 272 | ||
| 272 | err_remove_current: | 273 | err_remove_current: |
| 273 | class_device_remove_file(rng_miscdev.class, | 274 | device_remove_file(rng_miscdev.this_device, &dev_attr_rng_current); |
| 274 | &class_device_attr_rng_current); | ||
| 275 | err_misc_dereg: | 275 | err_misc_dereg: |
| 276 | misc_deregister(&rng_miscdev); | 276 | misc_deregister(&rng_miscdev); |
| 277 | goto out; | 277 | goto out; |
diff --git a/drivers/char/misc.c b/drivers/char/misc.c index 62ebe09656e3..7a484fc7cb9e 100644 --- a/drivers/char/misc.c +++ b/drivers/char/misc.c | |||
| @@ -169,11 +169,6 @@ fail: | |||
| 169 | return err; | 169 | return err; |
| 170 | } | 170 | } |
| 171 | 171 | ||
| 172 | /* | ||
| 173 | * TODO for 2.7: | ||
| 174 | * - add a struct kref to struct miscdevice and make all usages of | ||
| 175 | * them dynamic. | ||
| 176 | */ | ||
| 177 | static struct class *misc_class; | 172 | static struct class *misc_class; |
| 178 | 173 | ||
| 179 | static const struct file_operations misc_fops = { | 174 | static const struct file_operations misc_fops = { |
| @@ -228,10 +223,10 @@ int misc_register(struct miscdevice * misc) | |||
| 228 | misc_minors[misc->minor >> 3] |= 1 << (misc->minor & 7); | 223 | misc_minors[misc->minor >> 3] |= 1 << (misc->minor & 7); |
| 229 | dev = MKDEV(MISC_MAJOR, misc->minor); | 224 | dev = MKDEV(MISC_MAJOR, misc->minor); |
| 230 | 225 | ||
| 231 | misc->class = class_device_create(misc_class, NULL, dev, misc->dev, | 226 | misc->this_device = device_create(misc_class, misc->parent, dev, |
| 232 | "%s", misc->name); | 227 | "%s", misc->name); |
| 233 | if (IS_ERR(misc->class)) { | 228 | if (IS_ERR(misc->this_device)) { |
| 234 | err = PTR_ERR(misc->class); | 229 | err = PTR_ERR(misc->this_device); |
| 235 | goto out; | 230 | goto out; |
| 236 | } | 231 | } |
| 237 | 232 | ||
| @@ -264,7 +259,7 @@ int misc_deregister(struct miscdevice * misc) | |||
| 264 | 259 | ||
| 265 | down(&misc_sem); | 260 | down(&misc_sem); |
| 266 | list_del(&misc->list); | 261 | list_del(&misc->list); |
| 267 | class_device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor)); | 262 | device_destroy(misc_class, MKDEV(MISC_MAJOR, misc->minor)); |
| 268 | if (i < DYNAMIC_MINORS && i>0) { | 263 | if (i < DYNAMIC_MINORS && i>0) { |
| 269 | misc_minors[i>>3] &= ~(1 << (misc->minor & 7)); | 264 | misc_minors[i>>3] &= ~(1 << (misc->minor & 7)); |
| 270 | } | 265 | } |
diff --git a/drivers/char/tpm/tpm.c b/drivers/char/tpm/tpm.c index 6ad2d3bb945c..6e1329d404d2 100644 --- a/drivers/char/tpm/tpm.c +++ b/drivers/char/tpm/tpm.c | |||
| @@ -1130,7 +1130,7 @@ struct tpm_chip *tpm_register_hardware(struct device *dev, const struct tpm_vend | |||
| 1130 | scnprintf(devname, DEVNAME_SIZE, "%s%d", "tpm", chip->dev_num); | 1130 | scnprintf(devname, DEVNAME_SIZE, "%s%d", "tpm", chip->dev_num); |
| 1131 | chip->vendor.miscdev.name = devname; | 1131 | chip->vendor.miscdev.name = devname; |
| 1132 | 1132 | ||
| 1133 | chip->vendor.miscdev.dev = dev; | 1133 | chip->vendor.miscdev.parent = dev; |
| 1134 | chip->dev = get_device(dev); | 1134 | chip->dev = get_device(dev); |
| 1135 | 1135 | ||
| 1136 | if (misc_register(&chip->vendor.miscdev)) { | 1136 | if (misc_register(&chip->vendor.miscdev)) { |
diff --git a/drivers/input/serio/serio_raw.c b/drivers/input/serio/serio_raw.c index ba2a2035d648..7c8d0399ae82 100644 --- a/drivers/input/serio/serio_raw.c +++ b/drivers/input/serio/serio_raw.c | |||
| @@ -297,7 +297,7 @@ static int serio_raw_connect(struct serio *serio, struct serio_driver *drv) | |||
| 297 | 297 | ||
| 298 | serio_raw->dev.minor = PSMOUSE_MINOR; | 298 | serio_raw->dev.minor = PSMOUSE_MINOR; |
| 299 | serio_raw->dev.name = serio_raw->name; | 299 | serio_raw->dev.name = serio_raw->name; |
| 300 | serio_raw->dev.dev = &serio->dev; | 300 | serio_raw->dev.parent = &serio->dev; |
| 301 | serio_raw->dev.fops = &serio_raw_fops; | 301 | serio_raw->dev.fops = &serio_raw_fops; |
| 302 | 302 | ||
| 303 | err = misc_register(&serio_raw->dev); | 303 | err = misc_register(&serio_raw->dev); |
diff --git a/include/linux/miscdevice.h b/include/linux/miscdevice.h index b03cfb91e228..326da7d500c7 100644 --- a/include/linux/miscdevice.h +++ b/include/linux/miscdevice.h | |||
| @@ -31,15 +31,14 @@ | |||
| 31 | #define HPET_MINOR 228 | 31 | #define HPET_MINOR 228 |
| 32 | 32 | ||
| 33 | struct device; | 33 | struct device; |
| 34 | struct class_device; | ||
| 35 | 34 | ||
| 36 | struct miscdevice { | 35 | struct miscdevice { |
| 37 | int minor; | 36 | int minor; |
| 38 | const char *name; | 37 | const char *name; |
| 39 | const struct file_operations *fops; | 38 | const struct file_operations *fops; |
| 40 | struct list_head list; | 39 | struct list_head list; |
| 41 | struct device *dev; | 40 | struct device *parent; |
| 42 | struct class_device *class; | 41 | struct device *this_device; |
| 43 | }; | 42 | }; |
| 44 | 43 | ||
| 45 | extern int misc_register(struct miscdevice * misc); | 44 | extern int misc_register(struct miscdevice * misc); |
