int msm_snddev_set_enc(int popp_id, int copp_id, int set, int rate, int mode) { int topology; int tbl_idx; int rc = 0, i = 0; mutex_lock(&routing_info.adm_mutex); if (set) { mutex_lock(&adm_tx_topology_tbl.lock); tbl_idx = check_tx_copp_topology(popp_id); if (tbl_idx == -ENOENT) topology = DEFAULT_COPP_TOPOLOGY; else { topology = adm_tx_topology_tbl.topolog_id[tbl_idx]; rate = 16000; } mutex_unlock(&adm_tx_topology_tbl.lock); rc = adm_open(copp_id, ADM_PATH_LIVE_REC, rate, mode, topology); if (rc < 0) { pr_err("%s: adm open fail rc[%d]\n", __func__, rc); rc = -EINVAL; goto fail_cmd; } rc = adm_matrix_map(popp_id, ADM_PATH_LIVE_REC, 1, (unsigned int *)&copp_id, copp_id); if (rc < 0) { pr_err("%s: matrix map failed rc[%d]\n", __func__, rc); adm_close(copp_id); rc = -EINVAL; goto fail_cmd; } msm_set_copp_id(popp_id, copp_id); #ifdef CONFIG_MSM8X60_RTAC rtac_add_adm_device(copp_id, popp_id); #endif } else { for (i = 0; i < AFE_MAX_PORTS; i++) { if (routing_info.copp_list[popp_id][i] == copp_id) { rc = adm_close(copp_id); if (rc < 0) { pr_err("%s: adm close fail copp[%d]" "rc[%d]\n", __func__, copp_id, rc); rc = -EINVAL; goto fail_cmd; } msm_clear_copp_id(popp_id, copp_id); break; } } } fail_cmd: mutex_unlock(&routing_info.adm_mutex); return rc; }
static void remove_from_tx_topology_lists(int session_id) { int tbl_idx; mutex_lock(&adm_tx_topology_tbl.lock); tbl_idx = check_tx_copp_topology(session_id); if (tbl_idx != -ENOENT) { adm_tx_topology_tbl.session_cnt--; adm_tx_topology_tbl.session_id[tbl_idx] = 0; adm_tx_topology_tbl.topolog_id[tbl_idx] = 0; } mutex_unlock(&adm_tx_topology_tbl.lock); }
int msm_snddev_set_enc(int popp_id, int copp_id, int set, int rate, int mode) { int topology; int tbl_idx; int rc = 0, i = 0; mutex_lock(&routing_info.adm_mutex); if (set) { mutex_lock(&adm_tx_topology_tbl.lock); tbl_idx = check_tx_copp_topology(popp_id); if (tbl_idx == -ENOENT) topology = DEFAULT_COPP_TOPOLOGY; else { topology = adm_tx_topology_tbl.topolog_id[tbl_idx]; rate = 16000; } mutex_unlock(&adm_tx_topology_tbl.lock); rc = adm_open(copp_id, popp_id, LIVE_RECORDING, rate, mode, topology); if (rc < 0) { pr_aud_err("%s: adm open fail rc[%d]\n", __func__, rc); rc = -EINVAL; goto fail_cmd; } msm_set_copp_id(popp_id, copp_id); } else { for (i = 0; i < AFE_MAX_PORTS; i++) { if (routing_info.copp_list[popp_id][i] == copp_id) { rc = adm_close(copp_id); if (rc < 0) { pr_aud_err("%s: adm close fail copp[%d]" "rc[%d]\n", __func__, copp_id, rc); rc = -EINVAL; goto fail_cmd; } msm_clear_copp_id(popp_id, copp_id); break; } } } fail_cmd: mutex_unlock(&routing_info.adm_mutex); return rc; }
static int add_to_tx_topology_lists(int session_id, int topology) { int idx = 0, tbl_idx; int ret_val = -ENOSPC; mutex_lock(&adm_tx_topology_tbl.lock); tbl_idx = check_tx_copp_topology(session_id); if (tbl_idx == -ENOENT) { while (adm_tx_topology_tbl.session_id[idx++]) ; tbl_idx = idx-1; } if (tbl_idx < MAX_SESSIONS) { adm_tx_topology_tbl.session_id[tbl_idx] = session_id; adm_tx_topology_tbl.topolog_id[tbl_idx] = topology; adm_tx_topology_tbl.session_cnt++; ret_val = 0; } mutex_unlock(&adm_tx_topology_tbl.lock); return ret_val; }