Hi Leela, On Thu, Oct 10, 2013 at 5:36 PM, Leela Krishna Amudala <leelakrishna.a@xxxxxxxxx> wrote: > Hi Rajeshwari, > > On Thu, Oct 10, 2013 at 4:11 PM, Rajeshwari S Shinde > <rajeshwari.s@xxxxxxxxxxx> wrote: >> This patch enables word transfer for s3c64xx spi driver. >> User can set bits_per_word to 32 before calling spi_setup, >> which would enable the word transfer mode. >> >> Signed-off-by: Rajeshwari S Shinde <rajeshwari.s@xxxxxxxxxxx> >> --- >> Chnages in V2: >> - Reduced the call for s3c64xx_spi_config >> drivers/spi/spi-s3c64xx.c | 24 +++++++++++++++++------- >> 1 file changed, 17 insertions(+), 7 deletions(-) >> >> diff --git a/drivers/spi/spi-s3c64xx.c b/drivers/spi/spi-s3c64xx.c >> index 512b889..d1b0a2b 100644 >> --- a/drivers/spi/spi-s3c64xx.c >> +++ b/drivers/spi/spi-s3c64xx.c >> @@ -498,6 +498,17 @@ static void enable_datapath(struct s3c64xx_spi_driver_data *sdd, >> chcfg = readl(regs + S3C64XX_SPI_CH_CFG); >> chcfg &= ~S3C64XX_SPI_CH_TXCH_ON; >> >> + if(sdd->cur_bpw == 32) { >> + /* For word transfer we need to swap bytes */ >> + u32 swapcfg = (S3C64XX_SPI_SWAP_TX_EN | S3C64XX_SPI_SWAP_TX_BYTE | >> + S3C64XX_SPI_SWAP_TX_HALF_WORD | >> + S3C64XX_SPI_SWAP_RX_EN | >> + S3C64XX_SPI_SWAP_RX_BYTE | >> + S3C64XX_SPI_SWAP_RX_HALF_WORD); >> + writel(swapcfg, regs + S3C64XX_SPI_SWAP_CFG); > > In s3c64xx_spi_probe() function > sdd->cur_bpw is hard coded to 8 By default sdd->cur_bpw is set to 8 bits transfer. > > is there any provision somehow to configure cur_bpw to 32 ? The user can set bits_per_word to 32 later as per his requirement. > > wouldn't 16 bits per word transfers also need swapping? This patch is tested for Word transfer. > > Best Wishes, > Leela Krishna. > >> + } else >> + writel(0, regs + S3C64XX_SPI_SWAP_CFG); >> + >> if (dma_mode) { >> chcfg &= ~S3C64XX_SPI_CH_RXCH_ON; >> } else { >> @@ -905,13 +916,12 @@ static int s3c64xx_spi_transfer_one_message(struct spi_master *master, >> bpw = xfer->bits_per_word; >> speed = xfer->speed_hz ? : spi->max_speed_hz; >> >> - if (xfer->len % (bpw / 8)) { >> - dev_err(&spi->dev, >> - "Xfer length(%u) not a multiple of word size(%u)\n", >> - xfer->len, bpw / 8); >> - status = -EIO; >> - goto out; >> - } >> + /* >> + * Enable byte tranfer if transfer length not a multiple of >> + * word size >> + */ >> + if (xfer->len % (bpw / 8)) >> + bpw = 8; >> >> if (bpw != sdd->cur_bpw || speed != sdd->cur_speed) { >> sdd->cur_bpw = bpw; >> -- >> 1.7.12.4 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in >> the body of a message to majordomo@xxxxxxxxxxxxxxx >> More majordomo info at http://vger.kernel.org/majordomo-info.html > -- > To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in > the body of a message to majordomo@xxxxxxxxxxxxxxx > More majordomo info at http://vger.kernel.org/majordomo-info.html -- Regards, Rajeshwari Shinde -- To unsubscribe from this list: send the line "unsubscribe linux-samsung-soc" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html