diff options
author | Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com> | 2015-01-28 07:23:47 -0500 |
---|---|---|
committer | Mark Brown <broonie@kernel.org> | 2015-01-28 14:42:42 -0500 |
commit | 24ba5e593f391507c614f5b62065194e6593a658 (patch) | |
tree | b853b2dec896c440e7393f350c4f6d3fe67378fb | |
parent | f9c6ef6cfe9c16b6681607afd7e4f8379e615c4f (diff) |
spi/xilinx: Remove rx_fn and tx_fn pointer
Simplify the code by removing the tx and and rx function pointers and
substitute them by a single function.
Signed-off-by: Ricardo Ribalda Delgado <ricardo.ribalda@gmail.com>
Signed-off-by: Mark Brown <broonie@kernel.org>
-rw-r--r-- | drivers/spi/spi-xilinx.c | 69 |
1 files changed, 18 insertions, 51 deletions
diff --git a/drivers/spi/spi-xilinx.c b/drivers/spi/spi-xilinx.c index 523da738805f..ac94e546a555 100644 --- a/drivers/spi/spi-xilinx.c +++ b/drivers/spi/spi-xilinx.c | |||
@@ -92,8 +92,6 @@ struct xilinx_spi { | |||
92 | u32 cs_inactive; /* Level of the CS pins when inactive*/ | 92 | u32 cs_inactive; /* Level of the CS pins when inactive*/ |
93 | unsigned int (*read_fn)(void __iomem *); | 93 | unsigned int (*read_fn)(void __iomem *); |
94 | void (*write_fn)(u32, void __iomem *); | 94 | void (*write_fn)(u32, void __iomem *); |
95 | void (*tx_fn)(struct xilinx_spi *); | ||
96 | void (*rx_fn)(struct xilinx_spi *); | ||
97 | }; | 95 | }; |
98 | 96 | ||
99 | static void xspi_write32(u32 val, void __iomem *addr) | 97 | static void xspi_write32(u32 val, void __iomem *addr) |
@@ -116,49 +114,32 @@ static unsigned int xspi_read32_be(void __iomem *addr) | |||
116 | return ioread32be(addr); | 114 | return ioread32be(addr); |
117 | } | 115 | } |
118 | 116 | ||
119 | static void xspi_tx8(struct xilinx_spi *xspi) | 117 | static void xilinx_spi_tx(struct xilinx_spi *xspi) |
120 | { | ||
121 | xspi->write_fn(*xspi->tx_ptr, xspi->regs + XSPI_TXD_OFFSET); | ||
122 | xspi->tx_ptr++; | ||
123 | } | ||
124 | |||
125 | static void xspi_tx16(struct xilinx_spi *xspi) | ||
126 | { | ||
127 | xspi->write_fn(*(u16 *)(xspi->tx_ptr), xspi->regs + XSPI_TXD_OFFSET); | ||
128 | xspi->tx_ptr += 2; | ||
129 | } | ||
130 | |||
131 | static void xspi_tx32(struct xilinx_spi *xspi) | ||
132 | { | 118 | { |
133 | xspi->write_fn(*(u32 *)(xspi->tx_ptr), xspi->regs + XSPI_TXD_OFFSET); | 119 | xspi->write_fn(*(u32 *)(xspi->tx_ptr), xspi->regs + XSPI_TXD_OFFSET); |
134 | xspi->tx_ptr += 4; | 120 | xspi->tx_ptr += xspi->bits_per_word / 8; |
135 | } | 121 | } |
136 | 122 | ||
137 | static void xspi_rx8(struct xilinx_spi *xspi) | 123 | static void xilinx_spi_rx(struct xilinx_spi *xspi) |
138 | { | 124 | { |
139 | u32 data = xspi->read_fn(xspi->regs + XSPI_RXD_OFFSET); | 125 | u32 data = xspi->read_fn(xspi->regs + XSPI_RXD_OFFSET); |
140 | if (xspi->rx_ptr) { | ||
141 | *xspi->rx_ptr = data & 0xff; | ||
142 | xspi->rx_ptr++; | ||
143 | } | ||
144 | } | ||
145 | 126 | ||
146 | static void xspi_rx16(struct xilinx_spi *xspi) | 127 | if (!xspi->rx_ptr) |
147 | { | 128 | return; |
148 | u32 data = xspi->read_fn(xspi->regs + XSPI_RXD_OFFSET); | ||
149 | if (xspi->rx_ptr) { | ||
150 | *(u16 *)(xspi->rx_ptr) = data & 0xffff; | ||
151 | xspi->rx_ptr += 2; | ||
152 | } | ||
153 | } | ||
154 | 129 | ||
155 | static void xspi_rx32(struct xilinx_spi *xspi) | 130 | switch (xspi->bits_per_word) { |
156 | { | 131 | case 8: |
157 | u32 data = xspi->read_fn(xspi->regs + XSPI_RXD_OFFSET); | 132 | *(u8 *)(xspi->rx_ptr) = data; |
158 | if (xspi->rx_ptr) { | 133 | break; |
134 | case 16: | ||
135 | *(u16 *)(xspi->rx_ptr) = data; | ||
136 | break; | ||
137 | case 32: | ||
159 | *(u32 *)(xspi->rx_ptr) = data; | 138 | *(u32 *)(xspi->rx_ptr) = data; |
160 | xspi->rx_ptr += 4; | 139 | break; |
161 | } | 140 | } |
141 | |||
142 | xspi->rx_ptr += xspi->bits_per_word / 8; | ||
162 | } | 143 | } |
163 | 144 | ||
164 | static void xspi_init_hw(struct xilinx_spi *xspi) | 145 | static void xspi_init_hw(struct xilinx_spi *xspi) |
@@ -250,7 +231,7 @@ static void xilinx_spi_fill_tx_fifo(struct xilinx_spi *xspi, int n_words) | |||
250 | 231 | ||
251 | while (n_words--) | 232 | while (n_words--) |
252 | if (xspi->tx_ptr) | 233 | if (xspi->tx_ptr) |
253 | xspi->tx_fn(xspi); | 234 | xilinx_spi_tx(xspi); |
254 | else | 235 | else |
255 | xspi->write_fn(0, xspi->regs + XSPI_TXD_OFFSET); | 236 | xspi->write_fn(0, xspi->regs + XSPI_TXD_OFFSET); |
256 | return; | 237 | return; |
@@ -301,7 +282,7 @@ static int xilinx_spi_txrx_bufs(struct spi_device *spi, struct spi_transfer *t) | |||
301 | 282 | ||
302 | /* Read out all the data from the Rx FIFO */ | 283 | /* Read out all the data from the Rx FIFO */ |
303 | while (n_words--) | 284 | while (n_words--) |
304 | xspi->rx_fn(xspi); | 285 | xilinx_spi_rx(xspi); |
305 | } | 286 | } |
306 | 287 | ||
307 | return t->len - xspi->remaining_bytes; | 288 | return t->len - xspi->remaining_bytes; |
@@ -430,20 +411,6 @@ static int xilinx_spi_probe(struct platform_device *pdev) | |||
430 | 411 | ||
431 | master->bits_per_word_mask = SPI_BPW_MASK(bits_per_word); | 412 | master->bits_per_word_mask = SPI_BPW_MASK(bits_per_word); |
432 | xspi->bits_per_word = bits_per_word; | 413 | xspi->bits_per_word = bits_per_word; |
433 | if (xspi->bits_per_word == 8) { | ||
434 | xspi->tx_fn = xspi_tx8; | ||
435 | xspi->rx_fn = xspi_rx8; | ||
436 | } else if (xspi->bits_per_word == 16) { | ||
437 | xspi->tx_fn = xspi_tx16; | ||
438 | xspi->rx_fn = xspi_rx16; | ||
439 | } else if (xspi->bits_per_word == 32) { | ||
440 | xspi->tx_fn = xspi_tx32; | ||
441 | xspi->rx_fn = xspi_rx32; | ||
442 | } else { | ||
443 | ret = -EINVAL; | ||
444 | goto put_master; | ||
445 | } | ||
446 | |||
447 | xspi->buffer_size = xilinx_spi_find_buffer_size(xspi); | 414 | xspi->buffer_size = xilinx_spi_find_buffer_size(xspi); |
448 | 415 | ||
449 | xspi->irq = platform_get_irq(pdev, 0); | 416 | xspi->irq = platform_get_irq(pdev, 0); |