Refactor to use default implementation of transfer_one_message() which provides
standard handling of delays and chip select management.

Signed-off-by: Axel Lin <[email protected]>
---
Hi Gerhard and Anatolij,
I don't have this h/w. I'd appreciate if you can test this patch.

Thanks,
Axel
 drivers/spi/spi-mpc512x-psc.c | 58 +++++++++++++------------------------------
 1 file changed, 17 insertions(+), 41 deletions(-)

diff --git a/drivers/spi/spi-mpc512x-psc.c b/drivers/spi/spi-mpc512x-psc.c
index 3822eef..a944769 100644
--- a/drivers/spi/spi-mpc512x-psc.c
+++ b/drivers/spi/spi-mpc512x-psc.c
@@ -265,50 +265,25 @@ static int mpc512x_psc_spi_transfer_rxtx(struct 
spi_device *spi,
        return 0;
 }
 
-static int mpc512x_psc_spi_msg_xfer(struct spi_master *master,
-                                   struct spi_message *m)
+static void mpc512x_psc_spi_set_cs(struct spi_device *spi, bool enable)
 {
-       struct spi_device *spi;
-       unsigned cs_change;
-       int status;
-       struct spi_transfer *t;
-
-       spi = m->spi;
-       cs_change = 1;
-       status = 0;
-       list_for_each_entry(t, &m->transfers, transfer_list) {
-               if (t->bits_per_word || t->speed_hz) {
-                       status = mpc512x_psc_spi_transfer_setup(spi, t);
-                       if (status < 0)
-                               break;
-               }
-
-               if (cs_change)
-                       mpc512x_psc_spi_activate_cs(spi);
-               cs_change = t->cs_change;
-
-               status = mpc512x_psc_spi_transfer_rxtx(spi, t);
-               if (status)
-                       break;
-               m->actual_length += t->len;
-
-               if (t->delay_usecs)
-                       udelay(t->delay_usecs);
-
-               if (cs_change)
-                       mpc512x_psc_spi_deactivate_cs(spi);
-       }
-
-       m->status = status;
-       m->complete(m->context);
-
-       if (status || !cs_change)
+       if (enable)
+               mpc512x_psc_spi_activate_cs(spi);
+       else
                mpc512x_psc_spi_deactivate_cs(spi);
+}
+
+static int mpc51x_psc_spi_transfer_one(struct spi_master *master,
+                                      struct spi_device *spi,
+                                      struct spi_transfer *t)
+{
+       int status;
 
-       mpc512x_psc_spi_transfer_setup(spi, NULL);
+       status = mpc512x_psc_spi_transfer_setup(spi, t);
+       if (status < 0)
+               return status;
 
-       spi_finalize_current_message(master);
-       return status;
+       return mpc512x_psc_spi_transfer_rxtx(spi, t);
 }
 
 static int mpc512x_psc_spi_prep_xfer_hw(struct spi_master *master)
@@ -494,7 +469,8 @@ static int mpc512x_psc_spi_do_probe(struct device *dev, u32 
regaddr,
        master->mode_bits = SPI_CPOL | SPI_CPHA | SPI_CS_HIGH | SPI_LSB_FIRST;
        master->setup = mpc512x_psc_spi_setup;
        master->prepare_transfer_hardware = mpc512x_psc_spi_prep_xfer_hw;
-       master->transfer_one_message = mpc512x_psc_spi_msg_xfer;
+       master->set_cs = mpc512x_psc_spi_set_cs;
+       master->transfer_one = mpc51x_psc_spi_transfer_one;
        master->unprepare_transfer_hardware = mpc512x_psc_spi_unprep_xfer_hw;
        master->cleanup = mpc512x_psc_spi_cleanup;
        master->dev.of_node = dev->of_node;
-- 
1.8.3.2



--
To unsubscribe from this list: send the line "unsubscribe linux-spi" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to