static int register_memory(void)
{
	int			result;
	ion_phys_addr_t		paddr;
	void                    *kvptr;
	unsigned long		kvaddr;
	unsigned long		mem_len;
	pr_debug("%s\n", __func__);

	result = allocate_col_data();
	if (result) {
		pr_err("%s: allocate_col_data failed, rc = %d\n",
			__func__, result);
		goto err_done;
	}

	result = allocate_hw_delay_entries();
	if (result) {
		pr_err("%s: allocate_hw_delay_entries failed, rc = %d\n",
			__func__, result);
		goto err_col;
	}

	result = msm_audio_ion_import("audio_acdb_client",
				&acdb_data.ion_client,
				&acdb_data.ion_handle,
				acdb_data.map_handle,
				NULL, 0,
				&paddr, (size_t *)&mem_len, &kvptr);
	if (result) {
		pr_err("%s: audio ION alloc failed, rc = %d\n",
			__func__, result);
		goto err_hw_delay;
	}

	kvaddr = (unsigned long)kvptr;
	acdb_data.paddr = paddr;
	acdb_data.kvaddr = kvaddr;
	acdb_data.mem_len = mem_len;

	pr_debug("%s done! paddr = 0x%llx, kvaddr = 0x%llx, len = 0x%llx\n",
		 __func__, acdb_data.paddr, acdb_data.kvaddr,
		 acdb_data.mem_len);

	return result;
err_hw_delay:
	deallocate_hw_delay_entries();
err_col:
	deallocate_col_data();
err_done:
	acdb_data.mem_len = 0;
	return result;
}
static int register_memory(void)
{
	int			result;
	int			i;
	ion_phys_addr_t		paddr;
	void                    *kvptr;
	unsigned long		kvaddr;
	unsigned long		mem_len;
	pr_debug("%s\n", __func__);

	mutex_lock(&acdb_data.acdb_mutex);
	allocate_hw_delay_entries();
	for (i = 0; i < MAX_VOCPROC_TYPES; i++) {
		acdb_data.col_data[i] = kmalloc(MAX_COL_SIZE, GFP_KERNEL);
		atomic_set(&acdb_data.vocproc_col_cal[i].cal_kvaddr,
			(uint32_t)acdb_data.col_data[i]);
	}

	result = msm_audio_ion_import("audio_acdb_client",
				&acdb_data.ion_client,
				&acdb_data.ion_handle,
				atomic_read(&acdb_data.map_handle),
				NULL, 0,
				&paddr, (size_t *)&mem_len, &kvptr);
	if (result) {
		pr_err("%s: audio ION alloc failed, rc = %d\n",
			__func__, result);
		result = PTR_ERR(acdb_data.ion_client);
		goto err_ion_handle;
	}
	kvaddr = (unsigned long)kvptr;
	atomic64_set(&acdb_data.paddr, paddr);
	atomic64_set(&acdb_data.kvaddr, kvaddr);
	atomic64_set(&acdb_data.mem_len, mem_len);
	mutex_unlock(&acdb_data.acdb_mutex);

	pr_debug("%s done! paddr = 0x%lx, kvaddr = 0x%lx, len = x%lx\n",
		 __func__,
		(long)atomic64_read(&acdb_data.paddr),
		(long)atomic64_read(&acdb_data.kvaddr),
		(long)atomic64_read(&acdb_data.mem_len));

	return result;
err_ion_handle:
	msm_audio_ion_free(acdb_data.ion_client, acdb_data.ion_handle);

	atomic64_set(&acdb_data.mem_len, 0);
	mutex_unlock(&acdb_data.acdb_mutex);
	return result;
}
static int register_memory(void)
{
	int			result;
	int			i;
	ion_phys_addr_t		paddr;
	void                    *kvptr;
	unsigned long		kvaddr;
	unsigned long		mem_len;
	pr_debug("%s\n", __func__);

	result = msm_audio_ion_import("audio_acdb_client",
				&acdb_data.ion_client,
				&acdb_data.ion_handle,
				acdb_data.map_handle,
				NULL, 0,
				&paddr, (size_t *)&mem_len, &kvptr);
	if (result) {
		pr_err("%s: audio ION alloc failed, rc = %d\n",
			__func__, result);
		goto err_ion_handle;
	}

	allocate_hw_delay_entries();

	for (i = 0; i < MAX_VOCPROC_TYPES; i++) {
		acdb_data.col_data[i] = kmalloc(MAX_COL_SIZE, GFP_KERNEL);
		acdb_data.vocproc_col_cal[i].cal_kvaddr =
			(uint32_t)acdb_data.col_data[i];
	}

	kvaddr = (unsigned long)kvptr;
	acdb_data.paddr = paddr;
	acdb_data.kvaddr = kvaddr;
	acdb_data.mem_len = mem_len;

	pr_debug("%s done! paddr = 0x%llx, kvaddr = 0x%llx, len = 0x%llx\n",
		 __func__, acdb_data.paddr, acdb_data.kvaddr,
		 acdb_data.mem_len);

	return result;
err_ion_handle:
	acdb_data.mem_len = 0;
	return result;
}