diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2009-01-06 17:41:41 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-06 18:59:19 -0500 |
commit | d29389de0b0ee1715333bafc6ac3f22a75aa4313 (patch) | |
tree | 6c4321359bd10231532d6cb2141f06070d8ddfd6 /drivers/spi/Kconfig | |
parent | c2bacfc44f4b8d03dbaad5d2dca2fb4161e81975 (diff) |
spi_gpio driver
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: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Magnus Damm <damm@igel.co.jp>
Tested-by: Magnus Damm <damm@igel.co.jp>
Cc: Torgil Svensson <torgil.svensson@gmail.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/spi/Kconfig')
-rw-r--r-- | drivers/spi/Kconfig | 18 |
1 files changed, 17 insertions, 1 deletions
diff --git a/drivers/spi/Kconfig b/drivers/spi/Kconfig index b9d0efb6803f..4a6fe01831a8 100644 --- a/drivers/spi/Kconfig +++ b/drivers/spi/Kconfig | |||
@@ -78,7 +78,7 @@ config SPI_AU1550 | |||
78 | will be called au1550_spi. | 78 | will be called au1550_spi. |
79 | 79 | ||
80 | config SPI_BITBANG | 80 | config SPI_BITBANG |
81 | tristate "Bitbanging SPI master" | 81 | tristate "Utilities for Bitbanging SPI masters" |
82 | help | 82 | help |
83 | With a few GPIO pins, your system can bitbang the SPI protocol. | 83 | With a few GPIO pins, your system can bitbang the SPI protocol. |
84 | Select this to get SPI support through I/O pins (GPIO, parallel | 84 | Select this to get SPI support through I/O pins (GPIO, parallel |
@@ -100,6 +100,22 @@ config SPI_BUTTERFLY | |||
100 | inexpensive battery powered microcontroller evaluation board. | 100 | inexpensive battery powered microcontroller evaluation board. |
101 | This same cable can be used to flash new firmware. | 101 | This same cable can be used to flash new firmware. |
102 | 102 | ||
103 | config SPI_GPIO | ||
104 | tristate "GPIO-based bitbanging SPI Master" | ||
105 | depends on GENERIC_GPIO | ||
106 | select SPI_BITBANG | ||
107 | help | ||
108 | This simple GPIO bitbanging SPI master uses the arch-neutral GPIO | ||
109 | interface to manage MOSI, MISO, SCK, and chipselect signals. SPI | ||
110 | slaves connected to a bus using this driver are configured as usual, | ||
111 | except that the spi_board_info.controller_data holds the GPIO number | ||
112 | for the chipselect used by this controller driver. | ||
113 | |||
114 | Note that this driver often won't achieve even 1 Mbit/sec speeds, | ||
115 | making it unusually slow for SPI. If your platform can inline | ||
116 | GPIO operations, you should be able to leverage that for better | ||
117 | speed with a custom version of this driver; see the source code. | ||
118 | |||
103 | config SPI_IMX | 119 | config SPI_IMX |
104 | tristate "Freescale iMX SPI controller" | 120 | tristate "Freescale iMX SPI controller" |
105 | depends on ARCH_IMX && EXPERIMENTAL | 121 | depends on ARCH_IMX && EXPERIMENTAL |