Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

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
Loading
Loading
Loading
Loading
+37 −18
Original line number Original line Diff line number Diff line
@@ -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)
	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)
	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);