Commit 3aa6be30 authored by Gwendal Grignou's avatar Gwendal Grignou Committed by Lee Jones
Browse files

mfd: cros_ec: Update I2S API



Improve I2S API.
Rename ec_response_codec_gain into ec_codec_i2s_gain,
update caller accordlingly.

Signed-off-by: default avatarGwendal Grignou <gwendal@chromium.org>
Acked-by: default avatarEnric Balletbo i Serra <enric.balletbo@collabora.com>
Acked-by: default avatarBenson Leung <bleung@chromium.org>
Reviewed-by: default avatarFabien Lahoudere <fabien.lahoudere@collabora.com>
Signed-off-by: default avatarLee Jones <lee.jones@linaro.org>
parent 2f2e6d14
Loading
Loading
Loading
Loading
+20 −24
Original line number Diff line number Diff line
@@ -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 */
+4 −4
Original line number Diff line number Diff line
@@ -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;