Skip to content
  • Chris Boot's avatar
    spi: add driver for BCM2835 · f8043872
    Chris Boot authored
    The BCM2835 contains two forms of SPI master controller (one known
    simply as SPI0, and the other known as the "Universal SPI Master", in
    the auxilliary block) and one form of SPI slave controller. This patch
    adds support for the SPI0 controller.
    
    This driver is taken from Chris Boot's repository at
    git://github.com/bootc/linux.git rpi-linear
    as of commit 6de2905 "spi-bcm2708: fix printf with spurious %s".
    In the first SPI-related commit there, Chris wrote:
    
    Thanks to csoutreach / A Robinson for his driver which I used as an
    inspiration. You can find his version here:
    http://piface.openlx.org.uk/raspberry-pi-spi-kernel-driver-available-for
    
    
    
    Changes made during upstreaming:
    * Renamed bcm2708 to bcm2835 as per upstream naming for this SoC.
    * Removed support for brcm,realtime property.
    * Increased transfer timeout to 30 seconds.
    * Return IRQ_NONE from the IRQ handler if no interrupt was handled.
    * Disable TA (Transfer Active) and clear FIFOs on a transfer timeout.
    * Wrote device tree binding documentation.
    * Request unnamed clock rather than "sys_pclk"; the DT will provide the
      correct clock.
    * Assume that tfr->speed_hz and tfr->bits_per_word are always set in
      bcm2835_spi_start_transfer(), bcm2835_spi_transfer_one(), so no need
      to check spi->speed_hz or tft->bits_per_word.
    * Re-ordered probe() to remove the need for temporary variables.
    * Call clk_disable_unprepare() rather than just clk_unprepare() on probe()
      failure.
    * Don't use devm_request_irq(), to ensure that the IRQ doesn't fire after
      we've torn down the device, but not unhooked the IRQ.
    * Moved probe()'s call to clk_prepare_enable() so we can be sure the clock
      is enabled if the IRQ handler fires immediately.
    * Remove redundant checks from bcm2835_spi_check_transfer() and
      bcm2835_spi_setup().
    * Re-ordered IRQ handler to check for RXR before DONE. Added comments to
      ISR.
    * Removed empty prepare/unprepare implementations.
    * Removed use of devinit/devexit.
    * Added BCM2835_ prefix to defines.
    
    Signed-off-by: default avatarChris Boot <bootc@bootc.net>
    Signed-off-by: default avatarStephen Warren <swarren@wwwdotorg.org>
    Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
    f8043872