int adm_unmap_cal_blocks(void) { int i; int result = 0; for (i = 0; i < ADM_MAX_CAL_TYPES; i++) { if (atomic_read(&this_adm.mem_map_cal_handles[i]) != 0) { if (i <= ADM_TX_AUDPROC_CAL) { this_adm.mem_addr_audproc[i].cal_paddr = 0; this_adm.mem_addr_audproc[i].cal_size = 0; } else if (i <= ADM_TX_AUDVOL_CAL) { this_adm.mem_addr_audvol [(i - ADM_RX_AUDVOL_CAL)].cal_paddr = 0; this_adm.mem_addr_audvol [(i - ADM_RX_AUDVOL_CAL)].cal_size = 0; } else if (i == ADM_CUSTOM_TOP_CAL) { this_adm.set_custom_topology = 1; } atomic_set(&this_adm.mem_map_cal_index, i); adm_memory_unmap_regions(GLOBAL_CFG); atomic_set(&this_adm.mem_map_cal_handles[i], 0); } } return result; }
int adm_unmap_cal_blocks(void) { int i; int result = 0; int result2 = 0; pr_debug("%s\n", __func__); for (i = 0; i < MAX_AUDPROC_TYPES; i++) { if (mem_addr_audproc[i].cal_paddr != 0) { result2 = adm_memory_unmap_regions( &mem_addr_audproc[i].cal_paddr, &mem_addr_audproc[i].cal_size, 1); if (result2 < 0) { pr_err("%s: proc unmap failed, err %d ite %d\n", __func__, result2, i); result = result2; } mem_addr_audproc[i].cal_paddr = 0; mem_addr_audproc[i].cal_size = 0; } if (mem_addr_audvol[i].cal_paddr != 0) { result2 = adm_memory_unmap_regions( &mem_addr_audvol[i].cal_paddr, &mem_addr_audvol[i].cal_size, 1); if (result2 < 0) { pr_err("%s: vol unmap failed, err %d ite %d\n", __func__, result2, i); result = result2; } mem_addr_audvol[i].cal_paddr = 0; mem_addr_audvol[i].cal_size = 0; } } return result; }
static int deregister_pmem(void) { int result; struct audproc_buffer_data buffer; get_audproc_buffer_data(&buffer); result = adm_memory_unmap_regions(buffer.phys_addr, buffer.buf_size, NUM_AUDPROC_BUFFERS); if (result < 0) pr_err("Audcal unmap did not work!\n"); if (acdb_data.pmem_fd) { put_pmem_file(acdb_data.file); acdb_data.pmem_fd = 0; } return result; }
int adm_unmap_rtac_block(uint32_t *mem_map_handle) { int result = 0; pr_debug("%s\n", __func__); if (mem_map_handle == NULL) { pr_debug("%s: Map handle is NULL, nothing to unmap\n", __func__); goto done; } if (*mem_map_handle == 0) { pr_debug("%s: Map handle is 0, nothing to unmap\n", __func__); goto done; } if (*mem_map_handle != atomic_read( &this_adm.mem_map_cal_handles[ADM_RTAC])) { pr_err("%s: Map handles do not match! Unmapping RTAC, RTAC map 0x%x, ADM map 0x%x\n", __func__, *mem_map_handle, atomic_read( &this_adm.mem_map_cal_handles[ADM_RTAC])); /* if mismatch use handle passed in to unmap */ atomic_set(&this_adm.mem_map_cal_handles[ADM_RTAC], *mem_map_handle); } /* valid port ID needed for callback use primary I2S */ atomic_set(&this_adm.mem_map_cal_index, ADM_RTAC); result = adm_memory_unmap_regions(PRIMARY_I2S_RX); if (result < 0) { pr_debug("%s: adm_memory_unmap_regions failed, error %d\n", __func__, result); } else { atomic_set(&this_adm.mem_map_cal_handles[ADM_RTAC], 0); *mem_map_handle = 0; } done: return result; }
int adm_unmap_cal_blocks(void) { int i; int result = 0; int result2 = 0; for (i = 0; i < ADM_MAX_CAL_TYPES; i++) { if (atomic_read(&this_adm.mem_map_cal_handles[i]) != 0) { if (i <= ADM_TX_AUDPROC_CAL) { this_adm.mem_addr_audproc[i].cal_paddr = 0; this_adm.mem_addr_audproc[i].cal_size = 0; } else if (i <= ADM_TX_AUDVOL_CAL) { this_adm.mem_addr_audvol [(i - ADM_RX_AUDVOL_CAL)].cal_paddr = 0; this_adm.mem_addr_audvol [(i - ADM_RX_AUDVOL_CAL)].cal_size = 0; } else if (i == ADM_CUSTOM_TOP_CAL) { this_adm.set_custom_topology = 1; } else { continue; } /* valid port ID needed for callback use primary I2S */ atomic_set(&this_adm.mem_map_cal_index, i); result2 = adm_memory_unmap_regions(PRIMARY_I2S_RX); if (result2 < 0) { pr_err("%s: adm_memory_unmap_regions failed, err %d\n", __func__, result2); result = result2; } else { atomic_set(&this_adm.mem_map_cal_handles[i], 0); } } } return result; }
static void send_adm_cal(int port_id, int path) { int result = 0; s32 acdb_path; struct acdb_cal_block aud_cal; int flag = 0; int index = afe_get_port_index(port_id); pr_debug("%s\n", __func__); /* Maps audio_dev_ctrl path definition to ACDB definition */ acdb_path = path - 1; pr_debug("%s: Sending audproc cal\n", __func__); get_audproc_cal(acdb_path, &aud_cal); /* map & cache buffers used */ if (((mem_addr_audproc[acdb_path].cal_paddr != aud_cal.cal_paddr) && (aud_cal.cal_size > 0)) || (aud_cal.cal_size > mem_addr_audproc[acdb_path].cal_size)) { if (mem_addr_audproc[acdb_path].cal_paddr != 0) adm_memory_unmap_regions( &mem_addr_audproc[acdb_path].cal_paddr, &mem_addr_audproc[acdb_path].cal_size, 1); result = adm_memory_map_regions(&aud_cal.cal_paddr, 0, &aud_cal.cal_size, 1); if (result < 0) pr_err("ADM audproc mmap did not work! path = %d, " "addr = 0x%x, size = %d\n", acdb_path, aud_cal.cal_paddr, aud_cal.cal_size); else mem_addr_audproc[acdb_path] = aud_cal; } if (this_adm.prev_index != index) { if (!send_adm_cal_block(port_id, &aud_cal)) pr_debug("%s: Audproc cal sent for port id: %d, path %d\n", __func__, port_id, acdb_path); else pr_debug("%s: Audproc cal not sent for port id: %d, path %d\n", __func__, port_id, acdb_path); this_adm.prev_index = index; flag = 1; } pr_debug("%s: Sending audvol cal\n", __func__); get_audvol_cal(acdb_path, &aud_cal); /* map & cache buffers used */ if (((mem_addr_audvol[acdb_path].cal_paddr != aud_cal.cal_paddr) && (aud_cal.cal_size > 0)) || (aud_cal.cal_size > mem_addr_audvol[acdb_path].cal_size)) { if (mem_addr_audvol[acdb_path].cal_paddr != 0) adm_memory_unmap_regions( &mem_addr_audvol[acdb_path].cal_paddr, &mem_addr_audvol[acdb_path].cal_size, 1); result = adm_memory_map_regions(&aud_cal.cal_paddr, 0, &aud_cal.cal_size, 1); if (result < 0) pr_err("ADM audvol mmap did not work! path = %d, " "addr = 0x%x, size = %d\n", acdb_path, aud_cal.cal_paddr, aud_cal.cal_size); else mem_addr_audvol[acdb_path] = aud_cal; } if ((this_adm.prev_index == index) && (flag == 1)) { if (!send_adm_cal_block(port_id, &aud_cal)) pr_debug("%s: Audvol cal sent for port id: %d, path %d\n", __func__, port_id, acdb_path); else pr_debug("%s: Audvol cal not sent for port id: %d, path %d\n", __func__, port_id, acdb_path); } }
static void send_adm_cal(int port_id, int path) { int result = 0; s32 acdb_path; struct acdb_cal_block aud_cal; pr_debug("%s\n", __func__); acdb_path = path - 1; pr_debug("%s: Sending audproc cal\n", __func__); get_audproc_cal(acdb_path, &aud_cal); if (((mem_addr_audproc[acdb_path].cal_paddr != aud_cal.cal_paddr) && (aud_cal.cal_size > 0)) || (aud_cal.cal_size > mem_addr_audproc[acdb_path].cal_size)) { if (mem_addr_audproc[acdb_path].cal_paddr != 0) adm_memory_unmap_regions( &mem_addr_audproc[acdb_path].cal_paddr, &mem_addr_audproc[acdb_path].cal_size, 1); result = adm_memory_map_regions(&aud_cal.cal_paddr, 0, &aud_cal.cal_size, 1); if (result < 0) pr_err("ADM audproc mmap did not work! path = %d, " "addr = 0x%x, size = %d\n", acdb_path, aud_cal.cal_paddr, aud_cal.cal_size); else mem_addr_audproc[acdb_path] = aud_cal; } if (!send_adm_cal_block(port_id, &aud_cal)) pr_debug("%s: Audproc cal sent for port id: %d, path %d\n", __func__, port_id, acdb_path); else pr_debug("%s: Audproc cal not sent for port id: %d, path %d\n", __func__, port_id, acdb_path); pr_debug("%s: Sending audvol cal\n", __func__); get_audvol_cal(acdb_path, &aud_cal); if (((mem_addr_audvol[acdb_path].cal_paddr != aud_cal.cal_paddr) && (aud_cal.cal_size > 0)) || (aud_cal.cal_size > mem_addr_audvol[acdb_path].cal_size)) { if (mem_addr_audvol[acdb_path].cal_paddr != 0) adm_memory_unmap_regions( &mem_addr_audvol[acdb_path].cal_paddr, &mem_addr_audvol[acdb_path].cal_size, 1); result = adm_memory_map_regions(&aud_cal.cal_paddr, 0, &aud_cal.cal_size, 1); if (result < 0) pr_err("ADM audvol mmap did not work! path = %d, " "addr = 0x%x, size = %d\n", acdb_path, aud_cal.cal_paddr, aud_cal.cal_size); else mem_addr_audvol[acdb_path] = aud_cal; } if (!send_adm_cal_block(port_id, &aud_cal)) pr_debug("%s: Audvol cal sent for port id: %d, path %d\n", __func__, port_id, acdb_path); else pr_debug("%s: Audvol cal not sent for port id: %d, path %d\n", __func__, port_id, acdb_path); }
static void send_adm_cal(int port_id, int path, int perf_mode) { int result = 0; s32 acdb_path; struct acdb_cal_block aud_cal; int size = 4096; pr_debug("%s\n", __func__); /* Maps audio_dev_ctrl path definition to ACDB definition */ acdb_path = path - 1; pr_debug("%s: Sending audproc cal\n", __func__); get_audproc_cal(acdb_path, &aud_cal); /* map & cache buffers used */ atomic_set(&this_adm.mem_map_cal_index, acdb_path); if (((this_adm.mem_addr_audproc[acdb_path].cal_paddr != aud_cal.cal_paddr) && (aud_cal.cal_size > 0)) || (aud_cal.cal_size > this_adm.mem_addr_audproc[acdb_path].cal_size)) { if (this_adm.mem_addr_audproc[acdb_path].cal_paddr != 0) adm_memory_unmap_regions(GLOBAL_CFG); result = adm_memory_map_regions(GLOBAL_CFG, &aud_cal.cal_paddr, 0, &size, 1); if (result < 0) { pr_err("ADM audproc mmap did not work! path = %d, addr = 0x%x, size = %d\n", acdb_path, aud_cal.cal_paddr, aud_cal.cal_size); } else { this_adm.mem_addr_audproc[acdb_path].cal_paddr = aud_cal.cal_paddr; this_adm.mem_addr_audproc[acdb_path].cal_size = size; } } if (!send_adm_cal_block(port_id, &aud_cal, perf_mode)) pr_debug("%s: Audproc cal sent for port id: %#x, path %d\n", __func__, port_id, acdb_path); else pr_debug("%s: Audproc cal not sent for port id: %#x, path %d\n", __func__, port_id, acdb_path); pr_debug("%s: Sending audvol cal\n", __func__); get_audvol_cal(acdb_path, &aud_cal); /* map & cache buffers used */ atomic_set(&this_adm.mem_map_cal_index, (acdb_path + MAX_AUDPROC_TYPES)); if (((this_adm.mem_addr_audvol[acdb_path].cal_paddr != aud_cal.cal_paddr) && (aud_cal.cal_size > 0)) || (aud_cal.cal_size > this_adm.mem_addr_audvol[acdb_path].cal_size)) { if (this_adm.mem_addr_audvol[acdb_path].cal_paddr != 0) adm_memory_unmap_regions(GLOBAL_CFG); result = adm_memory_map_regions(GLOBAL_CFG, &aud_cal.cal_paddr, 0, &size, 1); if (result < 0) { pr_err("ADM audvol mmap did not work! path = %d, addr = 0x%x, size = %d\n", acdb_path, aud_cal.cal_paddr, aud_cal.cal_size); } else { this_adm.mem_addr_audvol[acdb_path].cal_paddr = aud_cal.cal_paddr; this_adm.mem_addr_audvol[acdb_path].cal_size = size; } } if (!send_adm_cal_block(port_id, &aud_cal, perf_mode)) pr_debug("%s: Audvol cal sent for port id: %#x, path %d\n", __func__, port_id, acdb_path); else pr_debug("%s: Audvol cal not sent for port id: %#x, path %d\n", __func__, port_id, acdb_path); }