Hi Feng, On Wed, Sep 01, 2010 at 01:35:59PM +0800, Feng Tang wrote: > commit 052dc7c45 introduced cs_control code,
Be friendly to mere-mortals. You should quote the patch title "spi/dw_spi: conditional transfer mode changes" in addition to the sha1 id. > which has a bug in setting > transfer mode, It would be helpful if you explained what the bug is. > also it forces devices who don't need cs_control to > re-configured the control registers. This patch will fix them > > Signed-off-by: Feng Tang <[email protected]> > Cc: David Brownell <[email protected]> > Cc: Grant Likely <[email protected]> > Cc: George Shore <[email protected]> > --- > drivers/spi/dw_spi.c | 17 +++++------------ > include/linux/spi/dw_spi.h | 3 +++ > 2 files changed, 8 insertions(+), 12 deletions(-) > > diff --git a/drivers/spi/dw_spi.c b/drivers/spi/dw_spi.c > index d256cb0..4b75a81 100644 > --- a/drivers/spi/dw_spi.c > +++ b/drivers/spi/dw_spi.c > @@ -181,10 +181,6 @@ static void flush(struct dw_spi *dws) > wait_till_not_busy(dws); > } > > -static void null_cs_control(u32 command) > -{ > -} > - > static int null_writer(struct dw_spi *dws) > { > u8 n_bytes = dws->n_bytes; > @@ -322,7 +318,7 @@ static void giveback(struct dw_spi *dws) > struct spi_transfer, > transfer_list); > > - if (!last_transfer->cs_change) > + if (!last_transfer->cs_change && dws->cs_control) > dws->cs_control(MRST_SPI_DEASSERT); > > msg->state = NULL; > @@ -544,13 +540,13 @@ static void pump_transfers(unsigned long data) > */ > if (dws->cs_control) { > if (dws->rx && dws->tx) > - chip->tmode = 0x00; > + chip->tmode = SPI_TMOD_TR; > else if (dws->rx) > - chip->tmode = 0x02; > + chip->tmode = SPI_TMOD_RO; > else > - chip->tmode = 0x01; > + chip->tmode = SPI_TMOD_TO; > > - cr0 &= ~(0x3 << SPI_MODE_OFFSET); > + cr0 &= ~SPI_TMOD_MASK; > cr0 |= (chip->tmode << SPI_TMOD_OFFSET); Changing these values isn't mentioned in the patch description. I assume this is not the bug fix because the #defines are the same values. > } > > @@ -699,9 +695,6 @@ static int dw_spi_setup(struct spi_device *spi) > chip = kzalloc(sizeof(struct chip_data), GFP_KERNEL); > if (!chip) > return -ENOMEM; > - > - chip->cs_control = null_cs_control; > - chip->enable_dma = 0; > } > > /* > diff --git a/include/linux/spi/dw_spi.h b/include/linux/spi/dw_spi.h > index cc813f9..cc9ded3 100644 > --- a/include/linux/spi/dw_spi.h > +++ b/include/linux/spi/dw_spi.h > @@ -12,9 +12,12 @@ > #define SPI_FRF_RESV 0x3 > > #define SPI_MODE_OFFSET 6 > +#define SPI_MODE_MASK (0x3 << SPI_MODE_OFFSET) SPI_MODE_MASK is unused. > #define SPI_SCPH_OFFSET 6 > #define SPI_SCOL_OFFSET 7 > + > #define SPI_TMOD_OFFSET 8 > +#define SPI_TMOD_MASK (0x3 << SPI_TMOD_OFFSET) > #define SPI_TMOD_TR 0x0 /* xmit & recv > */ > #define SPI_TMOD_TO 0x1 /* xmit only */ > #define SPI_TMOD_RO 0x2 /* recv only */ > -- > 1.7.0.4 > ------------------------------------------------------------------------------ This SF.net Dev2Dev email is sponsored by: Show off your parallel programming skills. Enter the Intel(R) Threading Challenge 2010. http://p.sf.net/sfu/intel-thread-sfd _______________________________________________ spi-devel-general mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/spi-devel-general
