Commit 7f8c7619 authored by Hans-Peter Nilsson's avatar Hans-Peter Nilsson Committed by Linus Torvalds

[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: default avatarHans-Peter Nilsson <hp@axis.com>
Signed-off-by: default avatarDavid Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent ddc1e975
...@@ -210,7 +210,7 @@ int spi_bitbang_setup(struct spi_device *spi) ...@@ -210,7 +210,7 @@ int spi_bitbang_setup(struct spi_device *spi)
if (!cs->txrx_word) if (!cs->txrx_word)
return -EINVAL; return -EINVAL;
retval = spi_bitbang_setup_transfer(spi, NULL); retval = bitbang->setup_transfer(spi, NULL);
if (retval < 0) if (retval < 0)
return retval; return retval;
...@@ -442,9 +442,10 @@ EXPORT_SYMBOL_GPL(spi_bitbang_transfer); ...@@ -442,9 +442,10 @@ EXPORT_SYMBOL_GPL(spi_bitbang_transfer);
* hardware that basically exposes a shift register) or per-spi_transfer * hardware that basically exposes a shift register) or per-spi_transfer
* (which takes better advantage of hardware like fifos or DMA engines). * (which takes better advantage of hardware like fifos or DMA engines).
* *
* Drivers using per-word I/O loops should use (or call) spi_bitbang_setup and * Drivers using per-word I/O loops should use (or call) spi_bitbang_setup,
* spi_bitbang_cleanup to handle those spi master methods. Those methods are * spi_bitbang_cleanup and spi_bitbang_setup_transfer to handle those spi
* the defaults if the bitbang->txrx_bufs routine isn't initialized. * master methods. Those methods are the defaults if the bitbang->txrx_bufs
* routine isn't initialized.
* *
* This routine registers the spi_master, which will process requests in a * This routine registers the spi_master, which will process requests in a
* dedicated task, keeping IRQs unblocked most of the time. To stop * dedicated task, keeping IRQs unblocked most of the time. To stop
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment