msm: audio: qdsp6v2: ION upgradation
Migrate ION changes in LPA driver and decoder utilities
to use new ION API's
Change-Id: Iacc55ef50ef8523db608097b2b9e623605e95c6a
Signed-off-by: Deepa Madiregama <dmadireg@codeaurora.org>
diff --git a/arch/arm/mach-msm/qdsp6v2/audio_lpa.c b/arch/arm/mach-msm/qdsp6v2/audio_lpa.c
index 2502d61..cbfee70 100644
--- a/arch/arm/mach-msm/qdsp6v2/audio_lpa.c
+++ b/arch/arm/mach-msm/qdsp6v2/audio_lpa.c
@@ -91,7 +91,6 @@
struct audlpa_ion_region {
struct list_head list;
struct ion_handle *handle;
- struct ion_client *client;
int fd;
void *vaddr;
unsigned long paddr;
@@ -463,7 +462,6 @@
struct audlpa_ion_region *region;
int rc = -EINVAL;
struct ion_handle *handle;
- struct ion_client *client;
unsigned long ionflag;
void *temp_ptr;
@@ -475,32 +473,27 @@
goto end;
}
- client = msm_ion_client_create(UINT_MAX, "Audio_LPA_Client");
- if (IS_ERR_OR_NULL(client)) {
- pr_err("Unable to create ION client\n");
- goto client_error;
- }
- handle = ion_import_dma_buf(client, info->fd);
+ handle = ion_import_dma_buf(audio->client, info->fd);
if (IS_ERR_OR_NULL(handle)) {
pr_err("%s: could not get handle of the given fd\n", __func__);
goto import_error;
}
- rc = ion_handle_get_flags(client, handle, &ionflag);
+ rc = ion_handle_get_flags(audio->client, handle, &ionflag);
if (rc) {
pr_err("%s: could not get flags for the handle\n", __func__);
goto flag_error;
}
- temp_ptr = ion_map_kernel(client, handle, ionflag);
+ temp_ptr = ion_map_kernel(audio->client, handle, ionflag);
if (IS_ERR_OR_NULL(temp_ptr)) {
pr_err("%s: could not get virtual address\n", __func__);
goto map_error;
}
kvaddr = (unsigned long) temp_ptr;
- rc = ion_phys(client, handle, &paddr, &len);
+ rc = ion_phys(audio->client, handle, &paddr, &len);
if (rc) {
pr_err("%s: could not get physical address\n", __func__);
goto ion_error;
@@ -512,7 +505,6 @@
goto ion_error;
}
- region->client = client;
region->handle = handle;
region->vaddr = info->vaddr;
region->fd = info->fd;
@@ -534,13 +526,11 @@
}
ion_error:
- ion_unmap_kernel(client, handle);
+ ion_unmap_kernel(audio->client, handle);
map_error:
- ion_free(client, handle);
flag_error:
+ ion_free(audio->client, handle);
import_error:
- ion_client_destroy(client);
-client_error:
kfree(region);
end:
return rc;
@@ -571,9 +561,8 @@
__func__, audio);
list_del(®ion->list);
- ion_unmap_kernel(region->client, region->handle);
- ion_free(region->client, region->handle);
- ion_client_destroy(region->client);
+ ion_unmap_kernel(audio->client, region->handle);
+ ion_free(audio->client, region->handle);
kfree(region);
rc = 0;
break;
@@ -1097,9 +1086,8 @@
list_for_each_safe(ptr, next, &audio->ion_region_queue) {
region = list_entry(ptr, struct audlpa_ion_region, list);
list_del(®ion->list);
- ion_unmap_kernel(region->client, region->handle);
- ion_free(region->client, region->handle);
- ion_client_destroy(region->client);
+ ion_unmap_kernel(audio->client, region->handle);
+ ion_free(audio->client, region->handle);
kfree(region);
}
@@ -1144,6 +1132,7 @@
auddev_unregister_evt_listner(AUDDEV_CLNT_DEC, audio->ac->session);
q6asm_audio_client_free(audio->ac);
audlpa_reset_ion_region(audio);
+ ion_client_destroy(audio->client);
#ifdef CONFIG_HAS_EARLYSUSPEND
unregister_early_suspend(&audio->suspend_ctl.node);
#endif
@@ -1391,6 +1380,12 @@
pr_info("%s: audio instance 0x%08x created session[%d]\n", __func__,
(int)audio,
audio->ac->session);
+ audio->client = msm_ion_client_create(UINT_MAX, "Audio_LPA_Client");
+ if (IS_ERR_OR_NULL(audio->client)) {
+ pr_err("Unable to create ION client\n");
+ goto err;
+ }
+ pr_debug("Allocating ION clinet in audio_open %p", audio->client);
done:
return rc;
err:
diff --git a/arch/arm/mach-msm/qdsp6v2/audio_lpa.h b/arch/arm/mach-msm/qdsp6v2/audio_lpa.h
index 34b53f2..93588b3 100644
--- a/arch/arm/mach-msm/qdsp6v2/audio_lpa.h
+++ b/arch/arm/mach-msm/qdsp6v2/audio_lpa.h
@@ -89,6 +89,7 @@
uint32_t device_events;
struct list_head ion_region_queue; /* protected by lock */
+ struct ion_client *client;
int eq_enable;
int eq_needs_commit;
diff --git a/arch/arm/mach-msm/qdsp6v2/audio_utils_aio.c b/arch/arm/mach-msm/qdsp6v2/audio_utils_aio.c
index 1c29617..e9f5c0a 100644
--- a/arch/arm/mach-msm/qdsp6v2/audio_utils_aio.c
+++ b/arch/arm/mach-msm/qdsp6v2/audio_utils_aio.c
@@ -404,9 +404,8 @@
list_for_each_safe(ptr, next, &audio->ion_region_queue) {
region = list_entry(ptr, struct audio_aio_ion_region, list);
list_del(®ion->list);
- ion_unmap_kernel(region->client, region->handle);
- ion_free(region->client, region->handle);
- ion_client_destroy(region->client);
+ ion_unmap_kernel(audio->client, region->handle);
+ ion_free(audio->client, region->handle);
kfree(region);
}
@@ -472,6 +471,7 @@
audio_aio_unmap_ion_region(audio);
audio_aio_disable(audio);
audio_aio_reset_ion_region(audio);
+ ion_client_destroy(audio->client);
audio->event_abort = 1;
wake_up(&audio->event_wait);
audio_aio_reset_event_queue(audio);
@@ -681,7 +681,6 @@
struct audio_aio_ion_region *region;
int rc = -EINVAL;
struct ion_handle *handle;
- struct ion_client *client;
unsigned long ionflag;
void *temp_ptr;
@@ -693,32 +692,26 @@
goto end;
}
- client = msm_ion_client_create(UINT_MAX, "Audio_Dec_Client");
- if (IS_ERR_OR_NULL(client)) {
- pr_err("Unable to create ION client\n");
- goto client_error;
- }
-
- handle = ion_import_dma_buf(client, info->fd);
+ handle = ion_import_dma_buf(audio->client, info->fd);
if (IS_ERR_OR_NULL(handle)) {
pr_err("%s: could not get handle of the given fd\n", __func__);
goto import_error;
}
- rc = ion_handle_get_flags(client, handle, &ionflag);
+ rc = ion_handle_get_flags(audio->client, handle, &ionflag);
if (rc) {
pr_err("%s: could not get flags for the handle\n", __func__);
goto flag_error;
}
- temp_ptr = ion_map_kernel(client, handle, ionflag);
+ temp_ptr = ion_map_kernel(audio->client, handle, ionflag);
if (IS_ERR_OR_NULL(temp_ptr)) {
pr_err("%s: could not get virtual address\n", __func__);
goto map_error;
}
kvaddr = (unsigned long)temp_ptr;
- rc = ion_phys(client, handle, &paddr, &len);
+ rc = ion_phys(audio->client, handle, &paddr, &len);
if (rc) {
pr_err("%s: could not get physical address\n", __func__);
goto ion_error;
@@ -730,7 +723,6 @@
goto ion_error;
}
- region->client = client;
region->handle = handle;
region->vaddr = info->vaddr;
region->fd = info->fd;
@@ -752,13 +744,11 @@
}
ion_error:
- ion_unmap_kernel(client, handle);
+ ion_unmap_kernel(audio->client, handle);
map_error:
- ion_free(client, handle);
flag_error:
+ ion_free(audio->client, handle);
import_error:
- ion_client_destroy(client);
-client_error:
kfree(region);
end:
return rc;
@@ -794,9 +784,8 @@
__func__, audio);
list_del(®ion->list);
- ion_unmap_kernel(region->client, region->handle);
- ion_free(region->client, region->handle);
- ion_client_destroy(region->client);
+ ion_unmap_kernel(audio->client, region->handle);
+ ion_free(audio->client, region->handle);
kfree(region);
rc = 0;
break;
@@ -1072,6 +1061,13 @@
break;
}
}
+ audio->client = msm_ion_client_create(UINT_MAX, "Audio_Dec_Client");
+ if (IS_ERR_OR_NULL(audio->client)) {
+ pr_err("Unable to create ION client\n");
+ rc = -EACCES;
+ goto fail;
+ }
+ pr_debug("Ion client create in audio_aio_open %p", audio->client);
return 0;
fail:
q6asm_audio_client_free(audio->ac);
diff --git a/arch/arm/mach-msm/qdsp6v2/audio_utils_aio.h b/arch/arm/mach-msm/qdsp6v2/audio_utils_aio.h
index 4a65304..811baf0 100644
--- a/arch/arm/mach-msm/qdsp6v2/audio_utils_aio.h
+++ b/arch/arm/mach-msm/qdsp6v2/audio_utils_aio.h
@@ -114,7 +114,6 @@
struct audio_aio_ion_region {
struct list_head list;
struct ion_handle *handle;
- struct ion_client *client;
int fd;
void *vaddr;
unsigned long paddr;
@@ -173,6 +172,7 @@
struct list_head free_event_queue;
struct list_head event_queue;
struct list_head ion_region_queue; /* protected by lock */
+ struct ion_client *client;
struct audio_aio_drv_operations drv_ops;
union msm_audio_event_payload eos_write_payload;