spi-pxa2xx.c (03e075b38e6cd25267c8d6e2797fa4537ca3348d) spi-pxa2xx.c (07550df04712c88717d2ab6578bb36bbd4305e35)
1/*
2 * Copyright (C) 2005 Stephen Street / StreetFire Sound Labs
3 * Copyright (C) 2013, Intel Corporation
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.

--- 558 unchanged lines hidden (view full) ---

567 dev_err(&drv_data->pdev->dev, "%s\n", msg);
568
569 drv_data->cur_msg->state = ERROR_STATE;
570 tasklet_schedule(&drv_data->pump_transfers);
571}
572
573static void int_transfer_complete(struct driver_data *drv_data)
574{
1/*
2 * Copyright (C) 2005 Stephen Street / StreetFire Sound Labs
3 * Copyright (C) 2013, Intel Corporation
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.

--- 558 unchanged lines hidden (view full) ---

567 dev_err(&drv_data->pdev->dev, "%s\n", msg);
568
569 drv_data->cur_msg->state = ERROR_STATE;
570 tasklet_schedule(&drv_data->pump_transfers);
571}
572
573static void int_transfer_complete(struct driver_data *drv_data)
574{
575 /* Stop SSP */
575 /* Clear and disable interrupts */
576 write_SSSR_CS(drv_data, drv_data->clear_sr);
577 reset_sccr1(drv_data);
578 if (!pxa25x_ssp_comp(drv_data))
579 pxa2xx_spi_write(drv_data, SSTO, 0);
580
581 /* Update total byte transferred return count actual bytes read */
582 drv_data->cur_msg->actual_length += drv_data->len -
583 (drv_data->rx_end - drv_data->rx);

--- 412 unchanged lines hidden (view full) ---

996 if (pxa2xx_spi_set_dma_burst_and_threshold(chip,
997 message->spi,
998 bits, &dma_burst,
999 &dma_thresh))
1000 dev_warn_ratelimited(&message->spi->dev,
1001 "pump_transfers: DMA burst size reduced to match bits_per_word\n");
1002 }
1003
576 write_SSSR_CS(drv_data, drv_data->clear_sr);
577 reset_sccr1(drv_data);
578 if (!pxa25x_ssp_comp(drv_data))
579 pxa2xx_spi_write(drv_data, SSTO, 0);
580
581 /* Update total byte transferred return count actual bytes read */
582 drv_data->cur_msg->actual_length += drv_data->len -
583 (drv_data->rx_end - drv_data->rx);

--- 412 unchanged lines hidden (view full) ---

996 if (pxa2xx_spi_set_dma_burst_and_threshold(chip,
997 message->spi,
998 bits, &dma_burst,
999 &dma_thresh))
1000 dev_warn_ratelimited(&message->spi->dev,
1001 "pump_transfers: DMA burst size reduced to match bits_per_word\n");
1002 }
1003
1004 /* NOTE: PXA25x_SSP _could_ use external clocking ... */
1005 cr0 = pxa2xx_configure_sscr0(drv_data, clk_div, bits);
1006 if (!pxa25x_ssp_comp(drv_data))
1007 dev_dbg(&message->spi->dev, "%u Hz actual, %s\n",
1008 drv_data->master->max_speed_hz
1009 / (1 + ((cr0 & SSCR0_SCR(0xfff)) >> 8)),
1010 chip->enable_dma ? "DMA" : "PIO");
1011 else
1012 dev_dbg(&message->spi->dev, "%u Hz actual, %s\n",
1013 drv_data->master->max_speed_hz / 2
1014 / (1 + ((cr0 & SSCR0_SCR(0x0ff)) >> 8)),
1015 chip->enable_dma ? "DMA" : "PIO");
1016
1017 message->state = RUNNING_STATE;
1018
1019 drv_data->dma_mapped = 0;
1020 if (pxa2xx_spi_dma_is_possible(drv_data->len))
1021 drv_data->dma_mapped = pxa2xx_spi_map_dma_buffers(drv_data);
1022 if (drv_data->dma_mapped) {
1023
1024 /* Ensure we have the correct interrupt handler */

--- 10 unchanged lines hidden (view full) ---

1035 /* Ensure we have the correct interrupt handler */
1036 drv_data->transfer_handler = interrupt_transfer;
1037
1038 /* Clear status */
1039 cr1 = chip->cr1 | chip->threshold | drv_data->int_cr1;
1040 write_SSSR_CS(drv_data, drv_data->clear_sr);
1041 }
1042
1004 message->state = RUNNING_STATE;
1005
1006 drv_data->dma_mapped = 0;
1007 if (pxa2xx_spi_dma_is_possible(drv_data->len))
1008 drv_data->dma_mapped = pxa2xx_spi_map_dma_buffers(drv_data);
1009 if (drv_data->dma_mapped) {
1010
1011 /* Ensure we have the correct interrupt handler */

--- 10 unchanged lines hidden (view full) ---

1022 /* Ensure we have the correct interrupt handler */
1023 drv_data->transfer_handler = interrupt_transfer;
1024
1025 /* Clear status */
1026 cr1 = chip->cr1 | chip->threshold | drv_data->int_cr1;
1027 write_SSSR_CS(drv_data, drv_data->clear_sr);
1028 }
1029
1030 /* NOTE: PXA25x_SSP _could_ use external clocking ... */
1031 cr0 = pxa2xx_configure_sscr0(drv_data, clk_div, bits);
1032 if (!pxa25x_ssp_comp(drv_data))
1033 dev_dbg(&message->spi->dev, "%u Hz actual, %s\n",
1034 drv_data->master->max_speed_hz
1035 / (1 + ((cr0 & SSCR0_SCR(0xfff)) >> 8)),
1036 drv_data->dma_mapped ? "DMA" : "PIO");
1037 else
1038 dev_dbg(&message->spi->dev, "%u Hz actual, %s\n",
1039 drv_data->master->max_speed_hz / 2
1040 / (1 + ((cr0 & SSCR0_SCR(0x0ff)) >> 8)),
1041 drv_data->dma_mapped ? "DMA" : "PIO");
1042
1043 if (is_lpss_ssp(drv_data)) {
1044 if ((pxa2xx_spi_read(drv_data, SSIRF) & 0xff)
1045 != chip->lpss_rx_threshold)
1046 pxa2xx_spi_write(drv_data, SSIRF,
1047 chip->lpss_rx_threshold);
1048 if ((pxa2xx_spi_read(drv_data, SSITF) & 0xffff)
1049 != chip->lpss_tx_threshold)
1050 pxa2xx_spi_write(drv_data, SSITF,

--- 689 unchanged lines hidden ---
1043 if (is_lpss_ssp(drv_data)) {
1044 if ((pxa2xx_spi_read(drv_data, SSIRF) & 0xff)
1045 != chip->lpss_rx_threshold)
1046 pxa2xx_spi_write(drv_data, SSIRF,
1047 chip->lpss_rx_threshold);
1048 if ((pxa2xx_spi_read(drv_data, SSITF) & 0xffff)
1049 != chip->lpss_tx_threshold)
1050 pxa2xx_spi_write(drv_data, SSITF,

--- 689 unchanged lines hidden ---