Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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>

authored by

Enric Balletbo i Serra and committed by
Lee Jones
840d9f13 2fa2b980

+387 -357
+2 -1
drivers/extcon/extcon-usbc-cros-ec.c
··· 6 6 7 7 #include <linux/extcon-provider.h> 8 8 #include <linux/kernel.h> 9 - #include <linux/mfd/cros_ec.h> 10 9 #include <linux/module.h> 11 10 #include <linux/notifier.h> 12 11 #include <linux/of.h> 12 + #include <linux/platform_data/cros_ec_commands.h> 13 + #include <linux/platform_data/cros_ec_proto.h> 13 14 #include <linux/platform_device.h> 14 15 #include <linux/slab.h> 15 16 #include <linux/sched.h>
+2 -2
drivers/hid/hid-google-hammer.c
··· 16 16 #include <linux/acpi.h> 17 17 #include <linux/hid.h> 18 18 #include <linux/leds.h> 19 - #include <linux/mfd/cros_ec.h> 20 - #include <linux/mfd/cros_ec_commands.h> 21 19 #include <linux/module.h> 20 + #include <linux/platform_data/cros_ec_commands.h> 21 + #include <linux/platform_data/cros_ec_proto.h> 22 22 #include <linux/platform_device.h> 23 23 #include <linux/pm_wakeup.h> 24 24 #include <asm/unaligned.h>
+2 -2
drivers/i2c/busses/i2c-cros-ec-tunnel.c
··· 5 5 6 6 #include <linux/module.h> 7 7 #include <linux/i2c.h> 8 - #include <linux/mfd/cros_ec.h> 9 - #include <linux/mfd/cros_ec_commands.h> 8 + #include <linux/platform_data/cros_ec_commands.h> 9 + #include <linux/platform_data/cros_ec_proto.h> 10 10 #include <linux/platform_device.h> 11 11 #include <linux/slab.h> 12 12
+2 -1
drivers/iio/accel/cros_ec_accel_legacy.c
··· 18 18 #include <linux/iio/triggered_buffer.h> 19 19 #include <linux/kernel.h> 20 20 #include <linux/mfd/cros_ec.h> 21 - #include <linux/mfd/cros_ec_commands.h> 22 21 #include <linux/module.h> 23 22 #include <linux/slab.h> 23 + #include <linux/platform_data/cros_ec_commands.h> 24 + #include <linux/platform_data/cros_ec_proto.h> 24 25 #include <linux/platform_device.h> 25 26 26 27 #define DRV_NAME "cros-ec-accel-legacy"
+1 -2
drivers/iio/common/cros_ec_sensors/cros_ec_lid_angle.c
··· 20 20 #include <linux/iio/triggered_buffer.h> 21 21 #include <linux/iio/trigger_consumer.h> 22 22 #include <linux/kernel.h> 23 - #include <linux/mfd/cros_ec.h> 24 - #include <linux/mfd/cros_ec_commands.h> 25 23 #include <linux/module.h> 24 + #include <linux/platform_data/cros_ec_commands.h> 26 25 #include <linux/platform_device.h> 27 26 #include <linux/slab.h> 28 27
+2 -1
drivers/iio/common/cros_ec_sensors/cros_ec_sensors.c
··· 17 17 #include <linux/iio/triggered_buffer.h> 18 18 #include <linux/kernel.h> 19 19 #include <linux/mfd/cros_ec.h> 20 - #include <linux/mfd/cros_ec_commands.h> 21 20 #include <linux/module.h> 21 + #include <linux/platform_data/cros_ec_commands.h> 22 + #include <linux/platform_data/cros_ec_proto.h> 22 23 #include <linux/platform_device.h> 23 24 #include <linux/slab.h> 24 25
+2 -1
drivers/iio/common/cros_ec_sensors/cros_ec_sensors_core.c
··· 14 14 #include <linux/iio/trigger_consumer.h> 15 15 #include <linux/kernel.h> 16 16 #include <linux/mfd/cros_ec.h> 17 - #include <linux/mfd/cros_ec_commands.h> 18 17 #include <linux/module.h> 19 18 #include <linux/slab.h> 19 + #include <linux/platform_data/cros_ec_commands.h> 20 + #include <linux/platform_data/cros_ec_proto.h> 20 21 #include <linux/platform_device.h> 21 22 22 23 static char *cros_ec_loc[] = {
+2 -1
drivers/iio/light/cros_ec_light_prox.c
··· 15 15 #include <linux/iio/trigger_consumer.h> 16 16 #include <linux/kernel.h> 17 17 #include <linux/mfd/cros_ec.h> 18 - #include <linux/mfd/cros_ec_commands.h> 19 18 #include <linux/module.h> 19 + #include <linux/platform_data/cros_ec_commands.h> 20 + #include <linux/platform_data/cros_ec_proto.h> 20 21 #include <linux/platform_device.h> 21 22 #include <linux/slab.h> 22 23
+2 -1
drivers/iio/pressure/cros_ec_baro.c
··· 15 15 #include <linux/iio/trigger_consumer.h> 16 16 #include <linux/kernel.h> 17 17 #include <linux/mfd/cros_ec.h> 18 - #include <linux/mfd/cros_ec_commands.h> 19 18 #include <linux/module.h> 20 19 #include <linux/slab.h> 20 + #include <linux/platform_data/cros_ec_commands.h> 21 + #include <linux/platform_data/cros_ec_proto.h> 21 22 #include <linux/platform_device.h> 22 23 23 24 /*
+2 -2
drivers/input/keyboard/cros_ec_keyb.c
··· 22 22 #include <linux/slab.h> 23 23 #include <linux/sysrq.h> 24 24 #include <linux/input/matrix_keypad.h> 25 - #include <linux/mfd/cros_ec.h> 26 - #include <linux/mfd/cros_ec_commands.h> 25 + #include <linux/platform_data/cros_ec_commands.h> 26 + #include <linux/platform_data/cros_ec_proto.h> 27 27 28 28 #include <asm/unaligned.h> 29 29
+3 -2
drivers/media/platform/cros-ec-cec/cros-ec-cec.c
··· 14 14 #include <linux/cec.h> 15 15 #include <linux/slab.h> 16 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 20 #include <media/cec.h> 18 21 #include <media/cec-notifier.h> 19 - #include <linux/mfd/cros_ec.h> 20 - #include <linux/mfd/cros_ec_commands.h> 21 22 22 23 #define DRV_NAME "cros-ec-cec" 23 24
+2 -1
drivers/mfd/cros_ec_dev.c
··· 7 7 8 8 #include <linux/mfd/core.h> 9 9 #include <linux/mfd/cros_ec.h> 10 - #include <linux/mfd/cros_ec_commands.h> 11 10 #include <linux/module.h> 12 11 #include <linux/mod_devicetable.h> 13 12 #include <linux/of_platform.h> 14 13 #include <linux/platform_device.h> 15 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 17 #include <linux/slab.h> 17 18 18 19 #define DRV_NAME "cros-ec-dev"
+2 -1
drivers/platform/chrome/cros_ec.c
··· 13 13 #include <linux/interrupt.h> 14 14 #include <linux/slab.h> 15 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 18 #include <linux/suspend.h> 18 19 #include <asm/unaligned.h> 19 20
+2 -1
drivers/platform/chrome/cros_ec_chardev.c
··· 14 14 #include <linux/device.h> 15 15 #include <linux/fs.h> 16 16 #include <linux/mfd/cros_ec.h> 17 - #include <linux/mfd/cros_ec_commands.h> 18 17 #include <linux/miscdevice.h> 19 18 #include <linux/module.h> 20 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 22 #include <linux/platform_device.h> 22 23 #include <linux/slab.h> 23 24 #include <linux/types.h>
+2 -1
drivers/platform/chrome/cros_ec_debugfs.c
··· 8 8 #include <linux/delay.h> 9 9 #include <linux/fs.h> 10 10 #include <linux/mfd/cros_ec.h> 11 - #include <linux/mfd/cros_ec_commands.h> 12 11 #include <linux/module.h> 13 12 #include <linux/mutex.h> 13 + #include <linux/platform_data/cros_ec_commands.h> 14 + #include <linux/platform_data/cros_ec_proto.h> 14 15 #include <linux/platform_device.h> 15 16 #include <linux/poll.h> 16 17 #include <linux/sched.h>
+2 -2
drivers/platform/chrome/cros_ec_i2c.c
··· 9 9 #include <linux/module.h> 10 10 #include <linux/i2c.h> 11 11 #include <linux/interrupt.h> 12 - #include <linux/mfd/cros_ec.h> 13 - #include <linux/mfd/cros_ec_commands.h> 12 + #include <linux/platform_data/cros_ec_commands.h> 13 + #include <linux/platform_data/cros_ec_proto.h> 14 14 #include <linux/platform_device.h> 15 15 #include <linux/slab.h> 16 16
+2 -3
drivers/platform/chrome/cros_ec_ishtp.c
··· 8 8 // (ISH-TP). 9 9 10 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 11 #include <linux/module.h> 15 12 #include <linux/pci.h> 13 + #include <linux/platform_data/cros_ec_commands.h> 14 + #include <linux/platform_data/cros_ec_proto.h> 16 15 #include <linux/intel-ish-client-if.h> 17 16 18 17 /*
+2 -1
drivers/platform/chrome/cros_ec_lightbar.c
··· 9 9 #include <linux/fs.h> 10 10 #include <linux/kobject.h> 11 11 #include <linux/mfd/cros_ec.h> 12 - #include <linux/mfd/cros_ec_commands.h> 13 12 #include <linux/module.h> 13 + #include <linux/platform_data/cros_ec_commands.h> 14 + #include <linux/platform_data/cros_ec_proto.h> 14 15 #include <linux/platform_device.h> 15 16 #include <linux/sched.h> 16 17 #include <linux/types.h>
+2 -2
drivers/platform/chrome/cros_ec_lpc.c
··· 16 16 #include <linux/delay.h> 17 17 #include <linux/io.h> 18 18 #include <linux/interrupt.h> 19 - #include <linux/mfd/cros_ec.h> 20 - #include <linux/mfd/cros_ec_commands.h> 21 19 #include <linux/module.h> 20 + #include <linux/platform_data/cros_ec_commands.h> 21 + #include <linux/platform_data/cros_ec_proto.h> 22 22 #include <linux/platform_device.h> 23 23 #include <linux/printk.h> 24 24 #include <linux/suspend.h>
+2 -1
drivers/platform/chrome/cros_ec_proto.c
··· 3 3 // 4 4 // Copyright (C) 2015 Google, Inc 5 5 6 - #include <linux/mfd/cros_ec.h> 7 6 #include <linux/delay.h> 8 7 #include <linux/device.h> 9 8 #include <linux/module.h> 9 + #include <linux/platform_data/cros_ec_commands.h> 10 + #include <linux/platform_data/cros_ec_proto.h> 10 11 #include <linux/slab.h> 11 12 #include <asm/unaligned.h> 12 13
+2 -2
drivers/platform/chrome/cros_ec_rpmsg.c
··· 6 6 #include <linux/delay.h> 7 7 #include <linux/kernel.h> 8 8 #include <linux/module.h> 9 - #include <linux/mfd/cros_ec.h> 10 - #include <linux/mfd/cros_ec_commands.h> 11 9 #include <linux/of.h> 10 + #include <linux/platform_data/cros_ec_commands.h> 11 + #include <linux/platform_data/cros_ec_proto.h> 12 12 #include <linux/platform_device.h> 13 13 #include <linux/rpmsg.h> 14 14 #include <linux/slab.h>
+2 -2
drivers/platform/chrome/cros_ec_spi.c
··· 6 6 #include <linux/delay.h> 7 7 #include <linux/kernel.h> 8 8 #include <linux/module.h> 9 - #include <linux/mfd/cros_ec.h> 10 - #include <linux/mfd/cros_ec_commands.h> 11 9 #include <linux/of.h> 10 + #include <linux/platform_data/cros_ec_commands.h> 11 + #include <linux/platform_data/cros_ec_proto.h> 12 12 #include <linux/platform_device.h> 13 13 #include <linux/slab.h> 14 14 #include <linux/spi/spi.h>
+2 -1
drivers/platform/chrome/cros_ec_sysfs.c
··· 9 9 #include <linux/fs.h> 10 10 #include <linux/kobject.h> 11 11 #include <linux/mfd/cros_ec.h> 12 - #include <linux/mfd/cros_ec_commands.h> 13 12 #include <linux/module.h> 13 + #include <linux/platform_data/cros_ec_commands.h> 14 + #include <linux/platform_data/cros_ec_proto.h> 14 15 #include <linux/platform_device.h> 15 16 #include <linux/printk.h> 16 17 #include <linux/slab.h>
+1 -1
drivers/platform/chrome/cros_ec_trace.c
··· 6 6 #define TRACE_SYMBOL(a) {a, #a} 7 7 8 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 10 #define EC_CMDS \ 11 11 TRACE_SYMBOL(EC_CMD_PROTO_VERSION), \ 12 12 TRACE_SYMBOL(EC_CMD_HELLO), \
+3 -1
drivers/platform/chrome/cros_ec_trace.h
··· 11 11 #if !defined(_CROS_EC_TRACE_H_) || defined(TRACE_HEADER_MULTI_READ) 12 12 #define _CROS_EC_TRACE_H_ 13 13 14 + #include <linux/bits.h> 14 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 19 #include <linux/tracepoint.h> 18 20
+2 -1
drivers/platform/chrome/cros_ec_vbc.c
··· 7 7 #include <linux/of.h> 8 8 #include <linux/platform_device.h> 9 9 #include <linux/mfd/cros_ec.h> 10 - #include <linux/mfd/cros_ec_commands.h> 11 10 #include <linux/module.h> 11 + #include <linux/platform_data/cros_ec_commands.h> 12 + #include <linux/platform_data/cros_ec_proto.h> 12 13 #include <linux/slab.h> 13 14 14 15 #define DRV_NAME "cros-ec-vbc"
+3 -2
drivers/platform/chrome/cros_usbpd_logger.c
··· 6 6 */ 7 7 8 8 #include <linux/ktime.h> 9 - #include <linux/math64.h> 10 9 #include <linux/mfd/cros_ec.h> 11 - #include <linux/mfd/cros_ec_commands.h> 10 + #include <linux/math64.h> 12 11 #include <linux/module.h> 12 + #include <linux/platform_data/cros_ec_commands.h> 13 + #include <linux/platform_data/cros_ec_proto.h> 13 14 #include <linux/platform_device.h> 14 15 #include <linux/rtc.h> 15 16
+3 -2
drivers/power/supply/cros_usbpd-charger.c
··· 5 5 * Copyright (c) 2014 - 2018 Google, Inc 6 6 */ 7 7 8 - #include <linux/module.h> 9 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 12 #include <linux/platform_device.h> 12 13 #include <linux/power_supply.h> 13 14 #include <linux/slab.h>
+2 -2
drivers/pwm/pwm-cros-ec.c
··· 6 6 */ 7 7 8 8 #include <linux/module.h> 9 - #include <linux/mfd/cros_ec.h> 10 - #include <linux/mfd/cros_ec_commands.h> 9 + #include <linux/platform_data/cros_ec_commands.h> 10 + #include <linux/platform_data/cros_ec_proto.h> 11 11 #include <linux/platform_device.h> 12 12 #include <linux/pwm.h> 13 13 #include <linux/slab.h>
+2 -1
drivers/rtc/rtc-cros-ec.c
··· 6 6 7 7 #include <linux/kernel.h> 8 8 #include <linux/mfd/cros_ec.h> 9 - #include <linux/mfd/cros_ec_commands.h> 10 9 #include <linux/module.h> 10 + #include <linux/platform_data/cros_ec_commands.h> 11 + #include <linux/platform_data/cros_ec_proto.h> 11 12 #include <linux/platform_device.h> 12 13 #include <linux/rtc.h> 13 14 #include <linux/slab.h>
+1 -1
include/Kbuild
··· 310 310 header-test- += linux/mfd/arizona/pdata.h 311 311 header-test- += linux/mfd/as3711.h 312 312 header-test- += linux/mfd/as3722.h 313 - header-test- += linux/mfd/cros_ec_commands.h 314 313 header-test- += linux/mfd/da903x.h 315 314 header-test- += linux/mfd/da9055/pdata.h 316 315 header-test- += linux/mfd/da9063/pdata.h ··· 479 480 header-test- += linux/platform_data/atmel.h 480 481 header-test- += linux/platform_data/bh1770glc.h 481 482 header-test- += linux/platform_data/brcmfmac.h 483 + header-test- += linux/platform_data/cros_ec_commands.h 482 484 header-test- += linux/platform_data/clk-u300.h 483 485 header-test- += linux/platform_data/cyttsp4.h 484 486 header-test- += linux/platform_data/dma-coh901318.h
+2 -1
include/linux/iio/common/cros_ec_sensors_core.h
··· 10 10 11 11 #include <linux/iio/iio.h> 12 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 15 16 enum { 16 17 CROS_EC_SENSOR_X,
-308
include/linux/mfd/cros_ec.h
··· 8 8 #ifndef __LINUX_MFD_CROS_EC_H 9 9 #define __LINUX_MFD_CROS_EC_H 10 10 11 - #include <linux/cdev.h> 12 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 - */ 43 - enum { 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 - */ 66 - struct 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 - */ 129 - struct 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 - */ 174 - struct 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 - */ 185 - struct cros_ec_platform { 186 - const char *ec_name; 187 - u16 cmd_offset; 188 - }; 189 - 190 - struct cros_ec_debugfs; 191 12 192 13 /** 193 14 * struct cros_ec_dev - ChromeOS EC device entry point. ··· 31 210 }; 32 211 33 212 #define to_cros_ec_dev(dev) container_of(dev, struct cros_ec_dev, class_dev) 34 - 35 - /** 36 - * cros_ec_suspend() - Handle a suspend operation for the ChromeOS EC device. 37 - * @ec_dev: Device to suspend. 38 - * 39 - * This can be called by drivers to handle a suspend event. 40 - * 41 - * Return: 0 on success or negative error code. 42 - */ 43 - int cros_ec_suspend(struct cros_ec_device *ec_dev); 44 - 45 - /** 46 - * cros_ec_resume() - Handle a resume operation for the ChromeOS EC device. 47 - * @ec_dev: Device to resume. 48 - * 49 - * This can be called by drivers to handle a resume event. 50 - * 51 - * Return: 0 on success or negative error code. 52 - */ 53 - int cros_ec_resume(struct cros_ec_device *ec_dev); 54 - 55 - /** 56 - * cros_ec_prepare_tx() - Prepare an outgoing message in the output buffer. 57 - * @ec_dev: Device to register. 58 - * @msg: Message to write. 59 - * 60 - * This is intended to be used by all ChromeOS EC drivers, but at present 61 - * only SPI uses it. Once LPC uses the same protocol it can start using it. 62 - * I2C could use it now, with a refactor of the existing code. 63 - * 64 - * Return: 0 on success or negative error code. 65 - */ 66 - int cros_ec_prepare_tx(struct cros_ec_device *ec_dev, 67 - struct cros_ec_command *msg); 68 - 69 - /** 70 - * cros_ec_check_result() - Check ec_msg->result. 71 - * @ec_dev: EC device. 72 - * @msg: Message to check. 73 - * 74 - * This is used by ChromeOS EC drivers to check the ec_msg->result for 75 - * errors and to warn about them. 76 - * 77 - * Return: 0 on success or negative error code. 78 - */ 79 - int cros_ec_check_result(struct cros_ec_device *ec_dev, 80 - struct cros_ec_command *msg); 81 - 82 - /** 83 - * cros_ec_cmd_xfer() - Send a command to the ChromeOS EC. 84 - * @ec_dev: EC device. 85 - * @msg: Message to write. 86 - * 87 - * Call this to send a command to the ChromeOS EC. This should be used 88 - * instead of calling the EC's cmd_xfer() callback directly. 89 - * 90 - * Return: 0 on success or negative error code. 91 - */ 92 - int cros_ec_cmd_xfer(struct cros_ec_device *ec_dev, 93 - struct cros_ec_command *msg); 94 - 95 - /** 96 - * cros_ec_cmd_xfer_status() - Send a command to the ChromeOS EC. 97 - * @ec_dev: EC device. 98 - * @msg: Message to write. 99 - * 100 - * This function is identical to cros_ec_cmd_xfer, except it returns success 101 - * status only if both the command was transmitted successfully and the EC 102 - * replied with success status. It's not necessary to check msg->result when 103 - * using this function. 104 - * 105 - * Return: The number of bytes transferred on success or negative error code. 106 - */ 107 - int cros_ec_cmd_xfer_status(struct cros_ec_device *ec_dev, 108 - struct cros_ec_command *msg); 109 - 110 - /** 111 - * cros_ec_register() - Register a new ChromeOS EC, using the provided info. 112 - * @ec_dev: Device to register. 113 - * 114 - * Before calling this, allocate a pointer to a new device and then fill 115 - * in all the fields up to the --private-- marker. 116 - * 117 - * Return: 0 on success or negative error code. 118 - */ 119 - int cros_ec_register(struct cros_ec_device *ec_dev); 120 - 121 - /** 122 - * cros_ec_unregister() - Remove a ChromeOS EC. 123 - * @ec_dev: Device to unregister. 124 - * 125 - * Call this to deregister a ChromeOS EC, then clean up any private data. 126 - * 127 - * Return: 0 on success or negative error code. 128 - */ 129 - int cros_ec_unregister(struct cros_ec_device *ec_dev); 130 - 131 - /** 132 - * cros_ec_query_all() - Query the protocol version supported by the 133 - * ChromeOS EC. 134 - * @ec_dev: Device to register. 135 - * 136 - * Return: 0 on success or negative error code. 137 - */ 138 - int cros_ec_query_all(struct cros_ec_device *ec_dev); 139 - 140 - /** 141 - * cros_ec_get_next_event() - Fetch next event from the ChromeOS EC. 142 - * @ec_dev: Device to fetch event from. 143 - * @wake_event: Pointer to a bool set to true upon return if the event might be 144 - * treated as a wake event. Ignored if null. 145 - * 146 - * Return: negative error code on errors; 0 for no data; or else number of 147 - * bytes received (i.e., an event was retrieved successfully). Event types are 148 - * written out to @ec_dev->event_data.event_type on success. 149 - */ 150 - int cros_ec_get_next_event(struct cros_ec_device *ec_dev, bool *wake_event); 151 - 152 - /** 153 - * cros_ec_get_host_event() - Return a mask of event set by the ChromeOS EC. 154 - * @ec_dev: Device to fetch event from. 155 - * 156 - * When MKBP is supported, when the EC raises an interrupt, we collect the 157 - * events raised and call the functions in the ec notifier. This function 158 - * is a helper to know which events are raised. 159 - * 160 - * Return: 0 on error or non-zero bitmask of one or more EC_HOST_EVENT_*. 161 - */ 162 - u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev); 163 213 164 214 #endif /* __LINUX_MFD_CROS_EC_H */
include/linux/mfd/cros_ec_commands.h include/linux/platform_data/cros_ec_commands.h
+1 -1
include/linux/platform_data/cros_ec_chardev.h
··· 12 12 #include <linux/ioctl.h> 13 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 17 #define CROS_EC_DEV_VERSION "1.0.0" 18 18
+319
include/linux/platform_data/cros_ec_proto.h
··· 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 + */ 43 + enum { 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 + */ 66 + struct 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 + */ 129 + struct 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 + */ 174 + struct 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 + */ 185 + struct 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 + */ 198 + int 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 + */ 208 + int 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 + */ 221 + int 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 + */ 234 + int 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 + */ 247 + int 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 + */ 262 + int 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 + */ 274 + int 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 + */ 284 + int 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 + */ 293 + int 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 + */ 305 + int 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 + */ 317 + u32 cros_ec_get_host_event(struct cros_ec_device *ec_dev); 318 + 319 + #endif /* __LINUX_CROS_EC_PROTO_H */
+2 -2
sound/soc/codecs/cros_ec_codec.c
··· 9 9 #include <linux/delay.h> 10 10 #include <linux/device.h> 11 11 #include <linux/kernel.h> 12 - #include <linux/mfd/cros_ec.h> 13 - #include <linux/mfd/cros_ec_commands.h> 14 12 #include <linux/module.h> 13 + #include <linux/platform_data/cros_ec_commands.h> 14 + #include <linux/platform_data/cros_ec_proto.h> 15 15 #include <linux/platform_device.h> 16 16 #include <sound/pcm.h> 17 17 #include <sound/pcm_params.h>