Lines Matching +full:spi +full:- +full:rx +full:- +full:delay +full:- +full:us
2 * polling/bitbanging SPI master controller driver utilities
16 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
24 #include <linux/delay.h>
29 #include <linux/spi/spi.h>
30 #include <linux/spi/spi_bitbang.h>
33 /*----------------------------------------------------------------------*/
36 * FIRST PART (OPTIONAL): word-at-a-time spi_transfer support.
37 * Use this for GPIO or shift-register level hardware APIs.
39 * spi_bitbang_cs is in spi_device->controller_state, which is unavailable
41 * used, though maybe they're called from controller-aware code.
43 * chipselect() and friends may use use spi_device->controller_data and
47 * NOTE: SPI controller pins can often be used as GPIO pins instead,
54 u32 (*txrx_word)(struct spi_device *spi, unsigned nsecs,
58 struct spi_device *spi,
65 struct spi_device *spi, in bitbang_txrx_8() argument
66 u32 (*txrx_word)(struct spi_device *spi, in bitbang_txrx_8() argument
72 unsigned bits = t->bits_per_word ? : spi->bits_per_word; in bitbang_txrx_8()
73 unsigned count = t->len; in bitbang_txrx_8()
74 const u8 *tx = t->tx_buf; in bitbang_txrx_8()
75 u8 *rx = t->rx_buf; in bitbang_txrx_8() local
82 word = txrx_word(spi, ns, word, bits); in bitbang_txrx_8()
83 if (rx) in bitbang_txrx_8()
84 *rx++ = word; in bitbang_txrx_8()
85 count -= 1; in bitbang_txrx_8()
87 return t->len - count; in bitbang_txrx_8()
91 struct spi_device *spi, in bitbang_txrx_16() argument
92 u32 (*txrx_word)(struct spi_device *spi, in bitbang_txrx_16() argument
98 unsigned bits = t->bits_per_word ? : spi->bits_per_word; in bitbang_txrx_16()
99 unsigned count = t->len; in bitbang_txrx_16()
100 const u16 *tx = t->tx_buf; in bitbang_txrx_16()
101 u16 *rx = t->rx_buf; in bitbang_txrx_16() local
108 word = txrx_word(spi, ns, word, bits); in bitbang_txrx_16()
109 if (rx) in bitbang_txrx_16()
110 *rx++ = word; in bitbang_txrx_16()
111 count -= 2; in bitbang_txrx_16()
113 return t->len - count; in bitbang_txrx_16()
117 struct spi_device *spi, in bitbang_txrx_32() argument
118 u32 (*txrx_word)(struct spi_device *spi, in bitbang_txrx_32() argument
124 unsigned bits = t->bits_per_word ? : spi->bits_per_word; in bitbang_txrx_32()
125 unsigned count = t->len; in bitbang_txrx_32()
126 const u32 *tx = t->tx_buf; in bitbang_txrx_32()
127 u32 *rx = t->rx_buf; in bitbang_txrx_32() local
134 word = txrx_word(spi, ns, word, bits); in bitbang_txrx_32()
135 if (rx) in bitbang_txrx_32()
136 *rx++ = word; in bitbang_txrx_32()
137 count -= 4; in bitbang_txrx_32()
139 return t->len - count; in bitbang_txrx_32()
142 int spi_bitbang_setup_transfer(struct spi_device *spi, struct spi_transfer *t) in spi_bitbang_setup_transfer() argument
144 struct spi_bitbang_cs *cs = spi->controller_state; in spi_bitbang_setup_transfer()
149 bits_per_word = t->bits_per_word; in spi_bitbang_setup_transfer()
150 hz = t->speed_hz; in spi_bitbang_setup_transfer()
156 /* spi_transfer level calls that work per-word */ in spi_bitbang_setup_transfer()
158 bits_per_word = spi->bits_per_word; in spi_bitbang_setup_transfer()
160 cs->txrx_bufs = bitbang_txrx_8; in spi_bitbang_setup_transfer()
162 cs->txrx_bufs = bitbang_txrx_16; in spi_bitbang_setup_transfer()
164 cs->txrx_bufs = bitbang_txrx_32; in spi_bitbang_setup_transfer()
166 return -EINVAL; in spi_bitbang_setup_transfer()
170 hz = spi->max_speed_hz; in spi_bitbang_setup_transfer()
172 cs->nsecs = (1000000000/2) / hz; in spi_bitbang_setup_transfer()
173 if (cs->nsecs > (MAX_UDELAY_MS * 1000 * 1000)) in spi_bitbang_setup_transfer()
174 return -EINVAL; in spi_bitbang_setup_transfer()
182 * spi_bitbang_setup - default setup for per-word I/O loops
184 int spi_bitbang_setup(struct spi_device *spi) in spi_bitbang_setup() argument
186 struct spi_bitbang_cs *cs = spi->controller_state; in spi_bitbang_setup()
191 bitbang = spi_master_get_devdata(spi->master); in spi_bitbang_setup()
196 return -ENOMEM; in spi_bitbang_setup()
197 spi->controller_state = cs; in spi_bitbang_setup()
200 /* per-word shift register access, in hardware or bitbanging */ in spi_bitbang_setup()
201 cs->txrx_word = bitbang->txrx_word[spi->mode & (SPI_CPOL|SPI_CPHA)]; in spi_bitbang_setup()
202 if (!cs->txrx_word) in spi_bitbang_setup()
203 return -EINVAL; in spi_bitbang_setup()
205 retval = bitbang->setup_transfer(spi, NULL); in spi_bitbang_setup()
209 dev_dbg(&spi->dev, "%s, %u nsec/bit\n", __func__, 2 * cs->nsecs); in spi_bitbang_setup()
217 spin_lock_irqsave(&bitbang->lock, flags); in spi_bitbang_setup()
218 if (!bitbang->busy) { in spi_bitbang_setup()
219 bitbang->chipselect(spi, BITBANG_CS_INACTIVE); in spi_bitbang_setup()
220 ndelay(cs->nsecs); in spi_bitbang_setup()
222 spin_unlock_irqrestore(&bitbang->lock, flags); in spi_bitbang_setup()
229 * spi_bitbang_cleanup - default cleanup for per-word I/O loops
231 void spi_bitbang_cleanup(struct spi_device *spi) in spi_bitbang_cleanup() argument
233 kfree(spi->controller_state); in spi_bitbang_cleanup()
237 static int spi_bitbang_bufs(struct spi_device *spi, struct spi_transfer *t) in spi_bitbang_bufs() argument
239 struct spi_bitbang_cs *cs = spi->controller_state; in spi_bitbang_bufs()
240 unsigned nsecs = cs->nsecs; in spi_bitbang_bufs()
242 return cs->txrx_bufs(spi, cs->txrx_word, nsecs, t); in spi_bitbang_bufs()
245 /*----------------------------------------------------------------------*/
255 * Drivers can provide word-at-a-time i/o primitives, or provide
256 * transfer-at-a-time ones to leverage dma or fifo hardware.
264 spin_lock_irqsave(&bitbang->lock, flags); in bitbang_work()
265 bitbang->busy = 1; in bitbang_work()
266 while (!list_empty(&bitbang->queue)) { in bitbang_work()
268 struct spi_device *spi; in bitbang_work() local
274 int do_setup = -1; in bitbang_work()
276 m = container_of(bitbang->queue.next, struct spi_message, in bitbang_work()
278 list_del_init(&m->queue); in bitbang_work()
279 spin_unlock_irqrestore(&bitbang->lock, flags); in bitbang_work()
281 /* FIXME this is made-up ... the correct value is known to in bitbang_work()
282 * word-at-a-time bitbang code, and presumably chipselect() in bitbang_work()
287 spi = m->spi; in bitbang_work()
292 list_for_each_entry (t, &m->transfers, transfer_list) { in bitbang_work()
295 if (t->speed_hz || t->bits_per_word) in bitbang_work()
298 /* init (-1) or override (1) transfer params */ in bitbang_work()
300 status = bitbang->setup_transfer(spi, t); in bitbang_work()
303 if (do_setup == -1) in bitbang_work()
308 * this implicitly updates clock and spi modes as in bitbang_work()
314 bitbang->chipselect(spi, BITBANG_CS_ACTIVE); in bitbang_work()
317 cs_change = t->cs_change; in bitbang_work()
318 if (!t->tx_buf && !t->rx_buf && t->len) { in bitbang_work()
319 status = -EINVAL; in bitbang_work()
325 * us dma-safe buffers. in bitbang_work()
327 if (t->len) { in bitbang_work()
331 if (!m->is_dma_mapped) in bitbang_work()
332 t->rx_dma = t->tx_dma = 0; in bitbang_work()
333 status = bitbang->txrx_bufs(spi, t); in bitbang_work()
336 m->actual_length += status; in bitbang_work()
337 if (status != t->len) { in bitbang_work()
340 status = -EREMOTEIO; in bitbang_work()
346 if (t->delay_usecs) in bitbang_work()
347 udelay(t->delay_usecs); in bitbang_work()
351 if (t->transfer_list.next == &m->transfers) in bitbang_work()
354 /* sometimes a short mid-message deselect of the chip in bitbang_work()
358 bitbang->chipselect(spi, BITBANG_CS_INACTIVE); in bitbang_work()
362 m->status = status; in bitbang_work()
363 m->complete(m->context); in bitbang_work()
371 bitbang->chipselect(spi, BITBANG_CS_INACTIVE); in bitbang_work()
375 spin_lock_irqsave(&bitbang->lock, flags); in bitbang_work()
377 bitbang->busy = 0; in bitbang_work()
378 spin_unlock_irqrestore(&bitbang->lock, flags); in bitbang_work()
382 * spi_bitbang_transfer - default submit to transfer queue
384 int spi_bitbang_transfer(struct spi_device *spi, struct spi_message *m) in spi_bitbang_transfer() argument
390 m->actual_length = 0; in spi_bitbang_transfer()
391 m->status = -EINPROGRESS; in spi_bitbang_transfer()
393 bitbang = spi_master_get_devdata(spi->master); in spi_bitbang_transfer()
395 spin_lock_irqsave(&bitbang->lock, flags); in spi_bitbang_transfer()
396 if (!spi->max_speed_hz) in spi_bitbang_transfer()
397 status = -ENETDOWN; in spi_bitbang_transfer()
399 list_add_tail(&m->queue, &bitbang->queue); in spi_bitbang_transfer()
400 queue_work(bitbang->workqueue, &bitbang->work); in spi_bitbang_transfer()
402 spin_unlock_irqrestore(&bitbang->lock, flags); in spi_bitbang_transfer()
408 /*----------------------------------------------------------------------*/
411 * spi_bitbang_start - start up a polled/bitbanging SPI master driver
414 * Caller should have zero-initialized all parts of the structure, and then
420 * For i/o loops, provide callbacks either per-word (for bitbanging, or for
421 * hardware that basically exposes a shift register) or per-spi_transfer
424 * Drivers using per-word I/O loops should use (or call) spi_bitbang_setup,
425 * spi_bitbang_cleanup and spi_bitbang_setup_transfer to handle those spi
426 * master methods. Those methods are the defaults if the bitbang->txrx_bufs
437 if (!bitbang->master || !bitbang->chipselect) in spi_bitbang_start()
438 return -EINVAL; in spi_bitbang_start()
440 INIT_WORK(&bitbang->work, bitbang_work); in spi_bitbang_start()
441 spin_lock_init(&bitbang->lock); in spi_bitbang_start()
442 INIT_LIST_HEAD(&bitbang->queue); in spi_bitbang_start()
444 if (!bitbang->master->mode_bits) in spi_bitbang_start()
445 bitbang->master->mode_bits = SPI_CPOL | SPI_CPHA | bitbang->flags; in spi_bitbang_start()
447 if (!bitbang->master->transfer) in spi_bitbang_start()
448 bitbang->master->transfer = spi_bitbang_transfer; in spi_bitbang_start()
449 if (!bitbang->txrx_bufs) { in spi_bitbang_start()
450 bitbang->use_dma = 0; in spi_bitbang_start()
451 bitbang->txrx_bufs = spi_bitbang_bufs; in spi_bitbang_start()
452 if (!bitbang->master->setup) { in spi_bitbang_start()
453 if (!bitbang->setup_transfer) in spi_bitbang_start()
454 bitbang->setup_transfer = in spi_bitbang_start()
456 bitbang->master->setup = spi_bitbang_setup; in spi_bitbang_start()
457 bitbang->master->cleanup = spi_bitbang_cleanup; in spi_bitbang_start()
459 } else if (!bitbang->master->setup) in spi_bitbang_start()
460 return -EINVAL; in spi_bitbang_start()
461 if (bitbang->master->transfer == spi_bitbang_transfer && in spi_bitbang_start()
462 !bitbang->setup_transfer) in spi_bitbang_start()
463 return -EINVAL; in spi_bitbang_start()
465 /* this task is the only thing to touch the SPI bits */ in spi_bitbang_start()
466 bitbang->busy = 0; in spi_bitbang_start()
467 bitbang->workqueue = create_singlethread_workqueue( in spi_bitbang_start()
468 dev_name(bitbang->master->dev.parent)); in spi_bitbang_start()
469 if (bitbang->workqueue == NULL) { in spi_bitbang_start()
470 status = -EBUSY; in spi_bitbang_start()
477 status = spi_register_master(bitbang->master); in spi_bitbang_start()
484 destroy_workqueue(bitbang->workqueue); in spi_bitbang_start()
491 * spi_bitbang_stop - stops the task providing spi communication
495 spi_unregister_master(bitbang->master); in spi_bitbang_stop()
497 WARN_ON(!list_empty(&bitbang->queue)); in spi_bitbang_stop()
499 destroy_workqueue(bitbang->workqueue); in spi_bitbang_stop()