summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHaridhar Kalvala <haridhar.kalvala@stericsson.com>2011-10-31 16:08:33 +0530
committerPhilippe Langlais <philippe.langlais@stericsson.com>2012-05-22 11:07:18 +0200
commitdccad4536e9ec23bf11bce684b460263a86fa16a (patch)
tree6011731c3615c43ed00a783f8a6ea15670409631
parentc4ba3258812ab3cf0e34d89671e4a8d9c6cf3836 (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.h8
-rw-r--r--drivers/misc/modem_audio/mad.c27
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);
}