diff options
Diffstat (limited to 'drivers/misc/modem_audio/mad.c')
-rw-r--r-- | drivers/misc/modem_audio/mad.c | 27 |
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); } |