diff options
Diffstat (limited to 'chip/npcx/audio_codec.c')
-rw-r--r-- | chip/npcx/audio_codec.c | 165 |
1 files changed, 0 insertions, 165 deletions
diff --git a/chip/npcx/audio_codec.c b/chip/npcx/audio_codec.c deleted file mode 100644 index 7b1d32a5ff..0000000000 --- a/chip/npcx/audio_codec.c +++ /dev/null @@ -1,165 +0,0 @@ -/* Copyright 2018 The Chromium OS Authors. All rights reserved. - * Use of this source code is governed by a BSD-style license that can be - * found in the LICENSE file. - */ - -/* Audio codec interface for NPCX */ - -#include "common.h" -#include "console.h" -#include "ec_commands.h" -#include "host_command.h" -#include "wov_chip.h" - -#define EC_WOV_I2S_SAMPLE_RATE 48000 - -typedef enum ec_status (*codec_i2s_func)(struct host_cmd_handler_args *args); - -static enum ec_status codec_set_sample_depth(struct host_cmd_handler_args *args) -{ - struct ec_param_codec_i2s *param = - (struct ec_param_codec_i2s *)args->params; - /* - * The number of bits comes from the enum ec_sample_depth_value where - * the 1st value is for 16 bits and the 2nd value is for 24 bits. - */ - int bits_num = param->depth == EC_CODEC_SAMPLE_DEPTH_24 ? 24 : 16; - - args->response_size = 0; - /* Sample depth can only be changed when mode is WOV_MODE_OFF */ - wov_set_mode(WOV_MODE_OFF); - - if (wov_set_sample_depth(bits_num)) - return EC_RES_ERROR; - - return EC_RES_SUCCESS; -} - -static enum ec_status codec_set_gain(struct host_cmd_handler_args *args) -{ - struct ec_param_codec_i2s *param = - (struct ec_param_codec_i2s *)args->params; - - args->response_size = 0; - wov_set_gain(param->gain.left, param->gain.right); - - return EC_RES_SUCCESS; -} - -static enum ec_status codec_get_gain(struct host_cmd_handler_args *args) -{ - struct ec_codec_i2s_gain *resp = - (struct ec_codec_i2s_gain *)args->response; - int left_gain; - int right_gain; - - args->response_size = sizeof(struct ec_codec_i2s_gain); - /* Get the gains set in the wov driver */ - wov_get_gain(&left_gain, &right_gain); - resp->left = left_gain; - resp->right = right_gain; - - return EC_RES_SUCCESS; -} - -static enum ec_status codec_i2s_enable(struct host_cmd_handler_args *args) -{ - struct ec_param_codec_i2s *param = - (struct ec_param_codec_i2s *)args->params; - int rv; - - args->response_size = 0; - - if (param->i2s_enable) { - /* - * The mic source and sample rate don't need to be set each time - * an i2s stream is started, but the audio codec does not - * contain a method to select these as they must be the values - * set below for proper i2s operation. Since the default values - * set in wov.c are different than what's required, they are set - * each time an i2s stream is started. - */ - wov_set_mic_source(WOV_SRC_STEREO); - /* Mode must be WOV_MODE_OFF to change sample rate */ - wov_set_mode(WOV_MODE_OFF); - wov_set_sample_rate(EC_WOV_I2S_SAMPLE_RATE); - /* Start i2s stream */ - rv = wov_set_mode(WOV_MODE_I2S); - } else { - /* Stop i2s stream */ - rv = wov_set_mode(WOV_MODE_OFF); - } - - return rv ? EC_RES_ERROR : EC_RES_SUCCESS; -} - -static enum ec_status codec_i2s_set_fmt(struct host_cmd_handler_args *args) -{ - struct ec_param_codec_i2s *param = - (struct ec_param_codec_i2s *)args->params; - - args->response_size = 0; - - /* To change mode setting it must be set to WOV_MODE_OFF */ - wov_set_mode(WOV_MODE_OFF); - wov_set_i2s_fmt(param->i2s_config); - - return EC_RES_SUCCESS; -} - -static enum ec_status -codec_i2s_set_tdm_config(struct host_cmd_handler_args *args) -{ - struct ec_param_codec_i2s *param = - (struct ec_param_codec_i2s *)args->params; - uint32_t flags; - - args->response_size = 0; - - flags = (!!param->tdm_param.adjacent_to_ch0) | - ((!!param->tdm_param.adjacent_to_ch1) << 1); - - if (wov_set_i2s_tdm_config(param->tdm_param.ch0_delay, - param->tdm_param.ch1_delay, flags)) - return EC_RES_ERROR; - - return EC_RES_SUCCESS; -} - -static enum ec_status codec_i2s_set_bclk(struct host_cmd_handler_args *args) -{ - struct ec_param_codec_i2s *param = - (struct ec_param_codec_i2s *)args->params; - - args->response_size = 0; - /* To change bclk setting it must be set to WOV_MODE_OFF */ - wov_set_mode(WOV_MODE_OFF); - wov_set_i2s_bclk(param->bclk); - - return EC_RES_SUCCESS; -} - -static enum ec_status codec_i2s(struct host_cmd_handler_args *args) -{ - struct ec_param_codec_i2s *param = - (struct ec_param_codec_i2s *)args->params; - - codec_i2s_func codec_i2s_func_tbl[] = { - codec_set_sample_depth, - codec_set_gain, - codec_get_gain, - codec_i2s_enable, - codec_i2s_set_fmt, - codec_i2s_set_tdm_config, - codec_i2s_set_bclk, - }; - - if (param->cmd < EC_CODEC_I2S_SUBCMD_COUNT) - return codec_i2s_func_tbl[param->cmd](args); - else - return EC_RES_INVALID_PARAM; -} - -DECLARE_HOST_COMMAND(EC_CMD_CODEC_I2S, - codec_i2s, - EC_VER_MASK(0)); |