Skip to content
  • Haavard Skinnemoen's avatar
    atmel-mci: support multiple mmc slots · 965ebf33
    Haavard Skinnemoen authored
    
    
    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: default avatarHaavard Skinnemoen <haavard.skinnemoen@atmel.com>
    965ebf33