It was bad design to lump the mailbox interface to the Wilco EC into the
same module as the code module, which loads all the subdrivers:
- This required the sub-drivers to depend on the core, which doesn't
really make sense, they should just depend on the mailbox interface.
- It caused problems with circular dependencies: An upcoming keyboard
backlight driver depends on the mailbox interface, which in the old
architecture makes it also depend on the core driver. However, the core
driver should be able to detect whether or not the keyboard
backlight is available, so the core module depends on the backlight
driver. This created a circular dependency.

By splitting up the mailbox interface and core driver into separate
modules, it fixes both of these problems.

Signed-off-by: Nick Crews <ncr...@chromium.org>
---
 drivers/platform/chrome/wilco_ec/Makefile  | 6 ++++--
 drivers/platform/chrome/wilco_ec/core.c    | 2 +-
 drivers/platform/chrome/wilco_ec/mailbox.c | 6 ++++++
 3 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/platform/chrome/wilco_ec/Makefile 
b/drivers/platform/chrome/wilco_ec/Makefile
index 063e7fb4ea17..9706aeb20ccb 100644
--- a/drivers/platform/chrome/wilco_ec/Makefile
+++ b/drivers/platform/chrome/wilco_ec/Makefile
@@ -1,6 +1,8 @@
 # SPDX-License-Identifier: GPL-2.0
 
-wilco_ec-objs                          := core.o mailbox.o
-obj-$(CONFIG_WILCO_EC)                 += wilco_ec.o
+wilco_ec_mailbox-objs                  := mailbox.o
+obj-$(CONFIG_WILCO_EC)                 += wilco_ec_mailbox.o
+wilco_ec_core-objs                     := core.o
+obj-$(CONFIG_WILCO_EC)                 += wilco_ec_core.o
 wilco_ec_debugfs-objs                  := debugfs.o
 obj-$(CONFIG_WILCO_EC_DEBUGFS)         += wilco_ec_debugfs.o
diff --git a/drivers/platform/chrome/wilco_ec/core.c 
b/drivers/platform/chrome/wilco_ec/core.c
index 05e1e2be1c91..ece30874f35f 100644
--- a/drivers/platform/chrome/wilco_ec/core.c
+++ b/drivers/platform/chrome/wilco_ec/core.c
@@ -20,7 +20,7 @@
 
 #include "../cros_ec_lpc_mec.h"
 
-#define DRV_NAME "wilco-ec"
+#define DRV_NAME "wilco-ec-core"
 
 static struct resource *wilco_get_resource(struct platform_device *pdev,
                                           int index)
diff --git a/drivers/platform/chrome/wilco_ec/mailbox.c 
b/drivers/platform/chrome/wilco_ec/mailbox.c
index 14355668ddfa..ca6b92ce7e6d 100644
--- a/drivers/platform/chrome/wilco_ec/mailbox.c
+++ b/drivers/platform/chrome/wilco_ec/mailbox.c
@@ -18,6 +18,7 @@
 #include <linux/delay.h>
 #include <linux/device.h>
 #include <linux/io.h>
+#include <linux/module.h>
 #include <linux/platform_data/wilco-ec.h>
 #include <linux/platform_device.h>
 
@@ -235,3 +236,8 @@ int wilco_ec_mailbox(struct wilco_ec_device *ec, struct 
wilco_ec_message *msg)
 
 }
 EXPORT_SYMBOL_GPL(wilco_ec_mailbox);
+
+MODULE_AUTHOR("Nick Crews <ncr...@chromium.org>");
+MODULE_LICENSE("GPL v2");
+MODULE_DESCRIPTION("ChromeOS Wilco Embedded Controller mailbox interface");
+MODULE_ALIAS("platform:wilco-ec-mailbox");
-- 
2.20.1

Reply via email to