summaryrefslogtreecommitdiff
path: root/include/linux/mfd/core.h
diff options
context:
space:
mode:
authorAndres Salomon <dilinger@queued.net>2011-02-17 19:07:35 -0800
committerSamuel Ortiz <sameo@linux.intel.com>2011-03-23 10:41:58 +0100
commita9bbba996302344b1fac7773cf8198f6fee35ac1 (patch)
tree8cd804a7169232bf4a14a575e8b41092fe4e0fdf /include/linux/mfd/core.h
parent1e29af62f2b285bd18685da93c3ce8c33ca2d1db (diff)
mfd: add platform_device sharing support for mfd
This adds functions to enable platform_device sharing for mfd clients. Each platform driver (mfd client) that wants to share an mfd_cell's platform_device uses the mfd_shared_platform_driver_{un,}register() functions instead of platform_driver_{un,}register(). Along with registering the platform driver, these also register a new platform device with the same characteristics as the original cell, but a different name. Given an mfd_cell with the name "foo", drivers that want to share access to its resources can call mfd_shared_platform_driver_register with platform drivers named (for example) "bar" and "baz". This will register two platform devices and drivers named "bar" and "baz" that share the same cell as the platform device "foo". The drivers can then call "foo" cell's enable hooks (or mfd_shared_cell_enable) to enable resources, and obtain platform resources as they normally would. This deals with platform handling only; mfd driver-specific details, hardware handling, refcounting, etc are all dealt with separately. Signed-off-by: Andres Salomon <dilinger@queued.net> Signed-off-by: Samuel Ortiz <sameo@linux.intel.com>
Diffstat (limited to 'include/linux/mfd/core.h')
-rw-r--r--include/linux/mfd/core.h9
1 files changed, 9 insertions, 0 deletions
diff --git a/include/linux/mfd/core.h b/include/linux/mfd/core.h
index 22a2f5ebd9db..ed9970412cc2 100644
--- a/include/linux/mfd/core.h
+++ b/include/linux/mfd/core.h
@@ -87,4 +87,13 @@ extern int mfd_add_devices(struct device *parent, int id,
extern void mfd_remove_devices(struct device *parent);
+/*
+ * For MFD drivers with clients sharing access to resources, these create
+ * multiple platform devices per cell. Contention handling must still be
+ * handled via drivers (ie, with enable/disable hooks).
+ */
+extern int mfd_shared_platform_driver_register(struct platform_driver *drv,
+ const char *cellname);
+extern void mfd_shared_platform_driver_unregister(struct platform_driver *drv);
+
#endif