]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/mfd/mfd-core.c
Merge branch 'v4l_for_linus' of git://git.kernel.org/pub/scm/linux/kernel/git/mchehab...
[karo-tx-linux.git] / drivers / mfd / mfd-core.c
index 79eda0264fb277176a2141338d9d4aa8682ea3b7..d01574d98870a0473b56be995cd0341786b9b767 100644 (file)
@@ -184,16 +184,12 @@ void mfd_remove_devices(struct device *parent)
 }
 EXPORT_SYMBOL(mfd_remove_devices);
 
-static int add_shared_platform_device(const char *cell, const char *name)
+int mfd_clone_cell(const char *cell, const char **clones, size_t n_clones)
 {
        struct mfd_cell cell_entry;
        struct device *dev;
        struct platform_device *pdev;
-       int err;
-
-       /* check if we've already registered a device (don't fail if we have) */
-       if (bus_find_device_by_name(&platform_bus_type, NULL, name))
-               return 0;
+       int i;
 
        /* fetch the parent cell's device (should already be registered!) */
        dev = bus_find_device_by_name(&platform_bus_type, NULL, cell);
@@ -206,44 +202,17 @@ static int add_shared_platform_device(const char *cell, const char *name)
 
        WARN_ON(!cell_entry.enable);
 
-       cell_entry.name = name;
-       err = mfd_add_device(pdev->dev.parent, -1, &cell_entry, NULL, 0);
-       if (err)
-               dev_err(dev, "MFD add devices failed: %d\n", err);
-       return err;
-}
-
-int mfd_shared_platform_driver_register(struct platform_driver *drv,
-               const char *cellname)
-{
-       int err;
-
-       err = add_shared_platform_device(cellname, drv->driver.name);
-       if (err)
-               printk(KERN_ERR "failed to add platform device %s\n",
-                               drv->driver.name);
-
-       err = platform_driver_register(drv);
-       if (err)
-               printk(KERN_ERR "failed to add platform driver %s\n",
-                               drv->driver.name);
-
-       return err;
-}
-EXPORT_SYMBOL(mfd_shared_platform_driver_register);
-
-void mfd_shared_platform_driver_unregister(struct platform_driver *drv)
-{
-       struct device *dev;
-
-       dev = bus_find_device_by_name(&platform_bus_type, NULL,
-                       drv->driver.name);
-       if (dev)
-               platform_device_unregister(to_platform_device(dev));
+       for (i = 0; i < n_clones; i++) {
+               cell_entry.name = clones[i];
+               /* don't give up if a single call fails; just report error */
+               if (mfd_add_device(pdev->dev.parent, -1, &cell_entry, NULL, 0))
+                       dev_err(dev, "failed to create platform device '%s'\n",
+                                       clones[i]);
+       }
 
-       platform_driver_unregister(drv);
+       return 0;
 }
-EXPORT_SYMBOL(mfd_shared_platform_driver_unregister);
+EXPORT_SYMBOL(mfd_clone_cell);
 
 MODULE_LICENSE("GPL");
 MODULE_AUTHOR("Ian Molton, Dmitry Baryshkov");