spi: spi-fsl-spi: relax message sanity checking a little
authorRasmus Villemoes <rasmus.villemoes@prevas.dk>
Wed, 27 Mar 2019 14:30:51 +0000 (14:30 +0000)
committerMark Brown <broonie@kernel.org>
Mon, 1 Apr 2019 08:48:37 +0000 (15:48 +0700)
The comment says that we should not allow changes (to
bits_per_word/speed_hz) while CS is active, and indeed the code below
does fsl_spi_setup_transfer() when the ->cs_change of the previous
spi_transfer was set (and for the very first transfer).

So the sanity checking is a bit too strict - we can change it to
follow the same logic as is used by the actual transfer loop.

Signed-off-by: Rasmus Villemoes <rasmus.villemoes@prevas.dk>
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-fsl-spi.c

index 6d114daa178a35919ea30e21627b181d7789c8a2..481b075689b51279f3d9830d3dd445acd08e879f 100644 (file)
@@ -370,13 +370,15 @@ static int fsl_spi_do_one_msg(struct spi_master *master,
        int status;
 
        /* Don't allow changes if CS is active */
-       first = list_first_entry(&m->transfers, struct spi_transfer,
-                       transfer_list);
+       cs_change = 1;
        list_for_each_entry(t, &m->transfers, transfer_list) {
+               if (cs_change)
+                       first = t;
+               cs_change = t->cs_change;
                if ((first->bits_per_word != t->bits_per_word) ||
                        (first->speed_hz != t->speed_hz)) {
                        dev_err(&spi->dev,
-                               "bits_per_word/speed_hz should be same for the same SPI transfer\n");
+                               "bits_per_word/speed_hz cannot change while CS is active\n");
                        return -EINVAL;
                }
        }