diff options
author | Hans-Peter Nilsson <hans-peter.nilsson@axis.com> | 2007-02-12 03:52:44 -0500 |
---|---|---|
committer | Linus Torvalds <torvalds@woody.linux-foundation.org> | 2007-02-12 12:48:31 -0500 |
commit | 7f8c7619ea1ff5ab8e0b08c8120d629834ef4253 (patch) | |
tree | 722c72263bb4259bc787b8236673e727182dac98 | |
parent | ddc1e9753106cedcca7944d2b068baa2e14640b1 (diff) |
[PATCH] spi_bitbang(): use overridable setup_transfer() method
A small bug-fix for spi_bitbang: it must always call the setup_transfer
function via the overridable pointer, not assume that its
spi_bitbang_setup_transfer is sufficient. Otherwise, if all options in the
transfers are default (0), the overrided function will never be called.
Granted, the function replacing it must call spi_bitbang_setup_transfer,
but it might also have other important things to do, even if the second
argument (the spi_transfer) is NULL. Tested together with the other
patches on the spi_crisv32_sser and spi_crisv32_gpio drivers (not yet in
the kernel, will IIUC be submitted as part of the usual
arch-maintainer-pushes).
Signed-off-by: Hans-Peter Nilsson <hp@axis.com>
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
-rw-r--r-- | drivers/spi/spi_bitbang.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/drivers/spi/spi_bitbang.c b/drivers/spi/spi_bitbang.c index 57289b61d0be..a5dadc74cee6 100644 --- a/drivers/spi/spi_bitbang.c +++ b/drivers/spi/spi_bitbang.c | |||
@@ -210,7 +210,7 @@ int spi_bitbang_setup(struct spi_device *spi) | |||
210 | if (!cs->txrx_word) | 210 | if (!cs->txrx_word) |
211 | return -EINVAL; | 211 | return -EINVAL; |
212 | 212 | ||
213 | retval = spi_bitbang_setup_transfer(spi, NULL); | 213 | retval = bitbang->setup_transfer(spi, NULL); |
214 | if (retval < 0) | 214 | if (retval < 0) |
215 | return retval; | 215 | return retval; |
216 | 216 | ||
@@ -442,9 +442,10 @@ EXPORT_SYMBOL_GPL(spi_bitbang_transfer); | |||
442 | * hardware that basically exposes a shift register) or per-spi_transfer | 442 | * hardware that basically exposes a shift register) or per-spi_transfer |
443 | * (which takes better advantage of hardware like fifos or DMA engines). | 443 | * (which takes better advantage of hardware like fifos or DMA engines). |
444 | * | 444 | * |
445 | * Drivers using per-word I/O loops should use (or call) spi_bitbang_setup and | 445 | * Drivers using per-word I/O loops should use (or call) spi_bitbang_setup, |
446 | * spi_bitbang_cleanup to handle those spi master methods. Those methods are | 446 | * spi_bitbang_cleanup and spi_bitbang_setup_transfer to handle those spi |
447 | * the defaults if the bitbang->txrx_bufs routine isn't initialized. | 447 | * master methods. Those methods are the defaults if the bitbang->txrx_bufs |
448 | * routine isn't initialized. | ||
448 | * | 449 | * |
449 | * This routine registers the spi_master, which will process requests in a | 450 | * This routine registers the spi_master, which will process requests in a |
450 | * dedicated task, keeping IRQs unblocked most of the time. To stop | 451 | * dedicated task, keeping IRQs unblocked most of the time. To stop |