.version = MCASP_VERSION_4,
 };
 
+static struct davinci_mcasp_pdata omap_mcasp_pdata = {
+       .tx_dma_offset = 0x200,
+       .rx_dma_offset = 0,
+       .version = MCASP_VERSION_OMAP,
+};
+
 static const struct of_device_id mcasp_dt_ids[] = {
        {
                .compatible = "ti,dm646x-mcasp-audio",
                .compatible = "ti,dra7-mcasp-audio",
                .data = &dra7_mcasp_pdata,
        },
+       {
+               .compatible = "ti,omap4-mcasp-audio",
+               .data = &omap_mcasp_pdata,
+       },
        { /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, mcasp_dt_ids);
 
        dma_data = &mcasp->dma_data[SNDRV_PCM_STREAM_PLAYBACK];
        dma_data->filter_data = "tx";
-       if (dat)
+       if (dat) {
                dma_data->addr = dat->start;
-       else
+               /*
+                * According to the TRM there should be 0x200 offset added to
+                * the DAT port address
+                */
+               if (mcasp->version == MCASP_VERSION_OMAP)
+                       dma_data->addr += davinci_mcasp_txdma_offset(mcasp->pdata);
+       } else {
                dma_data->addr = mem->start + davinci_mcasp_txdma_offset(mcasp->pdata);
+       }
 
 
        /* RX is not valid in DIT mode */
                ret = edma_pcm_platform_register(&pdev->dev);
                break;
        case PCM_SDMA:
-               ret = sdma_pcm_platform_register(&pdev->dev, "tx", "rx");
+               if (mcasp->op_mode == DAVINCI_MCASP_IIS_MODE)
+                       ret = sdma_pcm_platform_register(&pdev->dev, "tx", "rx");
+               else
+                       ret = sdma_pcm_platform_register(&pdev->dev, "tx", NULL);
                break;
        case PCM_UDMA:
                ret = udma_pcm_platform_register(&pdev->dev);