Commit 33ca8ab9 authored by Sudip Mukherjee's avatar Sudip Mukherjee Committed by Dmitry Torokhov

Input: parkbd - use parallel port device model

Modify parkbd driver to use the new Parallel Port device model.
Signed-off-by: default avatarSudip Mukherjee <sudip@vectorindia.org>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 7b415285
...@@ -141,19 +141,15 @@ static void parkbd_interrupt(void *dev_id) ...@@ -141,19 +141,15 @@ static void parkbd_interrupt(void *dev_id)
parkbd_last = jiffies; parkbd_last = jiffies;
} }
static int parkbd_getport(void) static int parkbd_getport(struct parport *pp)
{ {
struct parport *pp; struct pardev_cb parkbd_parport_cb;
pp = parport_find_number(parkbd_pp_no); parkbd_parport_cb.irq_func = parkbd_interrupt;
parkbd_parport_cb.flags = PARPORT_FLAG_EXCL;
if (pp == NULL) { parkbd_dev = parport_register_dev_model(pp, "parkbd",
printk(KERN_ERR "parkbd: no such parport\n"); &parkbd_parport_cb, 0);
return -ENODEV;
}
parkbd_dev = parport_register_device(pp, "parkbd", NULL, NULL, parkbd_interrupt, PARPORT_DEV_EXCL, NULL);
parport_put_port(pp);
if (!parkbd_dev) if (!parkbd_dev)
return -ENODEV; return -ENODEV;
...@@ -183,19 +179,21 @@ static struct serio * __init parkbd_allocate_serio(void) ...@@ -183,19 +179,21 @@ static struct serio * __init parkbd_allocate_serio(void)
return serio; return serio;
} }
static int __init parkbd_init(void) static void parkbd_attach(struct parport *pp)
{ {
int err; if (pp->number != parkbd_pp_no) {
pr_debug("Not using parport%d.\n", pp->number);
return;
}
err = parkbd_getport(); if (parkbd_getport(pp))
if (err) return;
return err;
parkbd_port = parkbd_allocate_serio(); parkbd_port = parkbd_allocate_serio();
if (!parkbd_port) { if (!parkbd_port) {
parport_release(parkbd_dev); parport_release(parkbd_dev);
parport_unregister_device(parkbd_dev); parport_unregister_device(parkbd_dev);
return -ENOMEM; return;
} }
parkbd_writelines(3); parkbd_writelines(3);
...@@ -205,14 +203,35 @@ static int __init parkbd_init(void) ...@@ -205,14 +203,35 @@ static int __init parkbd_init(void)
printk(KERN_INFO "serio: PARKBD %s adapter on %s\n", printk(KERN_INFO "serio: PARKBD %s adapter on %s\n",
parkbd_mode ? "AT" : "XT", parkbd_dev->port->name); parkbd_mode ? "AT" : "XT", parkbd_dev->port->name);
return 0; return;
} }
static void __exit parkbd_exit(void) static void parkbd_detach(struct parport *port)
{ {
if (!parkbd_port || port->number != parkbd_pp_no)
return;
parport_release(parkbd_dev); parport_release(parkbd_dev);
serio_unregister_port(parkbd_port); serio_unregister_port(parkbd_port);
parport_unregister_device(parkbd_dev); parport_unregister_device(parkbd_dev);
parkbd_port = NULL;
}
static struct parport_driver parkbd_parport_driver = {
.name = "parkbd",
.match_port = parkbd_attach,
.detach = parkbd_detach,
.devmodel = true,
};
static int __init parkbd_init(void)
{
return parport_register_driver(&parkbd_parport_driver);
}
static void __exit parkbd_exit(void)
{
parport_unregister_driver(&parkbd_parport_driver);
} }
module_init(parkbd_init); module_init(parkbd_init);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment