コード例 #1
0
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));
}
コード例 #2
0
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));
}