This commit was manufactured by cvs2svn to create tag
[linux-2.6.git] / drivers / input / serio / rpckbd.c
index 49a5841..b25d2e3 100644 (file)
@@ -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);