X-Git-Url: http://git.onelab.eu/?a=blobdiff_plain;f=drivers%2Finput%2Fserio%2Frpckbd.c;h=49a58410295ef88ba3b8d1dace9135e89547f1ff;hb=6a77f38946aaee1cd85eeec6cf4229b204c15071;hp=b25d2e3b06baf5e72227272c8244fbfb1fc61219;hpb=c7b5ebbddf7bcd3651947760f423e3783bbe6573;p=linux-2.6.git diff --git a/drivers/input/serio/rpckbd.c b/drivers/input/serio/rpckbd.c index b25d2e3b0..49a584102 100644 --- a/drivers/input/serio/rpckbd.c +++ b/drivers/input/serio/rpckbd.c @@ -45,9 +45,6 @@ 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))) @@ -109,45 +106,50 @@ static void rpckbd_close(struct serio *port) * Allocate and initialize serio structure for subsequent registration * with serio core. */ - -static struct serio * __init rpckbd_allocate_port(void) +static int __devinit rpckbd_probe(struct device *dev) { struct serio *serio; serio = kmalloc(sizeof(struct serio), GFP_KERNEL); - 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)); - } + if (!serio) + return -ENOMEM; - return 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 = 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; } -static int __init rpckbd_init(void) +static int __devexit rpckbd_remove(struct device *dev) { - rpckbd_device = platform_device_register_simple("rpckbd", -1, NULL, 0); - if (IS_ERR(rpckbd_device)) - return PTR_ERR(rpckbd_device); + struct serio *serio = dev_get_drvdata(dev); + serio_unregister_port(serio); + return 0; +} - if (!(rpckbd_port = rpckbd_allocate_port())) { - platform_device_unregister(rpckbd_device); - return -ENOMEM; - } +static struct device_driver rpckbd_driver = { + .name = "kart", + .bus = &platform_bus_type, + .probe = rpckbd_probe, + .remove = __devexit_p(rpckbd_remove), +}; - serio_register_port(rpckbd_port); - return 0; +static int __init rpckbd_init(void) +{ + return driver_register(&rpckbd_driver); } static void __exit rpckbd_exit(void) { - serio_unregister_port(rpckbd_port); - platform_device_unregister(rpckbd_device); + driver_unregister(&rpckbd_driver); } module_init(rpckbd_init);