Skip to content

Commit

Permalink
Input: parkbd - use parallel port device model
Browse files Browse the repository at this point in the history
Modify parkbd driver to use the new Parallel Port device model.

Signed-off-by: Sudip Mukherjee <sudip@vectorindia.org>
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
  • Loading branch information
Sudip Mukherjee authored and Dmitry Torokhov committed Oct 6, 2015
1 parent 7b41528 commit 33ca8ab
Showing 1 changed file with 37 additions and 18 deletions.
55 changes: 37 additions & 18 deletions drivers/input/serio/parkbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -141,19 +141,15 @@ static void parkbd_interrupt(void *dev_id)
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) {
printk(KERN_ERR "parkbd: no such parport\n");
return -ENODEV;
}

parkbd_dev = parport_register_device(pp, "parkbd", NULL, NULL, parkbd_interrupt, PARPORT_DEV_EXCL, NULL);
parport_put_port(pp);
parkbd_dev = parport_register_dev_model(pp, "parkbd",
&parkbd_parport_cb, 0);

if (!parkbd_dev)
return -ENODEV;
Expand Down Expand Up @@ -183,19 +179,21 @@ static struct serio * __init parkbd_allocate_serio(void)
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 (err)
return err;
if (parkbd_getport(pp))
return;

parkbd_port = parkbd_allocate_serio();
if (!parkbd_port) {
parport_release(parkbd_dev);
parport_unregister_device(parkbd_dev);
return -ENOMEM;
return;
}

parkbd_writelines(3);
Expand All @@ -205,14 +203,35 @@ static int __init parkbd_init(void)
printk(KERN_INFO "serio: PARKBD %s adapter on %s\n",
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);
serio_unregister_port(parkbd_port);
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);
Expand Down

0 comments on commit 33ca8ab

Please sign in to comment.