----------------------------
  
 +What: V4L2 selections API target rectangle and flags unification, the
 +      following definitions will be removed: V4L2_SEL_TGT_CROP_ACTIVE,
 +      V4L2_SEL_TGT_COMPOSE_ACTIVE, V4L2_SUBDEV_SEL_*, V4L2_SUBDEV_SEL_FLAG_*
 +      in favor of common V4L2_SEL_TGT_* and V4L2_SEL_FLAG_* definitions.
 +      For more details see include/linux/v4l2-common.h.
 +When: 3.8
 +Why:  The regular V4L2 selections and the subdev selection API originally
 +      defined distinct names for the target rectangles and flags - V4L2_SEL_*
 +      and V4L2_SUBDEV_SEL_*. Although, it turned out that the meaning of these
 +      target rectangles is virtually identical and the APIs were consolidated
 +      to use single set of names - V4L2_SEL_*. This didn't involve any ABI
 +      changes. Alias definitions were created for the original ones to avoid
 +      any instabilities in the user space interface. After few cycles these
 +      backward compatibility definitions will be removed.
 +Who:  Sylwester Nawrocki <sylvester.nawrocki@gmail.com>
 +
 +----------------------------
 +
 +What: Using V4L2_CAP_VIDEO_CAPTURE and V4L2_CAP_VIDEO_OUTPUT flags
 +      to indicate a V4L2 memory-to-memory device capability
 +When: 3.8
 +Why:  New drivers should use new V4L2_CAP_VIDEO_M2M capability flag
 +      to indicate a V4L2 video memory-to-memory (M2M) device and
 +      applications can now identify a M2M video device by checking
 +      for V4L2_CAP_VIDEO_M2M, with VIDIOC_QUERYCAP ioctl. Using ORed
 +      V4L2_CAP_VIDEO_CAPTURE and V4L2_CAP_VIDEO_OUTPUT flags for M2M
 +      devices is ambiguous and may lead, for example, to identifying
 +      a M2M device as a video capture or output device.
 +Who:  Sylwester Nawrocki <s.nawrocki@samsung.com>
 +
 +----------------------------
++
+ What: OMAP private DMA implementation
+ When: 2013
+ Why:  We have a DMA engine implementation; all users should be updated
+       to use this rather than persisting with the old APIs.  The old APIs
+       block merging the old DMA engine implementation into the DMA
+       engine driver.
+ Who:  Russell King <linux@arm.linux.org.uk>,
+       Santosh Shilimkar <santosh.shilimkar@ti.com>
+ 
+ ----------------------------
 
          SA-1110 SoCs.  This DMA engine can only be used with on-chip
          devices.
  
 +config MMP_TDMA
 +      bool "MMP Two-Channel DMA support"
 +      depends on ARCH_MMP
 +      select DMA_ENGINE
 +      help
 +        Support the MMP Two-Channel DMA engine.
 +        This engine used for MMP Audio DMA and pxa910 SQU.
 +
 +        Say Y here if you enabled MMP ADMA, otherwise say N.
 +
+ config DMA_OMAP
+       tristate "OMAP DMA support"
+       depends on ARCH_OMAP
+       select DMA_ENGINE
+       select DMA_VIRTUAL_CHANNELS
+ 
  config DMA_ENGINE
        bool
  
 
  obj-$(CONFIG_AMBA_PL08X) += amba-pl08x.o
  obj-$(CONFIG_EP93XX_DMA) += ep93xx_dma.o
  obj-$(CONFIG_DMA_SA11X0) += sa11x0-dma.o
 +obj-$(CONFIG_MMP_TDMA) += mmp_tdma.o
+ obj-$(CONFIG_DMA_OMAP) += omap-dma.o
 
        res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "tx");
        if (!res) {
                dev_err(mmc_dev(host->mmc), "cannot get DMA TX channel\n");
 +              ret = -ENXIO;
                goto err_irq;
        }
-       host->dma_line_tx = res->start;
+       tx_req = res->start;
  
        res = platform_get_resource_byname(pdev, IORESOURCE_DMA, "rx");
        if (!res) {
                dev_err(mmc_dev(host->mmc), "cannot get DMA RX channel\n");
 +              ret = -ENXIO;
                goto err_irq;
        }
-       host->dma_line_rx = res->start;
+       rx_req = res->start;
+ 
+       dma_cap_zero(mask);
+       dma_cap_set(DMA_SLAVE, mask);
+ 
+       host->rx_chan = dma_request_channel(mask, omap_dma_filter_fn, &rx_req);
+       if (!host->rx_chan) {
+               dev_err(mmc_dev(host->mmc), "unable to obtain RX DMA engine channel %u\n", rx_req);
+               ret = -ENXIO;
+               goto err_irq;
+       }
+ 
+       host->tx_chan = dma_request_channel(mask, omap_dma_filter_fn, &tx_req);
+       if (!host->tx_chan) {
+               dev_err(mmc_dev(host->mmc), "unable to obtain TX DMA engine channel %u\n", tx_req);
+               ret = -ENXIO;
+               goto err_irq;
+       }
  
        /* Request IRQ for MMC operations */
        ret = request_irq(host->irq, omap_hsmmc_irq, 0,
 
  
        if (rx != NULL) {
                wait_for_completion(&mcspi_dma->dma_rx_completion);
 -              dma_unmap_single(&spi->dev, xfer->rx_dma, count, DMA_FROM_DEVICE);
 +              dma_unmap_single(mcspi->dev, xfer->rx_dma, count,
 +                               DMA_FROM_DEVICE);
                omap2_mcspi_set_enable(spi, 0);
  
+               elements = element_count - 1;
+ 
                if (l & OMAP2_MCSPI_CHCONF_TURBO) {
+                       elements--;
  
                        if (likely(mcspi_read_cs_reg(spi, OMAP2_MCSPI_CHSTAT0)
                                   & OMAP2_MCSPI_CHSTAT_RXS)) {