Esempio n. 1
0
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;
}
Esempio n. 2
0
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;
}
Esempio n. 3
0
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;
}
Esempio n. 6
0
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);
	}

}
Esempio n. 7
0
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);
}
Esempio n. 8
0
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);
}