spi: move common spi_setup() functionality into core
Subsystems (5)
PATCH 1/2 spi: move common spi_setup() functionality into core
From: David Brownell <[email protected]>
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.
--- drivers/spi/atmel_spi.c | 2 - drivers/spi/au1550_spi.c | 2 - drivers/spi/omap2_mcspi.c | 4 --- drivers/spi/omap_uwire.c | 2 - drivers/spi/orion_spi.c | 3 -- drivers/spi/pxa2xx_spi.c | 11 +------- drivers/spi/spi.c | 55 +++++++++++++++++++++++++++++++++++++++++++- drivers/spi/spi_bfin5xx.c | 4 --- drivers/spi/spi_bitbang.c | 7 ----- drivers/spi/spi_imx.c | 5 ---- drivers/spi/spi_mpc83xx.c | 6 ---- drivers/spi/spi_s3c24xx.c | 7 ----- drivers/spi/spi_txx9.c | 2 - drivers/spi/xilinx_spi.c | 6 ---- include/linux/spi/spi.h | 25 -------------------- 15 files changed, 61 insertions(+), 80 deletions(-)
drivers/spi/atmel_spi.c +0 -2
@@ -555,8 +555,6 @@ static int atmel_spi_setup(struct spi_dereturn -EINVAL ; } -if (bits ==0 ) - bits =8 ;if (bits <8 || bits >16 ) { dev_dbg(&spi->dev, "setup: invalid bits_per_word %u (8 to 16)\n",
drivers/spi/au1550_spi.c +0 -2
@@ -291,8 +291,6 @@ static int au1550_spi_setup(struct spi_d {struct au1550_spi *hw =spi_master_get_devdata (spi->master); -if (spi->bits_per_word ==0 ) - spi->bits_per_word =8 ;if (spi->bits_per_word <4 || spi->bits_per_word >24 ) {dev_err (&spi->dev,"setup: invalid bits_per_word=%d\n" , spi->bits_per_word);
drivers/spi/omap2_mcspi.c +1 -3
@@ -619,9 +619,7 @@ static int omap2_mcspi_setup(struct spi_return -EINVAL ; } -if (spi->bits_per_word ==0 ) - spi->bits_per_word =8 ; -else if (spi->bits_per_word <4 || spi->bits_per_word >32 ) { +if (spi->bits_per_word <4 || spi->bits_per_word >32 ) {dev_dbg (&spi->dev,"setup: unsupported %d bit words\n" , spi->bits_per_word);return -EINVAL ;
drivers/spi/omap_uwire.c +0 -2
@@ -339,8 +339,6 @@ static int uwire_setup_transfer(struct s bits = spi->bits_per_word;if (t !=NULL && t->bits_per_word) bits = t->bits_per_word; -if (!bits) - bits =8 ;if (bits >16 ) {pr_debug ("%s: wordsize %d?\n" ,dev_name (&spi->dev), bits);
drivers/spi/orion_spi.c +0 -3
@@ -369,9 +369,6 @@ static int orion_spi_setup(struct spi_deorion_spi_setbits (orion_spi,ORION_SPI_IF_CONFIG_REG , (1 <<14 )); -if (spi->bits_per_word ==0 ) - spi->bits_per_word =8 ; -if ((spi->max_speed_hz ==0 ) || (spi->max_speed_hz > orion_spi->max_speed)) spi->max_speed_hz = orion_spi->max_speed;
drivers/spi/pxa2xx_spi.c +2 -9
@@ -1236,9 +1236,6 @@ static int setup(struct spi_device *spi)uint tx_thres =TX_THRESH_DFLT ;uint rx_thres =RX_THRESH_DFLT ; -if (!spi->bits_per_word) - spi->bits_per_word =8 ; -if (drv_data->ssp_type != PXA25x_SSP && (spi->bits_per_word <4 || spi->bits_per_word >32 )) { dev_err(&spi->dev, "failed setup: ssp_type=%d, bits/wrd=%d "
@@ -1328,18 +1325,14 @@ static int setup(struct spi_device *spi)/* NOTE: PXA25x_SSP _could_ use external clocking ... */ if (drv_data->ssp_type != PXA25x_SSP) -dev_dbg (&spi->dev,"%d bits/word, %ld Hz, mode %d, %s\n" , - spi->bits_per_word, +dev_dbg (&spi->dev,"%ld Hz actual, %s\n" ,clk_get_rate (ssp->clk) / (1 + ((chip->cr0 &SSCR0_SCR ) >>8 )), - spi->mode &0x3 , chip->enable_dma ?"DMA" :"PIO" );else -dev_dbg (&spi->dev,"%d bits/word, %ld Hz, mode %d, %s\n" , - spi->bits_per_word, +dev_dbg (&spi->dev,"%ld Hz actual, %s\n" ,clk_get_rate (ssp->clk) /2 / (1 + ((chip->cr0 &SSCR0_SCR ) >>8 )), - spi->mode &0x3 , chip->enable_dma ?"DMA" :"PIO" );if (spi->bits_per_word <=8 ) {
drivers/spi/spi.c +54 -1
67 lines not on this page · raw message
drivers/spi/spi_bfin5xx.c +0 -4
@@ -1016,10 +1016,6 @@ static int bfin_spi_setup(struct spi_devreturn -EINVAL ; } -/* Zero (the default) here means 8 bits */ -if (!spi->bits_per_word) - spi->bits_per_word =8 ; -if (spi->bits_per_word !=8 && spi->bits_per_word !=16 )return -EINVAL ;
drivers/spi/spi_bitbang.c +1 -6
@@ -201,9 +201,6 @@ int spi_bitbang_setup(struct spi_device spi->controller_state = cs; } -if (!spi->bits_per_word) - spi->bits_per_word =8 ; -/* per-word shift register access, in hardware or bitbanging */ cs->txrx_word = bitbang->txrx_word[spi->mode & (SPI_CPOL |SPI_CPHA )];if (!cs->txrx_word)
@@ -213,9 +210,7 @@ int spi_bitbang_setup(struct spi_deviceif (retval <0 )return retval; -dev_dbg (&spi->dev,"%s, mode %d, %u bits/w, %u nsec/bit\n" , - __func__, spi->mode & (SPI_CPOL |SPI_CPHA ), - spi->bits_per_word,2 * cs->nsecs); +dev_dbg (&spi->dev,"%s, %u nsec/bit\n" , __func__,2 * cs->nsecs);/* NOTE we _need_ to call chipselect() early, ideally with adapter * setup, unless the hardware defaults cooperate to avoid confusion
drivers/spi/spi_imx.c +1 -4
@@ -1286,10 +1286,7 @@ static int setup(struct spi_device *spi)/* SPI word width */ tmp = spi->bits_per_word; -if (tmp ==0 ) { - tmp =8 ; - spi->bits_per_word =8 ; - }else if (tmp >16 ) { +if (tmp >16 ) { status = -EINVAL ;dev_err (&spi->dev, "setup - "
drivers/spi/spi_mpc83xx.c +0 -6
@@ -447,9 +447,6 @@ static int mpc83xx_spi_setup(struct spi_ } mpc83xx_spi =spi_master_get_devdata (spi->master); -if (!spi->bits_per_word) - spi->bits_per_word =8 ; - hw_mode = cs->hw_mode;/* Save orginal settings */ cs->hw_mode =mpc83xx_spi_read_reg (&mpc83xx_spi->base->mode);/* mask out bits we are going to set */
@@ -471,9 +468,6 @@ static int mpc83xx_spi_setup(struct spi_return retval; } -dev_dbg (&spi->dev,"%s, mode %d, %u bits/w, %u Hz\n" , - __func__, spi->mode & (SPI_CPOL |SPI_CPHA ), - spi->bits_per_word, spi->max_speed_hz);#if 0 /* Don't think this is needed */ /* NOTE we _need_ to call chipselect() early, ideally with adapter * setup, unless the hardware defaults cooperate to avoid confusion
drivers/spi/spi_s3c24xx.c +0 -7
@@ -153,9 +153,6 @@ static int s3c24xx_spi_setup(struct spi_ {int ret; -if (!spi->bits_per_word) - spi->bits_per_word =8 ; -if (spi->mode & ~MODEBITS ) {dev_dbg (&spi->dev,"setup: unsupported mode bits %x\n" , spi->mode & ~MODEBITS );
@@ -168,10 +165,6 @@ static int s3c24xx_spi_setup(struct spi_return ret; } -dev_dbg (&spi->dev,"%s: mode %d, %u bpw, %d hz\n" , - __func__, spi->mode, spi->bits_per_word, - spi->max_speed_hz); -return 0 ; }
drivers/spi/spi_txx9.c +1 -1
@@ -126,7 +126,7 @@ static int txx9spi_setup(struct spi_devi || spi->max_speed_hz < c->min_speed_hz)return -EINVAL ; - bits_per_word = spi->bits_per_word ? :8 ; + bits_per_word = spi->bits_per_word;if (bits_per_word !=8 && bits_per_word !=16 )return -EINVAL ;
drivers/spi/xilinx_spi.c +0 -6
@@ -170,9 +170,6 @@ static int xilinx_spi_setup(struct spi_d xspi =spi_master_get_devdata (spi->master); bitbang = &xspi->bitbang; -if (!spi->bits_per_word) - spi->bits_per_word =8 ; -if (spi->mode & ~MODEBITS ) {dev_err (&spi->dev,"%s, unsupported mode bits %x\n" , __func__, spi->mode & ~MODEBITS );
@@ -183,9 +180,6 @@ static int xilinx_spi_setup(struct spi_dif (retval <0 )return retval; -dev_dbg (&spi->dev,"%s, mode %d, %u bits/w, %u nsec/bit\n" , - __func__, spi->mode &MODEBITS , spi->bits_per_word,0 ); -return 0 ; }
include/linux/spi/spi.h +1 -24
@@ -523,30 +523,7 @@ static inline void spi_message_free(strukfree (m); } -/** -* 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. -*/ -static inline int -spi_setup (struct spi_device *spi) -{ -return spi->master->setup (spi); -} - +extern int spi_setup (struct spi_device *spi);/** * spi_async - asynchronous SPI transfer
------------------------------------------------------------------------------
Stay on top of everything new and different, both inside and around Java (TM) technology - register by April 22, and save $200 on the JavaOne (SM) conference, June 2-5, 2009, San Francisco. 300 plus technical and hands-on sessions. Register today. Use priority code J9JMT32. http://p.sf.net/sfu/p