Lines Matching +full:spi +full:- +full:cs +full:- +full:high
1 // SPDX-License-Identifier: GPL-2.0-or-later
3 * polling/bitbanging SPI master controller driver utilities
15 #include <linux/spi/spi.h>
16 #include <linux/spi/spi_bitbang.h>
21 /*----------------------------------------------------------------------*/
24 * FIRST PART (OPTIONAL): word-at-a-time spi_transfer support.
25 * Use this for GPIO or shift-register level hardware APIs.
27 * spi_bitbang_cs is in spi_device->controller_state, which is unavailable
29 * used, though maybe they're called from controller-aware code.
31 * chipselect() and friends may use spi_device->controller_data and
35 * NOTE: SPI controller pins can often be used as GPIO pins instead,
42 u32 (*txrx_word)(struct spi_device *spi, unsigned nsecs,
46 struct spi_device *spi,
55 struct spi_device *spi, in bitbang_txrx_8() argument
56 u32 (*txrx_word)(struct spi_device *spi, in bitbang_txrx_8() argument
64 unsigned bits = t->bits_per_word; in bitbang_txrx_8()
65 unsigned count = t->len; in bitbang_txrx_8()
66 const u8 *tx = t->tx_buf; in bitbang_txrx_8()
67 u8 *rx = t->rx_buf; in bitbang_txrx_8()
74 word = txrx_word(spi, ns, word, bits, flags); in bitbang_txrx_8()
77 count -= 1; in bitbang_txrx_8()
79 return t->len - count; in bitbang_txrx_8()
83 struct spi_device *spi, in bitbang_txrx_16() argument
84 u32 (*txrx_word)(struct spi_device *spi, in bitbang_txrx_16() argument
92 unsigned bits = t->bits_per_word; in bitbang_txrx_16()
93 unsigned count = t->len; in bitbang_txrx_16()
94 const u16 *tx = t->tx_buf; in bitbang_txrx_16()
95 u16 *rx = t->rx_buf; in bitbang_txrx_16()
102 word = txrx_word(spi, ns, word, bits, flags); in bitbang_txrx_16()
105 count -= 2; in bitbang_txrx_16()
107 return t->len - count; in bitbang_txrx_16()
111 struct spi_device *spi, in bitbang_txrx_32() argument
112 u32 (*txrx_word)(struct spi_device *spi, in bitbang_txrx_32() argument
120 unsigned bits = t->bits_per_word; in bitbang_txrx_32()
121 unsigned count = t->len; in bitbang_txrx_32()
122 const u32 *tx = t->tx_buf; in bitbang_txrx_32()
123 u32 *rx = t->rx_buf; in bitbang_txrx_32()
130 word = txrx_word(spi, ns, word, bits, flags); in bitbang_txrx_32()
133 count -= 4; in bitbang_txrx_32()
135 return t->len - count; in bitbang_txrx_32()
138 int spi_bitbang_setup_transfer(struct spi_device *spi, struct spi_transfer *t) in spi_bitbang_setup_transfer() argument
140 struct spi_bitbang_cs *cs = spi->controller_state; in spi_bitbang_setup_transfer() local
145 bits_per_word = t->bits_per_word; in spi_bitbang_setup_transfer()
146 hz = t->speed_hz; in spi_bitbang_setup_transfer()
152 /* spi_transfer level calls that work per-word */ in spi_bitbang_setup_transfer()
154 bits_per_word = spi->bits_per_word; in spi_bitbang_setup_transfer()
156 cs->txrx_bufs = bitbang_txrx_8; in spi_bitbang_setup_transfer()
158 cs->txrx_bufs = bitbang_txrx_16; in spi_bitbang_setup_transfer()
160 cs->txrx_bufs = bitbang_txrx_32; in spi_bitbang_setup_transfer()
162 return -EINVAL; in spi_bitbang_setup_transfer()
166 hz = spi->max_speed_hz; in spi_bitbang_setup_transfer()
168 cs->nsecs = (1000000000/2) / hz; in spi_bitbang_setup_transfer()
169 if (cs->nsecs > (MAX_UDELAY_MS * 1000 * 1000)) in spi_bitbang_setup_transfer()
170 return -EINVAL; in spi_bitbang_setup_transfer()
178 * spi_bitbang_setup - default setup for per-word I/O loops
180 int spi_bitbang_setup(struct spi_device *spi) in spi_bitbang_setup() argument
182 struct spi_bitbang_cs *cs = spi->controller_state; in spi_bitbang_setup() local
185 bitbang = spi_master_get_devdata(spi->master); in spi_bitbang_setup()
187 if (!cs) { in spi_bitbang_setup()
188 cs = kzalloc(sizeof(*cs), GFP_KERNEL); in spi_bitbang_setup()
189 if (!cs) in spi_bitbang_setup()
190 return -ENOMEM; in spi_bitbang_setup()
191 spi->controller_state = cs; in spi_bitbang_setup()
194 /* per-word shift register access, in hardware or bitbanging */ in spi_bitbang_setup()
195 cs->txrx_word = bitbang->txrx_word[spi->mode & (SPI_CPOL|SPI_CPHA)]; in spi_bitbang_setup()
196 if (!cs->txrx_word) in spi_bitbang_setup()
197 return -EINVAL; in spi_bitbang_setup()
199 if (bitbang->setup_transfer) { in spi_bitbang_setup()
200 int retval = bitbang->setup_transfer(spi, NULL); in spi_bitbang_setup()
205 dev_dbg(&spi->dev, "%s, %u nsec/bit\n", __func__, 2 * cs->nsecs); in spi_bitbang_setup()
212 * spi_bitbang_cleanup - default cleanup for per-word I/O loops
214 void spi_bitbang_cleanup(struct spi_device *spi) in spi_bitbang_cleanup() argument
216 kfree(spi->controller_state); in spi_bitbang_cleanup()
220 static int spi_bitbang_bufs(struct spi_device *spi, struct spi_transfer *t) in spi_bitbang_bufs() argument
222 struct spi_bitbang_cs *cs = spi->controller_state; in spi_bitbang_bufs() local
223 unsigned nsecs = cs->nsecs; in spi_bitbang_bufs()
226 bitbang = spi_master_get_devdata(spi->master); in spi_bitbang_bufs()
227 if (bitbang->set_line_direction) { in spi_bitbang_bufs()
230 err = bitbang->set_line_direction(spi, !!(t->tx_buf)); in spi_bitbang_bufs()
235 if (spi->mode & SPI_3WIRE) { in spi_bitbang_bufs()
238 flags = t->tx_buf ? SPI_MASTER_NO_RX : SPI_MASTER_NO_TX; in spi_bitbang_bufs()
239 return cs->txrx_bufs(spi, cs->txrx_word, nsecs, t, flags); in spi_bitbang_bufs()
241 return cs->txrx_bufs(spi, cs->txrx_word, nsecs, t, 0); in spi_bitbang_bufs()
244 /*----------------------------------------------------------------------*/
254 * Drivers can provide word-at-a-time i/o primitives, or provide
255 * transfer-at-a-time ones to leverage dma or fifo hardware.
258 static int spi_bitbang_prepare_hardware(struct spi_master *spi) in spi_bitbang_prepare_hardware() argument
262 bitbang = spi_master_get_devdata(spi); in spi_bitbang_prepare_hardware()
264 mutex_lock(&bitbang->lock); in spi_bitbang_prepare_hardware()
265 bitbang->busy = 1; in spi_bitbang_prepare_hardware()
266 mutex_unlock(&bitbang->lock); in spi_bitbang_prepare_hardware()
272 struct spi_device *spi, in spi_bitbang_transfer_one() argument
278 if (bitbang->setup_transfer) { in spi_bitbang_transfer_one()
279 status = bitbang->setup_transfer(spi, transfer); in spi_bitbang_transfer_one()
284 if (transfer->len) in spi_bitbang_transfer_one()
285 status = bitbang->txrx_bufs(spi, transfer); in spi_bitbang_transfer_one()
287 if (status == transfer->len) in spi_bitbang_transfer_one()
290 status = -EREMOTEIO; in spi_bitbang_transfer_one()
298 static int spi_bitbang_unprepare_hardware(struct spi_master *spi) in spi_bitbang_unprepare_hardware() argument
302 bitbang = spi_master_get_devdata(spi); in spi_bitbang_unprepare_hardware()
304 mutex_lock(&bitbang->lock); in spi_bitbang_unprepare_hardware()
305 bitbang->busy = 0; in spi_bitbang_unprepare_hardware()
306 mutex_unlock(&bitbang->lock); in spi_bitbang_unprepare_hardware()
311 static void spi_bitbang_set_cs(struct spi_device *spi, bool enable) in spi_bitbang_set_cs() argument
313 struct spi_bitbang *bitbang = spi_master_get_devdata(spi->master); in spi_bitbang_set_cs()
315 /* SPI core provides CS high / low, but bitbang driver in spi_bitbang_set_cs()
316 * expects CS active in spi_bitbang_set_cs()
317 * spi device driver takes care of handling SPI_CS_HIGH in spi_bitbang_set_cs()
319 enable = (!!(spi->mode & SPI_CS_HIGH) == enable); in spi_bitbang_set_cs()
322 bitbang->chipselect(spi, enable ? BITBANG_CS_ACTIVE : in spi_bitbang_set_cs()
327 /*----------------------------------------------------------------------*/
331 struct spi_master *master = bitbang->master; in spi_bitbang_init()
335 return -EINVAL; in spi_bitbang_init()
340 * driver-specific chipselect routine. in spi_bitbang_init()
342 custom_cs = (!master->use_gpio_descriptors || in spi_bitbang_init()
343 (master->flags & SPI_MASTER_GPIO_SS)); in spi_bitbang_init()
345 if (custom_cs && !bitbang->chipselect) in spi_bitbang_init()
346 return -EINVAL; in spi_bitbang_init()
348 mutex_init(&bitbang->lock); in spi_bitbang_init()
350 if (!master->mode_bits) in spi_bitbang_init()
351 master->mode_bits = SPI_CPOL | SPI_CPHA | bitbang->flags; in spi_bitbang_init()
353 if (master->transfer || master->transfer_one_message) in spi_bitbang_init()
354 return -EINVAL; in spi_bitbang_init()
356 master->prepare_transfer_hardware = spi_bitbang_prepare_hardware; in spi_bitbang_init()
357 master->unprepare_transfer_hardware = spi_bitbang_unprepare_hardware; in spi_bitbang_init()
358 master->transfer_one = spi_bitbang_transfer_one; in spi_bitbang_init()
360 * When using GPIO descriptors, the ->set_cs() callback doesn't even in spi_bitbang_init()
364 master->set_cs = spi_bitbang_set_cs; in spi_bitbang_init()
366 if (!bitbang->txrx_bufs) { in spi_bitbang_init()
367 bitbang->use_dma = 0; in spi_bitbang_init()
368 bitbang->txrx_bufs = spi_bitbang_bufs; in spi_bitbang_init()
369 if (!master->setup) { in spi_bitbang_init()
370 if (!bitbang->setup_transfer) in spi_bitbang_init()
371 bitbang->setup_transfer = in spi_bitbang_init()
373 master->setup = spi_bitbang_setup; in spi_bitbang_init()
374 master->cleanup = spi_bitbang_cleanup; in spi_bitbang_init()
383 * spi_bitbang_start - start up a polled/bitbanging SPI master driver
386 * Caller should have zero-initialized all parts of the structure, and then
392 * For i/o loops, provide callbacks either per-word (for bitbanging, or for
393 * hardware that basically exposes a shift register) or per-spi_transfer
396 * Drivers using per-word I/O loops should use (or call) spi_bitbang_setup,
397 * spi_bitbang_cleanup and spi_bitbang_setup_transfer to handle those spi
398 * master methods. Those methods are the defaults if the bitbang->txrx_bufs
412 struct spi_master *master = bitbang->master; in spi_bitbang_start()
431 * spi_bitbang_stop - stops the task providing spi communication
435 spi_unregister_master(bitbang->master); in spi_bitbang_stop()