Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

Merge remote-tracking branches 'spi/topic/orion', 'spi/topic/pxa2xx', 'spi/topic/rspi' and 'spi/topic/s3c64xx' into spi-next

+50 -8
+3 -2
drivers/spi/Kconfig
··· 463 463 tristate "Orion SPI master" 464 464 depends on PLAT_ORION || ARCH_MVEBU || COMPILE_TEST 465 465 help 466 - This enables using the SPI master controller on the Orion chips. 466 + This enables using the SPI master controller on the Orion 467 + and MVEBU chips. 467 468 468 469 config SPI_PIC32 469 470 tristate "Microchip PIC32 series SPI" ··· 566 565 567 566 config SPI_S3C64XX 568 567 tristate "Samsung S3C64XX series type SPI" 569 - depends on (PLAT_SAMSUNG || ARCH_EXYNOS) 568 + depends on (PLAT_SAMSUNG || ARCH_EXYNOS || COMPILE_TEST) 570 569 help 571 570 SPI driver for Samsung S3C64XX and newer SoCs. 572 571
-1
drivers/spi/spi-pxa2xx.h
··· 109 109 #define DONE_STATE ((void *)2) 110 110 #define ERROR_STATE ((void *)-1) 111 111 112 - #define IS_DMA_ALIGNED(x) IS_ALIGNED((unsigned long)(x), DMA_ALIGNMENT) 113 112 #define DMA_ALIGNMENT 8 114 113 115 114 static inline int pxa25x_ssp_comp(struct driver_data *drv_data)
+47 -5
drivers/spi/spi-rspi.c
··· 413 413 return n; 414 414 } 415 415 416 - static void qspi_set_receive_trigger(struct rspi_data *rspi, unsigned int len) 416 + static int qspi_set_receive_trigger(struct rspi_data *rspi, unsigned int len) 417 417 { 418 418 unsigned int n; 419 419 ··· 428 428 qspi_update(rspi, SPBFCR_RXTRG_MASK, 429 429 SPBFCR_RXTRG_1B, QSPI_SPBFCR); 430 430 } 431 + return n; 431 432 } 432 433 433 434 #define set_config_register(spi, n) spi->ops->set_config_register(spi, n) ··· 786 785 787 786 static int qspi_transfer_out(struct rspi_data *rspi, struct spi_transfer *xfer) 788 787 { 788 + const u8 *tx = xfer->tx_buf; 789 + unsigned int n = xfer->len; 790 + unsigned int i, len; 789 791 int ret; 790 792 791 793 if (rspi->master->can_dma && __rspi_can_dma(rspi, xfer)) { ··· 797 793 return ret; 798 794 } 799 795 800 - ret = rspi_pio_transfer(rspi, xfer->tx_buf, NULL, xfer->len); 801 - if (ret < 0) 802 - return ret; 796 + while (n > 0) { 797 + len = qspi_set_send_trigger(rspi, n); 798 + if (len == QSPI_BUFFER_SIZE) { 799 + ret = rspi_wait_for_tx_empty(rspi); 800 + if (ret < 0) { 801 + dev_err(&rspi->master->dev, "transmit timeout\n"); 802 + return ret; 803 + } 804 + for (i = 0; i < len; i++) 805 + rspi_write_data(rspi, *tx++); 806 + } else { 807 + ret = rspi_pio_transfer(rspi, tx, NULL, n); 808 + if (ret < 0) 809 + return ret; 810 + } 811 + n -= len; 812 + } 803 813 804 814 /* Wait for the last transmission */ 805 815 rspi_wait_for_tx_empty(rspi); ··· 823 805 824 806 static int qspi_transfer_in(struct rspi_data *rspi, struct spi_transfer *xfer) 825 807 { 808 + u8 *rx = xfer->rx_buf; 809 + unsigned int n = xfer->len; 810 + unsigned int i, len; 811 + int ret; 812 + 826 813 if (rspi->master->can_dma && __rspi_can_dma(rspi, xfer)) { 827 814 int ret = rspi_dma_transfer(rspi, NULL, &xfer->rx_sg); 828 815 if (ret != -EAGAIN) 829 816 return ret; 830 817 } 831 818 832 - return rspi_pio_transfer(rspi, NULL, xfer->rx_buf, xfer->len); 819 + while (n > 0) { 820 + len = qspi_set_receive_trigger(rspi, n); 821 + if (len == QSPI_BUFFER_SIZE) { 822 + ret = rspi_wait_for_rx_full(rspi); 823 + if (ret < 0) { 824 + dev_err(&rspi->master->dev, "receive timeout\n"); 825 + return ret; 826 + } 827 + for (i = 0; i < len; i++) 828 + *rx++ = rspi_read_data(rspi); 829 + } else { 830 + ret = rspi_pio_transfer(rspi, NULL, rx, n); 831 + if (ret < 0) 832 + return ret; 833 + *rx++ = ret; 834 + } 835 + n -= len; 836 + } 837 + 838 + return 0; 833 839 } 834 840 835 841 static int qspi_transfer_one(struct spi_master *master, struct spi_device *spi,