|
@@ -918,47 +918,45 @@ static void pump_transfers(unsigned long data)
|
|
|
drv_data->read = drv_data->rx ? chip->read : null_reader;
|
|
|
|
|
|
/* Change speed and bit per word on a per transfer */
|
|
|
- cr0 = chip->cr0;
|
|
|
- if (transfer->speed_hz || transfer->bits_per_word) {
|
|
|
-
|
|
|
- bits = transfer->bits_per_word;
|
|
|
- speed = transfer->speed_hz;
|
|
|
-
|
|
|
- clk_div = pxa2xx_ssp_get_clk_div(drv_data, chip, speed);
|
|
|
-
|
|
|
- if (bits <= 8) {
|
|
|
- drv_data->n_bytes = 1;
|
|
|
- drv_data->read = drv_data->read != null_reader ?
|
|
|
- u8_reader : null_reader;
|
|
|
- drv_data->write = drv_data->write != null_writer ?
|
|
|
- u8_writer : null_writer;
|
|
|
- } else if (bits <= 16) {
|
|
|
- drv_data->n_bytes = 2;
|
|
|
- drv_data->read = drv_data->read != null_reader ?
|
|
|
- u16_reader : null_reader;
|
|
|
- drv_data->write = drv_data->write != null_writer ?
|
|
|
- u16_writer : null_writer;
|
|
|
- } else if (bits <= 32) {
|
|
|
- drv_data->n_bytes = 4;
|
|
|
- drv_data->read = drv_data->read != null_reader ?
|
|
|
- u32_reader : null_reader;
|
|
|
- drv_data->write = drv_data->write != null_writer ?
|
|
|
- u32_writer : null_writer;
|
|
|
- }
|
|
|
- /* if bits/word is changed in dma mode, then must check the
|
|
|
- * thresholds and burst also */
|
|
|
- if (chip->enable_dma) {
|
|
|
- if (pxa2xx_spi_set_dma_burst_and_threshold(chip,
|
|
|
- message->spi,
|
|
|
- bits, &dma_burst,
|
|
|
- &dma_thresh))
|
|
|
- dev_warn_ratelimited(&message->spi->dev,
|
|
|
- "pump_transfers: DMA burst size reduced to match bits_per_word\n");
|
|
|
- }
|
|
|
-
|
|
|
- cr0 = pxa2xx_configure_sscr0(drv_data, clk_div, bits);
|
|
|
+ bits = transfer->bits_per_word;
|
|
|
+ speed = transfer->speed_hz;
|
|
|
+
|
|
|
+ clk_div = pxa2xx_ssp_get_clk_div(drv_data, chip, speed);
|
|
|
+
|
|
|
+ if (bits <= 8) {
|
|
|
+ drv_data->n_bytes = 1;
|
|
|
+ drv_data->read = drv_data->read != null_reader ?
|
|
|
+ u8_reader : null_reader;
|
|
|
+ drv_data->write = drv_data->write != null_writer ?
|
|
|
+ u8_writer : null_writer;
|
|
|
+ } else if (bits <= 16) {
|
|
|
+ drv_data->n_bytes = 2;
|
|
|
+ drv_data->read = drv_data->read != null_reader ?
|
|
|
+ u16_reader : null_reader;
|
|
|
+ drv_data->write = drv_data->write != null_writer ?
|
|
|
+ u16_writer : null_writer;
|
|
|
+ } else if (bits <= 32) {
|
|
|
+ drv_data->n_bytes = 4;
|
|
|
+ drv_data->read = drv_data->read != null_reader ?
|
|
|
+ u32_reader : null_reader;
|
|
|
+ drv_data->write = drv_data->write != null_writer ?
|
|
|
+ u32_writer : null_writer;
|
|
|
+ }
|
|
|
+ /*
|
|
|
+ * if bits/word is changed in dma mode, then must check the
|
|
|
+ * thresholds and burst also
|
|
|
+ */
|
|
|
+ if (chip->enable_dma) {
|
|
|
+ if (pxa2xx_spi_set_dma_burst_and_threshold(chip,
|
|
|
+ message->spi,
|
|
|
+ bits, &dma_burst,
|
|
|
+ &dma_thresh))
|
|
|
+ dev_warn_ratelimited(&message->spi->dev,
|
|
|
+ "pump_transfers: DMA burst size reduced to match bits_per_word\n");
|
|
|
}
|
|
|
|
|
|
+ cr0 = pxa2xx_configure_sscr0(drv_data, clk_div, bits);
|
|
|
+
|
|
|
message->state = RUNNING_STATE;
|
|
|
|
|
|
drv_data->dma_mapped = 0;
|