|
@@ -710,6 +710,67 @@ err_out:
|
|
|
}
|
|
|
EXPORT_SYMBOL_GPL(__platform_create_bundle);
|
|
|
|
|
|
+/**
|
|
|
+ * __platform_register_drivers - register an array of platform drivers
|
|
|
+ * @drivers: an array of drivers to register
|
|
|
+ * @count: the number of drivers to register
|
|
|
+ * @owner: module owning the drivers
|
|
|
+ *
|
|
|
+ * Registers platform drivers specified by an array. On failure to register a
|
|
|
+ * driver, all previously registered drivers will be unregistered. Callers of
|
|
|
+ * this API should use platform_unregister_drivers() to unregister drivers in
|
|
|
+ * the reverse order.
|
|
|
+ *
|
|
|
+ * Returns: 0 on success or a negative error code on failure.
|
|
|
+ */
|
|
|
+int __platform_register_drivers(struct platform_driver * const *drivers,
|
|
|
+ unsigned int count, struct module *owner)
|
|
|
+{
|
|
|
+ unsigned int i;
|
|
|
+ int err;
|
|
|
+
|
|
|
+ for (i = 0; i < count; i++) {
|
|
|
+ pr_debug("registering platform driver %ps\n", drivers[i]);
|
|
|
+
|
|
|
+ err = __platform_driver_register(drivers[i], owner);
|
|
|
+ if (err < 0) {
|
|
|
+ pr_err("failed to register platform driver %ps: %d\n",
|
|
|
+ drivers[i], err);
|
|
|
+ goto error;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+
|
|
|
+error:
|
|
|
+ while (i--) {
|
|
|
+ pr_debug("unregistering platform driver %ps\n", drivers[i]);
|
|
|
+ platform_driver_unregister(drivers[i]);
|
|
|
+ }
|
|
|
+
|
|
|
+ return err;
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(__platform_register_drivers);
|
|
|
+
|
|
|
+/**
|
|
|
+ * platform_unregister_drivers - unregister an array of platform drivers
|
|
|
+ * @drivers: an array of drivers to unregister
|
|
|
+ * @count: the number of drivers to unregister
|
|
|
+ *
|
|
|
+ * Unegisters platform drivers specified by an array. This is typically used
|
|
|
+ * to complement an earlier call to platform_register_drivers(). Drivers are
|
|
|
+ * unregistered in the reverse order in which they were registered.
|
|
|
+ */
|
|
|
+void platform_unregister_drivers(struct platform_driver * const *drivers,
|
|
|
+ unsigned int count)
|
|
|
+{
|
|
|
+ while (count--) {
|
|
|
+ pr_debug("unregistering platform driver %ps\n", drivers[count]);
|
|
|
+ platform_driver_unregister(drivers[count]);
|
|
|
+ }
|
|
|
+}
|
|
|
+EXPORT_SYMBOL_GPL(platform_unregister_drivers);
|
|
|
+
|
|
|
/* modalias support enables more hands-off userspace setup:
|
|
|
* (a) environment variable lets new-style hotplug events work once system is
|
|
|
* fully running: "modprobe $MODALIAS"
|