mfd: cros_ec: Update I2S API
authorGwendal Grignou <gwendal@chromium.org>
Mon, 3 Jun 2019 18:34:01 +0000 (11:34 -0700)
committerLee Jones <lee.jones@linaro.org>
Mon, 10 Jun 2019 08:15:08 +0000 (09:15 +0100)
Improve I2S API.
Rename ec_response_codec_gain into ec_codec_i2s_gain,
update caller accordlingly.

Signed-off-by: Gwendal Grignou <gwendal@chromium.org>
Acked-by: Enric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: Benson Leung <bleung@chromium.org>
Reviewed-by: Fabien Lahoudere <fabien.lahoudere@collabora.com>
Signed-off-by: Lee Jones <lee.jones@linaro.org>
include/linux/mfd/cros_ec_commands.h
sound/soc/codecs/cros_ec_codec.c

index fc8babce1576e341abf0016e9e6143030bfbb049..fa397722f17ef2930852ba09c93be1b968ff655e 100644 (file)
@@ -4471,6 +4471,7 @@ enum mkbp_cec_event {
 /* Commands for I2S recording on audio codec. */
 
 #define EC_CMD_CODEC_I2S 0x00BC
+#define EC_WOV_I2S_SAMPLE_RATE 48000
 
 enum ec_codec_i2s_subcmd {
        EC_CODEC_SET_SAMPLE_DEPTH = 0x0,
@@ -4480,6 +4481,7 @@ enum ec_codec_i2s_subcmd {
        EC_CODEC_I2S_SET_CONFIG = 0x4,
        EC_CODEC_I2S_SET_TDM_CONFIG = 0x5,
        EC_CODEC_I2S_SET_BCLK = 0x6,
+       EC_CODEC_I2S_SUBCMD_COUNT = 0x7,
 };
 
 enum ec_sample_depth_value {
@@ -4496,6 +4498,21 @@ enum ec_i2s_config {
        EC_DAI_FMT_PCM_TDM = 5,
 };
 
+/*
+ * For subcommand EC_CODEC_GET_GAIN.
+ */
+struct __ec_align1 ec_codec_i2s_gain {
+       uint8_t left;
+       uint8_t right;
+};
+
+struct __ec_todo_unpacked ec_param_codec_i2s_tdm {
+       int16_t ch0_delay; /* 0 to 496 */
+       int16_t ch1_delay; /* -1 to 496 */
+       uint8_t adjacent_to_ch0;
+       uint8_t adjacent_to_ch1;
+};
+
 struct __ec_todo_packed ec_param_codec_i2s {
        /* enum ec_codec_i2s_subcmd */
        uint8_t cmd;
@@ -4510,10 +4527,7 @@ struct __ec_todo_packed ec_param_codec_i2s {
                 * EC_CODEC_SET_GAIN
                 * Value should be 0~43 for both channels.
                 */
-               struct __ec_align1 ec_param_codec_i2s_set_gain {
-                       uint8_t left;
-                       uint8_t right;
-               } gain;
+               struct ec_codec_i2s_gain gain;
 
                /*
                 * EC_CODEC_I2S_ENABLE
@@ -4522,7 +4536,7 @@ struct __ec_todo_packed ec_param_codec_i2s {
                uint8_t i2s_enable;
 
                /*
-                * EC_CODEC_I2S_SET_COFNIG
+                * EC_CODEC_I2S_SET_CONFIG
                 * Value should be one of ec_i2s_config.
                 */
                uint8_t i2s_config;
@@ -4531,18 +4545,7 @@ struct __ec_todo_packed ec_param_codec_i2s {
                 * EC_CODEC_I2S_SET_TDM_CONFIG
                 * Value should be one of ec_i2s_config.
                 */
-               struct __ec_todo_unpacked ec_param_codec_i2s_tdm {
-                       /*
-                        * 0 to 496
-                        */
-                       int16_t ch0_delay;
-                       /*
-                        * -1 to 496
-                        */
-                       int16_t ch1_delay;
-                       uint8_t adjacent_to_ch0;
-                       uint8_t adjacent_to_ch1;
-               } tdm_param;
+               struct ec_param_codec_i2s_tdm tdm_param;
 
                /*
                 * EC_CODEC_I2S_SET_BCLK
@@ -4551,13 +4554,6 @@ struct __ec_todo_packed ec_param_codec_i2s {
        };
 };
 
-/*
- * For subcommand EC_CODEC_GET_GAIN.
- */
-struct ec_response_codec_gain {
-       uint8_t left;
-       uint8_t right;
-} __ec_align1;
 
 /*****************************************************************************/
 /* System commands */
index 99a3af8a15ff47dbd91b4816a4d53dca65cc735e..87830ed5ebf4385e7948b29cec6083e98412b2ae 100644 (file)
@@ -38,21 +38,21 @@ static const DECLARE_TLV_DB_SCALE(ec_mic_gain_tlv, 0, 100, 0);
 
 static int ec_command_get_gain(struct snd_soc_component *component,
                               struct ec_param_codec_i2s *param,
-                              struct ec_response_codec_gain *resp)
+                              struct ec_codec_i2s_gain *resp)
 {
        struct cros_ec_codec_data *codec_data =
                snd_soc_component_get_drvdata(component);
        struct cros_ec_device *ec_device = codec_data->ec_device;
        u8 buffer[sizeof(struct cros_ec_command) +
                  max(sizeof(struct ec_param_codec_i2s),
-                     sizeof(struct ec_response_codec_gain))];
+                     sizeof(struct ec_codec_i2s_gain))];
        struct cros_ec_command *msg = (struct cros_ec_command *)&buffer;
        int ret;
 
        msg->version = 0;
        msg->command = EC_CMD_CODEC_I2S;
        msg->outsize = sizeof(struct ec_param_codec_i2s);
-       msg->insize = sizeof(struct ec_response_codec_gain);
+       msg->insize = sizeof(struct ec_codec_i2s_gain);
 
        memcpy(msg->data, param, msg->outsize);
 
@@ -226,7 +226,7 @@ static int get_ec_mic_gain(struct snd_soc_component *component,
                           u8 *left, u8 *right)
 {
        struct ec_param_codec_i2s param;
-       struct ec_response_codec_gain resp;
+       struct ec_codec_i2s_gain resp;
        int ret;
 
        param.cmd = EC_CODEC_GET_GAIN;