X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Fchar%2Ftipar.c;h=079db5a935a1210520d332071d6a47611182dfa4;hb=9464c7cf61b9433057924c36e6e02f303a00e768;hp=d30dc09dbbc9df2ffbb5c09e8f3cb32e334a49e2;hpb=41689045f6a3cbe0550e1d34e9cc20d2e8c432ba;p=linux-2.6.git diff --git a/drivers/char/tipar.c b/drivers/char/tipar.c index d30dc09db..079db5a93 100644 --- a/drivers/char/tipar.c +++ b/drivers/char/tipar.c @@ -42,6 +42,7 @@ */ #undef DEBUG /* change to #define to get debugging * output - for pr_debug() */ +#include #include #include #include @@ -55,6 +56,7 @@ #include #include #include +#include /* DevFs support */ #include /* Our code depend on parport */ #include @@ -381,7 +383,7 @@ tipar_ioctl(struct inode *inode, struct file *file, /* ----- kernel module registering ------------------------------------ */ -static const struct file_operations tipar_fops = { +static struct file_operations tipar_fops = { .owner = THIS_MODULE, .llseek = no_llseek, .read = tipar_read, @@ -441,6 +443,12 @@ tipar_register(int nr, struct parport *port) class_device_create(tipar_class, NULL, MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr), NULL, "par%d", nr); + /* Use devfs, tree: /dev/ticables/par/[0..2] */ + err = devfs_mk_cdev(MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr), + S_IFCHR | S_IRUGO | S_IWUGO, + "ticables/par/%d", nr); + if (err) + goto out_class; /* Display informations */ pr_info("tipar%d: using %s (%s)\n", nr, port->name, (port->irq == @@ -452,7 +460,11 @@ tipar_register(int nr, struct parport *port) pr_info("tipar%d: link cable not found\n", nr); err = 0; + goto out; +out_class: + class_device_destroy(tipar_class, MKDEV(TIPAR_MAJOR, TIPAR_MINOR + nr)); + class_destroy(tipar_class); out: return err; } @@ -495,6 +507,9 @@ tipar_init_module(void) goto out; } + /* Use devfs with tree: /dev/ticables/par/[0..2] */ + devfs_mk_dir("ticables/par"); + tipar_class = class_create(THIS_MODULE, "ticables"); if (IS_ERR(tipar_class)) { err = PTR_ERR(tipar_class); @@ -513,6 +528,7 @@ out_class: class_destroy(tipar_class); out_chrdev: + devfs_remove("ticables/par"); unregister_chrdev(TIPAR_MAJOR, "tipar"); out: return err; @@ -533,8 +549,10 @@ tipar_cleanup_module(void) continue; parport_unregister_device(table[i].dev); class_device_destroy(tipar_class, MKDEV(TIPAR_MAJOR, i)); + devfs_remove("ticables/par/%d", i); } class_destroy(tipar_class); + devfs_remove("ticables/par"); pr_info("tipar: module unloaded\n"); }