diff options
author | Haridhar Kalvala <haridhar.kalvala@stericsson.com> | 2011-10-31 16:08:33 +0530 |
---|---|---|
committer | Philippe Langlais <philippe.langlais@stericsson.com> | 2012-05-22 11:07:18 +0200 |
commit | dccad4536e9ec23bf11bce684b460263a86fa16a (patch) | |
tree | 6011731c3615c43ed00a783f8a6ea15670409631 | |
parent | c4ba3258812ab3cf0e34d89671e4a8d9c6cf3836 (diff) |
drivers: misc: Deregistering of rx- channel added.
Mad driver updated with de-registering of RX
channel with the mailbox.Moved unmap of shared
memory out of mad_close function.
ST-Ericsson Linux next: -
ST-Ericsson FOSS-OUT ID: Trivial
Change-Id: I50351e594d746f5c2891a86351407a5bf8f934ab
Signed-off-by: Haridhar Kalvala <haridhar.kalvala@stericsson.com>
Reviewed-on: http://gerrit.lud.stericsson.com/gerrit/35913
Reviewed-by: Srinidhi KASAGAR <srinidhi.kasagar@stericsson.com>
-rw-r--r-- | arch/arm/mach-ux500/include/mach/mbox_channels-db5500.h | 8 | ||||
-rw-r--r-- | drivers/misc/modem_audio/mad.c | 27 |
2 files changed, 24 insertions, 11 deletions
diff --git a/arch/arm/mach-ux500/include/mach/mbox_channels-db5500.h b/arch/arm/mach-ux500/include/mach/mbox_channels-db5500.h index 0b2fc604873..c29dfff0ff7 100644 --- a/arch/arm/mach-ux500/include/mach/mbox_channels-db5500.h +++ b/arch/arm/mach-ux500/include/mach/mbox_channels-db5500.h @@ -68,5 +68,13 @@ int mbox_channel_send(struct mbox_channel_msg *msg); */ int mbox_channel_revoke_messages(u16 channel); +/** + * mbox_channel_deregister - de-register given mailbox channel. + * @channel: Mailbox channel number. + * + * Returns 0 on success or a negative error code on error. + */ +int mbox_channel_deregister(u16 channel); + #endif /*INC_STE_MBOX_H*/ 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); } |