mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	Input: parkbd - use parallel port device model
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>
This commit is contained in:
		
							parent
							
								
									7b415285ae
								
							
						
					
					
						commit
						33ca8ab97c
					
				
					 1 changed files with 39 additions and 20 deletions
				
			
		| 
						 | 
				
			
			@ -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;
 | 
			
		||||
| 
						 | 
				
			
			@ -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);
 | 
			
		||||
| 
						 | 
				
			
			@ -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 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_release(parkbd_dev);
 | 
			
		||||
	serio_unregister_port(parkbd_port);
 | 
			
		||||
	parport_unregister_device(parkbd_dev);
 | 
			
		||||
	parport_unregister_driver(&parkbd_parport_driver);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
module_init(parkbd_init);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue