965ebf33ea
The Atmel MCI controller can drive multiple cards through separate sets of pins, but only one at a time. This patch adds support for multiplexing access to the controller so that multiple card slots can be used as if they were hooked up to separate mmc controllers. The atmel-mci driver registers each slot as a separate mmc_host. Both access the same common controller state, but they also have some state on their own for card detection/write protect handling, and separate shadows of the MR and SDCR registers. When one of the slots receives a request from the mmc core, the common controller state is checked. If it's idle, the request is submitted immediately. If not, the request is added to a queue. When a request is done, the queue is checked and if there is a queued request, it is submitted before the completion callback is called. This patch also includes a few cleanups and fixes, including a locking overhaul. I had to change the locking extensively in any case, so I might as well try to get it right. The driver no longer takes any irq-safe locks, which may or may not improve the overall system performance. This patch also adds a bit of documentation of the internal data structures. Signed-off-by: Haavard Skinnemoen <haavard.skinnemoen@atmel.com> |
||
---|---|---|
.. | ||
at91_mci.c | ||
atmel-mci-regs.h | ||
atmel-mci.c | ||
au1xmmc.c | ||
imxmmc.c | ||
imxmmc.h | ||
Kconfig | ||
Makefile | ||
mmc_spi.c | ||
mmci.c | ||
mmci.h | ||
omap.c | ||
pxamci.c | ||
pxamci.h | ||
ricoh_mmc.c | ||
s3cmci.c | ||
s3cmci.h | ||
sdhci-pci.c | ||
sdhci.c | ||
sdhci.h | ||
sdricoh_cs.c | ||
tifm_sd.c | ||
tmio_mmc.c | ||
tmio_mmc.h | ||
wbsd.c | ||
wbsd.h |