X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Finput%2Fserio%2Frpckbd.c;h=b25d2e3b06baf5e72227272c8244fbfb1fc61219;hb=a9fdee76789476a10f923f9fb3c84993042da3ac;hp=49a58410295ef88ba3b8d1dace9135e89547f1ff;hpb=8d40237c730b8be87c1b80a5d96b9c603fefa829;p=linux-2.6.git diff --git a/drivers/input/serio/rpckbd.c b/drivers/input/serio/rpckbd.c index 49a584102..b25d2e3b0 100644 --- a/drivers/input/serio/rpckbd.c +++ b/drivers/input/serio/rpckbd.c @@ -45,6 +45,9 @@ MODULE_AUTHOR("Vojtech Pavlik, Russell King"); MODULE_DESCRIPTION("Acorn RiscPC PS/2 keyboard controller driver"); MODULE_LICENSE("GPL"); +static struct serio *rpckbd_port; +static struct platform_device *rpckbd_device; + static int rpckbd_write(struct serio *port, unsigned char val) { while (!(iomd_readb(IOMD_KCTRL) & (1 << 7))) @@ -106,50 +109,45 @@ static void rpckbd_close(struct serio *port) * Allocate and initialize serio structure for subsequent registration * with serio core. */ -static int __devinit rpckbd_probe(struct device *dev) + +static struct serio * __init rpckbd_allocate_port(void) { struct serio *serio; serio = kmalloc(sizeof(struct serio), GFP_KERNEL); - if (!serio) - return -ENOMEM; + if (serio) { + memset(serio, 0, sizeof(struct serio)); + serio->type = SERIO_8042; + serio->write = rpckbd_write; + serio->open = rpckbd_open; + serio->close = rpckbd_close; + serio->dev.parent = &rpckbd_device->dev; + strlcpy(serio->name, "RiscPC PS/2 kbd port", sizeof(serio->name)); + strlcpy(serio->phys, "rpckbd/serio0", sizeof(serio->phys)); + } - memset(serio, 0, sizeof(struct serio)); - serio->type = SERIO_8042; - serio->write = rpckbd_write; - serio->open = rpckbd_open; - serio->close = rpckbd_close; - serio->dev.parent = dev; - strlcpy(serio->name, "RiscPC PS/2 kbd port", sizeof(serio->name)); - strlcpy(serio->phys, "rpckbd/serio0", sizeof(serio->phys)); - - dev_set_drvdata(dev, serio); - serio_register_port(serio); - return 0; + return serio; } -static int __devexit rpckbd_remove(struct device *dev) +static int __init rpckbd_init(void) { - struct serio *serio = dev_get_drvdata(dev); - serio_unregister_port(serio); - return 0; -} + rpckbd_device = platform_device_register_simple("rpckbd", -1, NULL, 0); + if (IS_ERR(rpckbd_device)) + return PTR_ERR(rpckbd_device); -static struct device_driver rpckbd_driver = { - .name = "kart", - .bus = &platform_bus_type, - .probe = rpckbd_probe, - .remove = __devexit_p(rpckbd_remove), -}; + if (!(rpckbd_port = rpckbd_allocate_port())) { + platform_device_unregister(rpckbd_device); + return -ENOMEM; + } -static int __init rpckbd_init(void) -{ - return driver_register(&rpckbd_driver); + serio_register_port(rpckbd_port); + return 0; } static void __exit rpckbd_exit(void) { - driver_unregister(&rpckbd_driver); + serio_unregister_port(rpckbd_port); + platform_device_unregister(rpckbd_device); } module_init(rpckbd_init);