| From 8f823258e8982b397a040cdc46b25161654b1419 Mon Sep 17 00:00:00 2001 |
| From: Geert Uytterhoeven <geert+renesas@glider.be> |
| Date: Fri, 20 Jun 2014 12:16:17 +0200 |
| Subject: spi: sh-msiof: Extract sh_msiof_spi_{start,stop}() helpers |
| |
| Based on an old patch by Guennadi Liakhovetski <g.liakhovetski@gmx.de> |
| |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Signed-off-by: Mark Brown <broonie@linaro.org> |
| (cherry picked from commit 76c02e71612533206cb062b875c9609bce83d23a) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| --- |
| drivers/spi/spi-sh-msiof.c | 51 +++++++++++++++++++++++++++++++++------------- |
| 1 file changed, 37 insertions(+), 14 deletions(-) |
| |
| diff --git a/drivers/spi/spi-sh-msiof.c b/drivers/spi/spi-sh-msiof.c |
| index 38824a994131..2cd5fcb86f71 100644 |
| --- a/drivers/spi/spi-sh-msiof.c |
| +++ b/drivers/spi/spi-sh-msiof.c |
| @@ -509,6 +509,40 @@ static int sh_msiof_prepare_message(struct spi_master *master, |
| return 0; |
| } |
| |
| +static int sh_msiof_spi_start(struct sh_msiof_spi_priv *p, void *rx_buf) |
| +{ |
| + int ret; |
| + |
| + /* setup clock and rx/tx signals */ |
| + ret = sh_msiof_modify_ctr_wait(p, 0, CTR_TSCKE); |
| + if (rx_buf && !ret) |
| + ret = sh_msiof_modify_ctr_wait(p, 0, CTR_RXE); |
| + if (!ret) |
| + ret = sh_msiof_modify_ctr_wait(p, 0, CTR_TXE); |
| + |
| + /* start by setting frame bit */ |
| + if (!ret) |
| + ret = sh_msiof_modify_ctr_wait(p, 0, CTR_TFSE); |
| + |
| + return ret; |
| +} |
| + |
| +static int sh_msiof_spi_stop(struct sh_msiof_spi_priv *p, void *rx_buf) |
| +{ |
| + int ret; |
| + |
| + /* shut down frame, rx/tx and clock signals */ |
| + ret = sh_msiof_modify_ctr_wait(p, CTR_TFSE, 0); |
| + if (!ret) |
| + ret = sh_msiof_modify_ctr_wait(p, CTR_TXE, 0); |
| + if (rx_buf && !ret) |
| + ret = sh_msiof_modify_ctr_wait(p, CTR_RXE, 0); |
| + if (!ret) |
| + ret = sh_msiof_modify_ctr_wait(p, CTR_TSCKE, 0); |
| + |
| + return ret; |
| +} |
| + |
| static int sh_msiof_spi_txrx_once(struct sh_msiof_spi_priv *p, |
| void (*tx_fifo)(struct sh_msiof_spi_priv *, |
| const void *, int, int), |
| @@ -536,15 +570,9 @@ static int sh_msiof_spi_txrx_once(struct sh_msiof_spi_priv *p, |
| if (tx_buf) |
| tx_fifo(p, tx_buf, words, fifo_shift); |
| |
| - /* setup clock and rx/tx signals */ |
| - ret = sh_msiof_modify_ctr_wait(p, 0, CTR_TSCKE); |
| - if (rx_buf) |
| - ret = ret ? ret : sh_msiof_modify_ctr_wait(p, 0, CTR_RXE); |
| - ret = ret ? ret : sh_msiof_modify_ctr_wait(p, 0, CTR_TXE); |
| - |
| - /* start by setting frame bit */ |
| reinit_completion(&p->done); |
| - ret = ret ? ret : sh_msiof_modify_ctr_wait(p, 0, CTR_TFSE); |
| + |
| + ret = sh_msiof_spi_start(p, rx_buf); |
| if (ret) { |
| dev_err(&p->pdev->dev, "failed to start hardware\n"); |
| goto err; |
| @@ -560,12 +588,7 @@ static int sh_msiof_spi_txrx_once(struct sh_msiof_spi_priv *p, |
| /* clear status bits */ |
| sh_msiof_reset_str(p); |
| |
| - /* shut down frame, rx/tx and clock signals */ |
| - ret = sh_msiof_modify_ctr_wait(p, CTR_TFSE, 0); |
| - ret = ret ? ret : sh_msiof_modify_ctr_wait(p, CTR_TXE, 0); |
| - if (rx_buf) |
| - ret = ret ? ret : sh_msiof_modify_ctr_wait(p, CTR_RXE, 0); |
| - ret = ret ? ret : sh_msiof_modify_ctr_wait(p, CTR_TSCKE, 0); |
| + ret = sh_msiof_spi_stop(p, rx_buf); |
| if (ret) { |
| dev_err(&p->pdev->dev, "failed to shut down hardware\n"); |
| goto err; |
| -- |
| 2.1.2 |
| |