diff options
author | Mark Brown <broonie@kernel.org> | 2015-03-09 14:11:06 -0400 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-03-09 14:11:06 -0400 |
commit | 0365fbd4bbc0b8f3fd3c78c16a8020ea83b3afcf (patch) | |
tree | 9263cd059b6aab29541b00ad2eceb4df1abcb486 | |
parent | c22c62db3f7388422257918c9d2582ef20d2e12d (diff) | |
parent | 854d2f241d71f6ca08ccde30e6c7c2e403363e52 (diff) |
Merge branch 'fix/dw' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi into spi-dw
-rw-r--r-- | drivers/spi/spi-dw-mid.c | 12 | ||||
-rw-r--r-- | drivers/spi/spi-dw-pci.c | 4 | ||||
-rw-r--r-- | drivers/spi/spi-dw.c | 4 |
3 files changed, 14 insertions, 6 deletions
diff --git a/drivers/spi/spi-dw-mid.c b/drivers/spi/spi-dw-mid.c index 8f68e8277a3b..c8416ef01f9a 100644 --- a/drivers/spi/spi-dw-mid.c +++ b/drivers/spi/spi-dw-mid.c | |||
@@ -108,7 +108,8 @@ static void dw_spi_dma_tx_done(void *arg) | |||
108 | { | 108 | { |
109 | struct dw_spi *dws = arg; | 109 | struct dw_spi *dws = arg; |
110 | 110 | ||
111 | if (test_and_clear_bit(TX_BUSY, &dws->dma_chan_busy) & BIT(RX_BUSY)) | 111 | clear_bit(TX_BUSY, &dws->dma_chan_busy); |
112 | if (test_bit(RX_BUSY, &dws->dma_chan_busy)) | ||
112 | return; | 113 | return; |
113 | spi_finalize_current_transfer(dws->master); | 114 | spi_finalize_current_transfer(dws->master); |
114 | } | 115 | } |
@@ -139,6 +140,9 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_tx(struct dw_spi *dws) | |||
139 | 1, | 140 | 1, |
140 | DMA_MEM_TO_DEV, | 141 | DMA_MEM_TO_DEV, |
141 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | 142 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); |
143 | if (!txdesc) | ||
144 | return NULL; | ||
145 | |||
142 | txdesc->callback = dw_spi_dma_tx_done; | 146 | txdesc->callback = dw_spi_dma_tx_done; |
143 | txdesc->callback_param = dws; | 147 | txdesc->callback_param = dws; |
144 | 148 | ||
@@ -153,7 +157,8 @@ static void dw_spi_dma_rx_done(void *arg) | |||
153 | { | 157 | { |
154 | struct dw_spi *dws = arg; | 158 | struct dw_spi *dws = arg; |
155 | 159 | ||
156 | if (test_and_clear_bit(RX_BUSY, &dws->dma_chan_busy) & BIT(TX_BUSY)) | 160 | clear_bit(RX_BUSY, &dws->dma_chan_busy); |
161 | if (test_bit(TX_BUSY, &dws->dma_chan_busy)) | ||
157 | return; | 162 | return; |
158 | spi_finalize_current_transfer(dws->master); | 163 | spi_finalize_current_transfer(dws->master); |
159 | } | 164 | } |
@@ -184,6 +189,9 @@ static struct dma_async_tx_descriptor *dw_spi_dma_prepare_rx(struct dw_spi *dws) | |||
184 | 1, | 189 | 1, |
185 | DMA_DEV_TO_MEM, | 190 | DMA_DEV_TO_MEM, |
186 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); | 191 | DMA_PREP_INTERRUPT | DMA_CTRL_ACK); |
192 | if (!rxdesc) | ||
193 | return NULL; | ||
194 | |||
187 | rxdesc->callback = dw_spi_dma_rx_done; | 195 | rxdesc->callback = dw_spi_dma_rx_done; |
188 | rxdesc->callback_param = dws; | 196 | rxdesc->callback_param = dws; |
189 | 197 | ||
diff --git a/drivers/spi/spi-dw-pci.c b/drivers/spi/spi-dw-pci.c index 5ba331047cbe..6d331e0db331 100644 --- a/drivers/spi/spi-dw-pci.c +++ b/drivers/spi/spi-dw-pci.c | |||
@@ -36,13 +36,13 @@ struct spi_pci_desc { | |||
36 | 36 | ||
37 | static struct spi_pci_desc spi_pci_mid_desc_1 = { | 37 | static struct spi_pci_desc spi_pci_mid_desc_1 = { |
38 | .setup = dw_spi_mid_init, | 38 | .setup = dw_spi_mid_init, |
39 | .num_cs = 32, | 39 | .num_cs = 5, |
40 | .bus_num = 0, | 40 | .bus_num = 0, |
41 | }; | 41 | }; |
42 | 42 | ||
43 | static struct spi_pci_desc spi_pci_mid_desc_2 = { | 43 | static struct spi_pci_desc spi_pci_mid_desc_2 = { |
44 | .setup = dw_spi_mid_init, | 44 | .setup = dw_spi_mid_init, |
45 | .num_cs = 4, | 45 | .num_cs = 2, |
46 | .bus_num = 1, | 46 | .bus_num = 1, |
47 | }; | 47 | }; |
48 | 48 | ||
diff --git a/drivers/spi/spi-dw.c b/drivers/spi/spi-dw.c index 7d3ee82e10be..950bc50361b3 100644 --- a/drivers/spi/spi-dw.c +++ b/drivers/spi/spi-dw.c | |||
@@ -517,14 +517,14 @@ static void spi_hw_init(struct device *dev, struct dw_spi *dws) | |||
517 | if (!dws->fifo_len) { | 517 | if (!dws->fifo_len) { |
518 | u32 fifo; | 518 | u32 fifo; |
519 | 519 | ||
520 | for (fifo = 2; fifo <= 256; fifo++) { | 520 | for (fifo = 1; fifo < 256; fifo++) { |
521 | dw_writew(dws, DW_SPI_TXFLTR, fifo); | 521 | dw_writew(dws, DW_SPI_TXFLTR, fifo); |
522 | if (fifo != dw_readw(dws, DW_SPI_TXFLTR)) | 522 | if (fifo != dw_readw(dws, DW_SPI_TXFLTR)) |
523 | break; | 523 | break; |
524 | } | 524 | } |
525 | dw_writew(dws, DW_SPI_TXFLTR, 0); | 525 | dw_writew(dws, DW_SPI_TXFLTR, 0); |
526 | 526 | ||
527 | dws->fifo_len = (fifo == 2) ? 0 : fifo - 1; | 527 | dws->fifo_len = (fifo == 1) ? 0 : fifo; |
528 | dev_dbg(dev, "Detected FIFO size: %u bytes\n", dws->fifo_len); | 528 | dev_dbg(dev, "Detected FIFO size: %u bytes\n", dws->fifo_len); |
529 | } | 529 | } |
530 | } | 530 | } |