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);
 }
 
        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",
                } 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);