]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - drivers/spi/spi_bfin5xx.c
Blackfin SPI Driver: fix bug - correct usage of struct spi_transfer.cs_change
[linux-2.6-omap-h63xx.git] / drivers / spi / spi_bfin5xx.c
index 122292557bf35890dfcc868974ef769975ed9f86..bdad0bbd0a435c22151b8506509e6e98d6d8febc 100644 (file)
@@ -540,15 +540,13 @@ static void giveback(struct driver_data *drv_data)
 
        msg->state = NULL;
 
-       /* disable chip select signal. And not stop spi in autobuffer mode */
-       if (drv_data->tx_dma != 0xFFFF) {
-               cs_deactive(drv_data, chip);
-               bfin_spi_disable(drv_data);
-       }
-
        if (!drv_data->cs_change)
                cs_deactive(drv_data, chip);
 
+       /* Not stop spi in autobuffer mode */
+       if (drv_data->tx_dma != 0xFFFF)
+               bfin_spi_disable(drv_data);
+
        if (msg->complete)
                msg->complete(msg->context);
 }
@@ -757,7 +755,8 @@ static void pump_transfers(unsigned long data)
 
        write_STAT(drv_data, BIT_STAT_CLR);
        cr = (read_CTRL(drv_data) & (~BIT_CTL_TIMOD));
-       cs_active(drv_data, chip);
+       if (drv_data->cs_change)
+               cs_active(drv_data, chip);
 
        dev_dbg(&drv_data->pdev->dev,
                "now pumping a transfer: width is %d, len is %d\n",
@@ -919,11 +918,11 @@ static void pump_transfers(unsigned long data)
                } else {
                        /* Update total byte transfered */
                        message->actual_length += drv_data->len_in_bytes;
-
                        /* Move to next transfer of this msg */
                        message->state = next_transfer(drv_data);
+                       if (drv_data->cs_change)
+                               cs_deactive(drv_data, chip);
                }
-
                /* Schedule next transfer tasklet */
                tasklet_schedule(&drv_data->pump_transfers);