Merge branch 'for_paulus' of master.kernel.org:/pub/scm/linux/kernel/git/galak/powerpc
[pandora-kernel.git] / drivers / video / epson1355fb.c
index 6a81a1d..f0a621e 100644 (file)
@@ -605,13 +605,9 @@ static void clearfb16(struct fb_info *info)
                fb_writeb(0, dst);
 }
 
-static void epson1355fb_platform_release(struct device *device)
+static int epson1355fb_remove(struct platform_device *dev)
 {
-}
-
-static int epson1355fb_remove(struct device *device)
-{
-       struct fb_info *info = dev_get_drvdata(device);
+       struct fb_info *info = platform_get_drvdata(dev);
        struct epson1355_par *par = info->par;
 
        backlight_enable(0);
@@ -632,9 +628,8 @@ static int epson1355fb_remove(struct device *device)
        return 0;
 }
 
-int __init epson1355fb_probe(struct device *device)
+int __init epson1355fb_probe(struct platform_device *dev)
 {
-       struct platform_device *dev = to_platform_device(device);
        struct epson1355_par *default_par;
        struct fb_info *info;
        u8 revision;
@@ -713,7 +708,7 @@ int __init epson1355fb_probe(struct device *device)
        /*
         * Our driver data.
         */
-       dev_set_drvdata(&dev->dev, info);
+       platform_set_drvdata(dev, info);
 
        printk(KERN_INFO "fb%d: %s frame buffer device\n",
               info->node, info->fix.id);
@@ -721,24 +716,19 @@ int __init epson1355fb_probe(struct device *device)
        return 0;
 
       bail:
-       epson1355fb_remove(device);
+       epson1355fb_remove(dev);
        return rc;
 }
 
-static struct device_driver epson1355fb_driver = {
-       .name   = "epson1355fb",
-       .bus    = &platform_bus_type,
+static struct platform_driver epson1355fb_driver = {
        .probe  = epson1355fb_probe,
        .remove = epson1355fb_remove,
+       .driver = {
+               .name   = "epson1355fb",
+       },
 };
 
-static struct platform_device epson1355fb_device = {
-       .name   = "epson1355fb",
-       .id     = 0,
-       .dev    = {
-               .release = epson1355fb_platform_release,
-       }
-};
+static struct platform_device *epson1355fb_device;
 
 int __init epson1355fb_init(void)
 {
@@ -747,12 +737,22 @@ int __init epson1355fb_init(void)
        if (fb_get_options("epson1355fb", NULL))
                return -ENODEV;
 
-       ret = driver_register(&epson1355fb_driver);
+       ret = platform_driver_register(&epson1355fb_driver);
+
        if (!ret) {
-               ret = platform_device_register(&epson1355fb_device);
-               if (ret)
-                       driver_unregister(&epson1355fb_driver);
+               epson1355fb_device = platform_device_alloc("epson1355fb", 0);
+
+               if (epson1355fb_device)
+                       ret = platform_device_add(epson1355fb_device);
+               else
+                       ret = -ENOMEM;
+
+               if (ret) {
+                       platform_device_put(epson1355fb_device);
+                       platform_driver_unregister(&epson1355fb_driver);
+               }
        }
+
        return ret;
 }
 
@@ -761,8 +761,8 @@ module_init(epson1355fb_init);
 #ifdef MODULE
 static void __exit epson1355fb_exit(void)
 {
-       platform_device_unregister(&epson1355fb_device);
-       driver_unregister(&epson1355fb_driver);
+       platform_device_unregister(epson1355fb_device);
+       platform_driver_unregister(&epson1355fb_driver);
 }
 
 /* ------------------------------------------------------------------------- */