Loading drivers/spi/spi-s3c64xx.c +56 −96 Original line number Diff line number Diff line Loading @@ -879,18 +879,14 @@ static int s3c64xx_spi_prepare_message(struct spi_master *master, return 0; } static int s3c64xx_spi_transfer_one_message(struct spi_master *master, struct spi_message *msg) static int s3c64xx_spi_transfer_one(struct spi_master *master, struct spi_device *spi, struct spi_transfer *xfer) { struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); struct spi_device *spi = msg->spi; struct spi_transfer *xfer; int status = 0, cs_toggle = 0; int status; u32 speed; u8 bpw; list_for_each_entry(xfer, &msg->transfers, transfer_list) { unsigned long flags; int use_dma; Loading @@ -904,8 +900,7 @@ static int s3c64xx_spi_transfer_one_message(struct spi_master *master, dev_err(&spi->dev, "Xfer length(%u) not a multiple of word size(%u)\n", xfer->len, bpw / 8); status = -EIO; goto out; return -EIO; } if (bpw != sdd->cur_bpw || speed != sdd->cur_speed) { Loading @@ -914,9 +909,6 @@ static int s3c64xx_spi_transfer_one_message(struct spi_master *master, s3c64xx_spi_config(sdd); } /* Slave Select */ enable_cs(sdd, spi); /* Polling method for xfers not bigger than FIFO capacity */ use_dma = 0; if (!is_polling(sdd) && Loading Loading @@ -957,43 +949,11 @@ static int s3c64xx_spi_transfer_one_message(struct spi_master *master, && (sdd->state & RXBUSY)) s3c64xx_spi_dma_stop(sdd, &sdd->rx_dma); } goto out; } flush_fifo(sdd); if (xfer->delay_usecs) udelay(xfer->delay_usecs); if (xfer->cs_change) { /* Hint that the next mssg is gonna be for the same device */ if (list_is_last(&xfer->transfer_list, &msg->transfers)) cs_toggle = 1; } msg->actual_length += xfer->len; } out: if (!cs_toggle || status) { /* Quiese the signals */ writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd->regs + S3C64XX_SPI_SLAVE_SEL); disable_cs(sdd, spi); } else { sdd->tgl_spi = spi; flush_fifo(sdd); } s3c64xx_spi_unmap_mssg(sdd, msg); msg->status = status; spi_finalize_current_message(master); return 0; return status; } static int s3c64xx_spi_unprepare_message(struct spi_master *master, Loading Loading @@ -1379,7 +1339,7 @@ static int s3c64xx_spi_probe(struct platform_device *pdev) master->cleanup = s3c64xx_spi_cleanup; master->prepare_transfer_hardware = s3c64xx_spi_prepare_transfer; master->prepare_message = s3c64xx_spi_prepare_message; master->transfer_one_message = s3c64xx_spi_transfer_one_message; master->transfer_one = s3c64xx_spi_transfer_one; master->unprepare_message = s3c64xx_spi_unprepare_message; master->unprepare_transfer_hardware = s3c64xx_spi_unprepare_transfer; master->num_chipselect = sci->num_cs; Loading Loading
drivers/spi/spi-s3c64xx.c +56 −96 Original line number Diff line number Diff line Loading @@ -879,18 +879,14 @@ static int s3c64xx_spi_prepare_message(struct spi_master *master, return 0; } static int s3c64xx_spi_transfer_one_message(struct spi_master *master, struct spi_message *msg) static int s3c64xx_spi_transfer_one(struct spi_master *master, struct spi_device *spi, struct spi_transfer *xfer) { struct s3c64xx_spi_driver_data *sdd = spi_master_get_devdata(master); struct spi_device *spi = msg->spi; struct spi_transfer *xfer; int status = 0, cs_toggle = 0; int status; u32 speed; u8 bpw; list_for_each_entry(xfer, &msg->transfers, transfer_list) { unsigned long flags; int use_dma; Loading @@ -904,8 +900,7 @@ static int s3c64xx_spi_transfer_one_message(struct spi_master *master, dev_err(&spi->dev, "Xfer length(%u) not a multiple of word size(%u)\n", xfer->len, bpw / 8); status = -EIO; goto out; return -EIO; } if (bpw != sdd->cur_bpw || speed != sdd->cur_speed) { Loading @@ -914,9 +909,6 @@ static int s3c64xx_spi_transfer_one_message(struct spi_master *master, s3c64xx_spi_config(sdd); } /* Slave Select */ enable_cs(sdd, spi); /* Polling method for xfers not bigger than FIFO capacity */ use_dma = 0; if (!is_polling(sdd) && Loading Loading @@ -957,43 +949,11 @@ static int s3c64xx_spi_transfer_one_message(struct spi_master *master, && (sdd->state & RXBUSY)) s3c64xx_spi_dma_stop(sdd, &sdd->rx_dma); } goto out; } flush_fifo(sdd); if (xfer->delay_usecs) udelay(xfer->delay_usecs); if (xfer->cs_change) { /* Hint that the next mssg is gonna be for the same device */ if (list_is_last(&xfer->transfer_list, &msg->transfers)) cs_toggle = 1; } msg->actual_length += xfer->len; } out: if (!cs_toggle || status) { /* Quiese the signals */ writel(S3C64XX_SPI_SLAVE_SIG_INACT, sdd->regs + S3C64XX_SPI_SLAVE_SEL); disable_cs(sdd, spi); } else { sdd->tgl_spi = spi; flush_fifo(sdd); } s3c64xx_spi_unmap_mssg(sdd, msg); msg->status = status; spi_finalize_current_message(master); return 0; return status; } static int s3c64xx_spi_unprepare_message(struct spi_master *master, Loading Loading @@ -1379,7 +1339,7 @@ static int s3c64xx_spi_probe(struct platform_device *pdev) master->cleanup = s3c64xx_spi_cleanup; master->prepare_transfer_hardware = s3c64xx_spi_prepare_transfer; master->prepare_message = s3c64xx_spi_prepare_message; master->transfer_one_message = s3c64xx_spi_transfer_one_message; master->transfer_one = s3c64xx_spi_transfer_one; master->unprepare_message = s3c64xx_spi_unprepare_message; master->unprepare_transfer_hardware = s3c64xx_spi_unprepare_transfer; master->num_chipselect = sci->num_cs; Loading