spi: move common spi_setup() functionality into core
Start moving some spi_setup() functionality into the SPI core from the various spi_master controller drivers: - Make that function stop being an inline; - Move two common idioms from drivers into that new function: * Default bits_per_word to 8 if that field isn't set * Issue a standardized dev_dbg() message This is a net minor source code shrink, and supports enhancments found in some follow-up patches. 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>
This commit is contained in:

committed by
Linus Torvalds

parent
b4bd2ababd
commit
7d0771970c
@@ -265,7 +265,7 @@ int spi_add_device(struct spi_device *spi)
|
||||
* normally rely on the device being setup. Devices
|
||||
* using SPI_CS_HIGH can't coexist well otherwise...
|
||||
*/
|
||||
status = spi->master->setup(spi);
|
||||
status = spi_setup(spi);
|
||||
if (status < 0) {
|
||||
dev_err(dev, "can't %s %s, status %d\n",
|
||||
"setup", dev_name(&spi->dev), status);
|
||||
@@ -583,6 +583,59 @@ EXPORT_SYMBOL_GPL(spi_busnum_to_master);
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* Core methods for SPI master protocol drivers. Some of the
|
||||
* other core methods are currently defined as inline functions.
|
||||
*/
|
||||
|
||||
/**
|
||||
* spi_setup - setup SPI mode and clock rate
|
||||
* @spi: the device whose settings are being modified
|
||||
* Context: can sleep, and no requests are queued to the device
|
||||
*
|
||||
* SPI protocol drivers may need to update the transfer mode if the
|
||||
* device doesn't work with its default. They may likewise need
|
||||
* to update clock rates or word sizes from initial values. This function
|
||||
* changes those settings, and must be called from a context that can sleep.
|
||||
* Except for SPI_CS_HIGH, which takes effect immediately, the changes take
|
||||
* effect the next time the device is selected and data is transferred to
|
||||
* or from it. When this function returns, the spi device is deselected.
|
||||
*
|
||||
* Note that this call will fail if the protocol driver specifies an option
|
||||
* that the underlying controller or its driver does not support. For
|
||||
* example, not all hardware supports wire transfers using nine bit words,
|
||||
* LSB-first wire encoding, or active-high chipselects.
|
||||
*/
|
||||
int spi_setup(struct spi_device *spi)
|
||||
{
|
||||
int status;
|
||||
|
||||
if (!spi->bits_per_word)
|
||||
spi->bits_per_word = 8;
|
||||
|
||||
status = spi->master->setup(spi);
|
||||
|
||||
dev_dbg(&spi->dev, "setup mode %d, %s%s%s%s"
|
||||
"%u bits/w, %u Hz max --> %d\n",
|
||||
(int) (spi->mode & (SPI_CPOL | SPI_CPHA)),
|
||||
(spi->mode & SPI_CS_HIGH) ? "cs_high, " : "",
|
||||
(spi->mode & SPI_LSB_FIRST) ? "lsb, " : "",
|
||||
(spi->mode & SPI_3WIRE) ? "3wire, " : "",
|
||||
(spi->mode & SPI_LOOP) ? "loopback, " : "",
|
||||
spi->bits_per_word, spi->max_speed_hz,
|
||||
status);
|
||||
|
||||
return status;
|
||||
}
|
||||
EXPORT_SYMBOL_GPL(spi_setup);
|
||||
|
||||
|
||||
/*-------------------------------------------------------------------------*/
|
||||
|
||||
/* Utility methods for SPI master protocol drivers, layered on
|
||||
* top of the core. Some other utility methods are defined as
|
||||
* inline functions.
|
||||
*/
|
||||
|
||||
static void spi_complete(void *arg)
|
||||
{
|
||||
complete(arg);
|
||||
|
Reference in New Issue
Block a user