diff -purN -X /home/mbligh/.diff.exclude 820-aio_pipe/drivers/char/raw.c 830-raw/drivers/char/raw.c --- 820-aio_pipe/drivers/char/raw.c 2004-02-04 16:24:01.000000000 -0800 +++ 830-raw/drivers/char/raw.c 2004-02-28 11:42:30.000000000 -0800 @@ -17,6 +17,7 @@ #include #include #include +#include #include @@ -260,11 +261,28 @@ static struct file_operations raw_ctl_fo .owner = THIS_MODULE, }; +static struct cdev raw_cdev; + static int __init raw_init(void) { - int i; + int i, rc; - register_chrdev(RAW_MAJOR, "raw", &raw_fops); + rc = register_chrdev_region(MKDEV(RAW_MAJOR, 0), + MAX_RAW_MINORS, "raw"); + if (rc) + return rc; + + cdev_init(&raw_cdev, &raw_fops); + raw_cdev.owner = THIS_MODULE; + kobject_set_name(&raw_cdev.kobj, "raw"); + + rc = cdev_add(&raw_cdev, MKDEV(RAW_MAJOR, 0), MAX_RAW_MINORS); + if (rc) { + kobject_put(&raw_cdev.kobj); + unregister_chrdev_region(MKDEV(RAW_MAJOR, 0), + MAX_RAW_MINORS); + return rc; + } devfs_mk_cdev(MKDEV(RAW_MAJOR, 0), S_IFCHR | S_IRUGO | S_IWUGO, "raw/rawctl"); @@ -283,7 +301,9 @@ static void __exit raw_exit(void) devfs_remove("raw/raw%d", i); devfs_remove("raw/rawctl"); devfs_remove("raw"); - unregister_chrdev(RAW_MAJOR, "raw"); + cdev_del(&raw_cdev); + unregister_chrdev_region(MKDEV(RAW_MAJOR, 0), + MAX_RAW_MINORS); } module_init(raw_init);