aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorEnric Balletbo i Serra <enric.balletbo@collabora.com>2019-09-02 05:53:05 -0400
committerLee Jones <lee.jones@linaro.org>2019-09-02 06:33:42 -0400
commit840d9f131f65b021e0a73f3371f3194897dba6ad (patch)
tree8da2f672f55cb9f894e49b96df5885483a240b71
parent2fa2b980e3fe187a0b916bfe6bd5822889b44d5e (diff)
mfd / platform: cros_ec: Reorganize platform and mfd includes
There is a bit of mess between cros-ec mfd includes and platform includes. For example, we have a linux/mfd/cros_ec.h include that exports the interface implemented in platform/chrome/cros_ec_proto.c. Or we have a linux/mfd/cros_ec_commands.h file that is non related to the multifunction device (in the sense that is not exporting any function of the mfd device). This causes crossed includes between mfd and platform/chrome subsystems and makes the code difficult to read, apart from creating 'curious' situations where a platform/chrome driver includes a linux/mfd/cros_ec.h file just to get the exported functions that are implemented in another platform/chrome driver. In order to have a better separation on what the cros-ec multifunction driver does and what the cros-ec core provides move and rework the affected includes doing: - Move cros_ec_commands.h to include/linux/platform_data/cros_ec_commands.h - Get rid of the parts that are implemented in the platform/chrome/cros_ec_proto.c driver from include/linux/mfd/cros_ec.h to a new file include/linux/platform_data/cros_ec_proto.h - Update all the drivers with the new includes, so - Drivers that only need to know about the protocol include - linux/platform_data/cros_ec_proto.h - linux/platform_data/cros_ec_commands.h - Drivers that need to know about the cros-ec mfd device also include - linux/mfd/cros_ec.h Signed-off-by: Enric Balletbo i Serra <enric.balletbo@collabora.com> Acked-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Acked-by: Mark Brown <broonie@kernel.org> Acked-by: Wolfram Sang <wsa@the-dreams.de> Acked-by: Neil Armstrong <narmstrong@baylibre.com> Acked-by: Alexandre Belloni <alexandre.belloni@bootlin.com> Acked-by: Jonathan Cameron <Jonathan.Cameron@huawei.com> Acked-by: Benjamin Tissoires <benjamin.tissoires@redhat.com> Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com> Acked-by: Sebastian Reichel <sebastian.reichel@collabora.com> Acked-by: Chanwoo Choi <cw00.choi@samsung.com> Reviewed-by: Gwendal Grignou <gwendal@chromium.org> Tested-by: Gwendal Grignou <gwendal@chromium.org> Series changes: 3 - Fix dereferencing pointer to incomplete type 'struct cros_ec_dev' (lkp) Signed-off-by: Lee Jones <lee.jones@linaro.org>
-rw-r--r--drivers/extcon/extcon-usbc-cros-ec.c3
-rw-r--r--drivers/hid/hid-google-hammer.c4
-rw-r--r--drivers/i2c/busses/i2c-cros-ec-tunnel.c4
-rw-r--r--drivers/iio/accel/cros_ec_accel_legacy.c3
-rw-r--r--drivers/iio/common/cros_ec_sensors/cros_ec_lid_angle.c3
-rw-r--r--drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c3
-rw-r--r--drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c3
-rw-r--r--drivers/iio/light/cros_ec_light_prox.c3
-rw-r--r--drivers/iio/pressure/cros_ec_baro.c3
-rw-r--r--drivers/input/keyboard/cros_ec_keyb.c4
-rw-r--r--drivers/media/platform/cros-ec-cec/cros-ec-cec.c5
-rw-r--r--drivers/mfd/cros_ec_dev.c3
-rw-r--r--drivers/platform/chrome/cros_ec.c3
-rw-r--r--drivers/platform/chrome/cros_ec_chardev.c3
-rw-r--r--drivers/platform/chrome/cros_ec_debugfs.c3
-rw-r--r--drivers/platform/chrome/cros_ec_i2c.c4
-rw-r--r--drivers/platform/chrome/cros_ec_ishtp.c5
-rw-r--r--drivers/platform/chrome/cros_ec_lightbar.c3
-rw-r--r--drivers/platform/chrome/cros_ec_lpc.c4
-rw-r--r--drivers/platform/chrome/cros_ec_proto.c3
-rw-r--r--drivers/platform/chrome/cros_ec_rpmsg.c4
-rw-r--r--drivers/platform/chrome/cros_ec_spi.c4
-rw-r--r--drivers/platform/chrome/cros_ec_sysfs.c3
-rw-r--r--drivers/platform/chrome/cros_ec_trace.c2
-rw-r--r--drivers/platform/chrome/cros_ec_trace.h4
-rw-r--r--drivers/platform/chrome/cros_ec_vbc.c3
-rw-r--r--drivers/platform/chrome/cros_usbpd_logger.c5
-rw-r--r--drivers/power/supply/cros_usbpd-charger.c5
-rw-r--r--drivers/pwm/pwm-cros-ec.c4
-rw-r--r--drivers/rtc/rtc-cros-ec.c3
-rw-r--r--include/Kbuild2
-rw-r--r--include/linux/iio/common/cros_ec_sensors_core.h3
-rw-r--r--include/linux/mfd/cros_ec.h308
-rw-r--r--include/linux/platform_data/cros_ec_chardev.h2
-rw-r--r--include/linux/platform_data/cros_ec_commands.h (renamed from include/linux/mfd/cros_ec_commands.h)0
-rw-r--r--include/linux/platform_data/cros_ec_proto.h319
-rw-r--r--sound/soc/codecs/cros_ec_codec.c4
37 files changed, 387 insertions, 357 deletions
diff --git a/drivers/extcon/extcon-usbc-cros-ec.c b/drivers/extcon/extcon-usbc-cros-ec.c
index 43c0a936ab82..5290cc2d19d9 100644
--- a/drivers/extcon/extcon-usbc-cros-ec.c
+++ b/drivers/extcon/extcon-usbc-cros-ec.c
@@ -6,10 +6,11 @@
6 6
7#include <linux/extcon-provider.h> 7#include <linux/extcon-provider.h>
8#include <linux/kernel.h> 8#include <linux/kernel.h>
9#include <linux/mfd/cros_ec.h>
10#include <linux/module.h> 9#include <linux/module.h>
11#include <linux/notifier.h> 10#include <linux/notifier.h>
12#include <linux/of.h> 11#include <linux/of.h>
12#include <linux/platform_data/cros_ec_commands.h>
13#include <linux/platform_data/cros_ec_proto.h>
13#include <linux/platform_device.h> 14#include <linux/platform_device.h>
14#include <linux/slab.h> 15#include <linux/slab.h>
15#include <linux/sched.h> 16#include <linux/sched.h>
diff --git a/drivers/hid/hid-google-hammer.c b/drivers/hid/hid-google-hammer.c
index ee5e0bdcf078..84f8c127ebdc 100644
--- a/drivers/hid/hid-google-hammer.c
+++ b/drivers/hid/hid-google-hammer.c
@@ -16,9 +16,9 @@
16#include <linux/acpi.h> 16#include <linux/acpi.h>
17#include <linux/hid.h> 17#include <linux/hid.h>
18#include <linux/leds.h> 18#include <linux/leds.h>
19#include <linux/mfd/cros_ec.h>
20#include <linux/mfd/cros_ec_commands.h>
21#include <linux/module.h> 19#include <linux/module.h>
20#include <linux/platform_data/cros_ec_commands.h>
21#include <linux/platform_data/cros_ec_proto.h>
22#include <linux/platform_device.h> 22#include <linux/platform_device.h>
23#include <linux/pm_wakeup.h> 23#include <linux/pm_wakeup.h>
24#include <asm/unaligned.h> 24#include <asm/unaligned.h>
diff --git a/drivers/i2c/busses/i2c-cros-ec-tunnel.c b/drivers/i2c/busses/i2c-cros-ec-tunnel.c
index 82bcd9a78759..c551aa96a2e3 100644
--- a/drivers/i2c/busses/i2c-cros-ec-tunnel.c
+++ b/drivers/i2c/busses/i2c-cros-ec-tunnel.c
@@ -5,8 +5,8 @@
5 5
6#include <linux/module.h> 6#include <linux/module.h>
7#include <linux/i2c.h> 7#include <linux/i2c.h>
8#include <linux/mfd/cros_ec.h> 8#include <linux/platform_data/cros_ec_commands.h>
9#include <linux/mfd/cros_ec_commands.h> 9#include <linux/platform_data/cros_ec_proto.h>
10#include <linux/platform_device.h> 10#include <linux/platform_device.h>
11#include <linux/slab.h> 11#include <linux/slab.h>
12 12
diff --git a/drivers/iio/accel/cros_ec_accel_legacy.c b/drivers/iio/accel/cros_ec_accel_legacy.c
index 46bb2e421bb9..fd9a634f741e 100644
--- a/drivers/iio/accel/cros_ec_accel_legacy.c
+++ b/drivers/iio/accel/cros_ec_accel_legacy.c
@@ -18,9 +18,10 @@
18#include <linux/iio/triggered_buffer.h> 18#include <linux/iio/triggered_buffer.h>
19#include <linux/kernel.h> 19#include <linux/kernel.h>
20#include <linux/mfd/cros_ec.h> 20#include <linux/mfd/cros_ec.h>
21#include <linux/mfd/cros_ec_commands.h>
22#include <linux/module.h> 21#include <linux/module.h>
23#include <linux/slab.h> 22#include <linux/slab.h>
23#include <linux/platform_data/cros_ec_commands.h>
24#include <linux/platform_data/cros_ec_proto.h>
24#include <linux/platform_device.h> 25#include <linux/platform_device.h>
25 26
26#define DRV_NAME "cros-ec-accel-legacy" 27#define DRV_NAME "cros-ec-accel-legacy"
diff --git a/drivers/iio/common/cros_ec_sensors/cros_ec_lid_angle.c b/drivers/iio/common/cros_ec_sensors/cros_ec_lid_angle.c
index 876dfd176b0e..1dcc2a16ab2d 100644
--- a/drivers/iio/common/cros_ec_sensors/cros_ec_lid_angle.c
+++ b/drivers/iio/common/cros_ec_sensors/cros_ec_lid_angle.c
@@ -20,9 +20,8 @@
20#include <linux/iio/triggered_buffer.h> 20#include <linux/iio/triggered_buffer.h>
21#include <linux/iio/trigger_consumer.h> 21#include <linux/iio/trigger_consumer.h>
22#include <linux/kernel.h> 22#include <linux/kernel.h>
23#include <linux/mfd/cros_ec.h>
24#include <linux/mfd/cros_ec_commands.h>
25#include <linux/module.h> 23#include <linux/module.h>
24#include <linux/platform_data/cros_ec_commands.h>
26#include <linux/platform_device.h> 25#include <linux/platform_device.h>
27#include <linux/slab.h> 26#include <linux/slab.h>
28 27
diff --git a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c
index 17af4e0fd5f8..40dc24ff0ee5 100644
--- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c
+++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c
@@ -17,8 +17,9 @@
17#include <linux/iio/triggered_buffer.h> 17#include <linux/iio/triggered_buffer.h>
18#include <linux/kernel.h> 18#include <linux/kernel.h>
19#include <linux/mfd/cros_ec.h> 19#include <linux/mfd/cros_ec.h>
20#include <linux/mfd/cros_ec_commands.h>
21#include <linux/module.h> 20#include <linux/module.h>
21#include <linux/platform_data/cros_ec_commands.h>
22#include <linux/platform_data/cros_ec_proto.h>
22#include <linux/platform_device.h> 23#include <linux/platform_device.h>
23#include <linux/slab.h> 24#include <linux/slab.h>
24 25
diff --git a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
index 130362ca421b..37b3f1df0ceb 100644
--- a/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
+++ b/drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
@@ -14,9 +14,10 @@
14#include <linux/iio/trigger_consumer.h> 14#include <linux/iio/trigger_consumer.h>
15#include <linux/kernel.h> 15#include <linux/kernel.h>
16#include <linux/mfd/cros_ec.h> 16#include <linux/mfd/cros_ec.h>
17#include <linux/mfd/cros_ec_commands.h>
18#include <linux/module.h> 17#include <linux/module.h>
19#include <linux/slab.h> 18#include <linux/slab.h>
19#include <linux/platform_data/cros_ec_commands.h>
20#include <linux/platform_data/cros_ec_proto.h>
20#include <linux/platform_device.h> 21#include <linux/platform_device.h>
21 22
22static char *cros_ec_loc[] = { 23static char *cros_ec_loc[] = {
diff --git a/drivers/iio/light/cros_ec_light_prox.c b/drivers/iio/light/cros_ec_light_prox.c
index 308ee6ff2e22..437e0eae9178 100644
--- a/drivers/iio/light/cros_ec_light_prox.c
+++ b/drivers/iio/light/cros_ec_light_prox.c
@@ -15,8 +15,9 @@
15#include <linux/iio/trigger_consumer.h> 15#include <linux/iio/trigger_consumer.h>
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/mfd/cros_ec.h> 17#include <linux/mfd/cros_ec.h>
18#include <linux/mfd/cros_ec_commands.h>
19#include <linux/module.h> 18#include <linux/module.h>
19#include <linux/platform_data/cros_ec_commands.h>
20#include <linux/platform_data/cros_ec_proto.h>
20#include <linux/platform_device.h> 21#include <linux/platform_device.h>
21#include <linux/slab.h> 22#include <linux/slab.h>
22 23
diff --git a/drivers/iio/pressure/cros_ec_baro.c b/drivers/iio/pressure/cros_ec_baro.c
index 034ce98d6e97..956dc01f1295 100644
--- a/drivers/iio/pressure/cros_ec_baro.c
+++ b/drivers/iio/pressure/cros_ec_baro.c
@@ -15,9 +15,10 @@
15#include <linux/iio/trigger_consumer.h> 15#include <linux/iio/trigger_consumer.h>
16#include <linux/kernel.h> 16#include <linux/kernel.h>
17#include <linux/mfd/cros_ec.h> 17#include <linux/mfd/cros_ec.h>
18#include <linux/mfd/cros_ec_commands.h>
19#include <linux/module.h> 18#include <linux/module.h>
20#include <linux/slab.h> 19#include <linux/slab.h>
20#include <linux/platform_data/cros_ec_commands.h>
21#include <linux/platform_data/cros_ec_proto.h>
21#include <linux/platform_device.h> 22#include <linux/platform_device.h>
22 23
23/* 24/*
diff --git a/drivers/input/keyboard/cros_ec_keyb.c b/drivers/input/keyboard/cros_ec_keyb.c
index 38cb6d82d8fe..a29e81fdf186 100644
--- a/drivers/input/keyboard/cros_ec_keyb.c
+++ b/drivers/input/keyboard/cros_ec_keyb.c
@@ -22,8 +22,8 @@
22#include <linux/slab.h> 22#include <linux/slab.h>
23#include <linux/sysrq.h> 23#include <linux/sysrq.h>
24#include <linux/input/matrix_keypad.h> 24#include <linux/input/matrix_keypad.h>
25#include <linux/mfd/cros_ec.h> 25#include <linux/platform_data/cros_ec_commands.h>
26#include <linux/mfd/cros_ec_commands.h> 26#include <linux/platform_data/cros_ec_proto.h>
27 27
28#include <asm/unaligned.h> 28#include <asm/unaligned.h>
29 29
diff --git a/drivers/media/platform/cros-ec-cec/cros-ec-cec.c b/drivers/media/platform/cros-ec-cec/cros-ec-cec.c
index 068df9888dbf..f9fd4bda2a94 100644
--- a/drivers/media/platform/cros-ec-cec/cros-ec-cec.c
+++ b/drivers/media/platform/cros-ec-cec/cros-ec-cec.c
@@ -14,10 +14,11 @@
14#include <linux/cec.h> 14#include <linux/cec.h>
15#include <linux/slab.h> 15#include <linux/slab.h>
16#include <linux/interrupt.h> 16#include <linux/interrupt.h>
17#include <linux/mfd/cros_ec.h>
18#include <linux/platform_data/cros_ec_commands.h>
19#include <linux/platform_data/cros_ec_proto.h>
17#include <media/cec.h> 20#include <media/cec.h>
18#include <media/cec-notifier.h> 21#include <media/cec-notifier.h>
19#include <linux/mfd/cros_ec.h>
20#include <linux/mfd/cros_ec_commands.h>
21 22
22#define DRV_NAME "cros-ec-cec" 23#define DRV_NAME "cros-ec-cec"
23 24
diff --git a/drivers/mfd/cros_ec_dev.c b/drivers/mfd/cros_ec_dev.c
index 0c1c0ce3453e..091d428f5531 100644
--- a/drivers/mfd/cros_ec_dev.c
+++ b/drivers/mfd/cros_ec_dev.c
@@ -7,12 +7,13 @@
7 7
8#include <linux/mfd/core.h> 8#include <linux/mfd/core.h>
9#include <linux/mfd/cros_ec.h> 9#include <linux/mfd/cros_ec.h>
10#include <linux/mfd/cros_ec_commands.h>
11#include <linux/module.h> 10#include <linux/module.h>
12#include <linux/mod_devicetable.h> 11#include <linux/mod_devicetable.h>
13#include <linux/of_platform.h> 12#include <linux/of_platform.h>
14#include <linux/platform_device.h> 13#include <linux/platform_device.h>
15#include <linux/platform_data/cros_ec_chardev.h> 14#include <linux/platform_data/cros_ec_chardev.h>
15#include <linux/platform_data/cros_ec_commands.h>
16#include <linux/platform_data/cros_ec_proto.h>
16#include <linux/slab.h> 17#include <linux/slab.h>
17 18
18#define DRV_NAME "cros-ec-dev" 19#define DRV_NAME "cros-ec-dev"
diff --git a/drivers/platform/chrome/cros_ec.c b/drivers/platform/chrome/cros_ec.c
index a54ad47c7b02..fd77e6fa74c2 100644
--- a/drivers/platform/chrome/cros_ec.c
+++ b/drivers/platform/chrome/cros_ec.c
@@ -13,7 +13,8 @@
13#include <linux/interrupt.h> 13#include <linux/interrupt.h>
14#include <linux/slab.h> 14#include <linux/slab.h>
15#include <linux/module.h> 15#include <linux/module.h>
16#include <linux/mfd/cros_ec.h> 16#include <linux/platform_data/cros_ec_commands.h>
17#include <linux/platform_data/cros_ec_proto.h>
17#include <linux/suspend.h> 18#include <linux/suspend.h>
18#include <asm/unaligned.h> 19#include <asm/unaligned.h>
19 20
diff --git a/drivers/platform/chrome/cros_ec_chardev.c b/drivers/platform/chrome/cros_ec_chardev.c
index 174f940822c9..08abd7e5c7bf 100644
--- a/drivers/platform/chrome/cros_ec_chardev.c
+++ b/drivers/platform/chrome/cros_ec_chardev.c
@@ -14,10 +14,11 @@
14#include <linux/device.h> 14#include <linux/device.h>
15#include <linux/fs.h> 15#include <linux/fs.h>
16#include <linux/mfd/cros_ec.h> 16#include <linux/mfd/cros_ec.h>
17#include <linux/mfd/cros_ec_commands.h>
18#include <linux/miscdevice.h> 17#include <linux/miscdevice.h>
19#include <linux/module.h> 18#include <linux/module.h>
20#include <linux/platform_data/cros_ec_chardev.h> 19#include <linux/platform_data/cros_ec_chardev.h>
20#include <linux/platform_data/cros_ec_commands.h>
21#include <linux/platform_data/cros_ec_proto.h>
21#include <linux/platform_device.h> 22#include <linux/platform_device.h>
22#include <linux/slab.h> 23#include <linux/slab.h>
23#include <linux/types.h> 24#include <linux/types.h>
diff --git a/drivers/platform/chrome/cros_ec_debugfs.c b/drivers/platform/chrome/cros_ec_debugfs.c
index 8ec1cc2889f2..6ae484989d1f 100644
--- a/drivers/platform/chrome/cros_ec_debugfs.c
+++ b/drivers/platform/chrome/cros_ec_debugfs.c
@@ -8,9 +8,10 @@
8#include <linux/delay.h> 8#include <linux/delay.h>
9#include <linux/fs.h> 9#include <linux/fs.h>
10#include <linux/mfd/cros_ec.h> 10#include <linux/mfd/cros_ec.h>
11#include <linux/mfd/cros_ec_commands.h>
12#include <linux/module.h> 11#include <linux/module.h>
13#include <linux/mutex.h> 12#include <linux/mutex.h>
13#include <linux/platform_data/cros_ec_commands.h>
14#include <linux/platform_data/cros_ec_proto.h>
14#include <linux/platform_device.h> 15#include <linux/platform_device.h>
15#include <linux/poll.h> 16#include <linux/poll.h>
16#include <linux/sched.h> 17#include <linux/sched.h>
diff --git a/drivers/platform/chrome/cros_ec_i2c.c b/drivers/platform/chrome/cros_ec_i2c.c
index 6bb82dfa7dae..9bd97bc8454b 100644
--- a/drivers/platform/chrome/cros_ec_i2c.c
+++ b/drivers/platform/chrome/cros_ec_i2c.c
@@ -9,8 +9,8 @@
9#include <linux/module.h> 9#include <linux/module.h>
10#include <linux/i2c.h> 10#include <linux/i2c.h>
11#include <linux/interrupt.h> 11#include <linux/interrupt.h>
12#include <linux/mfd/cros_ec.h> 12#include <linux/platform_data/cros_ec_commands.h>
13#include <linux/mfd/cros_ec_commands.h> 13#include <linux/platform_data/cros_ec_proto.h>
14#include <linux/platform_device.h> 14#include <linux/platform_device.h>
15#include <linux/slab.h> 15#include <linux/slab.h>
16 16
diff --git a/drivers/platform/chrome/cros_ec_ishtp.c b/drivers/platform/chrome/cros_ec_ishtp.c
index e504d255d5ce..7d050db5b1ca 100644
--- a/drivers/platform/chrome/cros_ec_ishtp.c
+++ b/drivers/platform/chrome/cros_ec_ishtp.c
@@ -8,11 +8,10 @@
8// (ISH-TP). 8// (ISH-TP).
9 9
10#include <linux/delay.h> 10#include <linux/delay.h>
11#include <linux/mfd/core.h>
12#include <linux/mfd/cros_ec.h>
13#include <linux/mfd/cros_ec_commands.h>
14#include <linux/module.h> 11#include <linux/module.h>
15#include <linux/pci.h> 12#include <linux/pci.h>
13#include <linux/platform_data/cros_ec_commands.h>
14#include <linux/platform_data/cros_ec_proto.h>
16#include <linux/intel-ish-client-if.h> 15#include <linux/intel-ish-client-if.h>
17 16
18/* 17/*
diff --git a/drivers/platform/chrome/cros_ec_lightbar.c b/drivers/platform/chrome/cros_ec_lightbar.c
index 609598bbb6c3..c0f2eec35a48 100644
--- a/drivers/platform/chrome/cros_ec_lightbar.c
+++ b/drivers/platform/chrome/cros_ec_lightbar.c
@@ -9,8 +9,9 @@
9#include <linux/fs.h> 9#include <linux/fs.h>
10#include <linux/kobject.h> 10#include <linux/kobject.h>
11#include <linux/mfd/cros_ec.h> 11#include <linux/mfd/cros_ec.h>
12#include <linux/mfd/cros_ec_commands.h>
13#include <linux/module.h> 12#include <linux/module.h>
13#include <linux/platform_data/cros_ec_commands.h>
14#include <linux/platform_data/cros_ec_proto.h>
14#include <linux/platform_device.h> 15#include <linux/platform_device.h>
15#include <linux/sched.h> 16#include <linux/sched.h>
16#include <linux/types.h> 17#include <linux/types.h>
diff --git a/drivers/platform/chrome/cros_ec_lpc.c b/drivers/platform/chrome/cros_ec_lpc.c
index 5939c4a5869c..7d10d909435f 100644
--- a/drivers/platform/chrome/cros_ec_lpc.c
+++ b/drivers/platform/chrome/cros_ec_lpc.c
@@ -16,9 +16,9 @@
16#include <linux/delay.h> 16#include <linux/delay.h>
17#include <linux/io.h> 17#include <linux/io.h>
18#include <linux/interrupt.h> 18#include <linux/interrupt.h>
19#include <linux/mfd/cros_ec.h>
20#include <linux/mfd/cros_ec_commands.h>
21#include <linux/module.h> 19#include <linux/module.h>
20#include <linux/platform_data/cros_ec_commands.h>
21#include <linux/platform_data/cros_ec_proto.h>
22#include <linux/platform_device.h> 22#include <linux/platform_device.h>
23#include <linux/printk.h> 23#include <linux/printk.h>
24#include <linux/suspend.h> 24#include <linux/suspend.h>
diff --git a/drivers/platform/chrome/cros_ec_proto.c b/drivers/platform/chrome/cros_ec_proto.c
index 3d2325197a68..f659f96bda12 100644
--- a/drivers/platform/chrome/cros_ec_proto.c
+++ b/drivers/platform/chrome/cros_ec_proto.c
@@ -3,10 +3,11 @@
3// 3//
4// Copyright (C) 2015 Google, Inc 4// Copyright (C) 2015 Google, Inc
5 5
6#include <linux/mfd/cros_ec.h>
7#include <linux/delay.h> 6#include <linux/delay.h>
8#include <linux/device.h> 7#include <linux/device.h>
9#include <linux/module.h> 8#include <linux/module.h>
9#include <linux/platform_data/cros_ec_commands.h>
10#include <linux/platform_data/cros_ec_proto.h>
10#include <linux/slab.h> 11#include <linux/slab.h>
11#include <asm/unaligned.h> 12#include <asm/unaligned.h>
12 13
diff --git a/drivers/platform/chrome/cros_ec_rpmsg.c b/drivers/platform/chrome/cros_ec_rpmsg.c
index 520e507bfa54..9633e5417686 100644
--- a/drivers/platform/chrome/cros_ec_rpmsg.c
+++ b/drivers/platform/chrome/cros_ec_rpmsg.c
@@ -6,9 +6,9 @@
6#include <linux/delay.h> 6#include <linux/delay.h>
7#include <linux/kernel.h> 7#include <linux/kernel.h>
8#include <linux/module.h> 8#include <linux/module.h>
9#include <linux/mfd/cros_ec.h>
10#include <linux/mfd/cros_ec_commands.h>
11#include <linux/of.h> 9#include <linux/of.h>
10#include <linux/platform_data/cros_ec_commands.h>
11#include <linux/platform_data/cros_ec_proto.h>
12#include <linux/platform_device.h> 12#include <linux/platform_device.h>
13#include <linux/rpmsg.h> 13#include <linux/rpmsg.h>
14#include <linux/slab.h> 14#include <linux/slab.h>
diff --git a/drivers/platform/chrome/cros_ec_spi.c b/drivers/platform/chrome/cros_ec_spi.c
index 2e21f2776063..9006e1872942 100644
--- a/drivers/platform/chrome/cros_ec_spi.c
+++ b/drivers/platform/chrome/cros_ec_spi.c
@@ -6,9 +6,9 @@
6#include <linux/delay.h> 6#include <linux/delay.h>
7#include <linux/kernel.h> 7#include <linux/kernel.h>
8#include <linux/module.h> 8#include <linux/module.h>
9#include <linux/mfd/cros_ec.h>
10#include <linux/mfd/cros_ec_commands.h>
11#include <linux/of.h> 9#include <linux/of.h>
10#include <linux/platform_data/cros_ec_commands.h>
11#include <linux/platform_data/cros_ec_proto.h>
12#include <linux/platform_device.h> 12#include <linux/platform_device.h>
13#include <linux/slab.h> 13#include <linux/slab.h>
14#include <linux/spi/spi.h> 14#include <linux/spi/spi.h>
diff --git a/drivers/platform/chrome/cros_ec_sysfs.c b/drivers/platform/chrome/cros_ec_sysfs.c
index 3edb237bf8ed..74d36b8d4f46 100644
--- a/drivers/platform/chrome/cros_ec_sysfs.c
+++ b/drivers/platform/chrome/cros_ec_sysfs.c
@@ -9,8 +9,9 @@
9#include <linux/fs.h> 9#include <linux/fs.h>
10#include <linux/kobject.h> 10#include <linux/kobject.h>
11#include <linux/mfd/cros_ec.h> 11#include <linux/mfd/cros_ec.h>
12#include <linux/mfd/cros_ec_commands.h>
13#include <linux/module.h> 12#include <linux/module.h>
13#include <linux/platform_data/cros_ec_commands.h>
14#include <linux/platform_data/cros_ec_proto.h>
14#include <linux/platform_device.h> 15#include <linux/platform_device.h>
15#include <linux/printk.h> 16#include <linux/printk.h>
16#include <linux/slab.h> 17#include <linux/slab.h>
diff --git a/drivers/platform/chrome/cros_ec_trace.c b/drivers/platform/chrome/cros_ec_trace.c
index 0a76412095a9..6f80ff4532ae 100644
--- a/drivers/platform/chrome/cros_ec_trace.c
+++ b/drivers/platform/chrome/cros_ec_trace.c
@@ -6,7 +6,7 @@
6#define TRACE_SYMBOL(a) {a, #a} 6#define TRACE_SYMBOL(a) {a, #a}
7 7
8// Generate the list using the following script: 8// Generate the list using the following script:
9// sed -n 's/^#define \(EC_CMD_[[:alnum:]_]*\)\s.*/\tTRACE_SYMBOL(\1), \\/p' include/linux/mfd/cros_ec_commands.h 9// sed -n 's/^#define \(EC_CMD_[[:alnum:]_]*\)\s.*/\tTRACE_SYMBOL(\1), \\/p' include/linux/platform_data/cros_ec_commands.h
10#define EC_CMDS \ 10#define EC_CMDS \
11 TRACE_SYMBOL(EC_CMD_PROTO_VERSION), \ 11 TRACE_SYMBOL(EC_CMD_PROTO_VERSION), \
12 TRACE_SYMBOL(EC_CMD_HELLO), \ 12 TRACE_SYMBOL(EC_CMD_HELLO), \
diff --git a/drivers/platform/chrome/cros_ec_trace.h b/drivers/platform/chrome/cros_ec_trace.h
index 7ae3b89c78b9..0dd4df30fa89 100644
--- a/drivers/platform/chrome/cros_ec_trace.h
+++ b/drivers/platform/chrome/cros_ec_trace.h
@@ -11,8 +11,10 @@
11#if !defined(_CROS_EC_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 11#if !defined(_CROS_EC_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ)
12#define _CROS_EC_TRACE_H_ 12#define _CROS_EC_TRACE_H_
13 13
14#include <linux/bits.h>
14#include <linux/types.h> 15#include <linux/types.h>
15#include <linux/mfd/cros_ec.h> 16#include <linux/platform_data/cros_ec_commands.h>
17#include <linux/platform_data/cros_ec_proto.h>
16 18
17#include <linux/tracepoint.h> 19#include <linux/tracepoint.h>
18 20
diff --git a/drivers/platform/chrome/cros_ec_vbc.c b/drivers/platform/chrome/cros_ec_vbc.c
index 2aaefed87eb4..f11a1283e5c8 100644
--- a/drivers/platform/chrome/cros_ec_vbc.c
+++ b/drivers/platform/chrome/cros_ec_vbc.c
@@ -7,8 +7,9 @@
7#include <linux/of.h> 7#include <linux/of.h>
8#include <linux/platform_device.h> 8#include <linux/platform_device.h>
9#include <linux/mfd/cros_ec.h> 9#include <linux/mfd/cros_ec.h>
10#include <linux/mfd/cros_ec_commands.h>
11#include <linux/module.h> 10#include <linux/module.h>
11#include <linux/platform_data/cros_ec_commands.h>
12#include <linux/platform_data/cros_ec_proto.h>
12#include <linux/slab.h> 13#include <linux/slab.h>
13 14
14#define DRV_NAME "cros-ec-vbc" 15#define DRV_NAME "cros-ec-vbc"
diff --git a/drivers/platform/chrome/cros_usbpd_logger.c b/drivers/platform/chrome/cros_usbpd_logger.c
index 7c7b267626a0..c549a9b49b56 100644
--- a/drivers/platform/chrome/cros_usbpd_logger.c
+++ b/drivers/platform/chrome/cros_usbpd_logger.c
@@ -6,10 +6,11 @@
6 */ 6 */
7 7
8#include <linux/ktime.h> 8#include <linux/ktime.h>
9#include <linux/math64.h>
10#include <linux/mfd/cros_ec.h> 9#include <linux/mfd/cros_ec.h>
11#include <linux/mfd/cros_ec_commands.h> 10#include <linux/math64.h>
12#include <linux/module.h> 11#include <linux/module.h>
12#include <linux/platform_data/cros_ec_commands.h>
13#include <linux/platform_data/cros_ec_proto.h>
13#include <linux/platform_device.h> 14#include <linux/platform_device.h>
14#include <linux/rtc.h> 15#include <linux/rtc.h>
15 16
diff --git a/drivers/power/supply/cros_usbpd-charger.c b/drivers/power/supply/cros_usbpd-charger.c
index 3a9ea94c3de3..6cc7c3910e09 100644
--- a/drivers/power/supply/cros_usbpd-charger.c
+++ b/drivers/power/supply/cros_usbpd-charger.c
@@ -5,9 +5,10 @@
5 * Copyright (c) 2014 - 2018 Google, Inc 5 * Copyright (c) 2014 - 2018 Google, Inc
6 */ 6 */
7 7
8#include <linux/module.h>
9#include <linux/mfd/cros_ec.h> 8#include <linux/mfd/cros_ec.h>
10#include <linux/mfd/cros_ec_commands.h> 9#include <linux/module.h>
10#include <linux/platform_data/cros_ec_commands.h>
11#include <linux/platform_data/cros_ec_proto.h>
11#include <linux/platform_device.h> 12#include <linux/platform_device.h>
12#include <linux/power_supply.h> 13#include <linux/power_supply.h>
13#include <linux/slab.h> 14#include <linux/slab.h>
diff --git a/drivers/pwm/pwm-cros-ec.c b/drivers/pwm/pwm-cros-ec.c
index 98f6ac6cf6ab..85bea2d40b7d 100644
--- a/drivers/pwm/pwm-cros-ec.c
+++ b/drivers/pwm/pwm-cros-ec.c
@@ -6,8 +6,8 @@
6 */ 6 */
7 7
8#include <linux/module.h> 8#include <linux/module.h>
9#include <linux/mfd/cros_ec.h> 9#include <linux/platform_data/cros_ec_commands.h>
10#include <linux/mfd/cros_ec_commands.h> 10#include <linux/platform_data/cros_ec_proto.h>
11#include <linux/platform_device.h> 11#include <linux/platform_device.h>
12#include <linux/pwm.h> 12#include <linux/pwm.h>
13#include <linux/slab.h> 13#include <linux/slab.h>
diff --git a/drivers/rtc/rtc-cros-ec.c b/drivers/rtc/rtc-cros-ec.c
index 4d6bf9304ceb..6909e01936d9 100644
--- a/drivers/rtc/rtc-cros-ec.c
+++ b/drivers/rtc/rtc-cros-ec.c
@@ -6,8 +6,9 @@
6 6
7#include <linux/kernel.h> 7#include <linux/kernel.h>
8#include <linux/mfd/cros_ec.h> 8#include <linux/mfd/cros_ec.h>
9#include <linux/mfd/cros_ec_commands.h>
10#include <linux/module.h> 9#include <linux/module.h>
10#include <linux/platform_data/cros_ec_commands.h>
11#include <linux/platform_data/cros_ec_proto.h>
11#include <linux/platform_device.h> 12#include <linux/platform_device.h>
12#include <linux/rtc.h> 13#include <linux/rtc.h>
13#include <linux/slab.h> 14#include <linux/slab.h>
diff --git a/include/Kbuild b/include/Kbuild
index c38f0d46b267..b30824615814 100644
--- a/include/Kbuild
+++ b/include/Kbuild
@@ -310,7 +310,6 @@ header-test- += linux/mfd/adp5520.h
310header-test- += linux/mfd/arizona/pdata.h 310header-test- += linux/mfd/arizona/pdata.h
311header-test- += linux/mfd/as3711.h 311header-test- += linux/mfd/as3711.h
312header-test- += linux/mfd/as3722.h 312header-test- += linux/mfd/as3722.h
313header-test- += linux/mfd/cros_ec_commands.h
314header-test- += linux/mfd/da903x.h 313header-test- += linux/mfd/da903x.h
315header-test- += linux/mfd/da9055/pdata.h 314header-test- += linux/mfd/da9055/pdata.h
316header-test- += linux/mfd/da9063/pdata.h 315header-test- += linux/mfd/da9063/pdata.h
@@ -480,6 +479,7 @@ header-test- += linux/platform_data/ata-pxa.h
480header-test- += linux/platform_data/atmel.h 479header-test- += linux/platform_data/atmel.h
481header-test- += linux/platform_data/bh1770glc.h 480header-test- += linux/platform_data/bh1770glc.h
482header-test- += linux/platform_data/brcmfmac.h 481header-test- += linux/platform_data/brcmfmac.h
482header-test- += linux/platform_data/cros_ec_commands.h
483header-test- += linux/platform_data/clk-u300.h 483header-test- += linux/platform_data/clk-u300.h
484header-test- += linux/platform_data/cyttsp4.h 484header-test- += linux/platform_data/cyttsp4.h
485header-test- += linux/platform_data/dma-coh901318.h 485header-test- += linux/platform_data/dma-coh901318.h
diff --git a/include/linux/iio/common/cros_ec_sensors_core.h b/include/linux/iio/common/cros_ec_sensors_core.h
index 0c636b9fe8d7..77a7d65746b6 100644
--- a/include/linux/iio/common/cros_ec_sensors_core.h
+++ b/include/linux/iio/common/cros_ec_sensors_core.h
@@ -10,7 +10,8 @@
10 10
11#include <linux/iio/iio.h> 11#include <linux/iio/iio.h>
12#include <linux/irqreturn.h> 12#include <linux/irqreturn.h>
13#include <linux/mfd/cros_ec.h> 13#include <linux/platform_data/cros_ec_commands.h>
14#include <linux/platform_data/cros_ec_proto.h>
14 15
15enum { 16enum {
16 CROS_EC_SENSOR_X, 17 CROS_EC_SENSOR_X,
diff --git a/include/linux/mfd/cros_ec.h b/include/linux/mfd/cros_ec.h
index 569428ad1cb1..61c2875c2a40 100644
--- a/include/linux/mfd/cros_ec.h
+++ b/include/linux/mfd/cros_ec.h
@@ -8,186 +8,7 @@
8#ifndef __LINUX_MFD_CROS_EC_H 8#ifndef __LINUX_MFD_CROS_EC_H
9#define __LINUX_MFD_CROS_EC_H 9#define __LINUX_MFD_CROS_EC_H
10 10
11#include <linux/cdev.h>
12#include <linux/device.h> 11#include <linux/device.h>
13#include <linux/notifier.h>
14#include <linux/mfd/cros_ec_commands.h>
15#include <linux/mutex.h>
16
17#define CROS_EC_DEV_NAME "cros_ec"
18#define CROS_EC_DEV_FP_NAME "cros_fp"
19#define CROS_EC_DEV_PD_NAME "cros_pd"
20#define CROS_EC_DEV_TP_NAME "cros_tp"
21#define CROS_EC_DEV_ISH_NAME "cros_ish"
22#define CROS_EC_DEV_SCP_NAME "cros_scp"
23
24/*
25 * The EC is unresponsive for a time after a reboot command. Add a
26 * simple delay to make sure that the bus stays locked.
27 */
28#define EC_REBOOT_DELAY_MS 50
29
30/*
31 * Max bus-specific overhead incurred by request/responses.
32 * I2C requires 1 additional byte for requests.
33 * I2C requires 2 additional bytes for responses.
34 * SPI requires up to 32 additional bytes for responses.
35 */
36#define EC_PROTO_VERSION_UNKNOWN 0
37#define EC_MAX_REQUEST_OVERHEAD 1
38#define EC_MAX_RESPONSE_OVERHEAD 32
39
40/*
41 * Command interface between EC and AP, for LPC, I2C and SPI interfaces.
42 */
43enum {
44 EC_MSG_TX_HEADER_BYTES = 3,
45 EC_MSG_TX_TRAILER_BYTES = 1,
46 EC_MSG_TX_PROTO_BYTES = EC_MSG_TX_HEADER_BYTES +
47 EC_MSG_TX_TRAILER_BYTES,
48 EC_MSG_RX_PROTO_BYTES = 3,
49
50 /* Max length of messages for proto 2*/
51 EC_PROTO2_MSG_BYTES = EC_PROTO2_MAX_PARAM_SIZE +
52 EC_MSG_TX_PROTO_BYTES,
53
54 EC_MAX_MSG_BYTES = 64 * 1024,
55};
56
57/**
58 * struct cros_ec_command - Information about a ChromeOS EC command.
59 * @version: Command version number (often 0).
60 * @command: Command to send (EC_CMD_...).
61 * @outsize: Outgoing length in bytes.
62 * @insize: Max number of bytes to accept from the EC.
63 * @result: EC's response to the command (separate from communication failure).
64 * @data: Where to put the incoming data from EC and outgoing data to EC.
65 */
66struct cros_ec_command {
67 uint32_t version;
68 uint32_t command;
69 uint32_t outsize;
70 uint32_t insize;
71 uint32_t result;
72 uint8_t data[0];
73};
74
75/**
76 * struct cros_ec_device - Information about a ChromeOS EC device.
77 * @phys_name: Name of physical comms layer (e.g. 'i2c-4').
78 * @dev: Device pointer for physical comms device
79 * @was_wake_device: True if this device was set to wake the system from
80 * sleep at the last suspend.
81 * @cros_class: The class structure for this device.
82 * @cmd_readmem: Direct read of the EC memory-mapped region, if supported.
83 * @offset: Is within EC_LPC_ADDR_MEMMAP region.
84 * @bytes: Number of bytes to read. zero means "read a string" (including
85 * the trailing '\0'). At most only EC_MEMMAP_SIZE bytes can be
86 * read. Caller must ensure that the buffer is large enough for the
87 * result when reading a string.
88 * @max_request: Max size of message requested.
89 * @max_response: Max size of message response.
90 * @max_passthru: Max sice of passthru message.
91 * @proto_version: The protocol version used for this device.
92 * @priv: Private data.
93 * @irq: Interrupt to use.
94 * @id: Device id.
95 * @din: Input buffer (for data from EC). This buffer will always be
96 * dword-aligned and include enough space for up to 7 word-alignment
97 * bytes also, so we can ensure that the body of the message is always
98 * dword-aligned (64-bit). We use this alignment to keep ARM and x86
99 * happy. Probably word alignment would be OK, there might be a small
100 * performance advantage to using dword.
101 * @dout: Output buffer (for data to EC). This buffer will always be
102 * dword-aligned and include enough space for up to 7 word-alignment
103 * bytes also, so we can ensure that the body of the message is always
104 * dword-aligned (64-bit). We use this alignment to keep ARM and x86
105 * happy. Probably word alignment would be OK, there might be a small
106 * performance advantage to using dword.
107 * @din_size: Size of din buffer to allocate (zero to use static din).
108 * @dout_size: Size of dout buffer to allocate (zero to use static dout).
109 * @wake_enabled: True if this device can wake the system from sleep.
110 * @suspended: True if this device had been suspended.
111 * @cmd_xfer: Send command to EC and get response.
112 * Returns the number of bytes received if the communication
113 * succeeded, but that doesn't mean the EC was happy with the
114 * command. The caller should check msg.result for the EC's result
115 * code.
116 * @pkt_xfer: Send packet to EC and get response.
117 * @lock: One transaction at a time.
118 * @mkbp_event_supported: True if this EC supports the MKBP event protocol.
119 * @host_sleep_v1: True if this EC supports the sleep v1 command.
120 * @event_notifier: Interrupt event notifier for transport devices.
121 * @event_data: Raw payload transferred with the MKBP event.
122 * @event_size: Size in bytes of the event data.
123 * @host_event_wake_mask: Mask of host events that cause wake from suspend.
124 * @ec: The platform_device used by the mfd driver to interface with the
125 * main EC.
126 * @pd: The platform_device used by the mfd driver to interface with the
127 * PD behind an EC.
128 */
129struct cros_ec_device {
130 /* These are used by other drivers that want to talk to the EC */
131 const char *phys_name;
132 struct device *dev;
133 bool was_wake_device;
134 struct class *cros_class;
135 int (*cmd_readmem)(struct cros_ec_device *ec, unsigned int offset,
136 unsigned int bytes, void *dest);
137
138 /* These are used to implement the platform-specific interface */
139 u16 max_request;
140 u16 max_response;
141 u16 max_passthru;
142 u16 proto_version;
143 void *priv;
144 int irq;
145 u8 *din;
146 u8 *dout;
147 int din_size;
148 int dout_size;
149 bool wake_enabled;
150 bool suspended;
151 int (*cmd_xfer)(struct cros_ec_device *ec,
152 struct cros_ec_command *msg);
153 int (*pkt_xfer)(struct cros_ec_device *ec,
154 struct cros_ec_command *msg);
155 struct mutex lock;
156 bool mkbp_event_supported;
157 bool host_sleep_v1;
158 struct blocking_notifier_head event_notifier;
159
160 struct ec_response_get_next_event_v1 event_data;
161 int event_size;
162 u32 host_event_wake_mask;
163 u32 last_resume_result;
164
165 /* The platform devices used by the mfd driver */
166 struct platform_device *ec;
167 struct platform_device *pd;
168};
169
170/**
171 * struct cros_ec_sensor_platform - ChromeOS EC sensor platform information.
172 * @sensor_num: Id of the sensor, as reported by the EC.
173 */
174struct cros_ec_sensor_platform {
175 u8 sensor_num;
176};
177
178/**
179 * struct cros_ec_platform - ChromeOS EC platform information.
180 * @ec_name: Name of EC device (e.g. 'cros-ec', 'cros-pd', ...)
181 * used in /dev/ and sysfs.
182 * @cmd_offset: Offset to apply for each command. Set when
183 * registering a device behind another one.
184 */
185struct cros_ec_platform {
186 const char *ec_name;
187 u16 cmd_offset;
188};
189
190struct cros_ec_debugfs;
191 12
192/** 13/**
193 * struct cros_ec_dev - ChromeOS EC device entry point. 14 * struct cros_ec_dev - ChromeOS EC device entry point.
@@ -211,133 +32,4 @@ struct cros_ec_dev {
211 32
212#define to_cros_ec_dev(dev) container_of(dev, struct cros_ec_dev, class_dev) 33#define to_cros_ec_dev(dev) container_of(dev, struct cros_ec_dev, class_dev)
213 34
214/**
215 * cros_ec_suspend() - Handle a suspend operation for the ChromeOS EC device.
216 * @ec_dev: Device to suspend.
217 *
218 * This can be called by drivers to handle a suspend event.
219 *
220 * Return: 0 on success or negative error code.
221 */
222int cros_ec_suspend(struct cros_ec_device *ec_dev);
223
224/**
225 * cros_ec_resume() - Handle a resume operation for the ChromeOS EC device.
226 * @ec_dev: Device to resume.
227 *
228 * This can be called by drivers to handle a resume event.
229 *
230 * Return: 0 on success or negative error code.
231 */
232int cros_ec_resume(struct cros_ec_device *ec_dev);
233
234/**
235 * cros_ec_prepare_tx() - Prepare an outgoing message in the output buffer.
236 * @ec_dev: Device to register.
237 * @msg: Message to write.
238 *
239 * This is intended to be used by all ChromeOS EC drivers, but at present
240 * only SPI uses it. Once LPC uses the same protocol it can start using it.
241 * I2C could use it now, with a refactor of the existing code.
242 *
243 * Return: 0 on success or negative error code.
244 */
245int cros_ec_prepare_tx(struct cros_ec_device *ec_dev,
246 struct cros_ec_command *msg);
247
248/**
249 * cros_ec_check_result() - Check ec_msg->result.
250 * @ec_dev: EC device.
251 * @msg: Message to check.
252 *
253 * This is used by ChromeOS EC drivers to check the ec_msg->result for
254 * errors and to warn about them.
255 *
256 * Return: 0 on success or negative error code.
257 */
258int cros_ec_check_result(struct cros_ec_device *ec_dev,
259 struct cros_ec_command *msg);
260
261/**
262 * cros_ec_cmd_xfer() - Send a command to the ChromeOS EC.
263 * @ec_dev: EC device.
264 * @msg: Message to write.
265 *
266 * Call this to send a command to the ChromeOS EC. This should be used
267 * instead of calling the EC's cmd_xfer() callback directly.
268 *
269 * Return: 0 on success or negative error code.
270 */
271int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
272 struct cros_ec_command *msg);
273
274/**
275 * cros_ec_cmd_xfer_status() - Send a command to the ChromeOS EC.
276 * @ec_dev: EC device.
277 * @msg: Message to write.
278 *
279 * This function is identical to cros_ec_cmd_xfer, except it returns success
280 * status only if both the command was transmitted successfully and the EC
281 * replied with success status. It's not necessary to check msg->result when
282 * using this function.
283 *
284 * Return: The number of bytes transferred on success or negative error code.
285 */
286int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
287 struct cros_ec_command *msg);
288
289/**
290 * cros_ec_register() - Register a new ChromeOS EC, using the provided info.
291 * @ec_dev: Device to register.
292 *
293 * Before calling this, allocate a pointer to a new device and then fill
294 * in all the fields up to the --private-- marker.
295 *
296 * Return: 0 on success or negative error code.
297 */
298int cros_ec_register(struct cros_ec_device *ec_dev);
299
300/**
301 * cros_ec_unregister() - Remove a ChromeOS EC.
302 * @ec_dev: Device to unregister.
303 *
304 * Call this to deregister a ChromeOS EC, then clean up any private data.
305 *
306 * Return: 0 on success or negative error code.
307 */
308int cros_ec_unregister(struct cros_ec_device *ec_dev);
309
310/**
311 * cros_ec_query_all() - Query the protocol version supported by the
312 * ChromeOS EC.
313 * @ec_dev: Device to register.
314 *
315 * Return: 0 on success or negative error code.
316 */
317int cros_ec_query_all(struct cros_ec_device *ec_dev);
318
319/**
320 * cros_ec_get_next_event() - Fetch next event from the ChromeOS EC.
321 * @ec_dev: Device to fetch event from.
322 * @wake_event: Pointer to a bool set to true upon return if the event might be
323 * treated as a wake event. Ignored if null.
324 *
325 * Return: negative error code on errors; 0 for no data; or else number of
326 * bytes received (i.e., an event was retrieved successfully). Event types are
327 * written out to @ec_dev->event_data.event_type on success.
328 */
329int cros_ec_get_next_event(struct cros_ec_device *ec_dev, bool *wake_event);
330
331/**
332 * cros_ec_get_host_event() - Return a mask of event set by the ChromeOS EC.
333 * @ec_dev: Device to fetch event from.
334 *
335 * When MKBP is supported, when the EC raises an interrupt, we collect the
336 * events raised and call the functions in the ec notifier. This function
337 * is a helper to know which events are raised.
338 *
339 * Return: 0 on error or non-zero bitmask of one or more EC_HOST_EVENT_*.
340 */
341u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev);
342
343#endif /* __LINUX_MFD_CROS_EC_H */ 35#endif /* __LINUX_MFD_CROS_EC_H */
diff --git a/include/linux/platform_data/cros_ec_chardev.h b/include/linux/platform_data/cros_ec_chardev.h
index 6600b54f531c..973b2615aa02 100644
--- a/include/linux/platform_data/cros_ec_chardev.h
+++ b/include/linux/platform_data/cros_ec_chardev.h
@@ -12,7 +12,7 @@
12#include <linux/ioctl.h> 12#include <linux/ioctl.h>
13#include <linux/types.h> 13#include <linux/types.h>
14 14
15#include <linux/mfd/cros_ec.h> 15#include <linux/platform_data/cros_ec_commands.h>
16 16
17#define CROS_EC_DEV_VERSION "1.0.0" 17#define CROS_EC_DEV_VERSION "1.0.0"
18 18
diff --git a/include/linux/mfd/cros_ec_commands.h b/include/linux/platform_data/cros_ec_commands.h
index 7ccb8757b79d..7ccb8757b79d 100644
--- a/include/linux/mfd/cros_ec_commands.h
+++ b/include/linux/platform_data/cros_ec_commands.h
diff --git a/include/linux/platform_data/cros_ec_proto.h b/include/linux/platform_data/cros_ec_proto.h
new file mode 100644
index 000000000000..eab7036cda09
--- /dev/null
+++ b/include/linux/platform_data/cros_ec_proto.h
@@ -0,0 +1,319 @@
1/* SPDX-License-Identifier: GPL-2.0 */
2/*
3 * ChromeOS Embedded Controller protocol interface.
4 *
5 * Copyright (C) 2012 Google, Inc
6 */
7
8#ifndef __LINUX_CROS_EC_PROTO_H
9#define __LINUX_CROS_EC_PROTO_H
10
11#include <linux/device.h>
12#include <linux/mutex.h>
13#include <linux/notifier.h>
14
15#include <linux/platform_data/cros_ec_commands.h>
16
17#define CROS_EC_DEV_NAME "cros_ec"
18#define CROS_EC_DEV_FP_NAME "cros_fp"
19#define CROS_EC_DEV_ISH_NAME "cros_ish"
20#define CROS_EC_DEV_PD_NAME "cros_pd"
21#define CROS_EC_DEV_SCP_NAME "cros_scp"
22#define CROS_EC_DEV_TP_NAME "cros_tp"
23
24/*
25 * The EC is unresponsive for a time after a reboot command. Add a
26 * simple delay to make sure that the bus stays locked.
27 */
28#define EC_REBOOT_DELAY_MS 50
29
30/*
31 * Max bus-specific overhead incurred by request/responses.
32 * I2C requires 1 additional byte for requests.
33 * I2C requires 2 additional bytes for responses.
34 * SPI requires up to 32 additional bytes for responses.
35 */
36#define EC_PROTO_VERSION_UNKNOWN 0
37#define EC_MAX_REQUEST_OVERHEAD 1
38#define EC_MAX_RESPONSE_OVERHEAD 32
39
40/*
41 * Command interface between EC and AP, for LPC, I2C and SPI interfaces.
42 */
43enum {
44 EC_MSG_TX_HEADER_BYTES = 3,
45 EC_MSG_TX_TRAILER_BYTES = 1,
46 EC_MSG_TX_PROTO_BYTES = EC_MSG_TX_HEADER_BYTES +
47 EC_MSG_TX_TRAILER_BYTES,
48 EC_MSG_RX_PROTO_BYTES = 3,
49
50 /* Max length of messages for proto 2*/
51 EC_PROTO2_MSG_BYTES = EC_PROTO2_MAX_PARAM_SIZE +
52 EC_MSG_TX_PROTO_BYTES,
53
54 EC_MAX_MSG_BYTES = 64 * 1024,
55};
56
57/**
58 * struct cros_ec_command - Information about a ChromeOS EC command.
59 * @version: Command version number (often 0).
60 * @command: Command to send (EC_CMD_...).
61 * @outsize: Outgoing length in bytes.
62 * @insize: Max number of bytes to accept from the EC.
63 * @result: EC's response to the command (separate from communication failure).
64 * @data: Where to put the incoming data from EC and outgoing data to EC.
65 */
66struct cros_ec_command {
67 uint32_t version;
68 uint32_t command;
69 uint32_t outsize;
70 uint32_t insize;
71 uint32_t result;
72 uint8_t data[0];
73};
74
75/**
76 * struct cros_ec_device - Information about a ChromeOS EC device.
77 * @phys_name: Name of physical comms layer (e.g. 'i2c-4').
78 * @dev: Device pointer for physical comms device
79 * @was_wake_device: True if this device was set to wake the system from
80 * sleep at the last suspend.
81 * @cros_class: The class structure for this device.
82 * @cmd_readmem: Direct read of the EC memory-mapped region, if supported.
83 * @offset: Is within EC_LPC_ADDR_MEMMAP region.
84 * @bytes: Number of bytes to read. zero means "read a string" (including
85 * the trailing '\0'). At most only EC_MEMMAP_SIZE bytes can be
86 * read. Caller must ensure that the buffer is large enough for the
87 * result when reading a string.
88 * @max_request: Max size of message requested.
89 * @max_response: Max size of message response.
90 * @max_passthru: Max sice of passthru message.
91 * @proto_version: The protocol version used for this device.
92 * @priv: Private data.
93 * @irq: Interrupt to use.
94 * @id: Device id.
95 * @din: Input buffer (for data from EC). This buffer will always be
96 * dword-aligned and include enough space for up to 7 word-alignment
97 * bytes also, so we can ensure that the body of the message is always
98 * dword-aligned (64-bit). We use this alignment to keep ARM and x86
99 * happy. Probably word alignment would be OK, there might be a small
100 * performance advantage to using dword.
101 * @dout: Output buffer (for data to EC). This buffer will always be
102 * dword-aligned and include enough space for up to 7 word-alignment
103 * bytes also, so we can ensure that the body of the message is always
104 * dword-aligned (64-bit). We use this alignment to keep ARM and x86
105 * happy. Probably word alignment would be OK, there might be a small
106 * performance advantage to using dword.
107 * @din_size: Size of din buffer to allocate (zero to use static din).
108 * @dout_size: Size of dout buffer to allocate (zero to use static dout).
109 * @wake_enabled: True if this device can wake the system from sleep.
110 * @suspended: True if this device had been suspended.
111 * @cmd_xfer: Send command to EC and get response.
112 * Returns the number of bytes received if the communication
113 * succeeded, but that doesn't mean the EC was happy with the
114 * command. The caller should check msg.result for the EC's result
115 * code.
116 * @pkt_xfer: Send packet to EC and get response.
117 * @lock: One transaction at a time.
118 * @mkbp_event_supported: True if this EC supports the MKBP event protocol.
119 * @host_sleep_v1: True if this EC supports the sleep v1 command.
120 * @event_notifier: Interrupt event notifier for transport devices.
121 * @event_data: Raw payload transferred with the MKBP event.
122 * @event_size: Size in bytes of the event data.
123 * @host_event_wake_mask: Mask of host events that cause wake from suspend.
124 * @ec: The platform_device used by the mfd driver to interface with the
125 * main EC.
126 * @pd: The platform_device used by the mfd driver to interface with the
127 * PD behind an EC.
128 */
129struct cros_ec_device {
130 /* These are used by other drivers that want to talk to the EC */
131 const char *phys_name;
132 struct device *dev;
133 bool was_wake_device;
134 struct class *cros_class;
135 int (*cmd_readmem)(struct cros_ec_device *ec, unsigned int offset,
136 unsigned int bytes, void *dest);
137
138 /* These are used to implement the platform-specific interface */
139 u16 max_request;
140 u16 max_response;
141 u16 max_passthru;
142 u16 proto_version;
143 void *priv;
144 int irq;
145 u8 *din;
146 u8 *dout;
147 int din_size;
148 int dout_size;
149 bool wake_enabled;
150 bool suspended;
151 int (*cmd_xfer)(struct cros_ec_device *ec,
152 struct cros_ec_command *msg);
153 int (*pkt_xfer)(struct cros_ec_device *ec,
154 struct cros_ec_command *msg);
155 struct mutex lock;
156 bool mkbp_event_supported;
157 bool host_sleep_v1;
158 struct blocking_notifier_head event_notifier;
159
160 struct ec_response_get_next_event_v1 event_data;
161 int event_size;
162 u32 host_event_wake_mask;
163 u32 last_resume_result;
164
165 /* The platform devices used by the mfd driver */
166 struct platform_device *ec;
167 struct platform_device *pd;
168};
169
170/**
171 * struct cros_ec_sensor_platform - ChromeOS EC sensor platform information.
172 * @sensor_num: Id of the sensor, as reported by the EC.
173 */
174struct cros_ec_sensor_platform {
175 u8 sensor_num;
176};
177
178/**
179 * struct cros_ec_platform - ChromeOS EC platform information.
180 * @ec_name: Name of EC device (e.g. 'cros-ec', 'cros-pd', ...)
181 * used in /dev/ and sysfs.
182 * @cmd_offset: Offset to apply for each command. Set when
183 * registering a device behind another one.
184 */
185struct cros_ec_platform {
186 const char *ec_name;
187 u16 cmd_offset;
188};
189
190/**
191 * cros_ec_suspend() - Handle a suspend operation for the ChromeOS EC device.
192 * @ec_dev: Device to suspend.
193 *
194 * This can be called by drivers to handle a suspend event.
195 *
196 * Return: 0 on success or negative error code.
197 */
198int cros_ec_suspend(struct cros_ec_device *ec_dev);
199
200/**
201 * cros_ec_resume() - Handle a resume operation for the ChromeOS EC device.
202 * @ec_dev: Device to resume.
203 *
204 * This can be called by drivers to handle a resume event.
205 *
206 * Return: 0 on success or negative error code.
207 */
208int cros_ec_resume(struct cros_ec_device *ec_dev);
209
210/**
211 * cros_ec_prepare_tx() - Prepare an outgoing message in the output buffer.
212 * @ec_dev: Device to register.
213 * @msg: Message to write.
214 *
215 * This is intended to be used by all ChromeOS EC drivers, but at present
216 * only SPI uses it. Once LPC uses the same protocol it can start using it.
217 * I2C could use it now, with a refactor of the existing code.
218 *
219 * Return: 0 on success or negative error code.
220 */
221int cros_ec_prepare_tx(struct cros_ec_device *ec_dev,
222 struct cros_ec_command *msg);
223
224/**
225 * cros_ec_check_result() - Check ec_msg->result.
226 * @ec_dev: EC device.
227 * @msg: Message to check.
228 *
229 * This is used by ChromeOS EC drivers to check the ec_msg->result for
230 * errors and to warn about them.
231 *
232 * Return: 0 on success or negative error code.
233 */
234int cros_ec_check_result(struct cros_ec_device *ec_dev,
235 struct cros_ec_command *msg);
236
237/**
238 * cros_ec_cmd_xfer() - Send a command to the ChromeOS EC.
239 * @ec_dev: EC device.
240 * @msg: Message to write.
241 *
242 * Call this to send a command to the ChromeOS EC. This should be used
243 * instead of calling the EC's cmd_xfer() callback directly.
244 *
245 * Return: 0 on success or negative error code.
246 */
247int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev,
248 struct cros_ec_command *msg);
249
250/**
251 * cros_ec_cmd_xfer_status() - Send a command to the ChromeOS EC.
252 * @ec_dev: EC device.
253 * @msg: Message to write.
254 *
255 * This function is identical to cros_ec_cmd_xfer, except it returns success
256 * status only if both the command was transmitted successfully and the EC
257 * replied with success status. It's not necessary to check msg->result when
258 * using this function.
259 *
260 * Return: The number of bytes transferred on success or negative error code.
261 */
262int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev,
263 struct cros_ec_command *msg);
264
265/**
266 * cros_ec_register() - Register a new ChromeOS EC, using the provided info.
267 * @ec_dev: Device to register.
268 *
269 * Before calling this, allocate a pointer to a new device and then fill
270 * in all the fields up to the --private-- marker.
271 *
272 * Return: 0 on success or negative error code.
273 */
274int cros_ec_register(struct cros_ec_device *ec_dev);
275
276/**
277 * cros_ec_unregister() - Remove a ChromeOS EC.
278 * @ec_dev: Device to unregister.
279 *
280 * Call this to deregister a ChromeOS EC, then clean up any private data.
281 *
282 * Return: 0 on success or negative error code.
283 */
284int cros_ec_unregister(struct cros_ec_device *ec_dev);
285
286/**
287 * cros_ec_query_all() - Query the protocol version supported by the
288 * ChromeOS EC.
289 * @ec_dev: Device to register.
290 *
291 * Return: 0 on success or negative error code.
292 */
293int cros_ec_query_all(struct cros_ec_device *ec_dev);
294
295/**
296 * cros_ec_get_next_event() - Fetch next event from the ChromeOS EC.
297 * @ec_dev: Device to fetch event from.
298 * @wake_event: Pointer to a bool set to true upon return if the event might be
299 * treated as a wake event. Ignored if null.
300 *
301 * Return: negative error code on errors; 0 for no data; or else number of
302 * bytes received (i.e., an event was retrieved successfully). Event types are
303 * written out to @ec_dev->event_data.event_type on success.
304 */
305int cros_ec_get_next_event(struct cros_ec_device *ec_dev, bool *wake_event);
306
307/**
308 * cros_ec_get_host_event() - Return a mask of event set by the ChromeOS EC.
309 * @ec_dev: Device to fetch event from.
310 *
311 * When MKBP is supported, when the EC raises an interrupt, we collect the
312 * events raised and call the functions in the ec notifier. This function
313 * is a helper to know which events are raised.
314 *
315 * Return: 0 on error or non-zero bitmask of one or more EC_HOST_EVENT_*.
316 */
317u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev);
318
319#endif /* __LINUX_CROS_EC_PROTO_H */
diff --git a/sound/soc/codecs/cros_ec_codec.c b/sound/soc/codecs/cros_ec_codec.c
index 85beef265cc8..3c1bd24a1057 100644
--- a/sound/soc/codecs/cros_ec_codec.c
+++ b/sound/soc/codecs/cros_ec_codec.c
@@ -9,9 +9,9 @@
9#include <linux/delay.h> 9#include <linux/delay.h>
10#include <linux/device.h> 10#include <linux/device.h>
11#include <linux/kernel.h> 11#include <linux/kernel.h>
12#include <linux/mfd/cros_ec.h>
13#include <linux/mfd/cros_ec_commands.h>
14#include <linux/module.h> 12#include <linux/module.h>
13#include <linux/platform_data/cros_ec_commands.h>
14#include <linux/platform_data/cros_ec_proto.h>
15#include <linux/platform_device.h> 15#include <linux/platform_device.h>
16#include <sound/pcm.h> 16#include <sound/pcm.h>
17#include <sound/pcm_params.h> 17#include <sound/pcm_params.h>