summaryrefslogtreecommitdiff
path: root/drivers/misc/modem_audio/mad.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/misc/modem_audio/mad.c')
-rw-r--r--drivers/misc/modem_audio/mad.c27
1 files changed, 16 insertions, 11 deletions
diff --git a/drivers/misc/modem_audio/mad.c b/drivers/misc/modem_audio/mad.c
index 62bef3c75fd..88bbcaa3c9c 100644
--- a/drivers/misc/modem_audio/mad.c
+++ b/drivers/misc/modem_audio/mad.c
@@ -459,19 +459,15 @@ static int mad_close(struct inode *ino, struct file *filp)
{
dev_dbg(mad_dev.this_device, "%s", __func__);
- if (mad->dsp_shm_write_ptr != NULL) {
- iounmap(mad->dsp_shm_write_ptr);
- mad->dsp_shm_write_ptr = NULL;
- }
-
- if (mad->dsp_shm_read_ptr != NULL) {
- iounmap(mad->dsp_shm_read_ptr);
- mad->dsp_shm_read_ptr = NULL;
+ if (mbox_channel_deregister(CHANNEL_NUM_RX)) {
+ dev_err(mad_dev.this_device, "%s:deregister err", __func__);
+ return -EFAULT;
}
-
kfree(mad->rx_buff);
kfree(mad->tx_buff);
mad->data_written = 0;
+ mad->rx_buffer_num = 0;
+ mad->rx_buffer_read = 0;
mad->open_check = false;
return 0;
@@ -495,7 +491,16 @@ static void __exit mad_exit(void)
{
dev_dbg(mad_dev.this_device, "%s", __func__);
- kfree(mad);
+ if (mad->dsp_shm_write_ptr != NULL) {
+ iounmap(mad->dsp_shm_write_ptr);
+ mad->dsp_shm_write_ptr = NULL;
+ }
+
+ if (mad->dsp_shm_read_ptr != NULL) {
+ iounmap(mad->dsp_shm_read_ptr);
+ mad->dsp_shm_read_ptr = NULL;
+ }
- misc_deregister(&mad_dev);
+ kfree(mad);
+ misc_deregister(&mad_dev);
}