Beispiel #1
0
static int audio_dsp_set_ns(struct audio_in *audio)
{
	audpreproc_cmd_cfg_ns_params cmd;

	memset(&cmd, 0, sizeof(cmd));

	audio->ns_cfg.cmd_id = AUDPREPROC_CMD_CFG_NS_PARAMS;

	if (audio->ns_enable) {
		/* cmd.ec_mode_new is fixed as 0x0064 when enable
		 * from sample code */
		audio->ns_cfg.ec_mode_new =
			AUDPREPROC_CMD_EC_MODE_NEW_NS_ENA |
			AUDPREPROC_CMD_EC_MODE_NEW_HB_ENA |
			AUDPREPROC_CMD_EC_MODE_NEW_VA_ENA;
	} else {
		audio->ns_cfg.ec_mode_new =
			AUDPREPROC_CMD_EC_MODE_NEW_NLMS_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_DES_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_NS_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_CNI_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_NLES_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_HB_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_VA_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_PCD_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_FEHI_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_NEHI_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_NLPP_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_FNE_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_PRENLMS_DIS;
	}
	cmd = audio->ns_cfg;

	return audio_send_queue_pre(audio, &cmd, sizeof(cmd));
}
Beispiel #2
0
static int audio_dsp_set_iir(struct audio_in *audio)
{
	audpreproc_cmd_cfg_iir_tuning_filter_params cmd;

	memset(&cmd, 0, sizeof(cmd));

	audio->iir_cfg.cmd_id = AUDPREPROC_CMD_CFG_IIR_TUNING_FILTER_PARAMS;

	if (audio->iir_enable)
		/* cmd.active_flag is 0xFFFF from sample code but 0x0001 here */
		audio->iir_cfg.active_flag = AUDPREPROC_CMD_IIR_ACTIVE_FLAG_ENA;
	else
		audio->iir_cfg.active_flag = AUDPREPROC_CMD_IIR_ACTIVE_FLAG_DIS;

	cmd = audio->iir_cfg;

	return audio_send_queue_pre(audio, &cmd, sizeof(cmd));
}
static int audio_dsp_set_ns(struct audio_in *audio)
{
	audpreproc_cmd_cfg_ns_params cmd;

	memset(&cmd, 0, sizeof(cmd));
	cmd.cmd_id = AUDPREPROC_CMD_CFG_NS_PARAMS;

	if (audio->ns_enable) {
		/* cmd.ec_mode_new is fixed as
		0x0064 when enable from sample code */
		cmd.ec_mode_new =
			AUDPREPROC_CMD_EC_MODE_NEW_NS_ENA |
			AUDPREPROC_CMD_EC_MODE_NEW_HB_ENA |
			AUDPREPROC_CMD_EC_MODE_NEW_VA_ENA;
		memcpy(&cmd.dens_gamma_n, &audio->ns.ns_params,
				sizeof(audio->ns.ns_params));
	} else {
		cmd.ec_mode_new =
			AUDPREPROC_CMD_EC_MODE_NEW_NLMS_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_DES_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_NS_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_CNI_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_NLES_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_HB_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_VA_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_PCD_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_FEHI_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_NEHI_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_NLPP_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_FNE_DIS |
			AUDPREPROC_CMD_EC_MODE_NEW_PRENLMS_DIS;
	}
#if DEBUG
	MM_AUD_INFO("cmd_id = 0x%04x\n", cmd.cmd_id);
	MM_AUD_INFO("ec_mode_new = 0x%04x\n", cmd.ec_mode_new);
	MM_AUD_INFO("dens_gamma_n = 0x%04x\n", cmd.dens_gamma_n);
	MM_AUD_INFO("dens_nfe_block_size = 0x%04x\n", cmd.dens_nfe_block_size);
	MM_AUD_INFO("dens_limit_ns = 0x%04x\n", cmd.dens_limit_ns);
	MM_AUD_INFO("dens_limit_ns_d = 0x%04x\n", cmd.dens_limit_ns_d);
	MM_AUD_INFO("wb_gamma_e = 0x%04x\n", cmd.wb_gamma_e);
	MM_AUD_INFO("wb_gamma_n = 0x%04x\n", cmd.wb_gamma_n);
#endif
	return audio_send_queue_pre(audio, &cmd, sizeof(cmd));
}
Beispiel #4
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.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 audio_send_queue_pre(audio, &cmd, sizeof(cmd));
}
static int audio_dsp_set_tx_iir(struct audio_in *audio)
{
	struct audpre_cmd_iir_config_type cmd;

	memset(&cmd, 0, sizeof(cmd));
	cmd.cmd_id = AUDPREPROC_CMD_CFG_IIR_TUNING_FILTER_PARAMS;

	if (audio->iir_enable) {
		cmd.active_flag = AUDPREPROC_CMD_IIR_ACTIVE_FLAG_ENA;
		cmd.num_bands = audio->iir.num_bands;
		memcpy(&cmd.iir_params, &audio->iir.iir_params,
				sizeof(audio->iir.iir_params));
	} else {
		cmd.active_flag = AUDPREPROC_CMD_IIR_ACTIVE_FLAG_DIS;
	}
#if DEBUG
	MM_AUD_INFO("cmd_id = 0x%04x\n", cmd.cmd_id);
	MM_AUD_INFO("active_flag = 0x%04x\n", cmd.active_flag);
#endif
	return audio_send_queue_pre(audio, &cmd, sizeof(cmd));
}
static int audio_dsp_set_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->agc_enable) {
		/* cmd.tx_agc_param_mask = 0xFE00 from sample code */
		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.static_gain, &audio->agc.agc_params[0],
				sizeof(uint16_t) * 6);
		/* cmd.param_mask = 0xFFF0 from sample code */
		cmd.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.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 audio_send_queue_pre(audio, &cmd, sizeof(cmd));
}