![Haavard Skinnemoen](/assets/img/avatar_default.png)
This adds support for DMA transfers through the generic DMA engine framework with the DMA slave extensions. The driver has been tested using mmc-block and ext3fs on several SD, SDHC and MMC+ cards. Reads and writes work fine, with read transfer rates up to 7.5 MiB/s on fast cards with debugging disabled. Unfortunately, the driver has been known to lock up from time to time with DMA enabled, so DMA support is currently optional and marked EXPERIMENTAL. However, I didn't see any problems while testing 13 different cards (MMC, SD and SDHC of different brands and sizes), so I suspect the "Initialize BLKR before sending data transfer command" fix that was posted earlier fixed this as well. Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com>
40 lines
1.1 KiB
C
40 lines
1.1 KiB
C
#ifndef __ASM_AVR32_ATMEL_MCI_H
|
|
#define __ASM_AVR32_ATMEL_MCI_H
|
|
|
|
#define ATMEL_MCI_MAX_NR_SLOTS 2
|
|
|
|
struct dma_slave;
|
|
|
|
/**
|
|
* struct mci_slot_pdata - board-specific per-slot configuration
|
|
* @bus_width: Number of data lines wired up the slot
|
|
* @detect_pin: GPIO pin wired to the card detect switch
|
|
* @wp_pin: GPIO pin wired to the write protect sensor
|
|
*
|
|
* If a given slot is not present on the board, @bus_width should be
|
|
* set to 0. The other fields are ignored in this case.
|
|
*
|
|
* Any pins that aren't available should be set to a negative value.
|
|
*
|
|
* Note that support for multiple slots is experimental -- some cards
|
|
* might get upset if we don't get the clock management exactly right.
|
|
* But in most cases, it should work just fine.
|
|
*/
|
|
struct mci_slot_pdata {
|
|
unsigned int bus_width;
|
|
int detect_pin;
|
|
int wp_pin;
|
|
};
|
|
|
|
/**
|
|
* struct mci_platform_data - board-specific MMC/SDcard configuration
|
|
* @dma_slave: DMA slave interface to use in data transfers, or NULL.
|
|
* @slot: Per-slot configuration data.
|
|
*/
|
|
struct mci_platform_data {
|
|
struct dma_slave *dma_slave;
|
|
struct mci_slot_pdata slot[ATMEL_MCI_MAX_NR_SLOTS];
|
|
};
|
|
|
|
#endif /* __ASM_AVR32_ATMEL_MCI_H */
|