Atmel DMACA Driver
There are currently two different drivers for the DMACA controller, neither of which is in mainline. The "old" dw_dmac driver supports peripheral-to-memory and memory-to-peripheral transfer and currently works with the AtmelMmcDriver and AtmelAc97cDriver, but it uses a non-standard and not particularly well-designed API. The "new" dw_dmac driver uses the standard DMA Engine API, but currently only supports memory-to-memory transfers and can therefore not be used with the AtmelMmcDriver and AtmelAc97cDriver.
The plan is to extend the DMA Engine API to make it suitable for peripheral-to-memory and memory-to-peripheral transfer. This requires the following new features:
- Support for setting up hardware handshaking interfaces
- Ability to force a particular transfer width. Since the DMA Engine API is only defined to operate on memory, the width of each load/store transaction on the bus does not matter. When dealing with peripherals, it very much does.
- Support for other controller-specific bells and whistles.
Patches
Old driver
The old DMACA driver is part of the "atmel" patchsets found at the LinuxPatches page, but if you want it as a standalone patch, you can get it here.
Against 2.6.22-rc5:
- old-dma-controller.patch: The old dw_dmac driver usable with the AtmelMmcDriver
New driver
The new DMACA driver can be found in the following git repository:
This also includes a version of the atmel-mci driver ported to the new DMA engine framework.
The following patches are against 2.6.22-rc5, but they do not support peripheral (slave) DMA, so they won't work with the MMC driver.