#include <linux/init.h>
#include <linux/sched.h>
#include <linux/device.h>
+#include <linux/devfs_fs_kernel.h>
#include <linux/ioctl.h>
#include <linux/parport.h>
#include <linux/ctype.h>
static struct class *ppdev_class;
-static const struct file_operations pp_fops = {
+static struct file_operations pp_fops = {
.owner = THIS_MODULE,
.llseek = no_llseek,
.read = pp_read,
static int __init ppdev_init (void)
{
- int err = 0;
+ int i, err = 0;
if (register_chrdev (PP_MAJOR, CHRDEV, &pp_fops)) {
printk (KERN_WARNING CHRDEV ": unable to get major %d\n",
err = PTR_ERR(ppdev_class);
goto out_chrdev;
}
+ devfs_mk_dir("parports");
+ for (i = 0; i < PARPORT_MAX; i++) {
+ devfs_mk_cdev(MKDEV(PP_MAJOR, i),
+ S_IFCHR | S_IRUGO | S_IWUGO, "parports/%d", i);
+ }
if (parport_register_driver(&pp_driver)) {
printk (KERN_WARNING CHRDEV ": unable to register with parport\n");
goto out_class;
goto out;
out_class:
+ for (i = 0; i < PARPORT_MAX; i++)
+ devfs_remove("parports/%d", i);
+ devfs_remove("parports");
class_destroy(ppdev_class);
out_chrdev:
unregister_chrdev(PP_MAJOR, CHRDEV);
static void __exit ppdev_cleanup (void)
{
+ int i;
/* Clean up all parport stuff */
+ for (i = 0; i < PARPORT_MAX; i++)
+ devfs_remove("parports/%d", i);
parport_unregister_driver(&pp_driver);
+ devfs_remove("parports");
class_destroy(ppdev_class);
unregister_chrdev (PP_MAJOR, CHRDEV);
}