diff options
author | Geert Uytterhoeven <geert+renesas@linux-m68k.org> | 2014-01-24 03:43:55 -0500 |
---|---|---|
committer | Mark Brown <broonie@linaro.org> | 2014-01-27 15:02:09 -0500 |
commit | eb557f75269e82dd26a79be536eca223ddc3eaf7 (patch) | |
tree | 1e5569eb5e3de693aad437009755a583c91301ff | |
parent | 35301c996046243ca6e41d490dea2823f045614c (diff) |
spi: rspi: Abstract transfer_one() for RSPI and QSPI
Split off qspi_transfer_one() (which doesn't support DMA yet) from
rspi_transfer_one().
Replace the abstraction of send_pio()/receive_pio() by the abstracrion of
transfer_one().
Signed-off-by: Geert Uytterhoeven <geert+renesas@linux-m68k.org>
Signed-off-by: Mark Brown <broonie@linaro.org>
-rw-r--r-- | drivers/spi/spi-rspi.c | 36 |
1 files changed, 23 insertions, 13 deletions
diff --git a/drivers/spi/spi-rspi.c b/drivers/spi/spi-rspi.c index 4b27513e7204..d837c5029308 100644 --- a/drivers/spi/spi-rspi.c +++ b/drivers/spi/spi-rspi.c | |||
@@ -239,8 +239,8 @@ static u16 rspi_read_data(const struct rspi_data *rspi) | |||
239 | /* optional functions */ | 239 | /* optional functions */ |
240 | struct spi_ops { | 240 | struct spi_ops { |
241 | int (*set_config_register)(struct rspi_data *rspi, int access_size); | 241 | int (*set_config_register)(struct rspi_data *rspi, int access_size); |
242 | int (*send_pio)(struct rspi_data *rspi, struct spi_transfer *t); | 242 | int (*transfer_one)(struct spi_master *master, struct spi_device *spi, |
243 | int (*receive_pio)(struct rspi_data *rspi, struct spi_transfer *t); | 243 | struct spi_transfer *xfer); |
244 | }; | 244 | }; |
245 | 245 | ||
246 | /* | 246 | /* |
@@ -432,8 +432,6 @@ static int qspi_send_pio(struct rspi_data *rspi, struct spi_transfer *t) | |||
432 | return 0; | 432 | return 0; |
433 | } | 433 | } |
434 | 434 | ||
435 | #define send_pio(spi, t) spi->ops->send_pio(spi, t) | ||
436 | |||
437 | static void rspi_dma_complete(void *arg) | 435 | static void rspi_dma_complete(void *arg) |
438 | { | 436 | { |
439 | struct rspi_data *rspi = arg; | 437 | struct rspi_data *rspi = arg; |
@@ -617,8 +615,6 @@ static int qspi_receive_pio(struct rspi_data *rspi, struct spi_transfer *t) | |||
617 | return 0; | 615 | return 0; |
618 | } | 616 | } |
619 | 617 | ||
620 | #define receive_pio(spi, t) spi->ops->receive_pio(spi, t) | ||
621 | |||
622 | static int rspi_receive_dma(struct rspi_data *rspi, struct spi_transfer *t) | 618 | static int rspi_receive_dma(struct rspi_data *rspi, struct spi_transfer *t) |
623 | { | 619 | { |
624 | struct scatterlist sg, sg_dummy; | 620 | struct scatterlist sg, sg_dummy; |
@@ -743,7 +739,7 @@ static int rspi_transfer_one(struct spi_master *master, struct spi_device *spi, | |||
743 | if (rspi_is_dma(rspi, xfer)) | 739 | if (rspi_is_dma(rspi, xfer)) |
744 | ret = rspi_send_dma(rspi, xfer); | 740 | ret = rspi_send_dma(rspi, xfer); |
745 | else | 741 | else |
746 | ret = send_pio(rspi, xfer); | 742 | ret = rspi_send_pio(rspi, xfer); |
747 | if (ret < 0) | 743 | if (ret < 0) |
748 | return ret; | 744 | return ret; |
749 | } | 745 | } |
@@ -751,8 +747,24 @@ static int rspi_transfer_one(struct spi_master *master, struct spi_device *spi, | |||
751 | if (rspi_is_dma(rspi, xfer)) | 747 | if (rspi_is_dma(rspi, xfer)) |
752 | ret = rspi_receive_dma(rspi, xfer); | 748 | ret = rspi_receive_dma(rspi, xfer); |
753 | else | 749 | else |
754 | ret = receive_pio(rspi, xfer); | 750 | ret = rspi_receive_pio(rspi, xfer); |
751 | } | ||
752 | return ret; | ||
753 | } | ||
754 | |||
755 | static int qspi_transfer_one(struct spi_master *master, struct spi_device *spi, | ||
756 | struct spi_transfer *xfer) | ||
757 | { | ||
758 | struct rspi_data *rspi = spi_master_get_devdata(master); | ||
759 | int ret = 0; | ||
760 | |||
761 | if (xfer->tx_buf) { | ||
762 | ret = qspi_send_pio(rspi, xfer); | ||
763 | if (ret < 0) | ||
764 | return ret; | ||
755 | } | 765 | } |
766 | if (xfer->rx_buf) | ||
767 | ret = qspi_receive_pio(rspi, xfer); | ||
756 | return ret; | 768 | return ret; |
757 | } | 769 | } |
758 | 770 | ||
@@ -948,7 +960,7 @@ static int rspi_probe(struct platform_device *pdev) | |||
948 | 960 | ||
949 | master->bus_num = pdev->id; | 961 | master->bus_num = pdev->id; |
950 | master->setup = rspi_setup; | 962 | master->setup = rspi_setup; |
951 | master->transfer_one = rspi_transfer_one; | 963 | master->transfer_one = ops->transfer_one; |
952 | master->cleanup = rspi_cleanup; | 964 | master->cleanup = rspi_cleanup; |
953 | master->prepare_message = rspi_prepare_message; | 965 | master->prepare_message = rspi_prepare_message; |
954 | master->unprepare_message = rspi_unprepare_message; | 966 | master->unprepare_message = rspi_unprepare_message; |
@@ -990,14 +1002,12 @@ error1: | |||
990 | 1002 | ||
991 | static struct spi_ops rspi_ops = { | 1003 | static struct spi_ops rspi_ops = { |
992 | .set_config_register = rspi_set_config_register, | 1004 | .set_config_register = rspi_set_config_register, |
993 | .send_pio = rspi_send_pio, | 1005 | .transfer_one = rspi_transfer_one, |
994 | .receive_pio = rspi_receive_pio, | ||
995 | }; | 1006 | }; |
996 | 1007 | ||
997 | static struct spi_ops qspi_ops = { | 1008 | static struct spi_ops qspi_ops = { |
998 | .set_config_register = qspi_set_config_register, | 1009 | .set_config_register = qspi_set_config_register, |
999 | .send_pio = qspi_send_pio, | 1010 | .transfer_one = qspi_transfer_one, |
1000 | .receive_pio = qspi_receive_pio, | ||
1001 | }; | 1011 | }; |
1002 | 1012 | ||
1003 | static struct platform_device_id spi_driver_ids[] = { | 1013 | static struct platform_device_id spi_driver_ids[] = { |