• David Brownell's avatar
    spi_gpio driver · d29389de
    David Brownell authored
    Generalize the old at91rm9200 "bootstrap" bitbanging SPI master driver as
    "spi_gpio", so it works with arbitrary GPIOs and can be configured through
    platform_data.  Such SPI masters support:
    
     - any number of bus instances (bus_num is the platform_device.id)
     - any number of chipselects (one GPIO per spi_device)
     - all four SPI_MODE values, and SPI_CS_HIGH
     - i/o word sizes from 1 to 32 bits;
     - devices configured as with any other spi_master controller
    
    When configured using platform_data, this provides relatively low clock
    rates.  On platforms that support inlined GPIO calls, significantly
    improved transfer speeds are also possible with a semi-custom driver.
    (It's still painful when accessing flash memory, but less so.)
    
    Sanity checked by using this version to replace both native controllers on
    a board with six different SPI slaves, relying on three different
    SPI_MODE_* values and both SPI_CS_HIGH settings for correct operation.
    
    [akpm@linux-foundation.org: cleanups]
    Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
    Acked-by: default avatarMagnus Damm <damm@igel.co.jp>
    Tested-by: default avatarMagnus Damm <damm@igel.co.jp>
    Cc: Torgil Svensson <torgil.svensson@gmail.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    d29389de
spi_gpio.c 9.75 KB