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; }
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; }