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