Beispiel #1
0
int msm_routing_get_dolby_dap_param_visualizer_control(
		struct snd_kcontrol *kcontrol,
		struct snd_ctl_elem_value *ucontrol) {
	uint32_t length = dolby_dap_params_value[DOLBY_PARAM_VCNB_OFFSET];
	char *visualizer_data;
	int i, rc;
	int *update_visualizer_data;
	uint32_t offset, params_length =
		(2*length + DOLBY_VIS_PARAM_HEADER_SIZE)*sizeof(uint32_t);
	uint32_t param_payload_len =
		DOLBY_PARAM_PAYLOAD_SIZE * sizeof(uint32_t);
	int port_id = dolby_dap_params_states.port_id;
	if (port_id == DOLBY_INVALID_PORT_ID) {
		pr_debug("%s, port_id not set, returning error", __func__);
		ucontrol->value.integer.value[0] = 0;
		return -EINVAL;
	}
	visualizer_data = kzalloc(params_length, GFP_KERNEL);
	if (!visualizer_data) {
		pr_err("%s, params memory alloc failed\n", __func__);
		return -ENOMEM;
	}
	offset = 0;
	params_length = length * sizeof(uint32_t);
	rc = adm_get_params(dolby_dap_params_states.port_id,
					DOLBY_BUNDLE_MODULE_ID,
					DOLBY_PARAM_ID_VCBG,
					params_length + param_payload_len,
					visualizer_data + offset);
	if (rc) {
		pr_err("%s: get parameters failed\n", __func__);
		kfree(visualizer_data);
		return -EINVAL;
	}

	offset = length * sizeof(uint32_t);
	rc = adm_get_params(dolby_dap_params_states.port_id,
					DOLBY_BUNDLE_MODULE_ID,
					DOLBY_PARAM_ID_VCBE,
					params_length + param_payload_len,
					visualizer_data + offset);
	if (rc) {
		pr_err("%s: get parameters failed\n", __func__);
		kfree(visualizer_data);
		return -EINVAL;
	}

	ucontrol->value.integer.value[0] = 2*length;
	pr_debug("%s: visualizer data length %ld\n", __func__,
			ucontrol->value.integer.value[0]);
	update_visualizer_data = (int *)visualizer_data;
	for (i = 0; i < 2*length; i++) {
		ucontrol->value.integer.value[1+i] = update_visualizer_data[i];
		pr_debug("value[%d] %d\n", i, update_visualizer_data[i]);
	}
	kfree(visualizer_data);
	return 0;
}
/* RMS */
static int msm_qti_pp_get_rms_value_control(struct snd_kcontrol *kcontrol,
					    struct snd_ctl_elem_value *ucontrol)
{
	int rc = 0;
	int be_idx = 0, copp_idx;
	char *param_value;
	int *update_param_value;
	uint32_t param_length = sizeof(uint32_t);
	uint32_t param_payload_len = RMS_PAYLOAD_LEN * sizeof(uint32_t);
	struct msm_pcm_routing_bdai_data msm_bedai;
	param_value = kzalloc(param_length, GFP_KERNEL);
	if (!param_value) {
		pr_err("%s, param memory alloc failed\n", __func__);
		return -ENOMEM;
	}
	msm_pcm_routing_acquire_lock();
	for (be_idx = 0; be_idx < MSM_BACKEND_DAI_MAX; be_idx++) {
		msm_pcm_routing_get_bedai_info(be_idx, &msm_bedai);
		if (msm_bedai.port_id == SLIMBUS_0_TX)
			break;
	}
	if ((be_idx >= MSM_BACKEND_DAI_MAX) || !msm_bedai.active) {
		pr_err("%s, back not active to query rms be_idx:%d\n",
			__func__, be_idx);
		rc = -EINVAL;
		goto get_rms_value_err;
	}
	copp_idx = adm_get_default_copp_idx(SLIMBUS_0_TX);
	if ((copp_idx < 0) || (copp_idx > MAX_COPPS_PER_PORT)) {
		pr_err("%s, no active copp to query rms copp_idx:%d\n",
			__func__ , copp_idx);
		rc = -EINVAL;
		goto get_rms_value_err;
	}
	rc = adm_get_params(SLIMBUS_0_TX, copp_idx,
			RMS_MODULEID_APPI_PASSTHRU,
			RMS_PARAM_FIRST_SAMPLE,
			param_length + param_payload_len,
			param_value);
	if (rc) {
		pr_err("%s: get parameters failed rc=%d\n", __func__, rc);
		rc = -EINVAL;
		goto get_rms_value_err;
	}
	update_param_value = (int *)param_value;
	ucontrol->value.integer.value[0] = update_param_value[0];

	pr_debug("%s: FROM DSP value[0] 0x%x\n",
		__func__, update_param_value[0]);
get_rms_value_err:
	msm_pcm_routing_release_lock();
	kfree(param_value);
	return rc;
}
Beispiel #3
0
int msm_routing_get_dolby_dap_param_to_get_control(
		struct snd_kcontrol *kcontrol,
		struct snd_ctl_elem_value *ucontrol) {
	int rc = 0, i;
	char *params_value;
	int *update_params_value;
	uint32_t params_length = DOLBY_MAX_LENGTH_INDIVIDUAL_PARAM *
					sizeof(uint32_t);
	uint32_t param_payload_len =
			DOLBY_PARAM_PAYLOAD_SIZE * sizeof(uint32_t);
	int port_id = dolby_dap_params_states.port_id;

	if (port_id == DOLBY_INVALID_PORT_ID) {
		pr_err("%s, port_id not set, returning error", __func__);
		return -EINVAL;
	}
	params_value = kzalloc(params_length, GFP_KERNEL);
	if (!params_value) {
		pr_err("%s, params memory alloc failed\n", __func__);
		return -ENOMEM;
	}
	if (DOLBY_PARAM_ID_VER == dolby_dap_params_get.param_id) {
		rc = adm_get_params(dolby_dap_params_get.port_id,
						DOLBY_BUNDLE_MODULE_ID,
						DOLBY_PARAM_ID_VER,
						params_length +
							param_payload_len,
						params_value);
	} else {
		for (i = 0; i < MAX_DOLBY_PARAMS; i++)
			if (dolby_dap_params_id[i] ==
				dolby_dap_params_get.param_id)
				break;
		if (i > MAX_DOLBY_PARAMS-1) {
			pr_err("%s: invalid param id to set", __func__);
			rc = -EINVAL;
		} else {
			params_length = (dolby_dap_params_length[i] +
						DOLBY_PARAM_PAYLOAD_SIZE) *
						sizeof(uint32_t);
			rc = adm_get_params(
						dolby_dap_params_get.port_id,
						DOLBY_BUNDLE_MODULE_ID,
						dolby_dap_params_id[i],
						params_length +
						 param_payload_len,
						params_value);
		}
	}
	if (rc) {
		pr_err("%s: get parameters failed\n", __func__);
		kfree(params_value);
		return -EINVAL;
	}
	update_params_value = (int *)params_value;
	ucontrol->value.integer.value[0] = dolby_dap_params_get.device_id;
	ucontrol->value.integer.value[1] = dolby_dap_params_get.param_id;
	ucontrol->value.integer.value[2] = dolby_dap_params_get.offset;
	ucontrol->value.integer.value[3] = dolby_dap_params_get.length;

	pr_debug("%s: FROM DSP value[0] 0x%x value[1] %d value[2] 0x%x\n",
			__func__, update_params_value[0],
			update_params_value[1], update_params_value[2]);
	for (i = 0; i < dolby_dap_params_get.length; i++) {
		ucontrol->value.integer.value[DOLBY_PARAM_PAYLOAD_SIZE+i] =
			update_params_value[i];
		pr_debug("value[%d]:%d\n", i, update_params_value[i]);
	}
	pr_debug("%s: Returning param_id=0x%x offset=%d length=%d\n",
			__func__, dolby_dap_params_get.param_id,
			dolby_dap_params_get.offset,
			dolby_dap_params_get.length);
	kfree(params_value);
	return 0;
}