aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Brown <broonie@kernel.org>2015-03-09 14:11:06 -0400
committerMark Brown <broonie@kernel.org>2015-03-09 14:11:06 -0400
commit0365fbd4bbc0b8f3fd3c78c16a8020ea83b3afcf (patch)
tree9263cd059b6aab29541b00ad2eceb4df1abcb486
parentc22c62db3f7388422257918c9d2582ef20d2e12d (diff)
parent854d2f241d71f6ca08ccde30e6c7c2e403363e52 (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.c12
-rw-r--r--drivers/spi/spi-dw-pci.c4
-rw-r--r--drivers/spi/spi-dw.c4
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
37static struct spi_pci_desc spi_pci_mid_desc_1 = { 37static 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
43static struct spi_pci_desc spi_pci_mid_desc_2 = { 43static 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}