#include <linux/poll.h>
#include <linux/init.h>
#include <linux/devfs_fs_kernel.h>
+#include <linux/device.h>
#include <linux/vmalloc.h>
#include <linux/comedidev.h>
};
#endif
+static struct class_simple *comedi_class;
+
static int __init comedi_init(void)
{
int i;
printk("comedi: unable to get major %d\n",COMEDI_MAJOR);
return -EIO;
}
+ comedi_class = class_simple_create(THIS_MODULE, "comedi");
+ if(IS_ERR(comedi_class))
+ {
+ printk("comedi: failed to create class");
+ devfs_unregister_chrdev(COMEDI_MAJOR,"comedi");
+ return PTR_ERR(comedi_class);
+ }
comedi_devices=(comedi_device *)kmalloc(sizeof(comedi_device)*COMEDI_NDEVICES,GFP_KERNEL);
if(!comedi_devices)
+ {
+ class_simple_destroy(comedi_class);
+ devfs_unregister_chrdev(COMEDI_MAJOR,"comedi");
return -ENOMEM;
+ }
memset(comedi_devices,0,sizeof(comedi_device)*COMEDI_NDEVICES);
for(i=0;i<COMEDI_NDEVICES;i++){
comedi_devices[i].minor=i;
sprintf(name, "comedi%d", i);
devfs_register(NULL, name, DEVFS_FL_DEFAULT,
COMEDI_MAJOR, i, 0666 | S_IFCHR, &comedi_fops, NULL);
+ class_simple_device_add(comedi_class, MKDEV(COMEDI_MAJOR, i), NULL, "comedi%i", i);
}
comedi_rt_init();
printk("comedi: module in use -- remove delayed\n");
for(i=0;i<COMEDI_NDEVICES;i++){
+ class_simple_device_remove(MKDEV(COMEDI_MAJOR, i));
char name[20];
sprintf(name, "comedi%d", i);
devfs_unregister(devfs_find_handle(NULL, name,
COMEDI_MAJOR, i, DEVFS_SPECIAL_CHR, 0));
}
-
+ class_simple_destroy(comedi_class);
devfs_unregister_chrdev(COMEDI_MAJOR,"comedi");
comedi_proc_cleanup();