Merge branch 'upstream'
[pandora-kernel.git] / arch / arm / mach-integrator / lm.c
index c5f19d1..622cdc4 100644 (file)
@@ -10,6 +10,7 @@
 #include <linux/module.h>
 #include <linux/init.h>
 #include <linux/device.h>
+#include <linux/slab.h>
 
 #include <asm/arch/lm.h>
 
@@ -21,20 +22,6 @@ static int lm_match(struct device *dev, struct device_driver *drv)
        return 1;
 }
 
-static struct bus_type lm_bustype = {
-       .name           = "logicmodule",
-       .match          = lm_match,
-//     .suspend        = lm_suspend,
-//     .resume         = lm_resume,
-};
-
-static int __init lm_init(void)
-{
-       return bus_register(&lm_bustype);
-}
-
-postcore_initcall(lm_init);
-
 static int lm_bus_probe(struct device *dev)
 {
        struct lm_device *lmdev = to_lm_device(dev);
@@ -48,16 +35,30 @@ static int lm_bus_remove(struct device *dev)
        struct lm_device *lmdev = to_lm_device(dev);
        struct lm_driver *lmdrv = to_lm_driver(dev->driver);
 
-       lmdrv->remove(lmdev);
+       if (lmdrv->remove)
+               lmdrv->remove(lmdev);
        return 0;
 }
 
+static struct bus_type lm_bustype = {
+       .name           = "logicmodule",
+       .match          = lm_match,
+       .probe          = lm_bus_probe,
+       .remove         = lm_bus_remove,
+//     .suspend        = lm_bus_suspend,
+//     .resume         = lm_bus_resume,
+};
+
+static int __init lm_init(void)
+{
+       return bus_register(&lm_bustype);
+}
+
+postcore_initcall(lm_init);
+
 int lm_driver_register(struct lm_driver *drv)
 {
        drv->drv.bus = &lm_bustype;
-       drv->drv.probe = lm_bus_probe;
-       drv->drv.remove = lm_bus_remove;
-
        return driver_register(&drv->drv);
 }