linux/include/linux/spi/spi_bitbang.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0 */
   2#ifndef __SPI_BITBANG_H
   3#define __SPI_BITBANG_H
   4
   5#include <linux/workqueue.h>
   6
   7struct spi_bitbang {
   8        struct mutex            lock;
   9        u8                      busy;
  10        u8                      use_dma;
  11        u16                     flags;          /* extra spi->mode support */
  12
  13        struct spi_master       *master;
  14
  15        /* setup_transfer() changes clock and/or wordsize to match settings
  16         * for this transfer; zeroes restore defaults from spi_device.
  17         */
  18        int     (*setup_transfer)(struct spi_device *spi,
  19                        struct spi_transfer *t);
  20
  21        void    (*chipselect)(struct spi_device *spi, int is_on);
  22#define BITBANG_CS_ACTIVE       1       /* normally nCS, active low */
  23#define BITBANG_CS_INACTIVE     0
  24
  25        /* txrx_bufs() may handle dma mapping for transfers that don't
  26         * already have one (transfer.{tx,rx}_dma is zero), or use PIO
  27         */
  28        int     (*txrx_bufs)(struct spi_device *spi, struct spi_transfer *t);
  29
  30        /* txrx_word[SPI_MODE_*]() just looks like a shift register */
  31        u32     (*txrx_word[4])(struct spi_device *spi,
  32                        unsigned nsecs,
  33                        u32 word, u8 bits, unsigned flags);
  34        int     (*set_line_direction)(struct spi_device *spi, bool output);
  35};
  36
  37/* you can call these default bitbang->master methods from your custom
  38 * methods, if you like.
  39 */
  40extern int spi_bitbang_setup(struct spi_device *spi);
  41extern void spi_bitbang_cleanup(struct spi_device *spi);
  42extern int spi_bitbang_setup_transfer(struct spi_device *spi,
  43                                      struct spi_transfer *t);
  44
  45/* start or stop queue processing */
  46extern int spi_bitbang_start(struct spi_bitbang *spi);
  47extern int spi_bitbang_init(struct spi_bitbang *spi);
  48extern void spi_bitbang_stop(struct spi_bitbang *spi);
  49
  50#endif  /* __SPI_BITBANG_H */
  51