static int audio_dsp_set_tx_agc(struct audio_in *audio) { audpreproc_cmd_cfg_agc_params cmd; memset(&cmd, 0, sizeof(cmd)); audio->tx_agc_cfg.cmd_id = AUDPREPROC_CMD_CFG_AGC_PARAMS; if (audio->tx_agc_enable) { /* cmd.tx_agc_param_mask = 0xFE00 from sample code */ audio->tx_agc_cfg.tx_agc_param_mask = (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_COMP_SLOPE) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_COMP_TH) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_EXP_SLOPE) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_EXP_TH) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_COMP_AIG_FLAG) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_COMP_STATIC_GAIN) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_TX_AGC_ENA_FLAG); audio->tx_agc_cfg.tx_agc_enable_flag = AUDPREPROC_CMD_TX_AGC_ENA_FLAG_ENA; /* cmd.param_mask = 0xFFF0 from sample code */ audio->tx_agc_cfg.tx_agc_param_mask = (1 << AUDPREPROC_CMD_PARAM_MASK_RMS_TAY) | (1 << AUDPREPROC_CMD_PARAM_MASK_RELEASEK) | (1 << AUDPREPROC_CMD_PARAM_MASK_DELAY) | (1 << AUDPREPROC_CMD_PARAM_MASK_ATTACKK) | (1 << AUDPREPROC_CMD_PARAM_MASK_LEAKRATE_SLOW) | (1 << AUDPREPROC_CMD_PARAM_MASK_LEAKRATE_FAST) | (1 << AUDPREPROC_CMD_PARAM_MASK_AIG_RELEASEK) | (1 << AUDPREPROC_CMD_PARAM_MASK_AIG_MIN) | (1 << AUDPREPROC_CMD_PARAM_MASK_AIG_MAX) | (1 << AUDPREPROC_CMD_PARAM_MASK_LEAK_UP) | (1 << AUDPREPROC_CMD_PARAM_MASK_LEAK_DOWN) | (1 << AUDPREPROC_CMD_PARAM_MASK_AIG_ATTACKK); } else { audio->tx_agc_cfg.tx_agc_param_mask = (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_TX_AGC_ENA_FLAG); audio->tx_agc_cfg.tx_agc_enable_flag = AUDPREPROC_CMD_TX_AGC_ENA_FLAG_DIS; } cmd = audio->tx_agc_cfg; return audpreproc_dsp_set_agc(&cmd, sizeof(cmd)); }
static int audio_dsp_set_tx_agc(struct audio_in *audio) { audpreproc_cmd_cfg_agc_params cmd; memset(&cmd, 0, sizeof(cmd)); cmd.cmd_id = AUDPREPROC_CMD_CFG_AGC_PARAMS; if (audio->tx_agc_enable) { cmd.tx_agc_param_mask = (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_COMP_SLOPE) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_COMP_TH) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_EXP_SLOPE) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_EXP_TH) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_COMP_AIG_FLAG) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_COMP_STATIC_GAIN) | (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_TX_AGC_ENA_FLAG); cmd.tx_agc_enable_flag = AUDPREPROC_CMD_TX_AGC_ENA_FLAG_ENA; memcpy(&cmd.comp_rlink_static_gain, &audio->agc.agc_params[0], sizeof(uint16_t) * 6); cmd.tx_agc_param_mask = (1 << AUDPREPROC_CMD_PARAM_MASK_RMS_TAY) | (1 << AUDPREPROC_CMD_PARAM_MASK_RELEASEK) | (1 << AUDPREPROC_CMD_PARAM_MASK_DELAY) | (1 << AUDPREPROC_CMD_PARAM_MASK_ATTACKK) | (1 << AUDPREPROC_CMD_PARAM_MASK_LEAKRATE_SLOW) | (1 << AUDPREPROC_CMD_PARAM_MASK_LEAKRATE_FAST) | (1 << AUDPREPROC_CMD_PARAM_MASK_AIG_RELEASEK) | (1 << AUDPREPROC_CMD_PARAM_MASK_AIG_MIN) | (1 << AUDPREPROC_CMD_PARAM_MASK_AIG_MAX) | (1 << AUDPREPROC_CMD_PARAM_MASK_LEAK_UP) | (1 << AUDPREPROC_CMD_PARAM_MASK_LEAK_DOWN) | (1 << AUDPREPROC_CMD_PARAM_MASK_AIG_ATTACKK); memcpy(&cmd.comp_rlink_aig_attackk, &audio->agc.agc_params[6], sizeof(uint16_t) * 14); } else { cmd.tx_agc_param_mask = (1 << AUDPREPROC_CMD_TX_AGC_PARAM_MASK_TX_AGC_ENA_FLAG); cmd.tx_agc_enable_flag = AUDPREPROC_CMD_TX_AGC_ENA_FLAG_DIS; } #if DEBUG MM_AUD_INFO("cmd_id = 0x%04x\n", cmd.cmd_id); MM_AUD_INFO("tx_agc_param_mask = 0x%04x\n", cmd.tx_agc_param_mask); MM_AUD_INFO("tx_agc_enable_flag = 0x%04x\n", cmd.tx_agc_enable_flag); MM_AUD_INFO("static_gain = 0x%04x\n", cmd.static_gain); MM_AUD_INFO("adaptive_gain_flag = 0x%04x\n", cmd.adaptive_gain_flag); MM_AUD_INFO("expander_th = 0x%04x\n", cmd.expander_th); MM_AUD_INFO("expander_slope = 0x%04x\n", cmd.expander_slope); MM_AUD_INFO("compressor_th = 0x%04x\n", cmd.compressor_th); MM_AUD_INFO("compressor_slope = 0x%04x\n", cmd.compressor_slope); MM_AUD_INFO("param_mask = 0x%04x\n", cmd.param_mask); MM_AUD_INFO("aig_attackk = 0x%04x\n", cmd.aig_attackk); MM_AUD_INFO("aig_leak_down = 0x%04x\n", cmd.aig_leak_down); MM_AUD_INFO("aig_leak_up = 0x%04x\n", cmd.aig_leak_up); MM_AUD_INFO("aig_max = 0x%04x\n", cmd.aig_max); MM_AUD_INFO("aig_min = 0x%04x\n", cmd.aig_min); MM_AUD_INFO("aig_releasek = 0x%04x\n", cmd.aig_releasek); MM_AUD_INFO("aig_leakrate_fast = 0x%04x\n", cmd.aig_leakrate_fast); MM_AUD_INFO("aig_leakrate_slow = 0x%04x\n", cmd.aig_leakrate_slow); MM_AUD_INFO("attackk_msw = 0x%04x\n", cmd.attackk_msw); MM_AUD_INFO("attackk_lsw = 0x%04x\n", cmd.attackk_lsw); MM_AUD_INFO("delay = 0x%04x\n", cmd.delay); MM_AUD_INFO("releasek_msw = 0x%04x\n", cmd.releasek_msw); MM_AUD_INFO("releasek_lsw = 0x%04x\n", cmd.releasek_lsw); MM_AUD_INFO("rms_tav = 0x%04x\n", cmd.rms_tav); #endif return audpreproc_dsp_set_agc(&cmd, sizeof(cmd)); }