root/include/linux/spi/spi_bitbang.h

/* [<][>][^][v][top][bottom][index][help] */

INCLUDED FROM


   1 /* SPDX-License-Identifier: GPL-2.0 */
   2 #ifndef __SPI_BITBANG_H
   3 #define __SPI_BITBANG_H
   4 
   5 #include <linux/workqueue.h>
   6 
   7 struct 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  */
  40 extern int spi_bitbang_setup(struct spi_device *spi);
  41 extern void spi_bitbang_cleanup(struct spi_device *spi);
  42 extern int spi_bitbang_setup_transfer(struct spi_device *spi,
  43                                       struct spi_transfer *t);
  44 
  45 /* start or stop queue processing */
  46 extern int spi_bitbang_start(struct spi_bitbang *spi);
  47 extern int spi_bitbang_init(struct spi_bitbang *spi);
  48 extern void spi_bitbang_stop(struct spi_bitbang *spi);
  49 
  50 #endif  /* __SPI_BITBANG_H */

/* [<][>][^][v][top][bottom][index][help] */